168 lines
6.1 KiB
C
168 lines
6.1 KiB
C
/**
|
||
******************************************************************************
|
||
*
|
||
* TFT 3.2寸显示屏驱动文件,目前使用FSMC(stm32f407系列可用,其他暂不支持!)
|
||
*
|
||
* 功能说明:
|
||
* 1.包含基本的显示、画点、画线功能及基本的数字显示;
|
||
* 2.包含中点画圆算法和改进中点画圆算法;
|
||
* 3.包含中点画椭圆算法;
|
||
* 4.显示字符的函数可返回当前目标所占空间的状态(坐标范围和颜色状态等!);
|
||
* 5.TFT的算法和OLED算法不同,TFT是按点写入,OLED按字节,因此TFT不存在覆盖!
|
||
* 6.区域操作的时间很长,有视觉可分辨延时,原因是对数组操作耗时太长!
|
||
*
|
||
* 使用注意:
|
||
* 1.本文件是不使用emWin等成熟移植方案的测试版本;
|
||
* 2.本文件并不独立,部分函数依赖硬件,目前是FSMC版本!
|
||
* 3.本程序为GUI界面服务,除学习外不得作为他用!同时欢迎不断补充功能!
|
||
*
|
||
* 版本修订:
|
||
* 修改时间 版本号 修改内容
|
||
* 2017-01-01 v1.0 移植oled程序,构建本文件;
|
||
* 2017-01-02 v2.0 增加中点画圆算法和改进中点画圆算法;
|
||
* 2017-01-02 v2.1 增加中点画椭圆算法和改进中点画椭圆算法;
|
||
* 2017-03-05 v3.0 添加区域移屏、翻转、颜色替换、颜色对调操作函数;
|
||
* 2017-03-05 v3.1 添加了操作的全局控制开关量;
|
||
* 2018-01-023 v4.0 重构文件,对部分函数进行优化,部分函数名修改!
|
||
* 2021-03-28 v5.0 添加gd32f407
|
||
*
|
||
* 程序出处:
|
||
* Copyright (C), 2017-2017, TYUT TSS-plan by SERI.LJI
|
||
* All rights reserved
|
||
*
|
||
*
|
||
* Create :2017年01月01日
|
||
* Update :2018年01月23日
|
||
* Author :dengchow
|
||
*
|
||
******************************************************************************
|
||
***/
|
||
|
||
|
||
|
||
#ifndef __TASK_TFT_H__
|
||
#define __TASK_TFT_H__
|
||
|
||
|
||
|
||
/*Task_tft.h Needed Library Define*/
|
||
#include <stdint.h>
|
||
#include <stdio.h>
|
||
|
||
|
||
|
||
/*Task_tft.h Command Define*/
|
||
#define TFT_MAX_LENGTH_OF_DEC (10) //最大显示十进制位数
|
||
|
||
#define TFT_SWAP_TEMP_COLOR BLACK //颜色对调时临时替换颜色
|
||
|
||
|
||
|
||
/*Task_tft.h Param Define*/
|
||
///*移屏函数方向参数枚举*/
|
||
typedef enum
|
||
{
|
||
TFT_DIRECT_UP = (uint8_t)1,
|
||
TFT_DIRECT_DOWN = (uint8_t)2,
|
||
TFT_DIRECT_LEFT = (uint8_t)3,
|
||
TFT_DIRECT_RIGHT = (uint8_t)4,
|
||
}_TFTScrollDirect;
|
||
|
||
///*翻转函数方向参数枚举*/
|
||
typedef enum
|
||
{
|
||
TFT_TURN_L2R = (uint8_t)1,
|
||
TFT_TURN_U2D = (uint8_t)2,
|
||
}_TFTTurnDirect;
|
||
|
||
///*区域对齐函数参数枚举*/
|
||
typedef enum
|
||
{
|
||
TFT_ALIGN_H_CENTER = (uint8_t)0, //对齐方式,水平方向居中对齐(垂直水平分组按奇偶分!)
|
||
TFT_ALIGN_H_LEFT = (uint8_t)2, //对齐方式,水平方向居左对齐
|
||
TFT_ALIGN_H_RIGHT = (uint8_t)4, //对齐方式,水平方向居右对齐
|
||
|
||
TFT_ALIGN_V_CENTER = (uint8_t)1, //对齐方式,垂直方向居中对齐
|
||
TFT_ALIGN_V_TOP = (uint8_t)3, //对齐方式,垂直方向居上对齐
|
||
TFT_ALIGN_V_BOTTOM = (uint8_t)5, //对齐方式,垂直方向居下对齐
|
||
}_TFTAlignMode;
|
||
|
||
///TFT显示状态句柄:
|
||
typedef struct
|
||
{
|
||
uint16_t FC; //前景板颜色(画笔)
|
||
uint16_t BC; //背景板颜色(背景)
|
||
|
||
uint16_t XS; //起始坐标
|
||
uint16_t YS; //
|
||
uint16_t XE; //终止坐标
|
||
uint16_t YE; //
|
||
|
||
uint16_t Num; //若显示字符串,这里统计字符个数!
|
||
uint8_t FontSize; //字体
|
||
}_TFTDisplayStyleStruct;
|
||
|
||
///TFT区域对齐集合:
|
||
typedef struct
|
||
{
|
||
uint16_t X; //对齐后左上角横坐标
|
||
uint16_t Y; //对齐后左上角纵坐标
|
||
}_TFTAlignStruct;
|
||
|
||
extern _TFTDisplayStyleStruct DefaultStyle;//默认风格:白底黑字,1206字体
|
||
|
||
|
||
|
||
/*Task_tft.h Function Define*/
|
||
uint16_t TFT_BGR2RGB(uint16_t BGR);//BGR转化为RGB
|
||
uint16_t TFT_RGB2BGR(uint16_t RGB);//RGB转化为BGR
|
||
uint16_t TFT_MakeColor(uint8_t R, uint8_t G, uint8_t B);//调色函数(输入RGB三色值,输出TFT的颜色值)
|
||
void TFT_GetColor(uint16_t Color, uint8_t *R, uint8_t *G, uint8_t *B);//提色函数(输入TFT的颜色值,输出RGB三色值)
|
||
|
||
///图形系列函数:
|
||
void TFT_DrawBlock(uint16_t XS, uint16_t YS, uint16_t XE, uint16_t YE, uint16_t color);//画矩形框
|
||
void TFT_DrawRect(uint16_t XS, uint16_t YS, uint16_t width, uint16_t height, uint16_t BlockC, uint16_t FillC);//画矩形(填充矩形)
|
||
void TFT_DrawLine(uint16_t XS, uint16_t YS, uint16_t XE, uint16_t YE, uint16_t color);//画实线
|
||
void TFT_DrawDottedLine(uint16_t XS, uint16_t YS, uint16_t XE, uint16_t YE, uint16_t color);//画虚线
|
||
void TFT_DrawCircle(uint16_t XC, uint16_t YC, uint16_t R, uint16_t color);//画圆
|
||
void TFT_DrawCircle2(uint16_t XC, uint16_t YC, uint16_t R, uint16_t color);//改进画圆
|
||
void TFT_DrawEllipse(uint16_t XC, uint16_t YC, uint16_t A, uint16_t B, uint16_t color);//画椭圆
|
||
void TFT_DrawPIC16(uint16_t XS, uint16_t YS, uint16_t width, uint16_t height, uint8_t *PIC);//画16位bmp格式图片
|
||
|
||
|
||
///Display系列函数:
|
||
_TFTDisplayStyleStruct TFT_DisplayCHAR(uint16_t X, uint16_t Y, _TFTDisplayStyleStruct *style, char CHAR);//显示字符
|
||
_TFTDisplayStyleStruct TFT_DisplaySTR(uint16_t X, uint16_t Y, _TFTDisplayStyleStruct *style, char *STR);//显示字符串
|
||
_TFTDisplayStyleStruct TFT_DisplayHEX(uint16_t X, uint16_t Y, _TFTDisplayStyleStruct *style, uint16_t HEX);//显示转化后的16进制数字
|
||
_TFTDisplayStyleStruct TFT_DisplayINT(uint16_t X, uint16_t Y, _TFTDisplayStyleStruct *style, int32_t INT);//显示有符号的十进制数字
|
||
_TFTDisplayStyleStruct TFT_DisplayFLOAT(uint16_t X, uint16_t Y, _TFTDisplayStyleStruct *style, float FLOAT, uint8_t accu);//显示可变精度小数
|
||
|
||
|
||
///区域相关系列函数:
|
||
void TFT_Move(_TFTDisplayStyleStruct *area, _TFTScrollDirect direct, uint8_t loop);//移屏操作
|
||
void TFT_Turn(_TFTDisplayStyleStruct *area, _TFTTurnDirect direct);//翻转操作
|
||
uint8_t TFT_ColorChange(_TFTDisplayStyleStruct *area, uint16_t src, uint16_t tgt);//颜色替换操作
|
||
void TFT_ColorSwap(_TFTDisplayStyleStruct *area);//颜色对调操作
|
||
|
||
|
||
///显示状态设置系列函数:
|
||
void TFT_StyleStructInit(_TFTDisplayStyleStruct *style);//对创建的结构体进行初始化
|
||
void TFT_SetColorFont(uint16_t penColor, uint16_t backColor, uint8_t fontSize, _TFTDisplayStyleStruct *style);//设置前后板颜色、字体大小
|
||
void TFT_SetPosition(uint16_t XS, uint16_t YS, uint16_t XE, uint16_t YE, _TFTDisplayStyleStruct *style);//设置显示的坐标
|
||
_TFTAlignStruct TFT_Align(_TFTDisplayStyleStruct *area, _TFTAlignMode align);//区域对齐操作
|
||
|
||
|
||
|
||
#endif
|
||
|
||
/* ******************** Copyright (C), 2017-2017, TYUT TSS-plan by SERI.LJI ******************** */
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|