找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2776|回复: 2
收起左侧

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

[复制链接]
ID:294619 发表于 2018-4-13 17:40 | 显示全部楼层 |阅读模式
求教。。。。
已知屏的引脚定义,和驱动代码,我自己捣鼓好久都搞不定,求大佬指教!!!谢谢
屏的驱动IC是  ST7735S  
这是屏自带的代码:
WriteComm(0X11); //Sleep Out
Delay(120); //Delay 120Ms
WriteComm(0Xb1);
WriteData(0X01);
WriteData(0X08);
WriteData(0X05);
WriteComm(0Xb2);
WriteData(0X01);
WriteData(0X2C);
WriteData(0X2D);
WriteComm(0Xb3);
WriteData(0X01);
WriteData(0X2C);
WriteData(0X2D);

WriteData(0X01);
WriteData(0X2C);
WriteData(0X2D);
WriteComm(0Xb4); //Column Inversion
WriteData(0X00);
WriteComm(0Xc0);
WriteData(0Xa2);
WriteData(0X02);
WriteData(0X84);
WriteComm(0Xc1);
WriteData(0Xcf);
WriteComm(0Xc2);
WriteData(0X0D);
WriteData(0X00);
WriteComm(0Xc3);
WriteData(0X8A);
WriteData(0X2A);
WriteComm(0Xc4);
WriteData(0X8A);
WriteData(0Xee);
WriteComm(0Xc5); //Vcom
WriteData(0X2C);   
WriteComm(0X36); //Mx, My, Rgb Mode
WriteData(0Xc8);     
WriteComm(0Xe0);
WriteData(0X05);   
WriteData(0X11);
WriteData(0X0E);
WriteData(0X19);
WriteData(0X3A);
WriteData(0X33);
WriteData(0X29);
WriteData(0X2A);
WriteData(0X26);
WriteData(0X21);
WriteData(0X26);
WriteData(0X3B);
WriteData(0X00);
WriteData(0X01);
WriteData(0X03);
WriteData(0X10);
WriteComm(0Xe1);
WriteData(0X05);   
WriteData(0X11);
WriteData(0X0E);
WriteData(0X19);
WriteData(0X36);
WriteData(0X30);
WriteData(0X2B);
WriteData(0X30);
WriteData(0X31);
WriteData(0X31);
WriteData(0X3B);
WriteData(0X3F);
WriteData(0X00);
WriteData(0X02);
WriteData(0X03);
WriteData(0X10);
WriteComm(0X3A); //65K Mode
WriteData(0X05);
WriteComm(0x29); //Display on

WriteComm(0x36); //Display on
WriteData(0x1c); // SC15-8
WriteComm(0x2c);

QQ截图20180413173944.png

SPEC-QTB1D8047-V1.pdf

418.2 KB, 下载次数: 9

屏的数据手册

回复

使用道具 举报

ID:123289 发表于 2018-4-13 21:39 | 显示全部楼层
说明你还未掌握单片机的工作原理,先补补课吧。
回复

使用道具 举报

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);
     }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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