TFT(ILI9320初始化配置问题)
void ILI9320Init(void){
TFTDelay(100);//根据不同晶振速度可以调整延时,保障稳定显示
TFTInit_Data(0x00e5, 0x8000);
TFTInit_Data(0x0000, 0x0001);
TFTInit_Data(0x0001, 0x0100);
TFTInit_Data(0x0002, 0x0700);
TFTInit_Data(0x0003, 0x1030);
TFTInit_Data(0x0004, 0x0000);
TFTInit_Data(0x0008, 0x0202);
TFTInit_Data(0x0009, 0x0000);
TFTInit_Data(0x000A, 0x0000);
TFTInit_Data(0x000C, 0x0000);
TFTInit_Data(0x000D, 0x0000);
TFTInit_Data(0x000F, 0x0000);
//-----Power On sequence-----------------------
TFTInit_Data(0x0010, 0x0000);
TFTInit_Data(0x0011, 0x0007);
TFTInit_Data(0x0012, 0x0000);
TFTInit_Data(0x0013, 0x0000);
TFTDelay(50);
TFTInit_Data(0x0010, 0x17B0);
TFTInit_Data(0x0011, 0x0007);
TFTDelay(10);
TFTInit_Data(0x0012, 0x013A);
TFTDelay(10);
TFTInit_Data(0x0013, 0x1A00);
TFTInit_Data(0x0029, 0x000c);
TFTDelay(10);
//-----Gamma control-----------------------
TFTInit_Data(0x0030, 0x0000);
TFTInit_Data(0x0031, 0x0505);
TFTInit_Data(0x0032, 0x0004);
TFTInit_Data(0x0035, 0x0006);
TFTInit_Data(0x0036, 0x0707);
TFTInit_Data(0x0037, 0x0105);
TFTInit_Data(0x0038, 0x0002);
TFTInit_Data(0x0039, 0x0707);
TFTInit_Data(0x003C, 0x0704);
TFTInit_Data(0x003D, 0x0807);
//-----Set RAM area-----------------------
TFTInit_Data(0x0050, 0x0000);
TFTInit_Data(0x0051, 0x00EF);
TFTInit_Data(0x0052, 0x0000);
TFTInit_Data(0x0053, 0x013F);
TFTInit_Data(0x0060, 0x2700);
TFTInit_Data(0x0061, 0x0001);
TFTInit_Data(0x006A, 0x0000);
TFTInit_Data(0x0021, 0x0000);
TFTInit_Data(0x0020, 0x0000);
//-----Partial Display Control------------
TFTInit_Data(0x0080, 0x0000);
TFTInit_Data(0x0081, 0x0000);
TFTInit_Data(0x0082, 0x0000);
TFTInit_Data(0x0083, 0x0000);
TFTInit_Data(0x0084, 0x0000);
TFTInit_Data(0x0085, 0x0000);
//-----Panel Control----------------------
TFTInit_Data(0x0090, 0x0010);
TFTInit_Data(0x0092, 0x0000);
TFTInit_Data(0x0093, 0x0003);
TFTInit_Data(0x0095, 0x0110);
TFTInit_Data(0x0097, 0x0000);
TFTInit_Data(0x0098, 0x0000);
//-----Display on-----------------------
TFTInit_Data(0x0007, 0x0173);
TFTDelay(50);
}
目前不理解的有两个问题:
1 TFTInit_Data(0x00e5, 0x8000); 00e5这个寄存器在手册中没有说明,是不是可以理解为芯片厂家隐藏的寄存器,不方便让用户知道,但用的时候一定要加,可这样的话,至少文档中应该有说明,不知道是我未看仔细还是开发商的问题
2 TFTInit_Data(0x0007, 0x0173);
下面是07H寄存器的各位分布图:
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608093LI8ZHL.jpg
07H寄存器 (原文件名:123.jpg)
这句是向07寄存器写入0000 0001 0111 0011,各位能对上号吗,我怎么感觉不对劲呀,请指教~~~迷惑中~ 老大!能否发个ILI9320的完整驱动例程上来?小弟搞了几天了就是点不亮,纠结... ILI9320的驱动网上貌似特别多啊 这两个问题我也很纠结,要是老兄知道原因后别忘了大家一起分享哈!(⊙o⊙) 我的没有点亮,哎 哎!我也是极度郁闷中啊!没点亮啊!看到有的程序貌似没有一般初始化中的那一大串程序 0x0007用0x0173和0x0133没有区别好像,那些标有“0”的位好像是没有功能的等于可以忽略,那些比如DTE什么才是有控制意义的
其实网上很多例程中都有的啊,都是调试OK的,可以先拿一个来用,然后再根据自己要求对照手册改一下试试看有什么效果,
我就改过0x41,0x42这两个寄存器的初始代码(可以在程序运行中用事件触发来决定怎么修改),是光栅滚屏用的,一般应用没什么实际意义,试了下又改回默认的了。
这里有一个9320的初始化代码,可以试一下,是我买的开发板里的代码,由于我的屏是8989的,我没试这份代码,但应该没问题的
void LCD_9320_9300_Init(void)
{
LCD_WriteReg(0x00,0x0000);
LCD_WriteReg(0x01,0x0100); //Driver Output Contral.
LCD_WriteReg(0x02,0x0700); //LCD Driver Waveform Contral.
LCD_WriteReg(0x03,0x1030); //设置扫描方式,0x1030是从左到右行扫描整体自上至下,如果是0x1038则是列扫描从上到下,整体自左至右
LCD_WriteReg(0x04,0x0000); //Scalling Contral.
LCD_WriteReg(0x08,0x0202); //Display Contral 2.(0x0207)
LCD_WriteReg(0x09,0x0000); //Display Contral 3.(0x0000)
LCD_WriteReg(0x0a,0x0000); //Frame Cycle Contal.(0x0000)
LCD_WriteReg(0x0c,(1<<0)); //Extern Display Interface Contral 1.(0x0000)
LCD_WriteReg(0x0d,0x0000); //Frame Maker Position.
LCD_WriteReg(0x0f,0x0000); //Extern Display Interface Contral 2.
delay_ms(50);
LCD_WriteReg(0x07,0x0101); //Display Contral.
delay_ms(50);
LCD_WriteReg(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4)); //Power Control 1.(0x16b0)
LCD_WriteReg(0x11,0x0007); //Power Control 2.(0x0001)
LCD_WriteReg(0x12,(1<<8)|(1<<4)|(0<<0)); //Power Control 3.(0x0138)
LCD_WriteReg(0x13,0x0b00); //Power Control 4.
LCD_WriteReg(0x29,0x0000); //Power Control 7.
LCD_WriteReg(0x2b,(1<<14)|(1<<4));
LCD_WriteReg(0x50,0x0000); //水平GRAM起始位置
LCD_WriteReg(0x51,LCD_W_MAX); //水平GRAM终止位置
LCD_WriteReg(0x52,0x0000); //垂直GRAM起始位置
LCD_WriteReg(0x53,LCD_H_MAX); //垂直GRAM终止位置
LCD_WriteReg(0x60,0x2700); //Driver Output Control.
LCD_WriteReg(0x61,0x0001); //Driver Output Control.
LCD_WriteReg(0x6a,0x0000); //Vertical Srcoll Control.
LCD_WriteReg(0x80,0x0000); //Display Position? Partial Display 1.
LCD_WriteReg(0x81,0x0000); //RAM Address Start? Partial Display 1.
LCD_WriteReg(0x82,0x0000); //RAM Address End-Partial Display 1.
LCD_WriteReg(0x83,0x0000); //Displsy Position? Partial Display 2.
LCD_WriteReg(0x84,0x0000); //RAM Address Start? Partial Display 2.
LCD_WriteReg(0x85,0x0000); //RAM Address End? Partial Display 2.
LCD_WriteReg(0x90,(0<<7)|(16<<0)); //Frame Cycle Contral.(0x0013)
LCD_WriteReg(0x92,0x0000); //Panel Interface Contral 2.(0x0000)
LCD_WriteReg(0x93,0x0001); //Panel Interface Contral 3.
LCD_WriteReg(0x95,0x0110); //Frame Cycle Contral.(0x0110)
LCD_WriteReg(0x97,(0<<8)); //
LCD_WriteReg(0x98,0x0000); //Frame Cycle Contral.
LCD_WriteReg(0x07,0x0133); //(0x0173)
}
你可能也注意到了,没有对0x05这个寄存器的写入,应该是不用管,我没细研究 弄了几天,也没点亮, 驱动程序一般不会有问题,只要按买液晶的店家的代码用就可以,但TFTDelay(100);这样的延时一定要正确,不正确的延时会造成初始化失败的。如果是有底板的液晶屏,还好;如果是没有底板的,自己焊接时,如果焊不好,也会不亮的 指令的意义是什么意思啊?
页:
[1]