用STC8H8K64U驱动2.4寸tft屏,IC是HX8347I,采用16bit模式,初始化的命令和数据均低8位有效,P0接低八位,P2接高八位,不需要LCM中断,我用io模拟能驱动,说明接线,初始化都没有问题。下面是改的硬件LCM驱动屏,最后的效果就是红色和青色正反方向循环刷屏。 
 
			
			
			- #include "STC8H.H"
 - #include "IO_int.H"
 - #include "uart.H"
 - 
 - 
 - //液晶屏IC所需要的信号线的接口定义 
 - 
 - sbit CS0=P1^3;    //CS 
 - sbit reset=P1^4;  //RES 
 - 
 - sbit DC0=P4^5;    //RS(A0) 
 - sbit WR0=P4^2;    //R/W 
 - sbit RD0=P4^4;    //E 
 - 
 - void Delay(unsigned int xms) //11.0MHz                1ms
 - { 
 -         unsigned char i, j;
 - 
 -         while(xms--)
 -         {
 -                 i = 15;
 -                 j = 90;
 -                 do
 -                 {
 -                         while (--j);
 -                 } while (--i);
 - 
 - 
 -         }
 - 
 - } 
 -   
 - void delay_us(int i) 
 - { 
 -         int j,k; 
 -         for(j=0;j<i;j++); 
 -         for(k=0;k<1;k++); 
 - } 
 - 
 - void lcmint()
 - {
 -         P_SW2 |= 0x80;      //扩展寄存器访问使能
 - 
 -         LCMIFCFG=0X02;
 - 
 -         LCMIFCFG2=0X00;
 - 
 -         LCMIFCR=0X80;
 - 
 -         LCMIFSTA = 0x00;
 - }
 - 
 - //void WriteComm(int com1) 
 - //{        
 - //        CS0 = 0; 
 - //        DC0 = 0; 
 - //        RD0 = 1; 
 - //        P0=com1; 
 - //        WR0 = 0; 
 - //        delay_us(1); 
 - //        WR0 = 1; 
 - //        CS0 = 1;  
 - //} 
 - //void WriteData(int data1) 
 - //{ 
 - //        CS0 = 0; 
 - //        DC0 = 1; 
 - //        RD0 = 1; 
 - //        P0=data1;
 - //        WR0 = 0; 
 - //        WR0 = 1; 
 - //        CS0 = 1; 
 - //} 
 - 
 - void WriteComm(char com1) 
 - {  
 - 
 -         LCMIFDATL=com1;      
 -         CS0 = 0; 
 -         LCMIFCR=0x84;
 - 
 -         CS0 = 1; 
 - 
 - } 
 - void WriteData(char data1) 
 - { 
 - 
 -         LCMIFDATL=data1;
 -         CS0 = 0; 
 -         LCMIFCR=0X85;
 -         CS0 = 1; 
 - 
 - } 
 - 
 - //连写2个字节(即16位)数据到LCD模块 
 - //void transfer_data_16(int data_16bit) 
 - //{ 
 - 
 - //        CS0 = 0; 
 - //        DC0 = 1; 
 - //        RD0 = 1; 
 - //        P2=data_16bit>>8;                //P2口接高位
 - //        P0=data_16bit;                        //P0口接低位
 - //        WR0 = 0; 
 - //        WR0 = 1; 
 - //        CS0 = 1; 
 - //}
 - 
 - void transfer_data_16(int data_16bit) 
 - { 
 - 
 -         LCMIFDATH=data_16bit>>8;                //P2口接高位
 -         LCMIFDATL=data_16bit;                        //P0口接低位
 -         CS0 = 0; 
 -         LCMIFCR=0X85;
 - 
 - 
 -         CS0 = 1; 
 - 
 - }
 - 
 - 
 - 
 - 
 - //void LCD_reg(unsigned char command,unsigned char dat)
 - //{
 - //        WriteComm(command); //
 - //        WriteData(dat); 
 - //}
 - 
 - //************* 初始化程序HX8347I  成功**********// 
 - void lcd_initial() 
 - { 
 - 
 - 
 - //Delay(200); 
 - //reset=0; 
 - //Delay(200); 
 - //reset=1; 
 - 
 - WriteComm(0x01);         //软复位 
 - 
 - Delay(200);                         //必须有50ms以上的延时
 - 
 - WriteComm(0xB9); 
 - WriteData(0xFF); 
 - WriteData(0x83); 
 - WriteData(0x47); 
 - Delay(50); 
 - 
 - WriteComm(0xB1); // Set BT[2:0] = 4 before sleep out 
 - WriteData(0x00); 
 - WriteData(0x04); // BT[2:0] = 4 
 - 
 - WriteComm(0x11); // Sleep Out 
 - Delay(120); 
 - 
 - WriteComm(0x3A); //SET COLOR 
 - WriteData(0x05); // 06 262k//05 65k 
 - 
 - WriteComm(0xBF); // 
 - WriteData(0x00); 
 - WriteData(0x26); 
 - 
 - WriteComm(0xCC); 
 - WriteData(0x09); // BGR 
 - 
 - WriteComm(0xB0); // 
 - WriteData(0x88); // 
 - 
 - 
 - WriteComm(0xB1); // 
 - WriteData(0x00); 
 - WriteData(0x01); // 
 - WriteData(0x1C); // VREG1OUT 
 - 
 - WriteComm(0xB4); // 
 - WriteData(0x11); 
 - WriteData(0xFF); 
 - WriteData(0x00); 
 - WriteData(0x02); 
 - WriteData(0X02); 
 - WriteData(0x04); 
 - WriteData(0x80); 
 - 
 - WriteComm(0xB5); // 
 - WriteData(0x0b); // Vref 
 - 
 - WriteComm(0xB6); // 
 - WriteData(0x23); // vcomh 
 - WriteData(0x63); // vcoml 
 - 
 - WriteComm(0xFD); // 
 - WriteData(0x6A); // VCOM_Offset 
 - 
 - WriteComm(0xE3); // EQ 
 - WriteData(0x20); 
 - WriteData(0x10); 
 - WriteData(0x10); 
 - WriteData(0x20); 
 - WriteData(0x20); 
 - WriteData(0x20); 
 - 
 - WriteComm(0xE0); // Gamma 
 - WriteData(0x00); 
 - WriteData(0x00); 
 - WriteData(0x04); 
 - WriteData(0x11); 
 - WriteData(0x0F); 
 - WriteData(0x28); 
 - WriteData(0x0E); 
 - WriteData(0x53); 
 - WriteData(0x09); 
 - WriteData(0x13); 
 - WriteData(0x17); 
 - WriteData(0x18); 
 - WriteData(0x1A); 
 - WriteData(0x17); 
 - WriteData(0x30); 
 - WriteData(0x2E); 
 - WriteData(0x3B); 
 - WriteData(0x3F); 
 - WriteData(0x3F); 
 - WriteData(0x2C); 
 - WriteData(0x71); 
 - WriteData(0x05); 
 - WriteData(0x07); 
 - WriteData(0x08); 
 - WriteData(0x0C); 
 - WriteData(0x16); 
 - WriteData(0x88); 
 - 
 - WriteComm(0x29); // Display On 
 - Delay(5); 
 - 
 - //WriteComm(0x2C); // Write Ram
 - 
 - 
 - } 
 - 
 - //定义窗口坐标:开始坐标(XS,YS)以及窗口大小(x_total,y_total) 
 - void lcd_address(unsigned int XS,unsigned int YS,unsigned int x_total,unsigned int y_total) 
 - {                                  //                   0                            0                               240          320        
 -         int XE,YE;  
 -         XE=XS+x_total-1; 
 -         YE=YS+y_total-1;  
 -         WriteComm(0x2a);  
 -         // 设置X开始及结束的地址 
 -         transfer_data_16(XS); // X 开始地址(16 位) 
 -         transfer_data_16(XE); // X 结束地址(16 位) 
 -         WriteComm(0x2b);  
 -         // 设置Y开始及结束的地址 
 -         transfer_data_16(YS); // Y 开始地址(16 位) 
 -         transfer_data_16(YE); // Y 结束地址(16 位) 
 -         WriteComm(0x2c); 
 - } 
 -     // 写数据开始 
 - 
 - void mono_transfer_data_16(int mono_data,int font_color,int back_color) 
 - { 
 - int i; 
 - for(i=0;i<8;i++) 
 -  {
 -  if(mono_data&0x80) 
 -   {
 -  transfer_data_16(font_color); 
 - //当数据是1时,显示字体颜色 
 -   } 
 -   else 
 -   { 
 -    transfer_data_16(back_color); //当数据是0时,显示底色 
 -   } 
 -   mono_data<<=1; 
 -  } 
 - } 
 -  
 -  
 - //全屏显示一种颜色 
 - void display_color(int color_data) 
 - {   
 -  int i,j; 
 -  lcd_address(0,0,240,320); 
 -  for(i=0;i<240;i++) 
 -  { 
 -   for(j=0;j<320;j++) 
 -   { 
 -    transfer_data_16(color_data); 
 -     
 -   } 
 -  } 
 - } 
 -  
 - 
 - 
 - 
 - 
 - 
 - 
 -  
 - void main(void) 
 - {  
 - 
 - <blockquote>    P0M0 = 0x00;    P0M1 = 0x00;
 
  复制代码
  
 
 |