|
|
View previous topic :: View next topic |
Author |
Message |
zhiling0229
Joined: 13 Sep 2006 Posts: 10
|
|
Posted: Tue Sep 19, 2006 8:06 pm |
|
|
Hi newguy,
I'm sorry I'm a noob for T6963C controller. I thought I require to modify the code to clear the LCD which is bigger in size.
I'm new in using CCS C compiler so i have a few queries:
Why is the address for PortD not define but only address for PortC is define in the original program? i.e
#byte LCD = 0xf82 //PortC address on 18F452
If I am using PortA as my control pins and PortB as my data bus is this the only changes I require to make?
#define set_tris_lcd(x) set_tris_b(x)
.
.
.
struct lcd_pin_def
{
BOOLEAN cd; //A0
BOOLEAN r_bar; //A1
BOOLEAN w_bar; //A2
BOOLEAN reset_bar; //A3
BOOLEAN unused1; //A4
BOOLEAN unused2; //A5
BOOLEAN unused3; //
BOOLEAN unused4; //Should I define this? Since portA have only
//6 bits
}
#byte LCD = 0x05 //portA address on 16F877A
.
.
.
.
void main(){
set_tris_a(0x00) //graphic lcd control lines all output
// Do I need to configure the ADCON register?
.
.
.
}
Thanks |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1908
|
|
Posted: Tue Sep 19, 2006 9:30 pm |
|
|
The reason you don't need to define port D is that the register for port D in the PIC's memory immediately follows port C's register. Defining the struct for the pins with 16 total output lines ensures that the upper 8 bits "spill" into the next register......which happens to be port D.
If you're using port A and B in the same manner, yes you need to define 8 bits for port A (4 control lines & 4 unused) because the port A register is 8 bits wide.
Beware that a lot of 16F PICs, and a few 18F PICs have pin A4 as open drain. I see you're not using it for this project, but that's one thing that has bitten me in the butt before.
You'll need to turn off the PIC's A/D converter. Check the manual, but off the top of my head you'll need something like setup_adc_ports(NO_ANALOG); AND setup_adc(ADC_OFF);
Again, check the manual and your PIC's .h file for the exact wording/constants. |
|
|
mkr
Joined: 08 Aug 2006 Posts: 49
|
Help on T6963C controller |
Posted: Thu Mar 29, 2007 7:10 am |
|
|
Hello All,
I asked a dum question earlier on sending a string "ABC" to T6963C based LCD.
I am using the driver now. I simply wanted to send "ABC" using the glcd_putc("ABC");, seems that the
argument of the function is a character type. How can I then send a string.
Are there bits and peices of the code not posted or si the whole code posted.
My MCU is dsPIC30F6014a and LCD is 240x128 pixel. I have selected 8x8 font size and CE is always tied to low.
Here is the code snippet.
Code: |
int main(void)
{
init_io();
glcd_init();
glcd_WriteByte(1, (LCDModeSet|LCDMode_XOR));
glcd_WriteByte(1, (LCDDispMode|LCDDisp_TXT|LCDDisp_GRH));
glcd_gotoxy(4,3,1); // 1 = text area of memory; note that there are only
// 16 rows of text possible
glcd_putc("ABC");
} //End of main()
|
Please help. _________________ Thanks
mkr |
|
|
mechatroniker
Joined: 30 Jun 2008 Posts: 2
|
t6963 touchscreen with 18f452 help!! |
Posted: Mon Jun 30, 2008 3:31 pm |
|
|
Hi everybody,
i am new here. i have a 240x128 t6963 touchscreen glcd. but i can't use it! i used this codes but not working in proteus with lm3229!! can somebody help me!!
my english is very bad. i am so sorry about that!!
WR - - RC4
RD - - RC5
C/D- - C6
RST- - C7
DATA0-7 PORTD0-7 |
|
|
elwex
Joined: 21 Dec 2009 Posts: 1 Location: Prague, Czech Republic
|
|
Posted: Mon Dec 21, 2009 10:24 am |
|
|
Hello (and sorry for my bad english)
Thank you very very much, new guy ;o)
Your code was very useful for me. I find it is something like "business confidentiality" - how we can use graphical LCDs :D Nearly no documentation for that...
I have modified your code for:
- ANY HARDWARE CONECTION PIC-LCD (because there is not any 8bit port on my dsPIC30F2010 and because of PCB layout)
(using output_high/low/input... instead of LCD.r_bar=1 etc.)
- 240x128 pix LCD, 20MHz HS, FS=1 (6x8px font)
It could be useful for somebody, maybe )
Code: |
#include <18F452.h>
#device *=16
#device adc=10
#use delay(clock=20000000,RESTART_WDT)
#fuses HS, BROWNOUT, BORV27, PUT, STVREN, NOLVP
// HARDWARE CONECTION OF PINS (LCD-PIC):
#define LCD_B0 PIN_D0
#define LCD_B1 PIN_D1
#define LCD_B2 PIN_D2
#define LCD_B3 PIN_D3
#define LCD_B4 PIN_D4
#define LCD_B5 PIN_D5
#define LCD_B6 PIN_D6
#define LCD_B7 PIN_D7
#define LCD_WR PIN_C4
#define LCD_RD PIN_C5
#define LCD_CD PIN_C6
#define LCD_RST PIN_C7
const int16 TextHome = 0x0000;
const int8 TextArea = 0x0028; // how many bytes before a new line
const int16 GraphicsHome = 0x0C00;
const int8 GraphicsArea = 0x0028; // how many bytes before a new line
const int8 AutoModeWrite = 0xB0;
const int8 AutoModeRead = 0xB1;
const int8 AutoModeReset = 0xB2;
const int8 LCDModeSet = 0x80; // send this OR'd with the following
const int8 LCDMode_OR = 0b0000;
const int8 LCDMode_XOR = 0b0001;
const int8 LCDMode_AND = 0b0010;
const int8 LCDMode_TA = 0b0100; // TEXT ATTRIBUTE mode.
const int8 LCDMode_RAM = 0b1000; // 1=CG RAM, 0=internal CG ROM
const int8 LCDSetCursorPtr = 0x21; // cursor address
const int8 LCDSetCursorSize = 0xA0; // 1 line cursor
const int8 LCDDispMode = 0x90; // send this OR'd with the following
const int8 LCDDisp_BLK = 0b0001;
const int8 LCDDisp_CUR = 0b0010;
const int8 LCDDisp_TXT = 0b0100;
const int8 LCDDisp_GRH = 0b1000;
// VARIABLES:
unsigned int n;
int glcd_ReadByte(void);
void glcd_WriteByte(int1 cd, int data);
void glcd_WriteByteAuto(int data);
void glcd_WriteCmd2(int16 data, int cmd);
void glcd_WriteCmd1(int data, int cmd);
void glcd_gotoxy(int x, int y, int1 text);
// read lcd port
lcd_port_read() {
int lcd_read=0;
if(input(LCD_B0)) { bit_set(lcd_read,0); } //0
if(input(LCD_B1)) { bit_set(lcd_read,1); } //1
if(input(LCD_B2)) { bit_set(lcd_read,2); } //2
if(input(LCD_B3)) { bit_set(lcd_read,3); } //3
if(input(LCD_B4)) { bit_set(lcd_read,4); } //4
if(input(LCD_B5)) { bit_set(lcd_read,5); } //5
if(input(LCD_B6)) { bit_set(lcd_read,6); } //6
if(input(LCD_B7)) { bit_set(lcd_read,7); } //7
return lcd_read;
}
//write to lcd port
void lcd_port(unsigned int8 lcd) {
output_low(LCD_B0);
output_low(LCD_B1);
output_low(LCD_B2);
output_low(LCD_B3);
output_low(LCD_B4);
output_low(LCD_B5);
output_low(LCD_B6);
output_low(LCD_B7);
// převod z desítkové na dvojkovou soustavu
if(bit_test(lcd,0)) { output_high(LCD_B0); } //0 HW připojení LCD
if(bit_test(lcd,1)) { output_high(LCD_B1); } //1
if(bit_test(lcd,2)) { output_high(LCD_B2); } //2
if(bit_test(lcd,3)) { output_high(LCD_B3); } //3
if(bit_test(lcd,4)) { output_high(LCD_B4); } //4
if(bit_test(lcd,5)) { output_high(LCD_B5); } //5
if(bit_test(lcd,6)) { output_high(LCD_B6); } //6
if(bit_test(lcd,7)) { output_high(LCD_B7); } //7 (krajní vývod LCD)
delay_us(10);
}
void glcd_init(void) {
int16 counter;
output_high(LCD_WR);
output_high(LCD_RD);
output_high(LCD_CD);
delay_ms(10);
// perform a reset
output_low(LCD_RST);
delay_us(2); // delay for a reset - IF THIS WAIT TIME IS TOO MACH (MORE THAN 10us) LCD NOT WORK (I do not know why..)
output_high(LCD_RST);
delay_ms(10);
// Set up the graphics and text areas
glcd_WriteCmd2(TextHome, 0x40);
glcd_WriteCmd2(TextArea, 0x41);
glcd_WriteCmd2(GraphicsHome, 0x42);
glcd_WriteCmd2(GraphicsArea, 0x43);
// set address to 0
glcd_WriteCmd2(0x0000, 0x24);
glcd_WriteCmd2(0x0000, 0x24);
// Clear all RAM of LCD (8k)
glcd_WriteByte(1, AutoModeWrite);
for (counter = 0; counter < 0x1fff; counter++)
{
glcd_WriteByteAuto(0); // fill everything with zeros
}
glcd_WriteByte(1, AutoModeReset);
}
void glcd_WriteByte(int1 cd, int data)
{
int status = 0, temp = 0;
output_high(LCD_WR);
output_high(LCD_RD);
output_high(LCD_CD);
while (status != 0x03) { // is LCD busy?
output_low(LCD_RD);
temp = lcd_port_read(); // read from lcd port
output_high(LCD_RD);
status = temp & 0x03;
}
if(bit_test(cd,0)) output_high(LCD_CD);
else output_low(LCD_CD);
lcd_port(data);
output_high(LCD_RD);
output_low(LCD_WR);
output_high(LCD_WR);
}
void glcd_WriteByteAuto(int data)
{
int status = 0, temp = 0; // status bits ARE DIFFERENT BITS THAN NORMAL
output_high(LCD_WR);
output_high(LCD_RD);
output_high(LCD_CD);
while (status != 0x08) { // is LCD busy?
output_low(LCD_RD);
temp = lcd_port_read(); // read from lcd port
output_high(LCD_RD);
status = temp & 0x08;
}
output_low(LCD_CD);
lcd_port(data);
output_low(LCD_WR);
output_high(LCD_WR);
}
void glcd_WriteCmd1(int data, int cmd)
{
glcd_WriteByte(0, data);
glcd_WriteByte(1, cmd);
}
void glcd_WriteCmd2(int16 data, int cmd)
{
glcd_WriteByte(0, data & 0xff);
glcd_WriteByte(0, data>>8);
glcd_WriteByte(1, cmd);
}
int glcd_ReadByte(void)
{
int data = 0, status = 0, temp = 0;
output_high(LCD_WR);
output_high(LCD_RD);
output_high(LCD_CD);
#asm nop nop #endasm
while (status != 0x03) { // is LCD busy?
output_low(LCD_RD);
temp = lcd_port_read(); // read from lcd port
output_high(LCD_RD);
status = temp & 0x03;
}
output_low(LCD_CD);
output_low(LCD_RD);
/////////////////////////////////////////////////////////
#asm nop nop #endasm // THIS PAUSE IS VERY NESSESARY !!!//
/////////////////////////////////////////////////////////
data = lcd_port_read(); // read from lcd port
output_high(LCD_RD);
output_high(LCD_CD);
return data; // Return the read data
}
void glcd_putc(char c) {
glcd_WriteCmd1(c - 0x20, 0xc0);
}
void glcd_gotoxy(int x, int y, int1 text) { // sets memory location to screen location x, y
// location 1,1 is upper left corner; text = 1 (text area), text = 0 (graphics area)
int16 location, home;
int line;
if (!text) {
home = GraphicsHome;
line = GraphicsArea;
}
else {
home = TextHome;
line = TextArea;
}
location = home + (((int16)y - 1) * line) + x - 1;
glcd_WriteCmd2(location, 0x24);
}
#use fast_io(D)
void main() {
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_8);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_ON);
setup_timer_0(RTCC_DIV_256|RTCC_8_bit);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_AD);
enable_interrupts(INT_RB);
enable_interrupts(global);
glcd_init();
glcd_WriteByte(1, (LCDModeSet|LCDMode_XOR));
glcd_WriteByte(1, (LCDDispMode|LCDDisp_TXT|LCDDisp_GRH));
while(1) {
glcd_gotoxy(1,1,1);
glcd_putc("It works :o))");
glcd_gotoxy(1,3,1);
glcd_putc("LCD with T6963 controller");
glcd_gotoxy(1,6,1);
glcd_putc("Modified for 240x128px, 20MHzHS, FS=1");
glcd_gotoxy(1,7,1);
glcd_putc("Hardware conection of LCD to any pins");
glcd_gotoxy(1,12,1);
glcd_putc("http://www.elweb.cz/ (Czech Republic)");
for (n = 0; n< 16; n++) {
glcd_gotoxy(2,100+n,0); // small black rectangle
glcd_WriteCmd1(0xff,0xc0);
}
delay_ms(3000);
}
}
|
|
|
|
sdonmez
Joined: 25 Jun 2008 Posts: 3
|
|
Posted: Mon Dec 28, 2009 11:51 am |
|
|
I'm trying to use 240x128 Glcd with T6963 controller. I'm using this driver for glcd.
Code: |
#define set_tris_lcd(x) set_tris_d(x)
#define LCDColorBlack 0b1
#define LCDColorWhite 0b0
//TRIS DataBus=x, note:control bus (PORTC) always outputs
unsigned int16 TextHome = 0x0F00;//0x0780;
const int8 TextArea = 0x001E; // how many bytes before a new line
const int16 GraphicsHome = 0x0000;
const int8 GraphicsArea = 0x001E; // how many bytes before a new line
const int8 AutoModeWrite = 0xB0;
const int8 AutoModeRead = 0xB1;
const int8 AutoModeReset = 0xB2;
const int8 LCDModeSet = 0x80; // send this OR'd with the following
const int8 LCDMode_OR = 0b0000;
const int8 LCDMode_XOR = 0b0001;
const int8 LCDMode_AND = 0b0011;
const int8 LCDMode_TA = 0b0100; // TEXT ATTRIBUTE mode.
const int8 LCDMode_RAM = 0b1000; // 1=CG RAM, 0=internal CG ROM
const int8 LCDSetCursorPtr = 0x21; // cursor address
const int8 LCDSetCursorSize = 0xA0; // 1 line cursor
const int8 LCDDispMode = 0x90; // send this OR'd with the following
const int8 LCDDisp_BLK = 0b0001;
const int8 LCDDisp_CUR = 0b0010;
const int8 LCDDisp_TXT = 0b0100;
const int8 LCDDisp_GRH = 0b1000;
const int8 LCDBitSet = 0xF8;
const int8 LCDBitReset = 0xF0;
const int8 LCDBit0 = 0b000;
const int8 LCDBit1 = 0b001;
const int8 LCDBit2 = 0b010;
const int8 LCDBit3 = 0b011;
const int8 LCDBit4 = 0b100;
const int8 LCDBit5 = 0b101;
const int8 LCDBit6 = 0b110;
const int8 LCDBit7 = 0b111;
const int8 LCDSetPtr = 0xE0;
struct lcd_pin_def
{
BOOLEAN unused1; // C0
BOOLEAN unused2; // C1
BOOLEAN unused3; // C2
BOOLEAN unused4; // C3
BOOLEAN w_bar; // C4 Write bar active low
BOOLEAN r_bar; // C5 Read bar active low
BOOLEAN cd; // C6 Command/Data BAR 1=command 0=data
BOOLEAN reset_bar; // C7 Reset active low
int data : 8; // PortD=Data bus
};
struct lcd_pin_def LCD;
#byte LCD = 0xf82 // portC address on 18F452
int glcd_ReadByte(void);
void glcd_WriteByte(int1 cd, int data);
void glcd_WriteByteAuto(int data);
void glcd_WriteCmd2(int16 data, int cmd);
void glcd_WriteCmd1(int data, int cmd);
void glcd_gotoxy(int x, int y, int1 text);
#inline
void glcd_init(unsigned int16 res_x, unsigned int16 res_y) {
int16 counter;
TextHome = (res_x/8)*res_y; //0x0F00;//0x0780;
set_tris_c(0x00); // graphic lcd control lines all output
set_tris_lcd(0xff); //TRIS DATA bus,note:control bus always outputs
LCD.w_bar = 1; // INITIAL STATES OF CONTROL PINS
LCD.r_bar = 1; //
LCD.cd = 1; // command
LCD.reset_bar = 0; // perform a reset
delay_us(20); // delay for a reset
LCD.reset_bar = 1; // run
// Set up the graphics and text areas
glcd_WriteCmd2(TextHome, 0x40);
glcd_WriteCmd2(TextArea, 0x41);
glcd_WriteCmd2(GraphicsHome, 0x42);
glcd_WriteCmd2(GraphicsArea, 0x43);
// set address to 0
glcd_WriteCmd2(0x0000, 0x24);
glcd_WriteCmd2(0x0000, 0x24);
// Clear all RAM of LCD (8k)
glcd_WriteByte(1, AutoModeWrite);
for (counter = 0; counter < 0x1fff; counter++)
{
glcd_WriteByteAuto(0); // fill everything with zeros
}
glcd_WriteByte(1, AutoModeReset);
}
void glcd_WriteByte(int1 cd, int data)
{
int status = 0, temp = 0;
set_tris_lcd(0xff);
LCD.w_bar = 1;
LCD.r_bar= 1;
LCD.cd = 1;//defaults
while (status != 0x03) { // is LCD busy?
LCD.r_bar= 0;
temp = LCD.data;
LCD.r_bar = 1;
status = temp & 0x03;
}
set_tris_lcd(0x00); // All outputs
LCD.cd = cd; // Command/Data bar
LCD.data = data;
LCD.r_bar = 1; // not read
LCD.w_bar = 0; // write
LCD.w_bar = 1; // release
}
void glcd_WriteByteAuto(int data)
{
int status = 0, temp = 0; // status bits ARE DIFFERENT BITS THAN NORMAL
set_tris_lcd(0xff);
LCD.w_bar = 1;
LCD.r_bar = 1;
LCD.cd = 1; // defaults
while (status != 0x08) { // is LCD busy?
LCD.r_bar = 0;
temp = LCD.data;
LCD.r_bar = 1;
status = temp & 0x08;
}
set_tris_lcd(0x00); // All outputs
LCD.cd = 0; // This is always data, cd=0
LCD.data = data; // Put data on data bus
LCD.w_bar = 0; // write
LCD.w_bar = 1; // release
}
void glcd_WriteCmd1(int data, int cmd)
{
glcd_WriteByte(0, data);
glcd_WriteByte(1, cmd);
}
void glcd_WriteCmd2(int16 data, int cmd)
{
glcd_WriteByte(0, data & 0xff);
glcd_WriteByte(0, data>>8);
glcd_WriteByte(1, cmd);
}
int glcd_ReadByte(void)
{
int data = 0, status = 0, temp = 0;
set_tris_lcd(0xff);
LCD.w_bar = 1;
LCD.r_bar = 1;
LCD.cd = 1; // defaults
#asm nop #endasm
while (status != 0x03) { // is LCD busy?
LCD.r_bar = 0;
temp = LCD.data;
LCD.r_bar = 1;
status = temp & 0x03;
}
LCD.cd = 0; // Command/Data bar
LCD.r_bar = 0; // read
/////////////////////////////////////////////////////////
#asm nop #endasm // THIS PAUSE IS VERY NESSESARY !!!//
/////////////////////////////////////////////////////////
data = LCD.data;
LCD.r_bar = 1;
LCD.cd = 1;
return data; // Return the read data
}
void glcd_putc(char c) {
glcd_WriteCmd1(c - 0x20, 0xc0);
}
void glcd_gotoxy(int x, int y, int1 text) { // sets memory location to screen location x, y
// location 1,1 is upper left corner; text = 1 (text area), text = 0 (graphics area)
int16 location, home;
int line;
if (!text) {
home = GraphicsHome;
line = GraphicsArea;
} else {
home = TextHome;
line = TextArea;
}
location = home + (((int16)y-1) * line) + x-1;
//location = home + (((int16)y) * line) + x;
glcd_WriteCmd2(location, 0x24);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
// Purpose: Clears LCD RAM
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
void glcd_clr(int16 location,int16 size)
{
////fprintf(DEBUG,"loc=%lu size=%lu\n\r",location,size);
// look very simular to the init,... doesn't it. : )
glcd_WriteCmd2(location,LCDSetPtr);
glcd_WriteCmd1(1,AutoModeWrite);
for (;size;size--)
{
glcd_WriteByteAuto(0x00);//clear ram
}
glcd_WriteCmd1(1,AutoModeReset);
}
/////////////////////////////////////////
// Graphics Controller by endSly (c)2007
// endSly@gmail.com
// Not for comercial use
/////////////////////////////////////////
unsigned int8 i; //General Purpouse variable
// glcd_pixel(x,y,c) sets pixel x,y with c color
void glcd_pixel(unsigned int8 x, unsigned int8 y, int1 c){
unsigned int8 x_H;
unsigned int8 x_L=0;
x_H = (x / 8);
x_L = 7 - (x - 8*x_H);
glcd_gotoxy(x_H+1,y,0); //Bug fixed, thanks to etiedon
if(c){
glcd_WriteCmd1(1,(LCDBitSet|x_L));
} else {
glcd_WriteCmd1(1,(LCDBitReset|x_L));
}
}
// glcd_pixel8(x,y,px8) sets 8 pixels in line.
void glcd_pixel8(unsigned int8 x, unsigned int8 y, int8 pixel8){
unsigned int8 x_H;
x_H = (x / 8);
glcd_gotoxy(x_H+1,y,0);
//glcd_gotoxy(x_H+1,y,0);
// data write and increment ADP
glcd_WriteCmd1(pixel8,0xc0);
}
//glcd_image8 (*Pic, x, y, size_x, size_y)
void glcd_image8(int8 *pic_px, unsigned int16 x, unsigned int16 y,
unsigned int16 size_x, unsigned int16 size_y){
unsigned int16 px_y;
unsigned int16 px_x;
unsigned int16 px=0;
for(px_y=y; px_y<(y+size_y); px_y++){
for(px_x=x; px_x<(x+size_x); px_x+=8){
glcd_pixel8(px_x, px_y, *(pic_px+px));
px+=1;
}
}
}
// glcd_line(x0,y0, x1,y1, c) puts line from (x0, y0) to (x1, y1) with c color
void glcd_line(signed int16 x0, signed int16 y0,
signed int16 x1, signed int16 y1 , int1 c){
int16 x;
int16 y;
unsigned int16 n;
int1 m_case;
x=abs(x1-x0);
y=abs(y1-y0);
if (y > x){
n=(y1-y0);
m_case=1;
} else {
n=(x1-x0);
m_case=0;
}
for(i=0 ; i<=n ; i++){
if (m_case){
y=i + y0;
x=(y*(x1-x0))/(y1-y0) + x0;
} else {
x=i + x0;
y=(x*(y1-y0))/(x1-x0) + y0;
}
glcd_pixel(x, y,c);
}
}
// glcd_square(x0,y0,x1,y1, c) sets square
void glcd_square( unsigned int8 x0, unsigned int8 y0,
unsigned int8 x1, unsigned int8 y1 , int1 c){
glcd_line(x0,y0, x1,y0, c);
glcd_line(x1,y0, x1,y1, c);
glcd_line(x0,y1, x1,y1, c);
glcd_line(x0,y0, x0,y1, c);
}
// glcd_box(x0,y0,x1,y1, c)
void glcd_box( unsigned int8 x0, unsigned int8 y0,
unsigned int8 x1, unsigned int8 y1 , int1 c){
unsigned int8 x;
unsigned int8 y;
for(y=y0; y<=y1;y++){
for(x=x0; x<=x1;x++){
if((!(x%8)) && ((x1-x)>8)){
glcd_pixel8(x,y,0xFF*c); //Same time to write 8 pixel
x +=7 ;
} else {
glcd_pixel(x,y,c);
}
}
}
}
|
I have created 10*19 pixel fonts to display numbers on the screen.
When i try to show a number with the command
Code: |
glcd_image8(&Font8x16[address], Pos_x, Pos_y, 10, 19);
|
It only places the "font image" on Pos_x where Pos_x is the multiples of 8.
I want to place my "font images" on pixels where i want.
Is not it possible?
Sadan |
|
|
noyz
Joined: 31 Jan 2009 Posts: 59
|
|
Posted: Sun Feb 06, 2011 6:49 pm |
|
|
Elvex I'm trying to use your code for a display 240x128.
My connection is
PIC18F8527
I have a board already connected this way, and display with touch screen.
I can't simulate in Proteus, and write a damn thing.
If I use the board's example hex, it works in Proteus.
Code: |
#define LCD_B0 PIN_H0
#define LCD_B1 PIN_H1
#define LCD_B2 PIN_H2
#define LCD_B3 PIN_H3
#define LCD_B4 PIN_H4
#define LCD_B5 PIN_H5
#define LCD_B6 PIN_H6
#define LCD_B7 PIN_H7
#define LCD_WR PIN_J2
#define LCD_RD PIN_J1
#define LCD_CD PIN_J0
#define LCD_RST PIN_J4 |
|
|
|
noyz
Joined: 31 Jan 2009 Posts: 59
|
|
Posted: Mon Feb 07, 2011 5:27 pm |
|
|
I manage to get lcd work.
But 2 strange things:
The text starts from 20 pixels away from 1
and in Proteus it doesn't work at all.
I was wondering also can I put a 25 mhz xt clock ?
What else do I have to modify beside use delay 25 000 000 and the real clock soldering?
I think there must be something that has to do with lcd speed.
Lcd clock can be also changed to some faster clock ?
I want a best responsive lcd. |
|
|
Beenabout
Joined: 19 Jan 2010 Posts: 7
|
T6963C 128x64 pixels - setup / initialisation help required |
Posted: Tue Feb 15, 2011 3:57 am |
|
|
Hi all,
I have compiled the code given above and all is OK except that I get not response from my T6963C 128x64 pixel LCD.
Please advise if this code OK to use with my LCD as is or if it needs any further modification.
I am using a 16F877A, running at 4MHz with a crystal and logic probes indicate that all signals lines are being driven by the software. The LCD is wired to the PIC as per the pinout included in the driver above.
Thanks,
Tony |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|