#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