/*
* tft_drv.c
* Description:
* TFT驱动库函数的实现文件。
* Created on: 2014-11-27
* Author: leomon
* Email: 1964416932@qq.com
* Blog: http://blog.csdn.net/leomon_1993
*
* ChangeLog:
*
*/
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_gpio.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "tft_cfg.h"
#include "tft_defs.h"
#include "tft_drv.h"
/*
* *************************************************************
* 宏定义部分
* 说明:控制器寄存器宏定义。
* *************************************************************
*/
#define TFT_BACKLIGHT_REG_ADDR 0x0001 /*地址指向背光亮度寄存器*/
#define TFT_ROW_START_REG_ADDR 0x0002 /*地址指向起始行地址寄存器*/
#define TFT_COL_START_REG_ADDR 0x0003 /*地址指向起始列地址寄存器*/
#define TFT_ROW_STOP_REG_ADDR 0x0006 /*地址指向结束行地址寄存器*/
#define TFT_COL_STOP_REG_ADDR 0x0007 /*地址指向结束列地址寄存器*/
#define TFT_PAGE_REG_SHOW_ADDR 0x0004 /*显示页寄存器*/
#define TFT_PAGE_REG_WRRD_ADDR 0x0005 /*读写页寄存器*/
#define TFT_HIB_STATUS_REG_ADDR 0x000B /*休眠状态寄存器*/
#define TFT_CTL_BOARD_DATA_ADDR 0x000F /*地址指向数据通道*/
/*
* *************************************************************
* 内部变量声明或定义部分
* *************************************************************
*/
/*
* optMode = 0表示当前是TFT写状态
* optMode = 1表示当前是TFT读状态
*/
static int optMode = 0;
/*
* *************************************************************
* “私有”函数声明部分
* 说明:这些函数均是有static修饰符修饰的。确保这些函数为文件内私有函数,方便管理。此处声明
* 的函数均与底层驱动有极大的关系,且不对外部开放。在进行移植时同样需要修改这些文件,确保对TFT
* 的访问和控制没有问题。
* *************************************************************
*/
static void PeriphsEnable(void);
static void PinsInit(void);
static void ShortDelayMS(int32_t ms);
static uint16_t DataRead(void);
static void ReadInit(void);
static void WriteInit(void);
static void Write(uint16_t cmd, uint16_t data);
static void CmdWrite(uint16_t cmd);
static void DataWrite(uint16_t data);
static void GPIOPinsWrite(uint16_t data);
static void RegionSet(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
static void CursorSet(uint16_t x, uint16_t y);
/*
* *************************************************************
* 外部函数(tft_drv.h中声明的函数)实现部分
* 说明:此处用于实现在文件"tft_drv.h"中定义的外部函数。这些函数用于隔离硬件底层的驱动,
* 供用户使用。如无需要,不用修改。
* *************************************************************
*/
//--------------------------------------------------------------
// TFT硬件相关
//--------------------------------------------------------------
/*
* 函 数:TFTInit()
* 说 明:用于初始化TFT控制器。注意,该函数必须被最先调用,否则对TFT的其他操作都无法正常工作。
* 参 数:无
* 返回值:无
* 示 例:略
*/
void TFTInit()
{
//
//初始化TFT需要使用的MCU模块
//
PeriphsEnable();
//
//初始化使用到的管脚
//
PinsInit();
//
TFT_PIN_RD_H;
//
TFT_PIN_WR_H;
//
TFT_PIN_RST_L;
//此时需要保证有5ms以上才能保证复位稳定,推荐8ms
ShortDelayMS(8);
//
TFT_PIN_RST_H;
//此时需要保证有5ms以上才能保证复位稳定,推荐8ms
ShortDelayMS(8);
//
//片选打开。
//
TFT_PIN_CS_L;
//
//将屏幕初始化为某种颜色
//
TFTClear(TFT_CFG_BACKCOLOR_DEFAULT);
//
//点亮屏幕
//
TFTBacklightSet(TFT_CFG_BACKLIGHT_DEFAULT);
return;
}
/*
* 函 数:TFTClear()
* 说 明:用于清空屏幕显示
* 参 数:color--清除屏幕刷新色
* 返回值:无
* 示 例:略
*/
void TFTClear(uint16_t color)
{
int i = 0, j = 0;
RegionSet(0, 0, TFT_WIDTH - 1, TFT_HEIGHT - 1);
for (i = 0; i < TFT_HEIGHT; i++)
{
for (j = 0; j < TFT_WIDTH; j++)
{
DataWrite(color);
}
}
return;
}
/*
* 函 数:TFTBacklightSet()
* 说 明:用于调节TFT背光亮度的函数。
* 参 数:value-表示背光亮度值,亮度值从0到16。
* 返回值:无
* 示 例:略
*/
void TFTBacklightSet(uint16_t value)
{
Write(TFT_BACKLIGHT_REG_ADDR, value);
return;
}
/*
* 函 数:TFTPageRegIndexSet()
* 说 明:用来设定读写页寄存器,默认为0.
* 参 数:pageIndex-页数(0到TFT_PAGE_REG_INDEX_MAX)
* 返回值:无
* 示 例:略
*/
void TFTPageRegIndexSet(uint32_t pageIndex)
{
Write(TFT_PAGE_REG_WRRD_ADDR, pageIndex);
return;
}
/*
* 函 数:TFTPageRegShow()
* 说 明:设定当前显示的页寄存器,默认显示为0
* 参 数:pageIndex-页数(0到7)
* 返回值:无
* 示 例:略
*/
void TFTPageRegShow(uint16_t pageIndex)
{
Write(TFT_PAGE_REG_SHOW_ADDR, pageIndex);
return;
}
//--------------------------------------------------------------
// TFT基础绘图函数接口
//--------------------------------------------------------------
/*
* 函 数:TFTPixelDraw()
* 说 明:在屏幕上绘制一个像素点。
* 参 数:xPos, yPos -- 像素点坐标
* color像素点填充色
* 返回值:
* 示 例:
*/
void TFTPixelDraw(int16_t xPos, int16_t yPos, uint16_t color)
{
CursorSet(xPos, yPos);
DataWrite(color);
return;
}
/*
* 函 数:TFTPixelRead()
* 说 明:读取屏幕指定像素点的颜色值。但是该函数实际执行效率比较低。速度很慢。
* 参 数:xPos, yPos -- 像素点坐标
* 返回值:像素点的颜色。
* 示 例:
*/
uint16_t TFTPixelRead(int16_t xPos, int16_t yPos)
{
CursorSet(xPos, yPos);
return (DataRead());
}
/*
* 函 数:TFTLineDrawH()
* 说 明:在屏幕中绘制一条水平直线
* 参 数:xStart, yStart-起始点坐标
* length-直线的长度
* color-线的颜色
* 返回值:无
* 示 例:略
*/
void TFTLineDrawH(int16_t xStart, int16_t yStart, uint16_t length,
uint16_t color)
{
int i = 0;
RegionSet(xStart, yStart, xStart + length - 1, yStart);
//
//绘制水平直线
//
for (i = 0; i < length; i++)
{
DataWrite(color);
}
return;
}
/*
* 函 数:TFTLineDrawV()
* 说 明:在屏幕中绘制一条垂直的直线
* 参 数:xStart, yStart-起始点坐标
* length-直线的长度
* color - 线条颜色
* 返回值:无
* 示 例:略
*/
void TFTLineDrawV(int16_t xStart, int16_t yStart, uint16_t length,
uint16_t color)
{
int i = 0;
RegionSet(xStart, yStart, xStart, yStart + length - 1);
//
//绘制竖直的直线
//
for (i = 0; i < length; i++)
{
DataWrite(color);
}
return;
}
/*
* 函 数:TFTRectangleDraw()
* 说 明:在屏幕中绘制一个矩形
* 参 数:xStart, yStart - 起始点坐标,即矩形的左上角坐标
* width-矩形的宽度,height-矩形的高度。
* borderColor -- 边界色彩
* 返回值:无
* 示 例:略
*/
void TFTRectangleDraw(int16_t xStart, int16_t yStart, uint16_t width,
uint16_t height, uint16_t borderColor)
{
//
//绘制水平直线
//
TFTLineDrawH(xStart, yStart, width, borderColor);
TFTLineDrawH(xStart, yStart + height - 1, width, borderColor);
//
//绘制竖直直线
//
TFTLineDrawV(xStart, yStart, height, borderColor);
TFTLineDrawV(xStart + width - 1, yStart, height, borderColor);
return;
}
/*
* 函 数:TFTRectangleFill()
* 说 明:在屏幕中填充一个矩形区域。
* 参 数:xStart, yStart - 起始点坐标,即矩形区域的左上角坐标
* width, height - 矩形的宽度和长度
* fillColor -- 要填充的颜色
* 返回值:
* 示 例:
*/
void TFTRectangleFill(int16_t xStart, int16_t yStart, uint16_t width,
uint16_t height, uint16_t fillColor)
{
int i = 0, j = 0;
//
//设定需要更新的矩形区域
//
RegionSet(xStart, yStart, xStart + width - 1, yStart + height - 1);
//
//快速填充
//
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
{
DataWrite(fillColor);
}
}
return;
}
/*
* *************************************************************
* “私有”函数实现部分
* 说明:略
* *************************************************************
u011193957
- 粉丝: 6
- 资源: 5
最新资源
- awewq1132323
- 手写流程图检测31-YOLO(v5至v8)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- frida拦截微信小程序云托管API
- 肝脏及其肿瘤分割的 CT 数据集,已经切片成jpg数据,约2w张数据和mask
- 基于Java的网上教务评教管理系统的设计与实现.doc
- 2024圣诞节海外消费市场趋势及营销策略分析报告
- JWaaaaaaaaaaaaaaaaaaaa
- Python实现常见排序算法详解
- 等发达地区的无穷大无穷大无穷大请问
- 微藻检测19-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈