LCDInfo.com http://forum.lcdinfo.com/ |
|
T6963c initialization problem with address pointer http://forum.lcdinfo.com/viewtopic.php?f=9&t=665 |
Page 1 of 1 |
Author: | Jim0711 [ Fri May 21, 2004 16:04 ] |
Post subject: | T6963c initialization problem with address pointer |
Hi! I have a issue with my 240*128 Display. I have tryed to write a progamm which can display text on the display. I am using a 8 Bit 80C535 uC. Every thing works fine ![]() I think that my address pointer shows to the wrong address. But I have no idea why ![]() I hope you understand my issue!! THANX for your help Jim Code: #include <REG515.H> /* P3 is connected to a LED Bar to visualise the current LCD status P4 and P5 ist connected with the LCD */ void writedatum(void); void writecommand(void); void delay(unsigned int zeit); void statuscheck(void); void statuscheck_Automode(void); sbit RST = P4^1; //Reset low aktiv sbit CD = P4^2; //CD=0 Datenregister CD=1 StatusCommandregister sbit CE = P4^3; //Display Enable low aktiv sbit R_D = P4^4; //Display read low aktiv sbit W_R = P4^5; //Display write low aktiv int i,n; unsigned char LCD_Status; unsigned char Daten[10] = {0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x3a}; void main() { //Reset P3 = 0x00; RST = 0; delay(5000); RST = 1; statuscheck(); //Set graphics home adresse to 0x0000 statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x42; writecommand(); //Set text home address to 0x1400 statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x14; writedatum(); statuscheck(); P5 = 0x40; writecommand(); //Set graphics area to 0x1E; statuscheck(); P5 = 0x1e; writedatum(); statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x40; writecommand(); //Set text area to 0x1E; statuscheck(); P5 = 0x1e; writedatum(); statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x41; writecommand(); //Set OR mode statuscheck(); P5 = 0x80; writecommand(); //Set address pointer statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x24; writecommand(); //****Delet Display RAM*************************** //Auto inc on statuscheck(); P5 = 0xb0; writecommand(); for(i=0;i<8192;i++) { statuscheck_Automode(); P5 = 0x00; writedatum(); } //*****Send data to display******* //Set Text on, Graphics off, Cursor off statuscheck(); P5 = 0x94; writecommand(); //Set address pointer statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x14; writedatum(); statuscheck(); P5 = 0x24; writecommand(); for(n=0;n<819;n++) { for(i=0;i<10;i++) { statuscheck_Automode(); P5 = Daten[i]; writedatum(); } } while(1); } //**********Functionen***************** void statuscheck(void) { do { P5 = 0xff; //P5 must be set high because the LCD can only pull it to low CD = 1; R_D = 0; CE = 0; delay(5); LCD_Status = P5; CE = 1; R_D = 1; LCD_Status &= 0x03; P3 = LCD_Status; } while (LCD_Status != 0x03); } void statuscheck_Automode(void) { do { P5 = 0xff; //P5 must be set high because the LCD can only pull it to low CD = 1; R_D = 0; CE = 0; delay(5); LCD_Status = P5; CE = 1; R_D = 1; LCD_Status &= 0x08; P3 = LCD_Status; } while (LCD_Status != 0x08); } void writedatum (void) { CD = 0; W_R = 0; CE = 0; delay(5); CE = 1; W_R = 1; CD = 1; } void writecommand (void) { CD = 1; W_R = 0; CE = 0; delay(5); CE = 1; W_R = 1; CD = 1; } void delay(unsigned int zeit) { for (; zeit >0; zeit--); } |
Author: | Henri [ Sat May 22, 2004 17:38 ] |
Post subject: | |
I think you should check this piece of code Code: //Set graphics area to 0x1E;
statuscheck(); P5 = 0x1e; writedatum(); statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x40; writecommand(); especially the line P5 = 0x40 I think you should have 0x43 there. |
Author: | Jim0711 [ Sat May 22, 2004 18:12 ] |
Post subject: | |
![]() ![]() Ohh man, I have checked the code several times. I am soo glade that you have found the mistake!!! I will try it on monday and I hope that this was the only bug ![]() Thanks Jim |
Author: | Jim0711 [ Mon May 24, 2004 10:16 ] |
Post subject: | |
Now everthing works fine! Thanks for your ![]() ![]() But I have found a bug too in my code: After the RAM delete I forgot to stop the auto increment mode. This cause the issue that a normal command won't be recognize like the address pointer set for the dipslay output. The following code segment shows the fixed version. Code: //****clear RAM*************************** //Auto inc on statuscheck(); P5 = 0xb0; writecommand(); for(i=0;i<8192;i++) { statuscheck_Automode(); P5 = 0x00; writedatum(); } //Auto inc off statuscheck(); P5 = 0xb2; writecommand(); //*****Text output on display******* //Set address pointer statuscheck(); P5 = 0x00; writedatum(); statuscheck(); P5 = 0x14; writedatum(); statuscheck(); P5 = 0x24; writecommand(); //Auto inc on statuscheck(); P5 = 0xb0; writecommand(); for(m=0;m<3;m++) { for(i=0;i<10;i++) { statuscheck_Automode(); P5 = Daten[i]; writedatum(); } } //Auto inc off statuscheck(); P5 = 0xb2; writecommand(); //Set Text on, Graphics off, Cursor off statuscheck(); P5 = 0x94; writecommand(); while(1); |
Page 1 of 1 | All times are UTC + 2 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |