123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- #ifndef __LCD_H
- #define __LCD_H
- #include "interface.h"
- #include "stdlib.h"
- //////////////////////////////////////////////////////////////////////////////////
- //本程序只供学习使用,未经作者许可,不得用于其它任何用途
- // ALIENTEK战舰STM32开发板
- // 2.4寸/2.8寸/3.5寸/4.3寸 TFT液晶驱动
- //支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
- // SPFD5408/SSD1289/1505/B505/C505/NT35310/NT35510等
- //正点原子@ALIENTEK
- //技术论坛:www.openedv.com
- //修改日期:2014/2/11
- //版本:V2.5
- //版权所有,盗版必究。
- // Copyright(C) 广州市星翼电子科技有限公司 2009-2019
- // All rights reserved
- //********************************************************************************
- // V1.2修改说明
- //支持了SPFD5408的驱动,另外把液晶ID直接打印成HEX格式.方便查看LCD驱动IC.
- // V1.3
- //加入了快速IO的支持
- //修改了背光控制的极性(适用于V1.8及以后的开发板版本)
- //对于1.8版本之前(不包括1.8)的液晶模块,请修改LCD_Init函数的LCD_LED=1;为LCD_LED=1;
- // V1.4
- //修改了LCD_ShowChar函数,使用画点功能画字符。
- //加入了横竖屏显示的支持
- // V1.5 20110730
- // 1,修改了B505液晶读颜色有误的bug.
- // 2,修改了快速IO及横竖屏的设置方式.
- // V1.6 20111116
- // 1,加入对LGDP4535液晶的驱动支持
- // V1.7 20120713
- // 1,增加LCD_RD_DATA函数
- // 2,增加对ILI9341的支持
- // 3,增加ILI9325的独立驱动代码
- // 4,增加LCD_Scan_Dir函数(慎重使用)
- // 6,另外修改了部分原来的函数,以适应9341的操作
- // V1.8 20120905
- // 1,加入LCD重要参数设置结构体lcddev
- // 2,加入LCD_Display_Dir函数,支持在线横竖屏切换
- // V1.9 20120911
- // 1,新增RM68042驱动(ID:6804),但是6804不支持横屏显示!!原因:改变扫描方式,
- //导致6804坐标设置失效,试过很多方法都不行,暂时无解。
- // V2.0 20120924
- //在不硬件复位的情况下,ILI9341的ID读取会被误读成9300,修改LCD_Init,将无法识别
- //的情况(读到ID为9300/非法ID),强制指定驱动IC为ILI9341,执行9341的初始化。
- // V2.1 20120930
- //修正ILI9325读颜色的bug。
- // V2.2 20121007
- //修正LCD_Scan_Dir的bug。
- // V2.3 20130120
- //新增6804支持横屏显示
- // V2.4 20131120
- // 1,新增NT35310(ID:5310)驱动器的支持
- // 2,新增LCD_Set_Window函数,用于设置窗口,对快速填充,比较有用,但是该函数在横屏时,不支持6804.
- // V2.5 20140211
- // 1,新增NT35510(ID:5510)驱动器的支持
- //////////////////////////////////////////////////////////////////////////////////
- // LCD重要参数集
- typedef struct
- {
- u16 width; // LCD 宽度
- u16 height; // LCD 高度
- u16 id; // LCD ID
- u8 dir; //横屏还是竖屏控制:0,竖屏;1,横屏。
- u16 wramcmd; //开始写gram指令
- u16 setxcmd; //设置x坐标指令
- u16 setycmd; //设置y坐标指令
- } _lcd_dev;
- // LCD参数
- extern _lcd_dev lcddev; //管理LCD重要参数
- // LCD的画笔颜色和背景色
- extern u16 POINT_COLOR; //默认红色
- extern u16 BACK_COLOR; //背景颜色.默认为白色
- //////////////////////////////////////////////////////////////////////////////////
- //-----------------LCD端口定义----------------
- #define LCD_LED PBout(0) // LCD背光 PB0
- // LCD地址结构体
- typedef struct
- {
- u16 LCD_REG;
- u16 LCD_RAM;
- } LCD_TypeDef;
- //使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
- //注意设置时STM32内部会右移一位对其! 111110=0X3E
- #define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
- #define LCD ((LCD_TypeDef *)LCD_BASE)
- //////////////////////////////////////////////////////////////////////////////////
- //扫描方向定义
- #define L2R_U2D 0 //从左到右,从上到下
- #define L2R_D2U 1 //从左到右,从下到上
- #define R2L_U2D 2 //从右到左,从上到下
- #define R2L_D2U 3 //从右到左,从下到上
- #define U2D_L2R 4 //从上到下,从左到右
- #define U2D_R2L 5 //从上到下,从右到左
- #define D2U_L2R 6 //从下到上,从左到右
- #define D2U_R2L 7 //从下到上,从右到左
- #define DFT_SCAN_DIR L2R_U2D //默认的扫描方向
- //画笔颜色
- #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_Init(void); //初始化
- void LCD_DisplayOn(void); //开显示
- void LCD_DisplayOff(void); //关显示
- void LCD_Clear(u16 Color); //清屏
- void LCD_SetCursor(u16 Xpos, u16 Ypos); //设置光标
- void LCD_DrawPoint(u16 x, u16 y); //画点
- void LCD_Fast_DrawPoint(u16 x, u16 y, u16 color); //快速画点
- u16 LCD_ReadPoint(u16 x, u16 y); //读点
- void Draw_Circle(u16 x0, u16 y0, u8 r); //画圆
- void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //画线
- void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2); //画矩形
- void LCD_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 color); //填充单色
- void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color); //填充指定颜色
- void LCD_ShowChar(u16 x, u16 y, u8 num, u8 size, u8 mode); //显示一个字符
- void LCD_ShowNum(u16 x, u16 y, u32 num, u8 len, u8 size); //显示一个数字
- void LCD_ShowxNum(u16 x, u16 y, u32 num, u8 len, u8 size, u8 mode); //显示 数字
- void LCD_ShowString(u16 x, u16 y, u16 width, u16 height, u8 size, u8 *p); //显示一个字符串,12/16字体
- void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
- u16 LCD_ReadReg(u16 LCD_Reg);
- void LCD_WriteRAM_Prepare(void);
- void LCD_WriteRAM(u16 RGB_Code);
- void LCD_Scan_Dir(u8 dir); //设置屏扫描方向
- void LCD_Display_Dir(u8 dir); //设置屏幕显示方向
- void LCD_Set_Window(u16 sx, u16 sy, u16 width, u16 height); //设置窗口
- // 9320/9325 LCD寄存器
- #define R0 0x00
- #define R1 0x01
- #define R2 0x02
- #define R3 0x03
- #define R4 0x04
- #define R5 0x05
- #define R6 0x06
- #define R7 0x07
- #define R8 0x08
- #define R9 0x09
- #define R10 0x0A
- #define R12 0x0C
- #define R13 0x0D
- #define R14 0x0E
- #define R15 0x0F
- #define R16 0x10
- #define R17 0x11
- #define R18 0x12
- #define R19 0x13
- #define R20 0x14
- #define R21 0x15
- #define R22 0x16
- #define R23 0x17
- #define R24 0x18
- #define R25 0x19
- #define R26 0x1A
- #define R27 0x1B
- #define R28 0x1C
- #define R29 0x1D
- #define R30 0x1E
- #define R31 0x1F
- #define R32 0x20
- #define R33 0x21
- #define R34 0x22
- #define R36 0x24
- #define R37 0x25
- #define R40 0x28
- #define R41 0x29
- #define R43 0x2B
- #define R45 0x2D
- #define R48 0x30
- #define R49 0x31
- #define R50 0x32
- #define R51 0x33
- #define R52 0x34
- #define R53 0x35
- #define R54 0x36
- #define R55 0x37
- #define R56 0x38
- #define R57 0x39
- #define R59 0x3B
- #define R60 0x3C
- #define R61 0x3D
- #define R62 0x3E
- #define R63 0x3F
- #define R64 0x40
- #define R65 0x41
- #define R66 0x42
- #define R67 0x43
- #define R68 0x44
- #define R69 0x45
- #define R70 0x46
- #define R71 0x47
- #define R72 0x48
- #define R73 0x49
- #define R74 0x4A
- #define R75 0x4B
- #define R76 0x4C
- #define R77 0x4D
- #define R78 0x4E
- #define R79 0x4F
- #define R80 0x50
- #define R81 0x51
- #define R82 0x52
- #define R83 0x53
- #define R96 0x60
- #define R97 0x61
- #define R106 0x6A
- #define R118 0x76
- #define R128 0x80
- #define R129 0x81
- #define R130 0x82
- #define R131 0x83
- #define R132 0x84
- #define R133 0x85
- #define R134 0x86
- #define R135 0x87
- #define R136 0x88
- #define R137 0x89
- #define R139 0x8B
- #define R140 0x8C
- #define R141 0x8D
- #define R143 0x8F
- #define R144 0x90
- #define R145 0x91
- #define R146 0x92
- #define R147 0x93
- #define R148 0x94
- #define R149 0x95
- #define R150 0x96
- #define R151 0x97
- #define R152 0x98
- #define R153 0x99
- #define R154 0x9A
- #define R157 0x9D
- #define R192 0xC0
- #define R193 0xC1
- #define R229 0xE5
- #endif
|