一、总述

    以下的程序都是基于 https://blog.csdn.net/zhyulo/article/details/89816439 方法建立的工程。

    代码已上传:https://download.csdn.net/download/zhyulo/11159855

    基于STM32F4的StdPeriph固件库TFT屏驱动程序,其中TFT屏控制芯片为ILI9341。本程序能够动态设置屏幕显示方向:横屏两种、竖屏两种,动态设置显示扫描方向:上下左右不同顺序共8种。本程序支持圆形、矩形、线段、点等基本绘制图形。支持显示中/英文,同时具有触屏驱动能力。

二、原理图

STM32F4开发-TFT屏驱动(支持横屏、竖屏选择)

STM32F4开发-TFT屏驱动(支持横屏、竖屏选择)

三、函数接口

    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_

 

相关文章:

  • 2021-12-11
  • 2022-12-23
  • 2021-10-08
  • 2021-12-16
  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-27
  • 2021-12-16
  • 2022-12-23
  • 2022-12-23
  • 2022-01-22
相关资源
相似解决方案