一、总述
以下的程序都是基于 https://blog.csdn.net/zhyulo/article/details/89816439 方法建立的工程。
代码已上传:https://download.csdn.net/download/zhyulo/11159855 。
基于STM32F4的StdPeriph固件库TFT屏驱动程序,其中TFT屏控制芯片为ILI9341。本程序能够动态设置屏幕显示方向:横屏两种、竖屏两种,动态设置显示扫描方向:上下左右不同顺序共8种。本程序支持圆形、矩形、线段、点等基本绘制图形。支持显示中/英文,同时具有触屏驱动能力。
二、原理图
三、函数接口
TFT_Driver.h:
#ifndef _TFT_Driver_h_
#define _TFT_Driver_h_
/*向外声明*/
#define UseTouch 0
//颜色值
#define BLACK 0x0000 //黑
#define RED 0xF800 //红
#define ORANGE 0xFB00 //橙
#define YELLOW 0xFFE0 //黄
#define GREEN 0x07E0 //绿
#define BLUE 0x001F //蓝
#define PURPLE 0x881F //紫
#define GRAY 0X8430 //灰
#define WHITE 0xFFFF //白
#define GOLDEN 0XBC40 //金
#define LIGHTBLUE 0x051F //浅蓝
#define MAGENTA 0xF81F //样红
#define CYAN 0x7FFF //青
//----- RGB565原理 ------
//xxxxxxxx xxxxxxxx
//rrrrrggg gggbbbbb
//11111000 00000000 红 0xF800
//00000111 11100000 绿 0x07E0
//00000000 00011111 蓝 0x001F
typedef union
{
unsigned short all;
struct
{
unsigned short b : 5;
unsigned short g : 6;
unsigned short r : 5;
} rgb;
} RGB565;
typedef struct
{
unsigned char DisDir; //显示方向
unsigned char ScanDir; //扫描方向
unsigned short width; //宽度
unsigned short height; //高度
} TFT_DEV;
//DisDir : 显示方向
/* 3方向
-------
4| |2
方| |方
向| |向
-------
1方向
*/
//ScanDir : 扫描方向
#define L2R_U2D 0//从左到右,从上到下
#define L2R_D2U 1//从左到右,从下到上
#define R2L_U2D 2//从右到左,从上到下
#define R2L_D2U 3//从右到左,从下到上
#define U2D_L2R 4//从上到下,从左到右
#define D2U_L2R 5//从下到上,从左到右
#define U2D_R2L 6//从上到下,从右到左
#define D2U_R2L 7//从下到上,从右到左
// /4先上下,%2从下到上,/2%2从右到左
#define True 1
#define False 0
/*向外接口*/
extern TFT_DEV lcddev;//管理LCD参数
//lcd初始化
void LCD_Init(void);
//设置屏幕显示方向
void LCD_Display_Dir(unsigned char dir);
//设置屏扫描方向
void LCD_Scan_Dir(unsigned char dir);
//lcd清屏幕
#define LCD_ClrScr(BackColor) LCD_Fill(0, 0, lcddev.width-1, lcddev.height-1, BackColor)
/*屏幕左上角为原点,x指行, y指列*/
/*触摸程序*/
//触摸位置值检测
#if UseTouch
bool TouchSiteGet(unsigned short *TouchRow, unsigned short *TouchColumn);
#endif
/*点*/
//在x0,y0位置显示一个颜色为Color点
#define LCD_Point(x0, y0, Color) LCD_Fill(x0, y0, x0, y0, Color)
/*线*/
//在x0,y0 ~ 对角x1,y1位置显示一条直线,颜色为color
void LCD_Line(unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1, unsigned short color);
//在x0,y0 ~ 对角x1,y1,画一个颜色为Color的矩形边框
void LCD_Rectangle(unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1, unsigned short Color);
//在x0,y0位置画一个半径为r,颜色为Color的圆框
void LCD_Loop(unsigned short x0, unsigned short y0, unsigned char r, unsigned short Color);
/*面*/
//在x0,y0 ~ x1,y1位置处,显示一个颜色为Color的长方形
void LCD_Fill(unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1, unsigned short Color);
/*字符*/
//在x0,y0位置显示一中文字符,颜色为fColor,背景色为bColor
void LCD_ShowGBK(unsigned short x0, unsigned short y0, unsigned short gbk, unsigned short fColor, unsigned short bColor);
//在x0,y0位置显示一英文字符,颜色为fColor,背景色为bColor
void LCD_ShowANSII(unsigned short x0, unsigned short y0, unsigned char ansii, unsigned short fColor, unsigned short bColor);
//在x0,y0位置显示一字符串,颜色为fColor,背景色为bColor
void LCD_String(unsigned short x0, unsigned short y0, char *s, unsigned short fColor, unsigned short bColor);
/*图片*/
//在x0,y0位置显示一副高为high,宽为wide的图片,图片信息按RGB565组织(每个像素点占用2个字节)
//图片信息头地址指针为pData
void LCD_Photo(unsigned short x0, unsigned short y0, unsigned short wide, unsigned short high, unsigned short *pData);
#endif//_TFT_Driver_h_