184 lines
6.2 KiB
C
184 lines
6.2 KiB
C
//LCD 库(ILI9431 及字库)
|
||
|
||
#ifndef __LCD_H
|
||
#define __LCD_H
|
||
|
||
#include "sys.h"
|
||
|
||
/**************************************** 屏幕参数 ****************************************/
|
||
//采用横屏
|
||
#define LCD_WIDTH 320
|
||
#define LCD_HEIGHT 240
|
||
#define LCD_CMD_MADCTL_PARAM 0x68 //储存器访问控制命令参数。若更改为竖屏需要修改此参数
|
||
|
||
/*****************************************************************************************/
|
||
|
||
/**************************************** 字库位置 ****************************************/
|
||
#define ADDR_ASCII12 0x00080000
|
||
#define ADDR_ASCII16 0x00080800
|
||
#define ADDR_ASCII24 0x00081200
|
||
#define ADDR_ASCII32 0x00082600
|
||
#define ADDR_ASCII48 0x00084800
|
||
#define ADDR_ASCII64 0x00089200
|
||
|
||
#define ADDR_GBK12 0x00091400
|
||
#define ADDR_GBK16 0x0011dd00
|
||
#define ADDR_GBK24 0x001da000
|
||
#define ADDR_GBK32 0x00380000
|
||
|
||
/***************************************** 位控制 *****************************************/
|
||
//CS 位控制
|
||
#define LCD_CS_Set HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET)
|
||
#define LCD_CS_Clr HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET)
|
||
|
||
//RS 位控制(D/C)
|
||
#define LCD_RS_Set HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET)
|
||
#define LCD_RS_Clr HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET)
|
||
|
||
//BLK 位控制
|
||
#define LCD_BLK_Set HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET)
|
||
#define LCD_BLK_Clr HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)
|
||
|
||
/*****************************************************************************************/
|
||
|
||
/****************************************** 命令 ******************************************/
|
||
//LCD 命令,即 ILI9341 命令
|
||
#define LCD_CMD_NOP 0x00
|
||
#define LCD_CMD_SWRESET 0x01
|
||
#define LCD_CMD_RDDIDIF 0x04
|
||
#define LCD_CMD_RDDST 0x09
|
||
#define LCD_CMD_RDDPM 0x0a
|
||
#define LCD_CMD_RDDMADCTL 0x0b
|
||
#define LCD_CMD_RDDCOLMOD 0x0c
|
||
#define LCD_CMD_RDDIM 0x0d
|
||
#define LCD_CMD_RDDSM 0x0e
|
||
#define LCD_CMD_RDDSDR 0x0f
|
||
#define LCD_CMD_SPLIN 0x10
|
||
#define LCD_CMD_SLPOUT 0x11
|
||
#define LCD_CMD_PTLON 0x12
|
||
#define LCD_CMD_NORON 0x13
|
||
#define LCD_CMD_DINVOFF 0x20
|
||
#define LCD_CMD_DINVON 0x21
|
||
#define LCD_CMD_GAMSET 0x26
|
||
#define LCD_CMD_DISPOFF 0x28
|
||
#define LCD_CMD_DISPON 0x29
|
||
#define LCD_CMD_CASET 0x2a
|
||
#define LCD_CMD_PASET 0x2b
|
||
#define LCD_CMD_RAMWR 0x2c
|
||
#define LCD_CMD_RGBSET 0x2d
|
||
#define LCD_CMD_RAMRD 0x2e
|
||
#define LCD_CMD_PLTAR 0x30
|
||
#define LCD_CMD_VSCRDEF 0x33
|
||
#define LCD_CMD_TEOFF 0x34
|
||
#define LCD_CMD_TEON 0x35
|
||
#define LCD_CMD_MADCTL 0x36
|
||
#define LCD_CMD_VSCRSADD 0x37
|
||
#define LCD_CMD_IDMOFF 0x38
|
||
#define LCD_CMD_IDMON 0x39
|
||
#define LCD_CMD_PIXSET 0x3a
|
||
#define LCD_CMD_WRITE_MEMORY_CONTINUE 0x3c
|
||
#define LCD_CMD_READ_MEMORY_CONTINUE 0x3e
|
||
#define LCD_CMD_SET_TEAR_SCANLINE 0x44
|
||
#define LCD_CMD_GET_SCANLINE 0x45
|
||
#define LCD_CMD_WRDISBV 0x51
|
||
#define LCD_CMD_RDDISBV 0x52
|
||
#define LCD_CMD_WRCTRLD 0x53
|
||
#define LCD_CMD_RDCTRLD 0x54
|
||
#define LCD_CMD_WRCABC 0x55
|
||
#define LCD_CMD_RDCABC 0x56
|
||
#define LCD_CMD_WRCABCMB 0x5e
|
||
#define LCD_CMD_RDCABCMB 0x5f
|
||
#define LCD_CMD_RDID1 0xda
|
||
#define LCD_CMD_RDID2 0xdb
|
||
#define LCD_CMD_RDID3 0xdc
|
||
#define LCD_CMD_IFMODE 0xb0
|
||
#define LCD_CMD_FRMCTR1 0xb1
|
||
#define LCD_CMD_FRMCTR2 0xb2
|
||
#define LCD_CMD_FRMCTR3 0xb3
|
||
#define LCD_CMD_INVTR 0xb4
|
||
#define LCD_CMD_PRCTR 0xb5
|
||
#define LCD_CMD_DISCTRL 0xb6
|
||
#define LCD_CMD_ETMOD 0xb7
|
||
#define LCD_CMD_BACKLIGHTCTRL1 0xb8
|
||
#define LCD_CMD_BACKLIGHTCTRL2 0xb9
|
||
#define LCD_CMD_BACKLIGHTCTRL3 0xba
|
||
#define LCD_CMD_BACKLIGHTCTRL4 0xbb
|
||
#define LCD_CMD_BACKLIGHTCTRL5 0xbc
|
||
#define LCD_CMD_BACKLIGHTCTRL7 0xbe
|
||
#define LCD_CMD_BACKLIGHTCTRL8 0xbf
|
||
#define LCD_CMD_PWCTRL1 0xc0
|
||
#define LCD_CMD_PWCTRL2 0xc1
|
||
#define LCD_CMD_VMCTRL1 0xc5
|
||
#define LCD_CMD_VMCTRL2 0xc7
|
||
#define LCD_CMD_NVMWR 0xd0
|
||
#define LCD_CMD_NVMPKEY 0xd1
|
||
#define LCD_CMD_RDNVM 0xd2
|
||
#define LCD_CMD_RDID4 0xd3
|
||
#define LCD_CMD_PGAMCTRL 0xe0
|
||
#define LCD_CMD_NGAMCTRL 0xe1
|
||
#define LCD_CMD_DGAMCTRL1 0xe2
|
||
#define LCD_CMD_DGAMCTRL2 0xe3
|
||
#define LCD_CMD_IFCTL 0xf6
|
||
#define LCD_CMD_PWCTRLA 0xcb
|
||
#define LCD_CMD_PWCTRLB 0xcf
|
||
#define LCD_CMD_DTCTRLA 0xe8
|
||
#define LCD_CMD_DTCTRLB 0xea
|
||
#define LCD_CMD_PWOSCTRL 0xed
|
||
#define LCD_CMD_EN3G 0xf2
|
||
#define LCD_CMD_PRCRTL 0xf7
|
||
|
||
//字库命令
|
||
#define LCD_FONT_CMD_RDADDR 0x03
|
||
|
||
/*****************************************************************************************/
|
||
|
||
/***************************************** 位切换宏 ***************************************/
|
||
//ILI9431
|
||
#define LCD_Start_Send LCD_CS_Clr //进入 LCD 发送模式(CS 置 0,此时操作 ILI9431)
|
||
#define LCD_Stop_Send LCD_CS_Set //退出 LCD 发送模式(CS 置 1)
|
||
|
||
#define LCD_Cmd_Mode_On LCD_RS_Clr //进入命令模式(RS 置 0)
|
||
#define LCD_Data_Mode_On LCD_RS_Set //进入数据模式(RS 置 1)
|
||
|
||
#define LCD_BLK_On LCD_BLK_Set //开背光
|
||
#define LCD_BLK_Off LCD_BLK_Clr //关背光
|
||
|
||
//字库
|
||
#define LCD_Font_Start_Send LCD_CS_Set //进入 LCD Font 发送模式(CS 置 1,此时操作字库)
|
||
#define LCD_Font_Stop_Send LCD_CS_Clr //退出 LCD Font 发送模式(CS 置 0)
|
||
|
||
/*****************************************************************************************/
|
||
|
||
/***************************************** 命令宏 ****************************************/
|
||
#define LCD_Disp_On LCD_SendCmd(LCD_CMD_DISPON) //开显示
|
||
#define LCD_Disp_Off LCD_SendCmd(LCD_CMD_DISPOFF) //冻结显示。可用于关闭从显存到屏幕的刷新,防止因刷屏速度慢导致波纹出现
|
||
|
||
#define LCD_Reverse_On LCD_SendCmd(LCD_CMD_DINVON) //开全局反色模式
|
||
#define LCD_Reverse_Off LCD_SendCmd(LCD_CMD_DINVOFF) //关全局反色模式
|
||
|
||
#define LCD_RAM_Wr LCD_SendCmd(LCD_CMD_RAMWR) //开始写显存
|
||
#define LCD_RAM_Rd LCD_SendCmd(LCD_CMD_RAMRD) //开始读显存
|
||
|
||
/**************************************** 通讯函数 ****************************************/
|
||
|
||
void LCD_SendCmd(uint8_t cmd);
|
||
void LCD_SendData8Bits(uint8_t data);
|
||
void LCD_SendData16Bits(uint16_t data);
|
||
void LCD_SendData32Bits(uint32_t data);
|
||
void LCD_SendDataBytes(uint8_t *pData, uint32_t Count);
|
||
void LCD_SendCmdData8Bits(uint8_t cmd, uint8_t data);
|
||
void LCD_SendCmdData16Bits(uint8_t cmd, uint16_t data);
|
||
void LCD_SendCmdData32Bits(uint8_t cmd, uint32_t data);
|
||
void LCD_SendCmdDataBytes(uint8_t cmd, uint8_t *pData, uint32_t Count);
|
||
|
||
/*****************************************************************************************/
|
||
|
||
/**************************************** 操作函数 ****************************************/
|
||
|
||
void LCD_Init(void);
|
||
void LCD_SetWin(uint16_t x, uint16_t y, uint16_t width, uint16_t height);
|
||
|
||
void LCD_Font_ReadAddr(uint8_t *pData, uint32_t addr, uint16_t Count);
|
||
|
||
#endif
|