lcd.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #ifndef __LCD_H
  2. #define __LCD_H
  3. #include "interface.h"
  4. #include "stdlib.h"
  5. //////////////////////////////////////////////////////////////////////////////////
  6. //本程序只供学习使用,未经作者许可,不得用于其它任何用途
  7. // ALIENTEK战舰STM32开发板
  8. // 2.4寸/2.8寸/3.5寸/4.3寸 TFT液晶驱动
  9. //支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
  10. // SPFD5408/SSD1289/1505/B505/C505/NT35310/NT35510等
  11. //正点原子@ALIENTEK
  12. //技术论坛:www.openedv.com
  13. //修改日期:2014/2/11
  14. //版本:V2.5
  15. //版权所有,盗版必究。
  16. // Copyright(C) 广州市星翼电子科技有限公司 2009-2019
  17. // All rights reserved
  18. //********************************************************************************
  19. // V1.2修改说明
  20. //支持了SPFD5408的驱动,另外把液晶ID直接打印成HEX格式.方便查看LCD驱动IC.
  21. // V1.3
  22. //加入了快速IO的支持
  23. //修改了背光控制的极性(适用于V1.8及以后的开发板版本)
  24. //对于1.8版本之前(不包括1.8)的液晶模块,请修改LCD_Init函数的LCD_LED=1;为LCD_LED=1;
  25. // V1.4
  26. //修改了LCD_ShowChar函数,使用画点功能画字符。
  27. //加入了横竖屏显示的支持
  28. // V1.5 20110730
  29. // 1,修改了B505液晶读颜色有误的bug.
  30. // 2,修改了快速IO及横竖屏的设置方式.
  31. // V1.6 20111116
  32. // 1,加入对LGDP4535液晶的驱动支持
  33. // V1.7 20120713
  34. // 1,增加LCD_RD_DATA函数
  35. // 2,增加对ILI9341的支持
  36. // 3,增加ILI9325的独立驱动代码
  37. // 4,增加LCD_Scan_Dir函数(慎重使用)
  38. // 6,另外修改了部分原来的函数,以适应9341的操作
  39. // V1.8 20120905
  40. // 1,加入LCD重要参数设置结构体lcddev
  41. // 2,加入LCD_Display_Dir函数,支持在线横竖屏切换
  42. // V1.9 20120911
  43. // 1,新增RM68042驱动(ID:6804),但是6804不支持横屏显示!!原因:改变扫描方式,
  44. //导致6804坐标设置失效,试过很多方法都不行,暂时无解。
  45. // V2.0 20120924
  46. //在不硬件复位的情况下,ILI9341的ID读取会被误读成9300,修改LCD_Init,将无法识别
  47. //的情况(读到ID为9300/非法ID),强制指定驱动IC为ILI9341,执行9341的初始化。
  48. // V2.1 20120930
  49. //修正ILI9325读颜色的bug。
  50. // V2.2 20121007
  51. //修正LCD_Scan_Dir的bug。
  52. // V2.3 20130120
  53. //新增6804支持横屏显示
  54. // V2.4 20131120
  55. // 1,新增NT35310(ID:5310)驱动器的支持
  56. // 2,新增LCD_Set_Window函数,用于设置窗口,对快速填充,比较有用,但是该函数在横屏时,不支持6804.
  57. // V2.5 20140211
  58. // 1,新增NT35510(ID:5510)驱动器的支持
  59. //////////////////////////////////////////////////////////////////////////////////
  60. // LCD重要参数集
  61. typedef struct
  62. {
  63. u16 width; // LCD 宽度
  64. u16 height; // LCD 高度
  65. u16 id; // LCD ID
  66. u8 dir; //横屏还是竖屏控制:0,竖屏;1,横屏。
  67. u16 wramcmd; //开始写gram指令
  68. u16 setxcmd; //设置x坐标指令
  69. u16 setycmd; //设置y坐标指令
  70. } _lcd_dev;
  71. // LCD参数
  72. extern _lcd_dev lcddev; //管理LCD重要参数
  73. // LCD的画笔颜色和背景色
  74. extern u16 POINT_COLOR; //默认红色
  75. extern u16 BACK_COLOR; //背景颜色.默认为白色
  76. //////////////////////////////////////////////////////////////////////////////////
  77. //-----------------LCD端口定义----------------
  78. #define LCD_LED PBout(0) // LCD背光 PB0
  79. // LCD地址结构体
  80. typedef struct
  81. {
  82. u16 LCD_REG;
  83. u16 LCD_RAM;
  84. } LCD_TypeDef;
  85. //使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
  86. //注意设置时STM32内部会右移一位对其! 111110=0X3E
  87. #define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
  88. #define LCD ((LCD_TypeDef *)LCD_BASE)
  89. //////////////////////////////////////////////////////////////////////////////////
  90. //扫描方向定义
  91. #define L2R_U2D 0 //从左到右,从上到下
  92. #define L2R_D2U 1 //从左到右,从下到上
  93. #define R2L_U2D 2 //从右到左,从上到下
  94. #define R2L_D2U 3 //从右到左,从下到上
  95. #define U2D_L2R 4 //从上到下,从左到右
  96. #define U2D_R2L 5 //从上到下,从右到左
  97. #define D2U_L2R 6 //从下到上,从左到右
  98. #define D2U_R2L 7 //从下到上,从右到左
  99. #define DFT_SCAN_DIR L2R_U2D //默认的扫描方向
  100. //画笔颜色
  101. #define WHITE 0xFFFF
  102. #define BLACK 0x0000
  103. #define BLUE 0x001F
  104. #define BRED 0XF81F
  105. #define GRED 0XFFE0
  106. #define GBLUE 0X07FF
  107. #define RED 0xF800
  108. #define MAGENTA 0xF81F
  109. #define GREEN 0x07E0
  110. #define CYAN 0x7FFF
  111. #define YELLOW 0xFFE0
  112. #define BROWN 0XBC40 //棕色
  113. #define BRRED 0XFC07 //棕红色
  114. #define GRAY 0X8430 //灰色
  115. // GUI颜色
  116. #define DARKBLUE 0X01CF //深蓝色
  117. #define LIGHTBLUE 0X7D7C //浅蓝色
  118. #define GRAYBLUE 0X5458 //灰蓝色
  119. //以上三色为PANEL的颜色
  120. #define LIGHTGREEN 0X841F //浅绿色
  121. //#define LIGHTGRAY 0XEF5B //浅灰色(PANNEL)
  122. #define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
  123. #define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
  124. #define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)
  125. void LCD_Init(void); //初始化
  126. void LCD_DisplayOn(void); //开显示
  127. void LCD_DisplayOff(void); //关显示
  128. void LCD_Clear(u16 Color); //清屏
  129. void LCD_SetCursor(u16 Xpos, u16 Ypos); //设置光标
  130. void LCD_DrawPoint(u16 x, u16 y); //画点
  131. void LCD_Fast_DrawPoint(u16 x, u16 y, u16 color); //快速画点
  132. u16 LCD_ReadPoint(u16 x, u16 y); //读点
  133. void Draw_Circle(u16 x0, u16 y0, u8 r); //画圆
  134. void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //画线
  135. void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2); //画矩形
  136. void LCD_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 color); //填充单色
  137. void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color); //填充指定颜色
  138. void LCD_ShowChar(u16 x, u16 y, u8 num, u8 size, u8 mode); //显示一个字符
  139. void LCD_ShowNum(u16 x, u16 y, u32 num, u8 len, u8 size); //显示一个数字
  140. void LCD_ShowxNum(u16 x, u16 y, u32 num, u8 len, u8 size, u8 mode); //显示 数字
  141. void LCD_ShowString(u16 x, u16 y, u16 width, u16 height, u8 size, u8 *p); //显示一个字符串,12/16字体
  142. void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
  143. u16 LCD_ReadReg(u16 LCD_Reg);
  144. void LCD_WriteRAM_Prepare(void);
  145. void LCD_WriteRAM(u16 RGB_Code);
  146. void LCD_Scan_Dir(u8 dir); //设置屏扫描方向
  147. void LCD_Display_Dir(u8 dir); //设置屏幕显示方向
  148. void LCD_Set_Window(u16 sx, u16 sy, u16 width, u16 height); //设置窗口
  149. // 9320/9325 LCD寄存器
  150. #define R0 0x00
  151. #define R1 0x01
  152. #define R2 0x02
  153. #define R3 0x03
  154. #define R4 0x04
  155. #define R5 0x05
  156. #define R6 0x06
  157. #define R7 0x07
  158. #define R8 0x08
  159. #define R9 0x09
  160. #define R10 0x0A
  161. #define R12 0x0C
  162. #define R13 0x0D
  163. #define R14 0x0E
  164. #define R15 0x0F
  165. #define R16 0x10
  166. #define R17 0x11
  167. #define R18 0x12
  168. #define R19 0x13
  169. #define R20 0x14
  170. #define R21 0x15
  171. #define R22 0x16
  172. #define R23 0x17
  173. #define R24 0x18
  174. #define R25 0x19
  175. #define R26 0x1A
  176. #define R27 0x1B
  177. #define R28 0x1C
  178. #define R29 0x1D
  179. #define R30 0x1E
  180. #define R31 0x1F
  181. #define R32 0x20
  182. #define R33 0x21
  183. #define R34 0x22
  184. #define R36 0x24
  185. #define R37 0x25
  186. #define R40 0x28
  187. #define R41 0x29
  188. #define R43 0x2B
  189. #define R45 0x2D
  190. #define R48 0x30
  191. #define R49 0x31
  192. #define R50 0x32
  193. #define R51 0x33
  194. #define R52 0x34
  195. #define R53 0x35
  196. #define R54 0x36
  197. #define R55 0x37
  198. #define R56 0x38
  199. #define R57 0x39
  200. #define R59 0x3B
  201. #define R60 0x3C
  202. #define R61 0x3D
  203. #define R62 0x3E
  204. #define R63 0x3F
  205. #define R64 0x40
  206. #define R65 0x41
  207. #define R66 0x42
  208. #define R67 0x43
  209. #define R68 0x44
  210. #define R69 0x45
  211. #define R70 0x46
  212. #define R71 0x47
  213. #define R72 0x48
  214. #define R73 0x49
  215. #define R74 0x4A
  216. #define R75 0x4B
  217. #define R76 0x4C
  218. #define R77 0x4D
  219. #define R78 0x4E
  220. #define R79 0x4F
  221. #define R80 0x50
  222. #define R81 0x51
  223. #define R82 0x52
  224. #define R83 0x53
  225. #define R96 0x60
  226. #define R97 0x61
  227. #define R106 0x6A
  228. #define R118 0x76
  229. #define R128 0x80
  230. #define R129 0x81
  231. #define R130 0x82
  232. #define R131 0x83
  233. #define R132 0x84
  234. #define R133 0x85
  235. #define R134 0x86
  236. #define R135 0x87
  237. #define R136 0x88
  238. #define R137 0x89
  239. #define R139 0x8B
  240. #define R140 0x8C
  241. #define R141 0x8D
  242. #define R143 0x8F
  243. #define R144 0x90
  244. #define R145 0x91
  245. #define R146 0x92
  246. #define R147 0x93
  247. #define R148 0x94
  248. #define R149 0x95
  249. #define R150 0x96
  250. #define R151 0x97
  251. #define R152 0x98
  252. #define R153 0x99
  253. #define R154 0x9A
  254. #define R157 0x9D
  255. #define R192 0xC0
  256. #define R193 0xC1
  257. #define R229 0xE5
  258. #endif