/********************************************************* Model: COG-T350MPZI-04 Compiler: ICCAVR Controller: ILI9481 LCD Dots: 240*RGB*320 VDD: 2.8V Test System: CMT Interface: 80 system 16-bit I/F DataPort: PORT A --> DB00 - DB07 PORT C --> DB08 - DB15 //PORT 8255 --> DB16 - DB17 CntlPort: PORT D bit4 bit3 bit2 bit1 bit0 \RESET \CS RS \WR \RD Author: Final date: 2009-8-25 Remark: 3.5" HVGA TFT PVI **********************************************************/ #include #include "macros.h" #include "cmt.h" //#include "display.h" //#include "TouchPanel.h" #define RESET_0 0x00 #define CS_0 0x00 #define RS_0 0x00 #define WR_0 0x00 #define RD_0 0x00 #define RESET_1 0x10 #define CS_1 0x08 #define RS_1 0x04 #define WR_1 0x02 #define RD_1 0x01 unsigned char ic=0x38; /* struct TP_RANGE{ unsigned int x; unsigned int y; unsigned int sx; unsigned int ex; unsigned int sy; unsigned int ey; }; */ //-------------------------------------------------------- void Reset_LCD(void) { MCUCR=~BIT(SRE); PORTB|=0x38; CtrlPort=0x0f; cmt_delay_1ms(); CtrlPort=0x1f; cmt_delay_1ms(); MCUCR=BIT(SRE); PORTB=ic; } //-------------------------------------------------------- void LCD_Index_Out(unsigned char IndexH,unsigned char IndexL) { //unsigned char TBDC1 ;unsigned char TBDA1; MCUCR=~BIT(SRE); PORTB|=0x38; //cmt_io_portb_b1b0(IndexH>>6) ; //TBDC1 = ((IndexH << 2) | (IndexL >> 7)); PORTC = IndexH; //TBDA1= IndexL<<1; PORTA = IndexL; CtrlPort = RESET_1 | CS_1 | RS_1 | WR_1 | RD_1; CtrlPort = RESET_1 | CS_0 | RS_1 | WR_1 | RD_1; CtrlPort = RESET_1 | CS_0 | RS_0 | WR_1 | RD_1; CtrlPort = RESET_1 | CS_0 | RS_0 | WR_0 | RD_1; CtrlPort = RESET_1 | CS_0 | RS_0 | WR_1 | RD_1; MCUCR=BIT(SRE); PORTB=ic; } //------------------------------------------------------------------ void LCD_Data_Out(unsigned char set_dbH,unsigned char set_dbL) { MCUCR=~BIT(SRE); PORTB|=0x38; PORTC = set_dbH; PORTA = set_dbL; CtrlPort = RESET_1 | CS_0 | RS_1 | WR_1 | RD_1; CtrlPort = RESET_1 | CS_0 | RS_1 | WR_0 | RD_1; CtrlPort = RESET_1 | CS_0 | RS_1 | WR_1 | RD_1; MCUCR=BIT(SRE); PORTB=ic; } void Init_LCD(void) { //Reset LCD Driver RSTB_0; cmt_delay_ms(10); RSTB_0; cmt_delay_ms(50); RSTB_1; cmt_delay_ms(150); LCD_Index_Out(0x00,0x11); cmt_delay_ms(100); LCD_Index_Out(0x00,0xd0); LCD_Data_Out(0x00,0x07);//07 LCD_Data_Out(0x00,0x41);//41 LCD_Data_Out(0x00,0x1d);//1d LCD_Index_Out(0x00,0xd1); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0x00,0x2b);//2b LCD_Data_Out(0x00,0x1f);//1f LCD_Index_Out(0x00,0xd2); LCD_Data_Out(0x00,0x01);//01 LCD_Data_Out(0x00,0x11);//11 LCD_Index_Out(0x00,0xc0); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0x00,0x3b); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0x00,0x02); LCD_Data_Out(0x00,0x11); LCD_Index_Out(0x00,0xc5);//rate ,inversion LCD_Data_Out(0x00,0x03);//03 LCD_Index_Out(0x00,0xc8); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0x00,0x14); LCD_Data_Out(0x00,0x33); LCD_Data_Out(0x00,0x10); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0x00,0x16); LCD_Data_Out(0x00,0x44); LCD_Data_Out(0x00,0x36); LCD_Data_Out(0x00,0x77); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0x00,0x0f); LCD_Data_Out(0x00,0x00); LCD_Index_Out(0x00,0xe4); LCD_Data_Out(0x00,0xa0); LCD_Index_Out(0x00,0xf0); LCD_Data_Out(0x00,0x01); LCD_Index_Out(0x00,0xf3); LCD_Data_Out(0x00,0x40); LCD_Data_Out(0x00,0x0a); LCD_Index_Out(0x00,0xf7); LCD_Data_Out(0x00,0x80); LCD_Index_Out(0x00,0x36); LCD_Data_Out(0x00,0x0a);//0a cmt_delay_ms(100); LCD_Index_Out(0x00,0x3A); LCD_Data_Out(0x00,0x55); LCD_Index_Out(0x00,0x29); } void Color_Fill(unsigned char dataH,unsigned char dataL) { unsigned int page; unsigned int col; LCD_Index_Out(0x00,0x2c); for(page = 0;page < 480;page++) { for(col = 0;col < 320;col++) { LCD_Data_Out(dataH,dataL); //LCD_Data_Out(0,dataH); //LCD_Data_Out(0,dataL); } } } //-------------------------------------------------------- void BMP_Fill(void) { unsigned int page,col; unsigned char dataH,dataM,dataL; unsigned char *ptr; ptr = (unsigned char*)0x0260; PORTB = ic; for (page = 0;page < 60;page++) { for (col = 0;col < 320;col++) { dataL = *ptr++; //dataM = *ptr++; dataH = *ptr++; LCD_Data_Out(dataH,dataL); //LCD_Data_Out(0,dataH); //LCD_Data_Out(0,dataL); } } } //-------------------------------------------------------- void Write_BMP(unsigned char pg) { //LCD_Index_Out(0x00,0x22); LCD_Index_Out(0x00,0x2c); switch(pg) { case 1 : ic = 0x00; BMP_Fill(); ic = 0x01; BMP_Fill(); ic = 0x02; BMP_Fill(); ic = 0x03; BMP_Fill(); ic = 0x04; BMP_Fill(); ic = 0x05; BMP_Fill(); ic = 0x06; BMP_Fill(); ic = 0x07; BMP_Fill(); break; case 2 : ic = 0x08; BMP_Fill(); ic = 0x09; BMP_Fill(); ic = 0x0a; BMP_Fill(); ic = 0x0b; BMP_Fill(); ic = 0x0c; BMP_Fill(); ic = 0x0d; BMP_Fill(); ic = 0x0e; BMP_Fill(); ic = 0x0f; BMP_Fill(); break; } } void Gray_scale(void) { unsigned char Gray[]={ 0x08, 0x41, // level 0 black 0x18, 0xc3, // level 1 0x29, 0x65, // level 2 0x39, 0xe7, // level 3 0x4a, 0x69, // level 4 0x5a, 0xeb, // level 5 0x6b, 0x6d, // level 6 0x7b, 0xef, // level 7 0x8c, 0x71, // level 8 0x9c, 0xf3, // level 9 0xad, 0x75, // level 10 0xbd, 0xf7, // level 11 0xce, 0x79, // level 12 0xde, 0xfb, // level 13 0xef, 0x7d, // level 14 0Xff, 0Xff, // level 15 white /* 0x44, 0xC5, // level 15 black 0x4f, 0x50, // level 14 0x59, 0xdb, // level 13 0x6e, 0xf1, // level 12 0x79, 0x7c, // level 11 0x84, 0x07, // level 10 0x8e, 0x92, // level 9 0x99, 0x1d, // level 8 0xa3, 0xa8, // level 7 0xae, 0x33, // level 6 0xb8, 0xbe, // level 5 0xc3, 0x49, // level 4 0xd8, 0x5f, // level 3 0xe2, 0xea, // level 2 0xed, 0x75, // level 1 0xf8, 0x00 // level 0 0x00, 0x20, // level 0 black 0x08, 0x41, // level 1 0x10, 0xa2, // level 2 0x18, 0xc3, // level 3 0x21, 0x24, // level 4 0x29, 0x65, // level 5 0x31, 0xa6, // level 6 0x39, 0xe7, // level 7 0x42, 0x28, // level 8 0x4a, 0x69, // level 9 0x52, 0xaa, // level 10 0x5a, 0xeb, // level 11 0x63, 0x2c, // level 12 0x6b, 0x6d, // level 13 0x73, 0xae, // level 14 0x7b, 0xef, // level 15 0x84, 0x30, // level 16 0x8c, 0x71, // level 17 0x94, 0xb2, // level 18 0x9c, 0xf3, // level 19 0xa5, 0x34, // level 20 0xad, 0x75, // level 21 0xb5, 0xb6, // level 22 0xbd, 0xf7, // level 23 0xc6, 0x38, // level 24 0xce, 0x79, // level 25 0xd6, 0xba, // level 26 0xde, 0xfb, // level 27 0xe7, 0x3c, // level 28 0xef, 0x7d, // level 29 0xf7, 0xbe, // level 30 0Xff, 0Xff, // level 31 white */ }; int page = 0; int count = 0; int level = 0; LCD_Index_Out(0x00,0x2c); for (page = 0; page < 480; page++) { //int i=0 ; for (level = 0; level < 16; level++) { for (count = 0; count < 20; count++) { //for (level = 0; level < 32; level++) // { // for (count = 0; count < 10; count++) // { //LCD_Data_Out_18(Gray[level*3], Gray[level*3 + 1], Gray[level*3 + 2]); LCD_Data_Out(Gray[level*2], Gray[level*2 + 1]); } //i=i+3; //level++; } } //cmt_delay_ms(200); } //-------------------------------------------------------- void Window(void) { unsigned int page,col; LCD_Index_Out(0x00,0x2c); //-------------------------------------------------------- // First Line //-------------------------------------------------------- for(col = 0;col < 320;col++) LCD_Data_Out(0x00,0x00); //-------------------------------------------------------- LCD_Data_Out(0x00,0x00); for(col = 0;col < 318;col++) LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); //-------------------------------------------------------- // Second Line //-------------------------------------------------------- LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); for(col = 0;col <316;col++) LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); //-------------------------------------------------------- // //-------------------------------------------------------- for(page = 0;page < 158;page++) { LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); for(col = 0;col < 314;col++) LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); } //-------------------------------------------------------- // windows //-------------------------------------------------------- for(page = 0;page < 159;page++) { LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); for(col = 0;col < 105;col++) LCD_Data_Out(0xff,0xff); for(col = 0;col < 104;col++) LCD_Data_Out(0x00,0x00); for(col = 0;col < 105;col++) LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); } //-------------------------------------------------------- // //-------------------------------------------------------- for(page = 0;page < 158;page++) { LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); for(col = 0;col < 314;col++) LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); } //-------------------------------------------------------- // 319 Line //-------------------------------------------------------- LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); for(col = 0;col <316;col++) LCD_Data_Out(0x00,0x00); LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); //-------------------------------------------------------- // 320 Line //-------------------------------------------------------- LCD_Data_Out(0x00,0x00); for(col = 0;col < 318;col++) LCD_Data_Out(0xff,0xff); LCD_Data_Out(0x00,0x00); for(col = 0;col < 320;col++) LCD_Data_Out(0x00,0x00); } void Power_Down(void) { LCD_Index_Out(0x00,0xb1); LCD_Data_Out(0x01,0x01); cmt_delay_ms(1500); RSTB_0; //reset low cmt_delay_ms(500); } void keyCheck(step) { unsigned int i,ks=0; unsigned char key; //checking on STEP key for pause //time out 2sec //GPT should generate a pulse 200ms to hold it //GPT may generate a pulse 20ms for next step //cmt_cmt_delay_ms_ms(200); if(!(PIND&0x20)) ks=1; //wait for key release cmt_delay_ms(20); do { key=PINB; if(!(key & 0xC0)) //execute OTP procedure { //cmt_delay_ms(10);DataPortH=0x01;cmt_delay_ms(10); cmt_delay_ms(2); //write_MTP(); cmt_delay_ms(200);//for(;;); //OTP_exe(); //init_lcd(0x95); //Re_init(contrast); //write_bmp1(step); } else { //adjust offset voltage if(!(key & 0x40)) { // DataPortH=0x01;cmt_delay_ms(10); // cmt_io_OTP(1,1); cmt_delay_ms(20); // com_out(0xC1); com_out(0xC1); //OTP_adj(0xff); //if(contrast>127) contrast=127; //else contrast+=1; //com_out(0x25); //electronic volume control // dat_out(contrast); //OTP_adj(0xFF); //increase offset voltage while(!(PINB&0x40)); } if(!(key & 0x80)) { // DataPortH=0x01;cmt_delay_ms(10); // cmt_io_OTP(1,1);cmt_delay_ms(20); // com_out(0xc2); // OTP_adj(0x00); //if(contrast<0)contrast=0; //else contrast-=1; //com_out(0x25); //electronic volume control //dat_out(contrast); //cmt_cmt_delay_ms_ms(1); //OTP_adj(0x00); //decrease offset voltage while(!(PINB&0x80)); } if(!(PIND&0x20)) ks=1; } }while(ks==0); cmt_delay_ms(1000); //while(!(PIND&0x20)); cmt_delay_ms(10); ks=0; } //-------------------------------------------------------- void main(void) { //-------------------------- unsigned char step,j,next=0; Reset_LCD(); cmt_delay_ms(10); cmt_init_AVR(); cmt_io_init(); //8255 i/o port initial // cmt_i2c_init_100KHz(); //TP_init(); cmt_delay_ms(20); // TP_switch(0xF9); //LED OFF //-------------------------- //cmt_init_lcd1(); Init_LCD(); for(step =1;step<10;step+= 1,step%= 10) { //if(step == 1) switch(step) { case 1:Write_BMP(1); break; case 3:Color_Fill(0xff,0xff); break; case 2:Color_Fill(0x00,0x00); break; case 4:Color_Fill(0xf0,0x00); break; case 5:Color_Fill(0x07,0xE0); break; case 6:Color_Fill(0x00,0x1f); break; //case 7:Color_Fill(0x02,0x08,0x20); break; //case 8:Color_Fill(0x03,0x0c,0x30); break; case 7:Write_BMP(2); break; //case 10:Checkboard1(); break; //case 11:Checkboard2(); break; case 8:Gray_scale(); break; //case 13:Horizontal_line(); break; //case 14:Vertical_line(); break; case 9:Window(); Power_Down(); for(;;); break; //case 16:Write_BMP(15); break; //case 17:Write_BMP(16); break; //case 18:Write_BMP(17); break; //case 19:Write_BMP(18); break; } keyCheck(); } } // -END-