找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

1.8寸屏幕,已知屏的引脚定义,驱动代码,求教51单片机怎么驱动连接?

查看数: 3688 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-4-13 17:40

正文摘要:

求教。。。。 已知屏的引脚定义,和驱动代码,我自己捣鼓好久都搞不定,求大佬指教!!!谢谢 屏的驱动IC是  ST7735S   这是屏自带的代码: WriteComm(0X11); //Sleep Out Delay(120); //D ...

回复

ID:160834 发表于 2018-4-13 22:56
本帖最后由 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);
     }
}
ID:123289 发表于 2018-4-13 21:39
说明你还未掌握单片机的工作原理,先补补课吧。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表