Files
lcd_model/BSP/lcd.h
T
2025-06-18 12:20:53 +08:00

130 lines
4.0 KiB
C

#ifndef __LCD_H
#define __LCD_H
#include "stm32f4xx_hal.h"
#include "stdlib.h"
#define DFT_SCAN_DIR D2U_L2R //默认的扫描方向
//扫描方向定义
#define L2R_U2D 0x00 //从左到右,从上到下(正向)
#define R2L_D2U 0xc0 //从右到左,从下到上(旋转180度)
#define U2D_R2L 0x60 //从上到下,从右到左(旋转90度)
#define D2U_L2R 0xa0 //从下到上,从左到右(旋转270度)
//LCD重要参数集
typedef struct
{
uint16_t width; //LCD 宽度
uint16_t height; //LCD 高度
uint16_t id; //LCD ID
}_lcd_dev;
//LCD参数
extern _lcd_dev lcddev; //管理LCD重要参数
//////////////////////////////////////////////////////////////////////////////////
//-----------------LCD端口定义----------------
#define LCD_LED TIM11->CCR1 //LCD背光 PA5
#define LCD_CS_SET GPIOC->BSRR |= (1<<3U ) //片选端口 PC3
#define LCD_RS_SET GPIOC->BSRR |= (1<<2U ) //数据/命令 PC2
#define LCD_WR_SET GPIOC->BSRR |= (1<<10U) //写数据 PC10
#define LCD_RD_SET GPIOC->BSRR |= (1<<1U ) //读数据 PC1
#define LCD_RST_SET GPIOC->BSRR |= (1<<0U ) //复位 PC0
#define LCD_CS_CLR GPIOC->BSRR |= (1<<(3U + 16U)) //片选端口 PC3
#define LCD_RS_CLR GPIOC->BSRR |= (1<<(2U + 16U)) //数据/命令 PC2
#define LCD_WR_CLR GPIOC->BSRR |= (1<<(10U + 16U)) //写数据 PC10
#define LCD_RD_CLR GPIOC->BSRR |= (1<<(1U + 16U)) //读数据 PC1
#define LCD_RST_CLR GPIOC->BSRR |= (1<<(0U + 16U)) //复位 PC0
#define LCD_DATA_OUT() {GPIOD->MODER=0x55555555U;}
#define LCD_DATA_IN() {GPIOD->MODER=0x00000000U;}
//#define LCD_DATA_IN() {GPIOD->MODER=0x55555555U;}
//#define LCD_DATA_OUT() {GPIOD->MODER=0x00000000U;}
#define DATAOUT(x) GPIOD->ODR=x; //数据输出
#define DATAIN GPIOD->IDR; //数据输入
//LCD地址结构体
typedef struct
{
volatile uint16_t LCD_REG;
volatile uint16_t LCD_RAM;
} LCD_TypeDef;
//////////////////////////////////////////////////////////////////////////////////
//画笔颜色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
//GUI颜色
#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
//以上三色为PANEL的颜色
#define LIGHTGREEN 0X841F //浅绿色
//#define LIGHTGRAY 0XEF5B //浅灰色(PANNEL)
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)
void LCD_WR_REG(uint16_t reg);//写寄存器
void LCD_WR_DATA(uint16_t data);//写数据
uint16_t LCD_RD_DATA(void);//读点
uint16_t LCD_ReadReg(uint16_t LCD_Reg);//读寄存器
void LCD_SetCursor(uint16_t x,uint16_t y);//设置光标位置
void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2);//设置坐标函数
void LCD_DisplayOn(void);//开显示
void LCD_DisplayOff(void);//关显示
uint16_t LCD_ReadPoint(uint16_t x,uint16_t y);//读点函数
void LCD_Clear(uint16_t color);//清屏函数
void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color);//指定区域填充颜色
void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t color);//在指定位置画一个点
void LCD_DrawLine(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2,uint16_t color);//在指定位置画一条线
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,uint16_t color);//在指定位置画一个矩形
void Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r,uint16_t color);//在指定位置画一个圆
uint32_t mypow(uint8_t m,uint8_t n);//求幂
void LCD_ShowPicture(uint16_t x,uint16_t y,uint16_t length,uint16_t width,const uint8_t pic[]);//显示图片
void Set_Dir(uint8_t dir);
void LCD_Init(void); //初始化
#endif