130 lines
4.0 KiB
C
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
|
|
|
|
|
|
|
|
|
|
|