|
本帖最后由 QIANLILI 于 2018-4-14 10:35 编辑 TFT液晶屏的驱动 建议最好用低压的单片机 如果要用C51的最好用STC8F系列。宽电压。目前性价比也不错。另外,楼主贴出的只是液晶屏的初始化程序。 你还缺完整显示代码。 接线的话DB0-DB7可以接P1端口的P1.0-P1.7 另外 CS RST RS WRB RDB 也可以接P2端口的P2.0-P2.5 之后在程序中分别定义好。 液晶的背光电源和液晶的电源,电压不能超过标注电压。一般不能大于3.7伏。 虽然我也有试过接5伏的 但是烧坏的概率很大。 所以尽量选用宽电压单片机。 那样单片机的电压可以和液晶的一样,用稳压后3.3伏的电压就可。看楼主的提问,感觉楼主对单片机都不是很了解。 那么对液晶的驱动原理也应该不了解。 确实需要先把单片机的其它功能和例程都玩的很熟练了,才能驱动好液晶模块。 以下程序是驱动8位数据接口的液晶刷屏程序。你这个也是8位数据的。但是要套用,程序需要改动。液晶初始化代码换成你要用的液晶的。还有你那个液晶的WriteData用的是8位。我这程序用的是16位。需要改一下。 因为我没有你这种液晶屏。无法帮你修改程序及验证测试。你可以自己看一下代码。等你能看懂每一行的意思。那么你就能驱动好液晶屏了。 #define u8 unsigned char #define u16 unsigned int #define DBH P1 sbit CS = P3^2; sbit RS = P3^3; sbit RD = P3^4; sbit WR = P3^5; sbit RST = P3^6; #define RED 0xF800 #define GREEN 0x07E0 #define BLUE 0x001F #define WHITE 0xFFFF #define BLACK 0x0000 void Delay1ms() [url=]//@12.000MHz[/url] { unsigned char i, j; i = 16; j = 147; do { while (--j); } while (--i); } void delayms(unsigned int dly) { unsigned int i; for(i=0;i<dly;i++) { Delay1ms(); } } void WriteComm(u8 i) { CS=0; RD=1; RS=0; DBH=i; WR=0; WR=1; CS=1; } void WriteData(u16 color) { CS=0; RD=1; RS=1; DBH=color>>8; WR=0; WR=1; DBH=color; WR=0; WR=1; CS=1; } void LCD_Init(void) { RST = 0; delayms(100); RST = 1; delayms(100); WriteComm(0x2C); delayms(10); WriteComm(0x02); WriteComm(0x00); WriteComm(0x28); WriteComm(0x01); WriteComm(0x45); //RAM Skip AREA set WriteComm(0x00); WriteComm(0x53); WriteComm(0x00); WriteComm(0x10); WriteComm(0x03); WriteComm(0x30); WriteComm(0x1d); WriteComm(0x32); WriteComm(0x0e); WriteComm(0x40); WriteComm(0x80); WriteComm(0x42); //Y ADDRESS WriteComm(0x02); WriteComm(130); WriteComm(0x43); //X ADDRESS WriteComm(0x04); WriteComm(130); WriteComm(0x34); WriteComm(0x8d); WriteComm(0x2a); WriteComm(0x42); WriteComm(0x55); WriteComm(0x00); WriteComm(0x56); WriteComm(0x00); WriteComm(0x57); WriteComm(0x9f); WriteComm(0x51); } void SETWINDOWS(u16 Xstart,u16 Xend,u16 Ystart,u16 Yend) { WriteComm(0x42); WriteComm(Ystart); WriteComm(Yend); WriteComm(0x43); WriteComm(Xstart); WriteComm(Xend); } void DispColor(u16 color) { u16 i,j; SETWINDOWS(0,130-1,0,130-1); CS=0; RD=1; RS=1; for(i=0;i<130;i++) { for(j=0;j<130;j++) { DBH=color>>8; WR=0; WR=1; DBH=color; WR=0; WR=1; } } CS=1; } void main(void) { LCD_Init(); DispColor(0xFFFF); while(1) { DispColor(0xF800); delayms(2000); DispColor(0x07C0); delayms(2000); DispColor(0x003F); delayms(2000); } } |
| 说明你还未掌握单片机的工作原理,先补补课吧。 |