1.TFT介绍
该模块支持65K色显示,显示分辨率为320×240,接口为Intel提出的16位8080总线标准,自带触摸屏,其中xpt2046为触摸控制器。
其引脚功能为:
- LCD_DB[15:0];数据信号
- LCD_RD:读数据信号,低电平有效
- LCD_RS:数据/命令信号,高电平时,D[15:0]表示的是数据(RGB像素数据或命令数据),低电平时D[15:0]表示控制命令
- LCD_RESET:复位信号,低电平有效
- LCD_WR:写数据信号,低电平有效
- LCD_CS:片选信号,低电平有效
- LEDA:背光电源
- LEDK1-4:背光控制
共需要定义22个管脚
1)进行基本配置
2)编辑代码
编写LCD驱动
LCD头文件
#ifndef __LCD_H
#define __LCD_H
#include "main.h"
//LCD重要参数集
typedef struct
{
uint16_t width; //LCD 宽度
uint16_t height; //LCD 高度
uint16_t id; //LCD ID
uint8_t dir; //横屏还是竖屏控制:0,竖屏;1,横屏。
uint16_t wramcmd; //开始写gram指令
uint16_t setxcmd; //设置x坐标指令
uint16_t setycmd; //设置y坐标指令
} _lcd_dev;
//LCD参数
extern _lcd_dev lcddev; //管理LCD重要参数
//LCD的画笔颜色和背景色
extern uint16_t POINT_COLOR; //默认红色
extern uint16_t BACK_COLOR; //背景颜色.默认为白色
//-----------------LCD端口定义----------------
#define LCD_LED PCout(10) //LCD背光 PC10
#define LCD_CS_SET GPIOC -> BSRR = 1 << 9 //片选端口 PC9
#define LCD_RS_SET GPIOC -> BSRR = 1 << 8 //数据/命令 PC8
#define LCD_WR_SET GPIOC -> BSRR = 1 << 7 //写数据 PC7
#define LCD_RD_SET GPIOC -> BSRR = 1 << 6 //读数据 PC6
#define LCD_CS_CLR GPIOC -> BRR = 1 << 9 //片选端口 PC9
#define LCD_RS_CLR GPIOC -> BRR = 1 << 8 //数据/命令 PC8
#define LCD_WR_CLR GPIOC -> BRR = 1 << 7 //写数据 PC7
#define LCD_RD_CLR GPIOC -> BRR = 1 << 6 //读数据 PC6
//PB0~15,作为数据线
#define DATAOUT(x) GPIOB -> ODR = x; //数据输出
#define DATAIN GPIOB -> IDR; //数据输入
//扫描方向定义
#define L2R_U2D 0 //从左到右,从上到下
#define L2R_D2U 1 //从左到右,从下到上
#define R2L_U2D 2 //从右到左,从上到下
#define R2L_D2U 3 //从右到左,从下到上
#define U2D_L2R 4 //从上到下,从左到右
#define U2D_R2L 5 //从上到下,从右到左
#define D2U_L2R 6 //从下到上,从左到右
#define D2U_R2L 7 //从下到上,从右到左
#define DFT_SCAN_DIR L2R_U2D //默认的扫描方向
//扫描方向定义
#define L2R_U2D 0 //从左到右,从上到下
#define L2R_D2U 1 //从左到右,从下到上
#define R2L_U2D 2 //从右到左,从上到下
#define R2L_D2U 3 //从右到左,从下到上
#define U2D_L2R 4 //从上到下,从左到右
#define U2D_R2L 5 //从上到下,从右到左
#define D2U_L2R 6 //从下到上,从左到右
#define D2U_R2L 7 //从下到上,从右到左
#define DFT_SCAN_DIR L2R_U2D //默认的扫描方向
//画笔颜色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
//GUI颜色
#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
//以上三色为PANEL的颜色
#define LIGHTGREEN 0X841F //浅绿色
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)
void LCD_Init(void); //初始化
void LCD_DisplayOn(void); //开显示
void LCD_DisplayOff(void); //关显示
void LCD_Clear(uint16_t Color); //清屏
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos); //设置光标
void LCD_DrawPoint(uint16_t x, uint16_t y); //画点
void LCD_Fast_DrawPoint(uint16_t x, uint16_t y, uint16_t color); //快速画点
uint16_t LCD_ReadPoint(uint16_t x, uint16_t y); //读点
void LCD_Draw_Circle(uint16_t x0, uint16_t y0, uint8_t r); //画圆
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); //画线
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); //画矩形
void LCD_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t color); //填充单色
void LCD_Color_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t *color); //填充指定颜色
void LCD_ShowChar(uint16_t x, uint16_t y, uint8_t num, uint8_t size, uint8_t mode); //显