• 3.9 TFT彩屏实验


    TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。 TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提 高了图像质量,TFT-LCD 也被叫做真彩液晶显示器。本实验,我们使用的是 1.44 寸的 TFTLCD 模块,该模块支持 65K 色显示,显示分辨率为 128×128, 接口为 SPI 4 线接口。
    TFTLCD 显示需要的相关设置步骤如下:
    1)设置 W800 与 TFTLCD 模块相连接的 IO。这一步,先将我们与 TFTLCD 模块相连的 IO 口进行初始化,以便驱动 LCD。
    2)初始化 TFTLCD 模块。
    使用 LCD 前,首先要复位 LCD,接着发送初始化序列,就是向 LCD 控制器写入一系列的设置值
    (比如伽马校准),这些初始化序列一般 LCD 供应商会提供给客户,我们直接使用这些序列即可, 不需要深入研究。在初始化之后,LCD 才可以正常使用。
    3)通过函数将字符和数字显示到 TFTLCD 模块上。
    这一步的流程是:设置坐标 写 GRAM 指令 写 GRAM 来实现,但是这个步骤,只是一个点的处 理,我们要显示字符/数字,就必须要多次使用这个步骤,从而达到显示字符/数字的目的,所以需要 设计一个函数来实现数字/字符的显示,之后调用该函数,就可以实现数字/字符的显示了。
    TFT 显示模块除了 SPI 接口后,对外还有背光接口,背光接口默认不控制的话,LCD 的背光是常亮状态,在硬件上,TFTLCD 模块与 W800 的 IO 口对应关系如下:
    RST:硬复位 OLED。
    DC:命令/数据标志(0,读写命令;1,读写数据)。
    D0:串行时钟线。
    D1:串行数据线,连接 IO33。
    LCD_BL(背光控制):背光常亮,不接 W800。
    这些线的连接,W800 开发板的内部已经连接好了,我们只需要将 TFTLCD 模块插上去就好了。
    Lcd.h 文件说明
    这是显示屏的头文件,里面定义了一些常用的颜色常量,LCD 的硬件接口,对外使用的接口。

    //颜色

    define RED 0xf800 //红色

    define GREEN 0x07e0 //绿色

    define BLUE 0x001f //蓝色

    define WHITE 0xffff //白色

    define BLACK 0x0000 //黑色

    define YELLOW 0xFFE0 //黄色

    define GRAY0 0xEF7D //灰色

    define GRAY1 0x8410 //灰色1

    define GRAY2 0x4208 //灰色2

    define VIOLET 0xf81f //紫色

    //定义显示屏大小

    define X_MAX_PIXEL 128

    define Y_MAX_PIXEL 128

    //LCD此脚定义

    define LCD_SCL WM_IO_PB_05 //SCLK 时钟 D1(SCLK)

    define LCD_SDA WM_IO_PB_08 //SDA D0(MOSI) 数据

    define LCD_RST WM_IO_PB_09 //_RES hardware reset 复位

    define LCD_RS WM_IO_PB_10 //A0 H/L 命令数据选通端,H:数据,L:命令

    //SPI口置1

    define LCD_RS_SET (tls_gpio_write(LCD_RS, 1))

    define LCD_SDA_SET (tls_gpio_write(LCD_SDA, 1))

    define LCD_SCL_SET (tls_gpio_write(LCD_SCL, 1))

    define LCD_RST_SET (tls_gpio_write(LCD_RST, 1))

    //SPI口清0

    define LCD_RS_CLR (tls_gpio_write(LCD_RS, 0))

    define LCD_SDA_CLR (tls_gpio_write(LCD_SDA, 0))

    define LCD_SCL_CLR (tls_gpio_write(LCD_SCL, 0))

    define LCD_RST_CLR (tls_gpio_write(LCD_RST, 0))

    void Gui_DrawFont_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s);
    void Gui_DrawFont_GBK24(u16 x, u16 y, u16 fc, u16 bc, u8 s);
    void Gui_DrawFont_Num32(u16 x, u16 y, u16 fc, u16 bc, u16 num) ;
    void LCD_P6x8Str(unsigned char x, unsigned char y, u16 fc, u16 bc,unsigned char ch[]);
    void Lcd_WriteIndex(u8 Index);
    void Lcd_WriteData(u8 Data);
    void Lcd_WriteReg(u8 Index,u8 Data);
    u16 Lcd_ReadReg(u8 LCD_Reg);
    void Lcd_Reset(void);
    void Lcd_Init(void);
    void Lcd_Clear(u16 Color);
    void Lcd_ClearRect(u16 x1,u16 y1, u16 x2,u16 y2, u16 Color);
    void Gui_DrawPoint(u16 x,u16 y,u16 Data);
    void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end);
    void LCD_WriteData_16Bit(u16 Data);
    Lcd.c 文件说明:
    这是 LCD 的源文件,就是用于实现 LCD 初始化、清屏、显示 6
    8 字符,我们常用的就是前 4 个函数,分别如下:
    函数 Lcd_Init 介绍
    这是 LCD 的初始化函数,直接调用这个函数就能初始化 LCD,如果要修改 LCD 的接口引脚,请修改 LCD.h 即可, 这个函数不用变。
    void Lcd_Init(void)
    {
    InitIo();
    Lcd_Reset(); //复位 LCD

    Lcd_WriteIndex(0x11);//Sleep exit
    tls_os_time_delay (200);
    
    //ST7735R Frame Rate
    Lcd_WriteIndex(0xB1);
    Lcd_WriteData(0x01);
    ....................略...........................
    
    Lcd_WriteIndex(0xF0); //Enable test command
    Lcd_WriteData(0x01);
    Lcd_WriteIndex(0xF6); //Disable ram power save mode
    Lcd_WriteData(0x00);
    
    Lcd_WriteIndex(0x3A); //65k mode
    Lcd_WriteData(0x05);
    
    Lcd_WriteIndex(0x29);//Display on
    Lcd_Clear(WHITE);
    

    }
    函数 Lcd_Clear 介绍:
    这个是清除 LCD 显示屏函数,需要重新显示数据的时候,就要调用这个函数,参数是清除显示屏后,显示的颜色值。
    /*************************************************
    函数名:Lcd_Clear
    功能:全屏清屏函数
    入口参数:填充颜色COLOR
    返回值:无
    *************************************************/
    void Lcd_Clear(u16 Color)
    {
    unsigned int i,m;
    Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
    Lcd_WriteIndex(0x2C);

    for(i=0;i<X_MAX_PIXEL;i++)
    for(m=0;m<Y_MAX_PIXEL;m++)
    {
        LCD_WriteData_16Bit(Color);
    }
    

    }
    函数 Gui_DrawFont_GBK16 介绍
    这个函数用于显示一行816的ascll码字符串。
    /
    功能描述:显示一行8*16的ascll码
    *xy,显示屏坐标,取值 0~128
    *fc:字的颜色
    *bc:背景的颜色
    *s:要显示的字符串
    */
    void Gui_DrawFont_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s)
    {
    unsigned char i,j;
    unsigned short k,x0;
    x0=x;

    while(*s)
    {
    

    // if((s) < 128)
    {
    k=
    s;
    if (k==13)
    {
    x=x0;
    y+=16;
    }
    else
    {
    if (k>32) k-=32; else k=0;

                for(i=0;i<16;i++)
                for(j=0;j<8;j++)
                {
                    if(asc16[k*16+i]&(0x80>>j))	Gui_DrawPoint(x+j,y+i,fc);
                    else
                    {
                        if (fc!=bc) Gui_DrawPoint(x+j,y+i,bc);
                    }
                }
                x+=8;
            }
            s++;
        }
    
    }
    

    }
    程序编译下载到开发板运行可看到LCD显示的信息。

  • 相关阅读:
    选择排序——Java实现
    冒泡排序——Python实现
    基数排序——Java实现
    Sqoop迁移Hadoop与RDBMS间的数据
    Hive Join
    Hadoop 完全分布式部署(三节点)
    springboot自定义异常处理
    linux下安装redis
    windows 下tomcat重启脚本
    解决rabbin首次请求慢的问题
  • 原文地址:https://www.cnblogs.com/doiting/p/14109009.html
Copyright © 2020-2023  润新知