1.添加了必要的注释和readme文件以提高代码可读性和项目文档化。2.增加了按键按下时LCD屏幕显示功能

This commit is contained in:
2026-01-25 15:42:48 +08:00
parent 373b31adfd
commit 6a861cee4e
30 changed files with 2311 additions and 50645 deletions

View File

@@ -1,117 +1,116 @@
/******************************************************************************
* @file 160160D.h
* @brief UC1698U控制器驱动的 160x160 像素 LCD 显示屏驱动头文件
* @details 本文件定义了 LCD 驱动的接口函数、状态码宏定义以及 ASCII 字体数据。
* 包含显示控制、字符显示、图形显示、菜单操作等功能的函数声明。
* @author 阜阳师范大学物电学院
* @version V0.1
* @date 2026.1.19
* @note 控制器: UC1698U
* 显示屏: 160x160像素
* 颜色模式: 4K色RGB444和 64K色RGB565
******************************************************************************/
#ifndef __160160D_H__
#define __160160D_H__
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#define LCD_EXT extern
/* ============================================================================
* 显示状态码定义
* ============================================================================ */
#define DISPLAY_BLANK 0x00 /**< 显示空白 */
#define PROTEC_ON 0x01 /**< 保护开启 */
#define PROTEC_EXIT 0x02 /**< 保护退出 */
#define PROTEC_START 0x03 /**< 保护启动 */
#define PROTECT_TRIP 0x04 /**< 保护跳闸 */
#define HEART_ACCUM 0x05 /**< 心跳累加 */
#define HEART_REDUCE 0x06 /**< 心跳减少 */
#define NEXT_MENU 0x07 /**< 下一菜单 */
#define UP_DOWN 0x08 /**< 上下键 */
#define LEFT_RIGHT 0x09 /**< 左右键 */
#define DERECTION_KEY 0x0a /**< 方向键 */
#define ENTER_KEY 0x0b /**< 确认键 */
#define ESC_KEY 0x0c /**< 取消键 */
#define ADD_DEC 0x0d /**< 加减键 */
#define DI_CLOSE 0x0e /**< 数字输入关闭 */
#define DI_OPEN 0x0f /**< 数字输入开启 */
#define DI_UNCERT 0x10 /**< 数字输入不确定 */
#define DELET_MESS 0x11 /**< 删除消息 */
#define HAVE_MESS 0x12 /**< 有消息 */
#define CODE_PASS 0x13 /**< 密码通过 */
#define CODE_ERROR 0x14 /**< 密码错误 */
/* ============================================================================
* 函数声明(仅包含 160160D.C 中实际定义的函数)
* ============================================================================ */
#define DISPLAY_BLANK 0x00
#define PROTEC_ON 0x01
#define PROTEC_EXIT 0x02
#define PROTEC_START 0x03
#define PROTECT_TRIP 0x04
#define HEART_ACCUM 0x05
#define HEART_REDUCE 0x06
#define NEXT_MENU 0x07
#define UP_DOWN 0x08
#define LEFT_RIGHT 0x09
#define DERECTION_KEY 0x0a
#define ENTER_KEY 0x0b
#define ESC_KEY 0x0c
#define ADD_DEC 0x0d
#define DI_CLOSE 0x0e
#define DI_OPEN 0x0f
#define DI_UNCERT 0x10
#define DELET_MESS 0x11
#define HAVE_MESS 0x12
#define CODE_PASS 0x13
#define CODE_ERROR 0x14
LCD_EXT void display_datas(unsigned char datas); //R-G-B=4-4-4
LCD_EXT void display_line(unsigned char datas);
LCD_EXT void ReverseShow88(uint8_t column ,uint8_t lin,uint8_t const *address);
LCD_EXT void ReverseShow916(uint8_t column ,uint8_t lin,uint8_t const *address);
LCD_EXT void DisplayOneByteS(uint8_t ox, uint8_t oy, uint8_t byte1);
LCD_EXT void DisplayOneText(uint8_t ox,uint8_t oy,uint8_t ascii_code);
LCD_EXT void Clear_Line(uint8_t ox1,uint8_t ox2,uint8_t oy,uint8_t number1,uint8_t number2,uint8_t language);
LCD_EXT void DisplayBrokenLine(uint8_t ox,uint8_t oy,uint8_t num);
LCD_EXT void DisplaySolidLine(uint8_t ox,uint8_t oy,uint8_t num);
LCD_EXT void DisplayLineText2(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
LCD_EXT void DisplayOneChinesetest(uint8_t column,uint8_t lin);
LCD_EXT void REDisplayOneChinesetest(uint8_t column,uint8_t lin);
LCD_EXT void ReverseDispOne(uint8_t ox,uint8_t oy,uint8_t ascii_code);
LCD_EXT void ReverseLineText(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
LCD_EXT void ReverseDispLine(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
LCD_EXT void ReverseOneGraphics(uint8_t column,uint8_t lin,uint16_t hzcode,uint8_t tb_index);
LCD_EXT void display_pic(unsigned char *p);
LCD_EXT void display_pic1(unsigned char *p);
LCD_EXT void DisplayOneGraphics(uint8_t column,uint8_t lin, uint16_t hzcode,uint8_t tb_index);
LCD_EXT void DisplayConnectGraphics(uint8_t column,uint8_t lin,uint16_t hzcode);
LCD_EXT void DisplayOneChinese(uint8_t column,uint8_t lin,uint8_t const *HzCode);
LCD_EXT void DisplayLineChinese(uint8_t ox1,uint8_t oy1,uint8_t number1,uint8_t const *ptr1,uint8_t ox2,uint8_t oy2,uint8_t number2,uint8_t const *ptr2,uint8_t language);
LCD_EXT void DeleteMenuCursor(uint8_t x1,uint8_t y1,uint8_t const *ptr1,uint8_t x2,uint8_t y2,uint8_t const *ptr2,uint8_t num,uint8_t num2,uint8_t language);
LCD_EXT void DisplayMenuCursor(uint8_t x1,uint8_t y1,uint8_t const *ptr1,uint8_t x2,uint8_t y2,uint8_t const *ptr2,uint8_t num,uint8_t num2,uint8_t language);
LCD_EXT void ClearScreen(void);
void ReverseScreen(void);
LCD_EXT void CloseDataCursor(void);
LCD_EXT void DisplayDataCursor2(void);
LCD_EXT void DisplayDataCursor(void);
LCD_EXT void DisplayOneInt(uint8_t ox,uint8_t oy, uint16_t int_value);
LCD_EXT void DisplayOneText2(uint8_t ox,uint8_t oy,uint8_t ascii_code);
LCD_EXT void DisplayHoriLine(uint8_t column,uint8_t lin,uint8_t num);
LCD_EXT void DisplayOneByte(uint8_t ox, uint8_t oy, uint8_t byte1);
LCD_EXT void DisplayGraphicsScreen(void);
LCD_EXT void DisplayLineText(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
LCD_EXT void DisplayOneInt2(uint8_t ox,uint8_t oy, uint16_t int_value);
LCD_EXT void DisplayLongInt(uint8_t ox,uint8_t oy, uint32_t value,uint8_t redixs_point);
LCD_EXT void DisplayOneByte2(uint8_t ox, uint8_t oy, uint8_t byte1);
LCD_EXT void LcdInit(void);
LCD_EXT void ReverseDispNum2(uint8_t ox,uint8_t oy,uint8_t ascii_code);
LCD_EXT void DisplayCount(uint8_t ox, uint8_t oy, uint8_t byte1);
LCD_EXT void DisplayHex(uint8_t ox,uint8_t oy,uint16_t number);
LCD_EXT void ReverseDispOne2(uint8_t ox,uint8_t oy,uint8_t ascii_code);
void Fault_Disp(void);
void KeyRun_Disp(uint32_t Flag);
void IP_Sprintf(uint8_t *buf, uint32_t IPdata);
void IP_Printf(uint8_t x, uint32_t y, uint32_t IPdata, FlagStatus SetFlag, uint32_t cursor);
void HZ12AndChar_Printf(uint8_t x, uint8_t y, const uint8_t *ptr, FlagStatus Flag);
void HZ12AndChar_SignPrintf(uint8_t x, uint8_t y, const uint8_t *ptr, uint32_t SignNUM );
void DisplayNL_LOGO(void);
void DisplayNANRUI_LOGO(void);
void DisplayNANRUI_BMP(void);
void Display_BMP(uint32_t Width, uint32_t Height, const uint8_t* picture);
void DisplayQQ_BMP(void);
void ASCII_Printf(uint8_t x, uint32_t y, uint32_t data, FlagStatus Flag);
void ASCII_SignPrintf(uint8_t x, uint32_t y, uint32_t data, uint32_t SignNUM);
void IntValue_Printf(uint8_t x, uint32_t y, int32_t data, FlagStatus Flag);
void FloatValue_Printf(uint8_t x, uint32_t y, float data, FlagStatus Flag);
void FixLenIToF_Printf(uint32_t x, uint32_t y, int32_t data, uint32_t len, uint32_t dot, FlagStatus Flag, uint32_t cursor);
void FixLenIToF_Sprintf(uint8_t* str, int32_t data, uint32_t len, uint32_t dot);
void DisplayHorizontalLine(uint8_t x,uint8_t y,uint8_t len);
void DisplayVerticalLine(uint8_t x,uint8_t y,uint8_t high, uint8_t value);
void ClearMenuScreen(void);
void ScreenPrintf(uint8_t* ptr);
void Char6_Write(uint8_t x,uint8_t y, uint8_t CharCode, FlagStatus Flag);
void MessageBox(void);
void ClrMessageBox(void);
void ClrMessageBoxContent(void);
void MeunItem_Printf(uint8_t x, uint32_t y, int32_t data, FlagStatus Flag);
void MessageSetBox(const uint8_t *title);
void MessageSetBox_NoClear(const uint8_t *title);
void ClrMessageSetBox(void);
void DeleteMessageSetBox(void);
void ProgramableMessageBox(uint8_t x, uint8_t y, uint8_t size);
void DrawMenuComboBox(uint8_t x, uint8_t y, uint8_t len, uint8_t items);
void DrawRecordBox(uint8_t x, uint8_t y, uint8_t len, uint8_t items);
/* ---------- 硬件初始化函数 ---------- */
void LCD_GPIO_Init(void);
void LCD_Reset(void);
void LCD_InitXRD(void);
void LcdInit(void);
void BackLight_Close(void);
void BackLight_ON(void);
/* ---------- 屏幕控制函数 ---------- */
void ClearScreen(void);
void ReverseScreen(void);
void ClearMenuScreen(void);
void DisplayGraphicsScreen(void);
/* ---------- 字符显示函数 ---------- */
void Char6_Write(uint8_t x, uint8_t y, uint8_t CharCode, FlagStatus Flag);
void Char8_Write(uint8_t x, uint8_t y, uint8_t CharCode, FlagStatus Flag);
void Char12_Write(uint8_t x, uint8_t y, uint8_t CharCode, FlagStatus Flag);
void HZ12_Write(uint8_t x, uint8_t y, const uint8_t *HzCode, FlagStatus Flag);
void HZ12AndChar_Printf(uint8_t x, uint8_t y, const uint8_t *ptr, FlagStatus Flag);
void HZ12AndChar_SignPrintf(uint8_t x, uint8_t y, const uint8_t *ptr, uint32_t SignNUM);
void ASCII_Printf(uint8_t x, uint32_t y, uint32_t data, FlagStatus Flag);
void ASCII_SignPrintf(uint8_t x, uint32_t y, uint32_t data, uint32_t SignNUM);
void ScreenPrintf(uint8_t* ptr);
/* ---------- 数值显示函数 ---------- */
void IntValue_Printf(uint8_t x, uint32_t y, int32_t data, FlagStatus Flag);
void FloatValue_Printf(uint8_t x, uint32_t y, float data, FlagStatus Flag);
void FixLenIntValue_Printf(uint32_t x, uint32_t y, int32_t data, uint32_t len, FlagStatus Flag);
void FixLenIToF_Sprintf(uint8_t* str, int32_t data, uint32_t len, uint32_t dot);
void FixLenIToF_Printf(uint32_t x, uint32_t y, int32_t data, uint32_t len, uint32_t dot, FlagStatus Flag, uint32_t cursor);
void FixLenFloatValue_Printf(uint32_t x, uint32_t y, float data, uint32_t len, uint32_t dot, FlagStatus Flag);
void MeunItem_Printf(uint8_t x, uint32_t y, int32_t data, FlagStatus Flag);
/* ---------- IP 地址显示函数 ---------- */
void IP_Sprintf(uint8_t *buf, uint32_t IPdata);
void IP_Printf(uint8_t x, uint32_t y, uint32_t IPdata, FlagStatus SetFlag, uint32_t cursor);
/* ---------- 图形显示函数 ---------- */
void DisplayOneGraphics(uint8_t column, uint8_t lin, uint16_t hzcode, uint8_t tb_index);
void DisplayNL_LOGO(void);
void DisplayNANRUI_LOGO(void);
void Display_BMP(uint32_t Width, uint32_t Height, const uint8_t* picture);
void DisplayNANRUI_BMP(void);
void DisplayQQ_BMP(void);
void DiaplayHeadGraph(void);
void DrawPoint(uint8_t x, uint8_t y);
/* ---------- 线条绘制函数 ---------- */
void DisplayHorizontalLine(uint8_t x, uint8_t y, uint8_t len);
void DisplayVerticalLine(uint8_t x, uint8_t y, uint8_t high, uint8_t value);
/* ---------- 状态显示函数 ---------- */
void Fault_Disp(void);
void KeyRun_Disp(uint32_t Flag);
/* ============================================================================
* ASCII 字体数据
* ============================================================================ */
/**
* @brief 6x12 点阵 ASCII 字体数据
* @note 包含 95 个 ASCII 字符(空格到波浪号),每个字符 6 列 x 12 行 = 72 位 = 9 字节
* 字符索引0=' ', 1='!', ..., 94='~'
*/
static const uint8_t ASCII6x12[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
@@ -305,6 +304,11 @@ static const uint8_t ASCII6x12[] =
0x40,0xA4,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/
};
/**
* @brief 8x12 点阵 ASCII 字体数据
* @note 包含 95 个 ASCII 字符(空格到波浪号),每个字符 8 列 x 12 行 = 96 位 = 12 字节
* 字符索引0=' ', 1='!', ..., 94='~'
*/
static const uint8_t ASCII8x12[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
@@ -497,6 +501,11 @@ static const uint8_t ASCII8x12[] = {
0x30,0x4C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/
};
/**
* @brief 12x12 点阵 ASCII 字体数据
* @note 包含 95 个 ASCII 字符(空格到波浪号),每个字符 12 列 x 12 行 = 144 位 = 18 字节
* 字符索引0=' ', 1='!', ..., 94='~'
*/
static const uint8_t ASCII12x12[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,