OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6232|回复: 5

LCD屏代码增加个人理解注释

[复制链接]

11

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2017-3-17
在线时间
83 小时
发表于 2022-3-3 11:42:37 | 显示全部楼层 |阅读模式
本帖最后由 乘云十万八千里 于 2022-3-3 11:49 编辑

增加了一些个人的标示以便于理解。
  1. #ifndef __LCD_H
  2. #define __LCD_H               
  3. #include "sys.h"         
  4. #include "stdlib.h"
  5. //////////////////////////////////////////////////////////////////////////////////         
  6. //本程序只供学习使用,未经作者许可,不得用于其它任何用途
  7. //ALIENTEK STM32F407开发板
  8. //2.4寸/2.8寸/3.5寸/4.3寸/7寸 TFT液晶驱动          
  9. //支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
  10. //                  SPFD5408/1505/B505/C505/NT35310/NT35510/SSD1963等                    
  11. //正点原子@ALIENTEK
  12. //技术论坛:www.openedv.com
  13. //创建日期:2010/7/4
  14. //版本:V3.0
  15. //版权所有,盗版必究。
  16. //Copyright(C) 广州市星翼电子科技有限公司 2014-2024
  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. //V2.6 20140504
  60. //1,新增ASCII 24*24字体的支持(更多字体用户可以自行添加)  
  61. //2,修改部分函数参数,以支持MDK -O2优化
  62. //3,针对9341/35310/35510,写时间设置为最快,尽可能的提高速度
  63. //4,去掉了SSD1289的支持,因为1289实在是太慢了,读周期要1us...简直奇葩.不适合F4使用
  64. //5,修正68042及C505等IC的读颜色函数的bug.
  65. //V2.7 20140710
  66. //1,修正LCD_Color_Fill函数的一个bug.
  67. //2,修正LCD_Scan_Dir函数的一个bug.
  68. //V2.8 20140721
  69. //1,解决MDK使用-O2优化时LCD_ReadPoint函数读点失效的问题.
  70. //2,修正LCD_Scan_Dir横屏时设置的扫描方式显示不全的bug.
  71. //V2.9 20141130
  72. //1,新增对SSD1963 LCD的支持.
  73. //2,新增LCD_SSD_BackLightSet函数
  74. //3,取消ILI93XX的Rxx寄存器定义
  75. //V3.0 20150423
  76. //修改SSD1963 LCD屏的驱动参数.
  77. //////////////////////////////////////////////////////////////////////////////////         

  78. //LCD重要参数集
  79. typedef struct  
  80. {                                                                                    
  81.         u16 width;                        //LCD 宽度
  82.         u16 height;                        //LCD 高度
  83.         u16 id;                                //LCD ID
  84.         u8  dir;                        //横屏还是竖屏控制:0,竖屏;1,横屏。       
  85.         u16        wramcmd;                //开始写gram指令
  86.                         //ILI9341命令
  87.                         //---0x36方向控制命令
  88.                         //---0x2A X轴方向坐标设置
  89.                         //---0x2B Y轴方向坐标设置
  90.                         //---0x2C 往GRAM中写入颜色数据16位数,可连续写入
  91.                         //---0x2E        读取GRAM命令
  92.         u16  setxcmd;                //设置x坐标指令
  93.         u16  setycmd;                //设置y坐标指令
  94. }_lcd_dev;           

  95. //LCD参数
  96. extern _lcd_dev lcddev;        //管理LCD重要参数
  97. //LCD的画笔颜色和背景色          
  98. extern u16  POINT_COLOR;//默认红色   
  99. extern u16  BACK_COLOR; //背景颜色.默认为白色


  100. //////////////////////////////////////////////////////////////////////////////////         
  101. //-----------------LCD端口定义----------------
  102. #define        LCD_LED PBout(15)                  //LCD背光                     PB15             
  103. //LCD地址结构体
  104. typedef struct
  105. {
  106.         vu16 LCD_REG;//--LCD写命令
  107.         vu16 LCD_RAM;//--LCD写数据
  108. } LCD_TypeDef;
  109. //使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A6作为数据命令区分线
  110. //注意设置时STM32内部会右移一位对其! 111 1110=0X7E                            
  111. #define LCD_BASE        ((u32)(0x6C000000 | 0x0000007E))
  112. #define LCD             ((LCD_TypeDef *) LCD_BASE)//--给结构体LCD指定16位内存地址0x6c00007e(这个0x6C000000是第4区的地址)
  113. //--得到LCD——REG的地址为0x6c00007e(写命令),LCD结构体变量中是16位的,内存中的地址是每隔一个字节,地址递增1,
  114. //--故第二个变量的地址是第一个变量地址增加2的地址0x6c000080(写数据)。
  115. //////////////////////////////////////////////////////////////////////////////////
  116.          
  117. //扫描方向定义
  118. #define L2R_U2D  0 //从左到右,从上到下
  119. #define L2R_D2U  1 //从左到右,从下到上
  120. #define R2L_U2D  2 //从右到左,从上到下
  121. #define R2L_D2U  3 //从右到左,从下到上

  122. #define U2D_L2R  4 //从上到下,从左到右
  123. #define U2D_R2L  5 //从上到下,从右到左
  124. #define D2U_L2R  6 //从下到上,从左到右
  125. #define D2U_R2L  7 //从下到上,从右到左         

  126. #define DFT_SCAN_DIR  L2R_U2D  //默认的扫描方向

  127. //画笔颜色
  128. #define WHITE                  0xFFFF
  129. #define BLACK                  0x0000          
  130. #define BLUE                          0x001F  
  131. #define BRED             0XF81F
  132. #define GRED                                                   0XFFE0
  133. #define GBLUE                                                  0X07FF
  134. #define RED                    0xF800
  135. #define MAGENTA                0xF81F
  136. #define GREEN                  0x07E0
  137. #define CYAN                   0x7FFF
  138. #define YELLOW                 0xFFE0
  139. #define BROWN                                           0XBC40 //棕色
  140. #define BRRED                                           0XFC07 //棕红色
  141. #define GRAY                                            0X8430 //灰色
  142. //GUI颜色

  143. #define DARKBLUE               0X01CF        //深蓝色
  144. #define LIGHTBLUE               0X7D7C        //浅蓝色  
  145. #define GRAYBLUE                0X5458 //灰蓝色
  146. //以上三色为PANEL的颜色

  147. #define LIGHTGREEN              0X841F //浅绿色
  148. //#define LIGHTGRAY        0XEF5B //浅灰色(PANNEL)
  149. #define LGRAY                          0XC618 //浅灰色(PANNEL),窗体背景色

  150. #define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
  151. #define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)
  152.                                                                                                                                       
  153. void LCD_Init(void);                                                                                                                   //初始化
  154. void LCD_DisplayOn(void);                                                                                                        //开显示
  155. void LCD_DisplayOff(void);                                                                                                        //关显示
  156. void LCD_Clear(u16 Color);                                                                                                         //清屏
  157. void LCD_SetCursor(u16 Xpos, u16 Ypos);                                                                                //设置光标
  158. void LCD_DrawPoint(u16 x,u16 y);                                                                                        //画点
  159. void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color);                                                                //快速画点
  160. u16  LCD_ReadPoint(u16 x,u16 y);                                                                                         //读点
  161. void LCD_Draw_Circle(u16 x0,u16 y0,u8 r);                                                                         //画圆
  162. void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);                                                        //画线
  163. void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);                                                   //画矩形
  164. void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);                                                   //填充单色
  165. void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color);                                //填充指定颜色
  166. void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode);                                                //显示一个字符
  167. void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);                                                  //显示一个数字
  168. void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode);                                //显示 数字
  169. void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p);                //显示一个字符串,12/16字体

  170. void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
  171. u16 LCD_ReadReg(u16 LCD_Reg);
  172. void LCD_WriteRAM_Prepare(void);
  173. void LCD_WriteRAM(u16 RGB_Code);
  174. void LCD_SSD_BackLightSet(u8 pwm);                                                        //SSD1963 背光控制
  175. void LCD_Scan_Dir(u8 dir);                                                                        //设置屏扫描方向
  176. void LCD_Display_Dir(u8 dir);                                                                //设置屏幕显示方向
  177. void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height);        //设置窗口                                                                                                                                                                                                                                                       
  178. //LCD分辨率设置
  179. #define SSD_HOR_RESOLUTION                800                //LCD水平分辨率
  180. #define SSD_VER_RESOLUTION                480                //LCD垂直分辨率
  181. //LCD驱动参数设置
  182. #define SSD_HOR_PULSE_WIDTH                1                //水平脉宽
  183. #define SSD_HOR_BACK_PORCH                46                //水平前廊
  184. #define SSD_HOR_FRONT_PORCH                210                //水平后廊

  185. #define SSD_VER_PULSE_WIDTH                1                //垂直脉宽
  186. #define SSD_VER_BACK_PORCH                23                //垂直前廊
  187. #define SSD_VER_FRONT_PORCH                22                //垂直前廊
  188. //如下几个参数,自动计算
  189. #define SSD_HT        (SSD_HOR_RESOLUTION+SSD_HOR_BACK_PORCH+SSD_HOR_FRONT_PORCH)
  190. #define SSD_HPS        (SSD_HOR_BACK_PORCH)
  191. #define SSD_VT         (SSD_VER_RESOLUTION+SSD_VER_BACK_PORCH+SSD_VER_FRONT_PORCH)
  192. #define SSD_VPS (SSD_VER_BACK_PORCH)

  193. #endif  
  194.          
  195.          



复制代码
  1. #include "lcd.h"
  2. #include "stdlib.h"
  3. #include "font.h"
  4. #include "usart.h"         
  5. #include "delay.h"         
  6. //////////////////////////////////////////////////////////////////////////////////         
  7. //本程序只供学习使用,未经作者许可,不得用于其它任何用途
  8. //ALIENTEK STM32F407开发板
  9. //2.4寸/2.8寸/3.5寸/4.3寸/7寸 TFT液晶驱动          
  10. //支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
  11. //                  SPFD5408/1505/B505/C505/NT35310/NT35510/SSD1963等                    
  12. //正点原子@ALIENTEK
  13. //技术论坛:www.openedv.com
  14. //创建日期:2010/7/4
  15. //版本:V3.0
  16. //版权所有,盗版必究。
  17. //Copyright(C) 广州市星翼电子科技有限公司 2014-2024
  18. //All rights reserved       
  19. //********************************************************************************
  20. //V1.2修改说明
  21. //支持了SPFD5408的驱动,另外把液晶ID直接打印成HEX格式.方便查看LCD驱动IC.
  22. //V1.3
  23. //加入了快速IO的支持
  24. //修改了背光控制的极性(适用于V1.8及以后的开发板版本)
  25. //对于1.8版本之前(不包括1.8)的液晶模块,请修改LCD_Init函数的LCD_LED=1;为LCD_LED=1;
  26. //V1.4
  27. //修改了LCD_ShowChar函数,使用画点功能画字符。
  28. //加入了横竖屏显示的支持
  29. //V1.5 20110730
  30. //1,修改了B505液晶读颜色有误的bug.
  31. //2,修改了快速IO及横竖屏的设置方式.
  32. //V1.6 20111116
  33. //1,加入对LGDP4535液晶的驱动支持
  34. //V1.7 20120713
  35. //1,增加LCD_RD_DATA函数
  36. //2,增加对ILI9341的支持
  37. //3,增加ILI9325的独立驱动代码
  38. //4,增加LCD_Scan_Dir函数(慎重使用)          
  39. //6,另外修改了部分原来的函数,以适应9341的操作
  40. //V1.8 20120905
  41. //1,加入LCD重要参数设置结构体lcddev
  42. //2,加入LCD_Display_Dir函数,支持在线横竖屏切换
  43. //V1.9 20120911
  44. //1,新增RM68042驱动(ID:6804),但是6804不支持横屏显示!!原因:改变扫描方式,
  45. //导致6804坐标设置失效,试过很多方法都不行,暂时无解。
  46. //V2.0 20120924
  47. //在不硬件复位的情况下,ILI9341的ID读取会被误读成9300,修改LCD_Init,将无法识别
  48. //的情况(读到ID为9300/非法ID),强制指定驱动IC为ILI9341,执行9341的初始化。
  49. //V2.1 20120930
  50. //修正ILI9325读颜色的bug。
  51. //V2.2 20121007
  52. //修正LCD_Scan_Dir的bug。
  53. //V2.3 20130120
  54. //新增6804支持横屏显示
  55. //V2.4 20131120
  56. //1,新增NT35310(ID:5310)驱动器的支持
  57. //2,新增LCD_Set_Window函数,用于设置窗口,对快速填充,比较有用,但是该函数在横屏时,不支持6804.
  58. //V2.5 20140211
  59. //1,新增NT35510(ID:5510)驱动器的支持
  60. //V2.6 20140504
  61. //1,新增ASCII 24*24字体的支持(更多字体用户可以自行添加)  
  62. //2,修改部分函数参数,以支持MDK -O2优化
  63. //3,针对9341/35310/35510,写时间设置为最快,尽可能的提高速度
  64. //4,去掉了SSD1289的支持,因为1289实在是太慢了,读周期要1us...简直奇葩.不适合F4使用
  65. //5,修正68042及C505等IC的读颜色函数的bug.
  66. //V2.7 20140710
  67. //1,修正LCD_Color_Fill函数的一个bug.
  68. //2,修正LCD_Scan_Dir函数的一个bug.
  69. //V2.8 20140721
  70. //1,解决MDK使用-O2优化时LCD_ReadPoint函数读点失效的问题.
  71. //2,修正LCD_Scan_Dir横屏时设置的扫描方式显示不全的bug.
  72. //V2.9 20141130
  73. //1,新增对SSD1963 LCD的支持.
  74. //2,新增LCD_SSD_BackLightSet函数
  75. //3,取消ILI93XX的Rxx寄存器定义
  76. //V3.0 20150423
  77. //修改SSD1963 LCD屏的驱动参数.
  78. //////////////////////////////////////////////////////////////////////////////////         

  79. //LCD的画笔颜色和背景色          
  80. u16 POINT_COLOR=0x0000;        //画笔颜色
  81. u16 BACK_COLOR=0xFFFF;  //背景色
  82.   
  83. //管理LCD重要参数
  84. //默认为竖屏
  85. _lcd_dev lcddev;
  86.          
  87. //写寄存器函数
  88. //regval:寄存器值
  89. void LCD_WR_REG(vu16 regval)
  90. {   
  91.         regval=regval;                //使用-O2优化的时候,必须插入的延时
  92.         LCD->LCD_REG=regval;//写入要写的寄存器序号         
  93. }

  94. //写LCD数据
  95. //data:要写入的值
  96. void LCD_WR_DATA(vu16 data)
  97. {          
  98.         data=data;                        //使用-O2优化的时候,必须插入的延时
  99.         LCD->LCD_RAM=data;                 
  100. }

  101. //读LCD数据
  102. //返回值:读到的值
  103. u16 LCD_RD_DATA(void)
  104. {
  105.         vu16 ram;                        //防止被优化
  106.         ram=LCD->LCD_RAM;       
  107.         return ram;         
  108. }                                          

  109. //写寄存器
  110. //LCD_Reg:寄存器地址
  111. //LCD_RegValue:要写入的数据
  112. void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
  113. {       
  114.         LCD->LCD_REG = LCD_Reg;                //写入要写的寄存器序号         
  115.         LCD->LCD_RAM = LCD_RegValue;//写入数据                             
  116. }          

  117. //读寄存器
  118. //LCD_Reg:寄存器地址
  119. //返回值:读到的数据
  120. u16 LCD_ReadReg(u16 LCD_Reg)
  121. {                                                                                  
  122.         LCD_WR_REG(LCD_Reg);                //写入要读的寄存器序号
  123.         delay_us(5);                  
  124.         return LCD_RD_DATA();                //返回读到的值
  125. }   

  126. //开始写GRAM---        写命令
  127. void LCD_WriteRAM_Prepare(void)
  128. {
  129.         LCD->LCD_REG=lcddev.wramcmd;          
  130. }         

  131. //LCD写GRAM
  132. //RGB_Code:颜色值
  133. void LCD_WriteRAM(u16 RGB_Code)
  134. {                                                            
  135.         LCD->LCD_RAM = RGB_Code;//写十六位GRAM
  136. }

  137. //从ILI93xx读出的数据为GBR格式,而我们写入的时候为RGB格式。
  138. //通过该函数转换
  139. //c:GBR格式的颜色值
  140. //返回值:RGB格式的颜色值
  141. u16 LCD_BGR2RGB(u16 c)
  142. {
  143.         u16  r,g,b,rgb;   
  144.         b=(c>>0)&0x1f;
  145.         g=(c>>5)&0x3f;
  146.         r=(c>>11)&0x1f;         
  147.         rgb=(b<<11)+(g<<5)+(r<<0);                 
  148.         return(rgb);
  149. }

  150. //当mdk -O1时间优化时需要设置
  151. //延时i
  152. void opt_delay(u8 i)
  153. {
  154.         while(i--);
  155. }

  156. //读取个某点的颜色值         
  157. //x,y:坐标
  158. //返回值:此点的颜色
  159. u16 LCD_ReadPoint(u16 x,u16 y)
  160. {
  161.         u16 r=0,g=0,b=0;
  162.         if(x>=lcddev.width||y>=lcddev.height)return 0;        //超过了范围,直接返回                  
  163.         LCD_SetCursor(x,y);            
  164.         if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X2E);//9341/6804/3510/1963 发送读GRAM指令
  165.         //---0x2E是读取GRAM命令
  166.         else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00);        //5510 发送读GRAM指令
  167.         else LCD_WR_REG(0X22);                                               //其他IC发送读GRAM指令
  168.         if(lcddev.id==0X9320)opt_delay(2);                                //FOR 9320,延时2us            
  169.         r=LCD_RD_DATA();                                                                //dummy Read        ---ILI9341读到的第一个16位数是无效字节   
  170.         if(lcddev.id==0X1963)return r;                                        //1963直接读就可以
  171.         opt_delay(2);          
  172.         r=LCD_RD_DATA();                                                                    //实际坐标颜色---ILI9341读到的第二个16位数的[7:2]是当前点的绿色[15:11]是当前点的红色
  173.         if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)                //9341/NT35310/NT35510要分2次读出
  174.         {
  175.                 opt_delay(2);          
  176.                 b=LCD_RD_DATA(); //---ILI9341读到的第三个16位数的[15:11]是当前点的蓝色
  177.                 g=r&0XFF;                //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
  178.                 g<<=8;
  179.         }
  180.         if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0XB505||lcddev.id==0XC505)return r;        //这几种IC直接返回颜色值
  181.         else if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//ILI9341/NT35310/NT35510需要公式转换一下
  182.         //---得到返回值16位颜色R[15:11]G[10:5]B[4:0]
  183.         else return LCD_BGR2RGB(r);                                                //其他IC
  184. }

  185. //LCD开启显示
  186. void LCD_DisplayOn(void)
  187. {                                          
  188.         if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X29);        //开启显示
  189.         else if(lcddev.id==0X5510)LCD_WR_REG(0X2900);        //开启显示
  190.         else LCD_WriteReg(0X07,0x0173);                                          //开启显示
  191. }         

  192. //LCD关闭显示
  193. void LCD_DisplayOff(void)
  194. {          
  195.         if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X28);        //关闭显示
  196.         else if(lcddev.id==0X5510)LCD_WR_REG(0X2800);        //关闭显示
  197.         else LCD_WriteReg(0X07,0x0);//关闭显示
  198. }   

  199. //设置光标位置
  200. //Xpos:横坐标
  201. //Ypos:纵坐标
  202. void LCD_SetCursor(u16 Xpos, u16 Ypos)
  203. {         
  204.         if(lcddev.id==0X9341||lcddev.id==0X5310)
  205.         {                    
  206.                 LCD_WR_REG(lcddev.setxcmd);
  207.                 LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);//---设置X轴起始坐标SC和结束坐标EC                          
  208.                 LCD_WR_REG(lcddev.setycmd);
  209.                 LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);//---设置Y轴起始坐标SP和结束坐标EP                         
  210.         }else if(lcddev.id==0X6804)
  211.         {
  212.                 if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//横屏时处理
  213.                 LCD_WR_REG(lcddev.setxcmd);
  214.                 LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);
  215.                 LCD_WR_REG(lcddev.setycmd);
  216.                 LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);
  217.         }else if(lcddev.id==0X1963)
  218.         {                                          
  219.                 if(lcddev.dir==0)//x坐标需要变换
  220.                 {
  221.                         Xpos=lcddev.width-1-Xpos;
  222.                         LCD_WR_REG(lcddev.setxcmd);
  223.                         LCD_WR_DATA(0);LCD_WR_DATA(0);                
  224.                         LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                          
  225.                 }else
  226.                 {
  227.                         LCD_WR_REG(lcddev.setxcmd);
  228.                         LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                
  229.                         LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);                                                 
  230.                 }       
  231.                 LCD_WR_REG(lcddev.setycmd);
  232.                 LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);                
  233.                 LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);                                         
  234.                
  235.         }else if(lcddev.id==0X5510)
  236.         {
  237.                 LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(Xpos>>8);                
  238.                 LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(Xpos&0XFF);                         
  239.                 LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(Ypos>>8);                 
  240.                 LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(Ypos&0XFF);                       
  241.         }else
  242.         {
  243.                 if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//横屏其实就是调转x,y坐标
  244.                 LCD_WriteReg(lcddev.setxcmd, Xpos);
  245.                 LCD_WriteReg(lcddev.setycmd, Ypos);
  246.         }         
  247. }                  
  248. //设置LCD的自动扫描方向
  249. //注意:其他函数可能会受到此函数设置的影响(尤其是9341/6804这两个奇葩),
  250. //所以,一般设置为L2R_U2D即可,如果设置为其他扫描方式,可能导致显示不正常.
  251. //dir:0~7,代表8个方向(具体定义见lcd.h)
  252. //9320/9325/9328/4531/4535/1505/b505/5408/9341/5310/5510/1963等IC已经实际测试                     
  253. void LCD_Scan_Dir(u8 dir)
  254. {
  255.         u16 regval=0;
  256.         u16 dirreg=0;
  257.         u16 temp;  
  258.         if((lcddev.dir==1&&lcddev.id!=0X6804&&lcddev.id!=0X1963)||(lcddev.dir==0&&lcddev.id==0X1963))//横屏时,对6804和1963不改变扫描方向!竖屏时1963改变方向
  259.         {                          
  260.                 switch(dir)//方向转换
  261.                 {
  262.                         case 0:dir=6;break;
  263.                         case 1:dir=7;break;
  264.                         case 2:dir=4;break;
  265.                         case 3:dir=5;break;
  266.                         case 4:dir=1;break;
  267.                         case 5:dir=0;break;
  268.                         case 6:dir=3;break;
  269.                         case 7:dir=2;break;             
  270.                 }
  271.         }
  272.         if(lcddev.id==0x9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963)//9341/6804/5310/5510/1963,特殊处理
  273.         {
  274.                 switch(dir)
  275.                 {
  276.                         case L2R_U2D://从左到右,从上到下
  277.                                 regval|=(0<<7)|(0<<6)|(0<<5); //---0X0000
  278.                                 break;
  279.                         case L2R_D2U://从左到右,从下到上
  280.                                 regval|=(1<<7)|(0<<6)|(0<<5); //---0X0080
  281.                                 break;
  282.                         case R2L_U2D://从右到左,从上到下
  283.                                 regval|=(0<<7)|(1<<6)|(0<<5);
  284.                                 break;
  285.                         case R2L_D2U://从右到左,从下到上
  286.                                 regval|=(1<<7)|(1<<6)|(0<<5);
  287.                                 break;         
  288.                         case U2D_L2R://从上到下,从左到右
  289.                                 regval|=(0<<7)|(0<<6)|(1<<5);
  290.                                 break;
  291.                         case U2D_R2L://从上到下,从右到左
  292.                                 regval|=(0<<7)|(1<<6)|(1<<5);
  293.                                 break;
  294.                         case D2U_L2R://从下到上,从左到右
  295.                                 regval|=(1<<7)|(0<<6)|(1<<5);
  296.                                 break;
  297.                         case D2U_R2L://从下到上,从右到左
  298.                                 regval|=(1<<7)|(1<<6)|(1<<5);
  299.                                 break;         
  300.                 }
  301.                 if(lcddev.id==0X5510)dirreg=0X3600;//---写入扫描方向的命令
  302.                 else dirreg=0X36;                                                                         //---写入扫描方向的命令
  303.                 if((lcddev.id!=0X5310)&&(lcddev.id!=0X5510)&&(lcddev.id!=0X1963))regval|=0X08;//5310/5510/1963不需要BGR   
  304.                 if(lcddev.id==0X6804)regval|=0x02;//6804的BIT6和9341的反了          
  305.                 LCD_WriteReg(dirreg,regval);//---配置扫描方式
  306.                 if(lcddev.id!=0X1963)//1963不做坐标处理
  307.                 {
  308.                         if(regval&0X20)
  309.                         {
  310.                                 if(lcddev.width<lcddev.height)//交换X,Y
  311.                                 {
  312.                                         temp=lcddev.width;
  313.                                         lcddev.width=lcddev.height;
  314.                                         lcddev.height=temp;
  315.                                 }
  316.                         }else  
  317.                         {
  318.                                 if(lcddev.width>lcddev.height)//交换X,Y
  319.                                 {
  320.                                         temp=lcddev.width;
  321.                                         lcddev.width=lcddev.height;
  322.                                         lcddev.height=temp;
  323.                                 }
  324.                         }  
  325.                 }
  326.                 if(lcddev.id==0X5510)
  327.                 {
  328.                         LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(0);
  329.                         LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(0);
  330.                         LCD_WR_REG(lcddev.setxcmd+2);LCD_WR_DATA((lcddev.width-1)>>8);
  331.                         LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA((lcddev.width-1)&0XFF);
  332.                         LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(0);
  333.                         LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(0);
  334.                         LCD_WR_REG(lcddev.setycmd+2);LCD_WR_DATA((lcddev.height-1)>>8);
  335.                         LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA((lcddev.height-1)&0XFF);
  336.                 }else
  337.                 {
  338.                         LCD_WR_REG(lcddev.setxcmd); //---写X轴坐标命令0x2A
  339.                         LCD_WR_DATA(0);LCD_WR_DATA(0);//---配置X轴坐标的SC参数
  340.                         LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);//---配置X轴坐标的EC参数
  341.                         LCD_WR_REG(lcddev.setycmd); //---写Y轴坐标命令0x2B
  342.                         LCD_WR_DATA(0);LCD_WR_DATA(0);//---配置X轴坐标的SP参数
  343.                         LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);//---配置X轴坐标的EP参数
  344.                 }
  345.           }else
  346.         {
  347.                 switch(dir)
  348.                 {
  349.                         case L2R_U2D://从左到右,从上到下
  350.                                 regval|=(1<<5)|(1<<4)|(0<<3);
  351.                                 break;
  352.                         case L2R_D2U://从左到右,从下到上
  353.                                 regval|=(0<<5)|(1<<4)|(0<<3);
  354.                                 break;
  355.                         case R2L_U2D://从右到左,从上到下
  356.                                 regval|=(1<<5)|(0<<4)|(0<<3);
  357.                                 break;
  358.                         case R2L_D2U://从右到左,从下到上
  359.                                 regval|=(0<<5)|(0<<4)|(0<<3);
  360.                                 break;         
  361.                         case U2D_L2R://从上到下,从左到右
  362.                                 regval|=(1<<5)|(1<<4)|(1<<3);
  363.                                 break;
  364.                         case U2D_R2L://从上到下,从右到左
  365.                                 regval|=(1<<5)|(0<<4)|(1<<3);
  366.                                 break;
  367.                         case D2U_L2R://从下到上,从左到右
  368.                                 regval|=(0<<5)|(1<<4)|(1<<3);
  369.                                 break;
  370.                         case D2U_R2L://从下到上,从右到左
  371.                                 regval|=(0<<5)|(0<<4)|(1<<3);
  372.                                 break;         
  373.                 }
  374.                 dirreg=0X03;
  375.                 regval|=1<<12;
  376.                 LCD_WriteReg(dirreg,regval);
  377.         }
  378. }     
  379. //画点
  380. //x,y:坐标
  381. //POINT_COLOR:此点的颜色
  382. void LCD_DrawPoint(u16 x,u16 y)
  383. {
  384.         LCD_SetCursor(x,y);                //设置光标位置
  385.         LCD_WriteRAM_Prepare();        //开始写入GRAM
  386.         LCD->LCD_RAM=POINT_COLOR;
  387. }
  388. //快速画点
  389. //x,y:坐标
  390. //color:颜色
  391. void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color)
  392. {          
  393.         if(lcddev.id==0X9341||lcddev.id==0X5310)
  394.         {
  395.                 LCD_WR_REG(lcddev.setxcmd);
  396.                 LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                           
  397.                 LCD_WR_REG(lcddev.setycmd);
  398.                 LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                           
  399.         }else if(lcddev.id==0X5510)
  400.         {
  401.                 LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(x>>8);  
  402.                 LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(x&0XFF);          
  403.                 LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(y>>8);  
  404.                 LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(y&0XFF);
  405.         }else if(lcddev.id==0X1963)
  406.         {
  407.                 if(lcddev.dir==0)x=lcddev.width-1-x;
  408.                 LCD_WR_REG(lcddev.setxcmd);
  409.                 LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                
  410.                 LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                
  411.                 LCD_WR_REG(lcddev.setycmd);
  412.                 LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                
  413.                 LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                
  414.         }else if(lcddev.id==0X6804)
  415.         {                    
  416.                 if(lcddev.dir==1)x=lcddev.width-1-x;//横屏时处理
  417.                 LCD_WR_REG(lcddev.setxcmd);
  418.                 LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                         
  419.                 LCD_WR_REG(lcddev.setycmd);
  420.                 LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                
  421.         }else
  422.         {
  423.                 if(lcddev.dir==1)x=lcddev.width-1-x;//横屏其实就是调转x,y坐标
  424.                 LCD_WriteReg(lcddev.setxcmd,x);
  425.                 LCD_WriteReg(lcddev.setycmd,y);
  426.         }                         
  427.         LCD->LCD_REG=lcddev.wramcmd;
  428.         LCD->LCD_RAM=color;
  429. }         
  430. //SSD1963 背光设置
  431. //pwm:背光等级,0~100.越大越亮.
  432. void LCD_SSD_BackLightSet(u8 pwm)
  433. {       
  434.         LCD_WR_REG(0xBE);        //配置PWM输出
  435.         LCD_WR_DATA(0x05);        //1设置PWM频率
  436.         LCD_WR_DATA(pwm*2.55);//2设置PWM占空比
  437.         LCD_WR_DATA(0x01);        //3设置C
  438.         LCD_WR_DATA(0xFF);        //4设置D
  439.         LCD_WR_DATA(0x00);        //5设置E
  440.         LCD_WR_DATA(0x00);        //6设置F
  441. }

  442. //设置LCD显示方向
  443. //dir:0,竖屏;1,横屏
  444. void LCD_Display_Dir(u8 dir)
  445. {
  446.         if(dir==0)                        //竖屏
  447.         {
  448.                 lcddev.dir=0;        //竖屏
  449.                 lcddev.width=240;
  450.                 lcddev.height=320;
  451.                 if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310)
  452.                 {
  453.                         lcddev.wramcmd=0X2C;//---往LCD中写入颜色
  454.                          lcddev.setxcmd=0X2A;//---X轴方向坐标设置
  455.                         lcddev.setycmd=0X2B;//---Y轴方向坐标设置
  456.                         if(lcddev.id==0X6804||lcddev.id==0X5310)
  457.                         {
  458.                                 lcddev.width=320;
  459.                                 lcddev.height=480;
  460.                         }
  461.                 }else if(lcddev.id==0x5510)
  462.                 {
  463.                         lcddev.wramcmd=0X2C00;
  464.                          lcddev.setxcmd=0X2A00;
  465.                         lcddev.setycmd=0X2B00;
  466.                         lcddev.width=480;
  467.                         lcddev.height=800;
  468.                 }else if(lcddev.id==0X1963)
  469.                 {
  470.                         lcddev.wramcmd=0X2C;        //设置写入GRAM的指令
  471.                         lcddev.setxcmd=0X2B;        //设置写X坐标指令
  472.                         lcddev.setycmd=0X2A;        //设置写Y坐标指令
  473.                         lcddev.width=480;                //设置宽度480
  474.                         lcddev.height=800;                //设置高度800  
  475.                 }else
  476.                 {
  477.                         lcddev.wramcmd=0X22;
  478.                          lcddev.setxcmd=0X20;
  479.                         lcddev.setycmd=0X21;  
  480.                 }
  481.         }else                                 //横屏
  482.         {                                         
  483.                 lcddev.dir=1;        //横屏
  484.                 lcddev.width=320;
  485.                 lcddev.height=240;
  486.                 if(lcddev.id==0X9341||lcddev.id==0X5310)
  487.                 {
  488.                         lcddev.wramcmd=0X2C;
  489.                          lcddev.setxcmd=0X2A;
  490.                         lcddev.setycmd=0X2B;           
  491.                 }else if(lcddev.id==0X6804)         
  492.                 {
  493.                         lcddev.wramcmd=0X2C;
  494.                          lcddev.setxcmd=0X2B;
  495.                         lcddev.setycmd=0X2A;
  496.                 }else if(lcddev.id==0x5510)
  497.                 {
  498.                         lcddev.wramcmd=0X2C00;
  499.                          lcddev.setxcmd=0X2A00;
  500.                         lcddev.setycmd=0X2B00;
  501.                         lcddev.width=800;
  502.                         lcddev.height=480;
  503.                 }else if(lcddev.id==0X1963)
  504.                 {
  505.                         lcddev.wramcmd=0X2C;        //设置写入GRAM的指令
  506.                         lcddev.setxcmd=0X2A;        //设置写X坐标指令
  507.                         lcddev.setycmd=0X2B;        //设置写Y坐标指令
  508.                         lcddev.width=800;                //设置宽度800
  509.                         lcddev.height=480;                //设置高度480  
  510.                 }else
  511.                 {
  512.                         lcddev.wramcmd=0X22;
  513.                          lcddev.setxcmd=0X21;
  514.                         lcddev.setycmd=0X20;  
  515.                 }
  516.                 if(lcddev.id==0X6804||lcddev.id==0X5310)
  517.                 {          
  518.                         lcddev.width=480;
  519.                         lcddev.height=320;                        
  520.                 }
  521.         }
  522.         LCD_Scan_Dir(DFT_SCAN_DIR);        //默认扫描方向
  523. }         
  524. //设置窗口,并自动设置画点坐标到窗口左上角(sx,sy).
  525. //sx,sy:窗口起始坐标(左上角)
  526. //width,height:窗口宽度和高度,必须大于0!!
  527. //窗体大小:width*height.
  528. void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height)
  529. {   
  530.         u8 hsareg,heareg,vsareg,veareg;
  531.         u16 hsaval,heaval,vsaval,veaval;
  532.         u16 twidth,theight;
  533.         twidth=sx+width-1;
  534.         theight=sy+height-1;
  535.         if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X6804||(lcddev.dir==1&&lcddev.id==0X1963))
  536.         {
  537.                 LCD_WR_REG(lcddev.setxcmd);
  538.                 LCD_WR_DATA(sx>>8);
  539.                 LCD_WR_DATA(sx&0XFF);         
  540.                 LCD_WR_DATA(twidth>>8);
  541.                 LCD_WR_DATA(twidth&0XFF);  
  542.                 LCD_WR_REG(lcddev.setycmd);
  543.                 LCD_WR_DATA(sy>>8);
  544.                 LCD_WR_DATA(sy&0XFF);
  545.                 LCD_WR_DATA(theight>>8);
  546.                 LCD_WR_DATA(theight&0XFF);
  547.         }else if(lcddev.id==0X1963)//1963竖屏特殊处理
  548.         {
  549.                 sx=lcddev.width-width-sx;
  550.                 height=sy+height-1;
  551.                 LCD_WR_REG(lcddev.setxcmd);
  552.                 LCD_WR_DATA(sx>>8);
  553.                 LCD_WR_DATA(sx&0XFF);         
  554.                 LCD_WR_DATA((sx+width-1)>>8);
  555.                 LCD_WR_DATA((sx+width-1)&0XFF);  
  556.                 LCD_WR_REG(lcddev.setycmd);
  557.                 LCD_WR_DATA(sy>>8);
  558.                 LCD_WR_DATA(sy&0XFF);
  559.                 LCD_WR_DATA(height>>8);
  560.                 LCD_WR_DATA(height&0XFF);                
  561.         }else if(lcddev.id==0X5510)
  562.         {
  563.                 LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(sx>>8);  
  564.                 LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(sx&0XFF);          
  565.                 LCD_WR_REG(lcddev.setxcmd+2);LCD_WR_DATA(twidth>>8);   
  566.                 LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA(twidth&0XFF);   
  567.                 LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(sy>>8);   
  568.                 LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(sy&0XFF);  
  569.                 LCD_WR_REG(lcddev.setycmd+2);LCD_WR_DATA(theight>>8);   
  570.                 LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA(theight&0XFF);  
  571.         }else        //其他驱动IC
  572.         {
  573.                 if(lcddev.dir==1)//横屏
  574.                 {
  575.                         //窗口值
  576.                         hsaval=sy;                               
  577.                         heaval=theight;
  578.                         vsaval=lcddev.width-twidth-1;
  579.                         veaval=lcddev.width-sx-1;                               
  580.                 }else
  581.                 {
  582.                         hsaval=sx;                               
  583.                         heaval=twidth;
  584.                         vsaval=sy;
  585.                         veaval=theight;
  586.                 }
  587.                 hsareg=0X50;heareg=0X51;//水平方向窗口寄存器
  588.                 vsareg=0X52;veareg=0X53;//垂直方向窗口寄存器                                                                     
  589.                 //设置寄存器值
  590.                 LCD_WriteReg(hsareg,hsaval);
  591.                 LCD_WriteReg(heareg,heaval);
  592.                 LCD_WriteReg(vsareg,vsaval);
  593.                 LCD_WriteReg(veareg,veaval);               
  594.                 LCD_SetCursor(sx,sy);        //设置光标位置
  595.         }
  596. }
  597. //初始化lcd
  598. //该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
  599. //在其他型号的驱动芯片上没有测试!
  600. void LCD_Init(void)
  601. {        
  602.         vu32 i=0;
  603.        
  604.   GPIO_InitTypeDef  GPIO_InitStructure;
  605.         FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  606.   FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
  607.         FSMC_NORSRAMTimingInitTypeDef  writeTiming;
  608.        
  609.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能PB,PD,PE,PF,PG时钟  
  610.   RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟  
  611.        

  612.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PB15 推挽输出,控制背光
  613.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  614.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  615.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
  616.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  617.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 //PB15 推挽输出,控制背光
  618.        
  619.   GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);//PD0,1,4,5,8,9,10,14,15 AF OUT ---1100 0111 0011 0011
  620.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  621.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  622.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  623.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  624.   GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化  
  625.        
  626.   GPIO_InitStructure.GPIO_Pin = (0X1FF<<7);//PE7~15,AF OUT
  627.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  628.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  629.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  630.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  631.   GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化  

  632.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6
  633.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  634.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  635.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  636.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  637.   GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化  

  638.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6
  639.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  640.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  641.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  642.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  643.   GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化

  644.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);//PD0,AF12
  645.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);//PD1,AF12
  646.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);
  647.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);
  648.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);
  649.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
  650.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);
  651.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);
  652.   GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//PD15,AF12

  653.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);//PE7,AF12
  654.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);
  655.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);
  656.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);
  657.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);
  658.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);
  659.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);
  660.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);
  661.   GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);//PE15,AF12

  662.   GPIO_PinAFConfig(GPIOF,GPIO_PinSource12,GPIO_AF_FSMC);//PF12,AF12
  663.   GPIO_PinAFConfig(GPIOG,GPIO_PinSource12,GPIO_AF_FSMC);

  664.         //---设置FSMC读时序
  665.   readWriteTiming.FSMC_AddressSetupTime = 0XF;         //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*16=96ns       
  666.   readWriteTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(ADDHLD)模式A未用到       
  667.   readWriteTiming.FSMC_DataSetupTime = 60;                        //数据保存时间为60个HCLK        =6*60=360ns
  668.   readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;//---NEx电平转换时间
  669.   readWriteTiming.FSMC_CLKDivision = 0x00;//---时钟分频器,默认0x00
  670.   readWriteTiming.FSMC_DataLatency = 0x00;//---同步突发数据延时,没有用到
  671.   readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A
  672.    
  673.         //---设置FSMC写时序
  674.         writeTiming.FSMC_AddressSetupTime =9;              //地址建立时间(ADDSET)为9个HCLK =54ns
  675.   writeTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(A               
  676.   writeTiming.FSMC_DataSetupTime = 8;                 //数据保存时间为6ns*9个HCLK=54ns
  677.   writeTiming.FSMC_BusTurnAroundDuration = 0x00;
  678.   writeTiming.FSMC_CLKDivision = 0x00;
  679.   writeTiming.FSMC_DataLatency = 0x00;
  680.   writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A


  681.   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。---BTCR[6]对应 FSMC_BCR4,BTCR[7]对应 FSMC_BTR4
  682.   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址 ---对应寄存器FSMC_BCR4的地址数据复用位第1位MUXEN=0(默认值)
  683.   FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; ---对应寄存器FSMC_BCR4的存储器类型选择位第2/3位MTYP:00(默认值)
  684.   FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//---对应寄存器FSMC_BCR4的存储器数据总线宽度选择位第4/5位MWID:01(默认值)  
  685.   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;//---对应寄存器FSMC_BCR4的突发使能位第8位BURSTEN:0(默认值)只对同步突发存储器有效
  686.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;//---等待信号极性位WAITPOL,默认为0,仅在突发模式下访问存储器时有效
  687.         FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
  688.   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
  689.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
  690.   FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;        //  存储器写使能
  691.   FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
  692.   FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
  693.   FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  694.   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
  695.   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

  696.   FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

  697.   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  // 使能BANK1 ---使能第4区,只有BANK1支持SRAM

  698.                
  699.         delay_ms(50); // delay 50 ms
  700.         LCD_WriteReg(0x0000,0x0001);//---发送一个空指令
  701.         delay_ms(50); // delay 50 ms
  702.         lcddev.id = LCD_ReadReg(0x0000);  //-----尝试读取一个ID  
  703.         if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)//读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300
  704.         {       
  705.                 //尝试9341 ID的读取               
  706.                 LCD_WR_REG(0XD3);        //---往地址0x6C00007E写入读取LCD驱动命令0xD3
  707.                 //--如果驱动芯片是ILI9341则读取4个字节的数据
  708.                 lcddev.id=LCD_RD_DATA();        //dummy read ---读取第一个返回值为无效值       
  709.                 lcddev.id=LCD_RD_DATA();        //读到0X00   ---读取第二个返回值为固定值0x00
  710.                   lcddev.id=LCD_RD_DATA();           //读取93 ---读取第三个返回值为93                                                          
  711.                 lcddev.id<<=8;
  712.                 lcddev.id|=LCD_RD_DATA();          //读取41          ---读取第四个返回值为0x41                            
  713.                 if(lcddev.id!=0X9341)                //非9341,尝试是不是6804
  714.                 {       
  715.                         LCD_WR_REG(0XBF);                                  
  716.                         lcddev.id=LCD_RD_DATA();         //dummy read          
  717.                          lcddev.id=LCD_RD_DATA();           //读回0X01                          
  718.                          lcddev.id=LCD_RD_DATA();         //读回0XD0                                  
  719.                           lcddev.id=LCD_RD_DATA();        //这里读回0X68
  720.                         lcddev.id<<=8;
  721.                           lcddev.id|=LCD_RD_DATA();        //这里读回0X04          
  722.                         if(lcddev.id!=0X6804)                //也不是6804,尝试看看是不是NT35310
  723.                         {
  724.                                 LCD_WR_REG(0XD4);                                  
  725.                                 lcddev.id=LCD_RD_DATA();//dummy read  
  726.                                 lcddev.id=LCD_RD_DATA();//读回0X01         
  727.                                 lcddev.id=LCD_RD_DATA();//读回0X53       
  728.                                 lcddev.id<<=8;         
  729.                                 lcddev.id|=LCD_RD_DATA();        //这里读回0X10         
  730.                                 if(lcddev.id!=0X5310)                //也不是NT35310,尝试看看是不是NT35510
  731.                                 {
  732.                                         LCD_WR_REG(0XDA00);       
  733.                                         lcddev.id=LCD_RD_DATA();                //读回0X00         
  734.                                         LCD_WR_REG(0XDB00);       
  735.                                         lcddev.id=LCD_RD_DATA();                //读回0X80
  736.                                         lcddev.id<<=8;       
  737.                                         LCD_WR_REG(0XDC00);       
  738.                                         lcddev.id|=LCD_RD_DATA();                //读回0X00               
  739.                                         if(lcddev.id==0x8000)lcddev.id=0x5510;//NT35510读回的ID是8000H,为方便区分,我们强制设置为5510
  740.                                         if(lcddev.id!=0X5510)                        //也不是NT5510,尝试看看是不是SSD1963
  741.                                         {
  742.                                                 LCD_WR_REG(0XA1);
  743.                                                 lcddev.id=LCD_RD_DATA();
  744.                                                 lcddev.id=LCD_RD_DATA();        //读回0X57
  745.                                                 lcddev.id<<=8;         
  746.                                                 lcddev.id|=LCD_RD_DATA();        //读回0X61       
  747.                                                 if(lcddev.id==0X5761)lcddev.id=0X1963;//SSD1963读回的ID是5761H,为方便区分,我们强制设置为1963
  748.                                         }
  749.                                 }
  750.                         }
  751.                 }         
  752.         }
  753.         if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963)//如果是这几个IC,则设置WR时序为最快
  754.         {
  755.                 //重新配置写时序控制寄存器的时序  ---PSMC_Bank1E是写配置寄存器BWTR的结构体,BWTR[6]对应 FSMC_BWTR4                                                            
  756.                 FSMC_Bank1E->BWTR[6]&=~(0XF<<0);//地址建立时间(ADDSET)清零          
  757.                 FSMC_Bank1E->BWTR[6]&=~(0XF<<8);//数据保存时间清零
  758.                 FSMC_Bank1E->BWTR[6]|=3<<0;                //地址建立时间(ADDSET)为3个HCLK =18ns           
  759.                 FSMC_Bank1E->BWTR[6]|=2<<8;         //数据保存时间(DATAST)为6ns*3个HCLK=18ns
  760.         }else if(lcddev.id==0X6804||lcddev.id==0XC505)        //6804/C505速度上不去,得降低
  761.         {
  762.                 //重新配置写时序控制寄存器的时序                                                                        
  763.                 FSMC_Bank1E->BWTR[6]&=~(0XF<<0);//地址建立时间(ADDSET)清零          
  764.                 FSMC_Bank1E->BWTR[6]&=~(0XF<<8);//数据保存时间清零
  765.                 FSMC_Bank1E->BWTR[6]|=10<<0;        //地址建立时间(ADDSET)为10个HCLK =60ns           
  766.                 FSMC_Bank1E->BWTR[6]|=12<<8;         //数据保存时间(DATAST)为6ns*13个HCLK=78ns
  767.         }
  768.         printf(" LCD ID:%x\r\n",lcddev.id); //打印LCD ID   
  769.         if(lcddev.id==0X9341)        //9341初始化
  770.         {         
  771.                 LCD_WR_REG(0xCF);  
  772.                 LCD_WR_DATA(0x00);
  773.                 LCD_WR_DATA(0xC1);
  774.                 LCD_WR_DATA(0X30);
  775.                 LCD_WR_REG(0xED);  
  776.                 LCD_WR_DATA(0x64);
  777.                 LCD_WR_DATA(0x03);
  778.                 LCD_WR_DATA(0X12);
  779.                 LCD_WR_DATA(0X81);
  780.                 LCD_WR_REG(0xE8);  
  781.                 LCD_WR_DATA(0x85);
  782.                 LCD_WR_DATA(0x10);
  783.                 LCD_WR_DATA(0x7A);
  784.                 LCD_WR_REG(0xCB);  
  785.                 LCD_WR_DATA(0x39);
  786.                 LCD_WR_DATA(0x2C);
  787.                 LCD_WR_DATA(0x00);
  788.                 LCD_WR_DATA(0x34);
  789.                 LCD_WR_DATA(0x02);
  790.                 LCD_WR_REG(0xF7);  
  791.                 LCD_WR_DATA(0x20);
  792.                 LCD_WR_REG(0xEA);  
  793.                 LCD_WR_DATA(0x00);
  794.                 LCD_WR_DATA(0x00);
  795.                 LCD_WR_REG(0xC0);    //Power control
  796.                 LCD_WR_DATA(0x1B);   //VRH[5:0]
  797.                 LCD_WR_REG(0xC1);    //Power control
  798.                 LCD_WR_DATA(0x01);   //SAP[2:0];BT[3:0]
  799.                 LCD_WR_REG(0xC5);    //VCM control
  800.                 LCD_WR_DATA(0x30);          //3F
  801.                 LCD_WR_DATA(0x30);          //3C
  802.                 LCD_WR_REG(0xC7);    //VCM control2
  803.                 LCD_WR_DATA(0XB7);
  804.                 LCD_WR_REG(0x36);    // Memory Access Control
  805.                 LCD_WR_DATA(0x48);
  806.                 LCD_WR_REG(0x3A);   
  807.                 LCD_WR_DATA(0x55);
  808.                 LCD_WR_REG(0xB1);   
  809.                 LCD_WR_DATA(0x00);   
  810.                 LCD_WR_DATA(0x1A);
  811.                 LCD_WR_REG(0xB6);    // Display Function Control
  812.                 LCD_WR_DATA(0x0A);
  813.                 LCD_WR_DATA(0xA2);
  814.                 LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  815.                 LCD_WR_DATA(0x00);
  816.                 LCD_WR_REG(0x26);    //Gamma curve selected
  817.                 LCD_WR_DATA(0x01);
  818.                 LCD_WR_REG(0xE0);    //Set Gamma
  819.                 LCD_WR_DATA(0x0F);
  820.                 LCD_WR_DATA(0x2A);
  821.                 LCD_WR_DATA(0x28);
  822.                 LCD_WR_DATA(0x08);
  823.                 LCD_WR_DATA(0x0E);
  824.                 LCD_WR_DATA(0x08);
  825.                 LCD_WR_DATA(0x54);
  826.                 LCD_WR_DATA(0XA9);
  827.                 LCD_WR_DATA(0x43);
  828.                 LCD_WR_DATA(0x0A);
  829.                 LCD_WR_DATA(0x0F);
  830.                 LCD_WR_DATA(0x00);
  831.                 LCD_WR_DATA(0x00);
  832.                 LCD_WR_DATA(0x00);
  833.                 LCD_WR_DATA(0x00);                  
  834.                 LCD_WR_REG(0XE1);    //Set Gamma
  835.                 LCD_WR_DATA(0x00);
  836.                 LCD_WR_DATA(0x15);
  837.                 LCD_WR_DATA(0x17);
  838.                 LCD_WR_DATA(0x07);
  839.                 LCD_WR_DATA(0x11);
  840.                 LCD_WR_DATA(0x06);
  841.                 LCD_WR_DATA(0x2B);
  842.                 LCD_WR_DATA(0x56);
  843.                 LCD_WR_DATA(0x3C);
  844.                 LCD_WR_DATA(0x05);
  845.                 LCD_WR_DATA(0x10);
  846.                 LCD_WR_DATA(0x0F);
  847.                 LCD_WR_DATA(0x3F);
  848.                 LCD_WR_DATA(0x3F);
  849.                 LCD_WR_DATA(0x0F);
  850.                 LCD_WR_REG(0x2B);
  851.                 LCD_WR_DATA(0x00);
  852.                 LCD_WR_DATA(0x00);
  853.                 LCD_WR_DATA(0x01);
  854.                 LCD_WR_DATA(0x3f);
  855.                 LCD_WR_REG(0x2A);
  856.                 LCD_WR_DATA(0x00);
  857.                 LCD_WR_DATA(0x00);
  858.                 LCD_WR_DATA(0x00);
  859.                 LCD_WR_DATA(0xef);         
  860.                 LCD_WR_REG(0x11); //Exit Sleep
  861.                 delay_ms(120);
  862.                 LCD_WR_REG(0x29); //display on       
  863.         }else if(lcddev.id==0x6804) //6804初始化
  864.         {
  865.                 LCD_WR_REG(0X11);
  866.                 delay_ms(20);
  867.                 LCD_WR_REG(0XD0);//VCI1  VCL  VGH  VGL DDVDH VREG1OUT power amplitude setting
  868.                 LCD_WR_DATA(0X07);
  869.                 LCD_WR_DATA(0X42);
  870.                 LCD_WR_DATA(0X1D);
  871.                 LCD_WR_REG(0XD1);//VCOMH VCOM_AC amplitude setting
  872.                 LCD_WR_DATA(0X00);
  873.                 LCD_WR_DATA(0X1a);
  874.                 LCD_WR_DATA(0X09);
  875.                 LCD_WR_REG(0XD2);//Operational Amplifier Circuit Constant Current Adjust , charge pump frequency setting
  876.                 LCD_WR_DATA(0X01);
  877.                 LCD_WR_DATA(0X22);
  878.                 LCD_WR_REG(0XC0);//REV SM GS
  879.                 LCD_WR_DATA(0X10);
  880.                 LCD_WR_DATA(0X3B);
  881.                 LCD_WR_DATA(0X00);
  882.                 LCD_WR_DATA(0X02);
  883.                 LCD_WR_DATA(0X11);
  884.                
  885.                 LCD_WR_REG(0XC5);// Frame rate setting = 72HZ  when setting 0x03
  886.                 LCD_WR_DATA(0X03);
  887.                
  888.                 LCD_WR_REG(0XC8);//Gamma setting
  889.                 LCD_WR_DATA(0X00);
  890.                 LCD_WR_DATA(0X25);
  891.                 LCD_WR_DATA(0X21);
  892.                 LCD_WR_DATA(0X05);
  893.                 LCD_WR_DATA(0X00);
  894.                 LCD_WR_DATA(0X0a);
  895.                 LCD_WR_DATA(0X65);
  896.                 LCD_WR_DATA(0X25);
  897.                 LCD_WR_DATA(0X77);
  898.                 LCD_WR_DATA(0X50);
  899.                 LCD_WR_DATA(0X0f);
  900.                 LCD_WR_DATA(0X00);          
  901.                                                   
  902.                    LCD_WR_REG(0XF8);
  903.                 LCD_WR_DATA(0X01);          

  904.                 LCD_WR_REG(0XFE);
  905.                 LCD_WR_DATA(0X00);
  906.                 LCD_WR_DATA(0X02);
  907.                
  908.                 LCD_WR_REG(0X20);//Exit invert mode

  909.                 LCD_WR_REG(0X36);
  910.                 LCD_WR_DATA(0X08);//原来是a
  911.                
  912.                 LCD_WR_REG(0X3A);
  913.                 LCD_WR_DATA(0X55);//16位模式          
  914.                 LCD_WR_REG(0X2B);
  915.                 LCD_WR_DATA(0X00);
  916.                 LCD_WR_DATA(0X00);
  917.                 LCD_WR_DATA(0X01);
  918.                 LCD_WR_DATA(0X3F);
  919.                
  920.                 LCD_WR_REG(0X2A);
  921.                 LCD_WR_DATA(0X00);
  922.                 LCD_WR_DATA(0X00);
  923.                 LCD_WR_DATA(0X01);
  924.                 LCD_WR_DATA(0XDF);
  925.                 delay_ms(120);
  926.                 LCD_WR_REG(0X29);          
  927.         }else if(lcddev.id==0x5310)
  928.         {
  929.                 LCD_WR_REG(0xED);
  930.                 LCD_WR_DATA(0x01);
  931.                 LCD_WR_DATA(0xFE);

  932.                 LCD_WR_REG(0xEE);
  933.                 LCD_WR_DATA(0xDE);
  934.                 LCD_WR_DATA(0x21);

  935.                 LCD_WR_REG(0xF1);
  936.                 LCD_WR_DATA(0x01);
  937.                 LCD_WR_REG(0xDF);
  938.                 LCD_WR_DATA(0x10);

  939.                 //VCOMvoltage//
  940.                 LCD_WR_REG(0xC4);
  941.                 LCD_WR_DATA(0x8F);          //5f

  942.                 LCD_WR_REG(0xC6);
  943.                 LCD_WR_DATA(0x00);
  944.                 LCD_WR_DATA(0xE2);
  945.                 LCD_WR_DATA(0xE2);
  946.                 LCD_WR_DATA(0xE2);
  947.                 LCD_WR_REG(0xBF);
  948.                 LCD_WR_DATA(0xAA);

  949.                 LCD_WR_REG(0xB0);
  950.                 LCD_WR_DATA(0x0D);
  951.                 LCD_WR_DATA(0x00);
  952.                 LCD_WR_DATA(0x0D);
  953.                 LCD_WR_DATA(0x00);
  954.                 LCD_WR_DATA(0x11);
  955.                 LCD_WR_DATA(0x00);
  956.                 LCD_WR_DATA(0x19);
  957.                 LCD_WR_DATA(0x00);
  958.                 LCD_WR_DATA(0x21);
  959.                 LCD_WR_DATA(0x00);
  960.                 LCD_WR_DATA(0x2D);
  961.                 LCD_WR_DATA(0x00);
  962.                 LCD_WR_DATA(0x3D);
  963.                 LCD_WR_DATA(0x00);
  964.                 LCD_WR_DATA(0x5D);
  965.                 LCD_WR_DATA(0x00);
  966.                 LCD_WR_DATA(0x5D);
  967.                 LCD_WR_DATA(0x00);

  968.                 LCD_WR_REG(0xB1);
  969.                 LCD_WR_DATA(0x80);
  970.                 LCD_WR_DATA(0x00);
  971.                 LCD_WR_DATA(0x8B);
  972.                 LCD_WR_DATA(0x00);
  973.                 LCD_WR_DATA(0x96);
  974.                 LCD_WR_DATA(0x00);

  975.                 LCD_WR_REG(0xB2);
  976.                 LCD_WR_DATA(0x00);
  977.                 LCD_WR_DATA(0x00);
  978.                 LCD_WR_DATA(0x02);
  979.                 LCD_WR_DATA(0x00);
  980.                 LCD_WR_DATA(0x03);
  981.                 LCD_WR_DATA(0x00);

  982.                 LCD_WR_REG(0xB3);
  983.                 LCD_WR_DATA(0x00);
  984.                 LCD_WR_DATA(0x00);
  985.                 LCD_WR_DATA(0x00);
  986.                 LCD_WR_DATA(0x00);
  987.                 LCD_WR_DATA(0x00);
  988.                 LCD_WR_DATA(0x00);
  989.                 LCD_WR_DATA(0x00);
  990.                 LCD_WR_DATA(0x00);
  991.                 LCD_WR_DATA(0x00);
  992.                 LCD_WR_DATA(0x00);
  993.                 LCD_WR_DATA(0x00);
  994.                 LCD_WR_DATA(0x00);
  995.                 LCD_WR_DATA(0x00);
  996.                 LCD_WR_DATA(0x00);
  997.                 LCD_WR_DATA(0x00);
  998.                 LCD_WR_DATA(0x00);
  999.                 LCD_WR_DATA(0x00);
  1000.                 LCD_WR_DATA(0x00);
  1001.                 LCD_WR_DATA(0x00);
  1002.                 LCD_WR_DATA(0x00);
  1003.                 LCD_WR_DATA(0x00);
  1004.                 LCD_WR_DATA(0x00);
  1005.                 LCD_WR_DATA(0x00);
  1006.                 LCD_WR_DATA(0x00);

  1007.                 LCD_WR_REG(0xB4);
  1008.                 LCD_WR_DATA(0x8B);
  1009.                 LCD_WR_DATA(0x00);
  1010.                 LCD_WR_DATA(0x96);
  1011.                 LCD_WR_DATA(0x00);
  1012.                 LCD_WR_DATA(0xA1);
  1013.                 LCD_WR_DATA(0x00);

  1014.                 LCD_WR_REG(0xB5);
  1015.                 LCD_WR_DATA(0x02);
  1016.                 LCD_WR_DATA(0x00);
  1017.                 LCD_WR_DATA(0x03);
  1018.                 LCD_WR_DATA(0x00);
  1019.                 LCD_WR_DATA(0x04);
  1020.                 LCD_WR_DATA(0x00);

  1021.                 LCD_WR_REG(0xB6);
  1022.                 LCD_WR_DATA(0x00);
  1023.                 LCD_WR_DATA(0x00);

  1024.                 LCD_WR_REG(0xB7);
  1025.                 LCD_WR_DATA(0x00);
  1026.                 LCD_WR_DATA(0x00);
  1027.                 LCD_WR_DATA(0x3F);
  1028.                 LCD_WR_DATA(0x00);
  1029.                 LCD_WR_DATA(0x5E);
  1030.                 LCD_WR_DATA(0x00);
  1031.                 LCD_WR_DATA(0x64);
  1032.                 LCD_WR_DATA(0x00);
  1033.                 LCD_WR_DATA(0x8C);
  1034.                 LCD_WR_DATA(0x00);
  1035.                 LCD_WR_DATA(0xAC);
  1036.                 LCD_WR_DATA(0x00);
  1037.                 LCD_WR_DATA(0xDC);
  1038.                 LCD_WR_DATA(0x00);
  1039.                 LCD_WR_DATA(0x70);
  1040.                 LCD_WR_DATA(0x00);
  1041.                 LCD_WR_DATA(0x90);
  1042.                 LCD_WR_DATA(0x00);
  1043.                 LCD_WR_DATA(0xEB);
  1044.                 LCD_WR_DATA(0x00);
  1045.                 LCD_WR_DATA(0xDC);
  1046.                 LCD_WR_DATA(0x00);

  1047.                 LCD_WR_REG(0xB8);
  1048.                 LCD_WR_DATA(0x00);
  1049.                 LCD_WR_DATA(0x00);
  1050.                 LCD_WR_DATA(0x00);
  1051.                 LCD_WR_DATA(0x00);
  1052.                 LCD_WR_DATA(0x00);
  1053.                 LCD_WR_DATA(0x00);
  1054.                 LCD_WR_DATA(0x00);
  1055.                 LCD_WR_DATA(0x00);

  1056.                 LCD_WR_REG(0xBA);
  1057.                 LCD_WR_DATA(0x24);
  1058.                 LCD_WR_DATA(0x00);
  1059.                 LCD_WR_DATA(0x00);
  1060.                 LCD_WR_DATA(0x00);

  1061.                 LCD_WR_REG(0xC1);
  1062.                 LCD_WR_DATA(0x20);
  1063.                 LCD_WR_DATA(0x00);
  1064.                 LCD_WR_DATA(0x54);
  1065.                 LCD_WR_DATA(0x00);
  1066.                 LCD_WR_DATA(0xFF);
  1067.                 LCD_WR_DATA(0x00);

  1068.                 LCD_WR_REG(0xC2);
  1069.                 LCD_WR_DATA(0x0A);
  1070.                 LCD_WR_DATA(0x00);
  1071.                 LCD_WR_DATA(0x04);
  1072.                 LCD_WR_DATA(0x00);

  1073.                 LCD_WR_REG(0xC3);
  1074.                 LCD_WR_DATA(0x3C);
  1075.                 LCD_WR_DATA(0x00);
  1076.                 LCD_WR_DATA(0x3A);
  1077.                 LCD_WR_DATA(0x00);
  1078.                 LCD_WR_DATA(0x39);
  1079.                 LCD_WR_DATA(0x00);
  1080.                 LCD_WR_DATA(0x37);
  1081.                 LCD_WR_DATA(0x00);
  1082.                 LCD_WR_DATA(0x3C);
  1083.                 LCD_WR_DATA(0x00);
  1084.                 LCD_WR_DATA(0x36);
  1085.                 LCD_WR_DATA(0x00);
  1086.                 LCD_WR_DATA(0x32);
  1087.                 LCD_WR_DATA(0x00);
  1088.                 LCD_WR_DATA(0x2F);
  1089.                 LCD_WR_DATA(0x00);
  1090.                 LCD_WR_DATA(0x2C);
  1091.                 LCD_WR_DATA(0x00);
  1092.                 LCD_WR_DATA(0x29);
  1093.                 LCD_WR_DATA(0x00);
  1094.                 LCD_WR_DATA(0x26);
  1095.                 LCD_WR_DATA(0x00);
  1096.                 LCD_WR_DATA(0x24);
  1097.                 LCD_WR_DATA(0x00);
  1098.                 LCD_WR_DATA(0x24);
  1099.                 LCD_WR_DATA(0x00);
  1100.                 LCD_WR_DATA(0x23);
  1101.                 LCD_WR_DATA(0x00);
  1102.                 LCD_WR_DATA(0x3C);
  1103.                 LCD_WR_DATA(0x00);
  1104.                 LCD_WR_DATA(0x36);
  1105.                 LCD_WR_DATA(0x00);
  1106.                 LCD_WR_DATA(0x32);
  1107.                 LCD_WR_DATA(0x00);
  1108.                 LCD_WR_DATA(0x2F);
  1109.                 LCD_WR_DATA(0x00);
  1110.                 LCD_WR_DATA(0x2C);
  1111.                 LCD_WR_DATA(0x00);
  1112.                 LCD_WR_DATA(0x29);
  1113.                 LCD_WR_DATA(0x00);
  1114.                 LCD_WR_DATA(0x26);
  1115.                 LCD_WR_DATA(0x00);
  1116.                 LCD_WR_DATA(0x24);
  1117.                 LCD_WR_DATA(0x00);
  1118.                 LCD_WR_DATA(0x24);
  1119.                 LCD_WR_DATA(0x00);
  1120.                 LCD_WR_DATA(0x23);
  1121.                 LCD_WR_DATA(0x00);

  1122.                 LCD_WR_REG(0xC4);
  1123.                 LCD_WR_DATA(0x62);
  1124.                 LCD_WR_DATA(0x00);
  1125.                 LCD_WR_DATA(0x05);
  1126.                 LCD_WR_DATA(0x00);
  1127.                 LCD_WR_DATA(0x84);
  1128.                 LCD_WR_DATA(0x00);
  1129.                 LCD_WR_DATA(0xF0);
  1130.                 LCD_WR_DATA(0x00);
  1131.                 LCD_WR_DATA(0x18);
  1132.                 LCD_WR_DATA(0x00);
  1133.                 LCD_WR_DATA(0xA4);
  1134.                 LCD_WR_DATA(0x00);
  1135.                 LCD_WR_DATA(0x18);
  1136.                 LCD_WR_DATA(0x00);
  1137.                 LCD_WR_DATA(0x50);
  1138.                 LCD_WR_DATA(0x00);
  1139.                 LCD_WR_DATA(0x0C);
  1140.                 LCD_WR_DATA(0x00);
  1141.                 LCD_WR_DATA(0x17);
  1142.                 LCD_WR_DATA(0x00);
  1143.                 LCD_WR_DATA(0x95);
  1144.                 LCD_WR_DATA(0x00);
  1145.                 LCD_WR_DATA(0xF3);
  1146.                 LCD_WR_DATA(0x00);
  1147.                 LCD_WR_DATA(0xE6);
  1148.                 LCD_WR_DATA(0x00);

  1149.                 LCD_WR_REG(0xC5);
  1150.                 LCD_WR_DATA(0x32);
  1151.                 LCD_WR_DATA(0x00);
  1152.                 LCD_WR_DATA(0x44);
  1153.                 LCD_WR_DATA(0x00);
  1154.                 LCD_WR_DATA(0x65);
  1155.                 LCD_WR_DATA(0x00);
  1156.                 LCD_WR_DATA(0x76);
  1157.                 LCD_WR_DATA(0x00);
  1158.                 LCD_WR_DATA(0x88);
  1159.                 LCD_WR_DATA(0x00);

  1160.                 LCD_WR_REG(0xC6);
  1161.                 LCD_WR_DATA(0x20);
  1162.                 LCD_WR_DATA(0x00);
  1163.                 LCD_WR_DATA(0x17);
  1164.                 LCD_WR_DATA(0x00);
  1165.                 LCD_WR_DATA(0x01);
  1166.                 LCD_WR_DATA(0x00);

  1167.                 LCD_WR_REG(0xC7);
  1168.                 LCD_WR_DATA(0x00);
  1169.                 LCD_WR_DATA(0x00);
  1170.                 LCD_WR_DATA(0x00);
  1171.                 LCD_WR_DATA(0x00);

  1172.                 LCD_WR_REG(0xC8);
  1173.                 LCD_WR_DATA(0x00);
  1174.                 LCD_WR_DATA(0x00);
  1175.                 LCD_WR_DATA(0x00);
  1176.                 LCD_WR_DATA(0x00);

  1177.                 LCD_WR_REG(0xC9);
  1178.                 LCD_WR_DATA(0x00);
  1179.                 LCD_WR_DATA(0x00);
  1180.                 LCD_WR_DATA(0x00);
  1181.                 LCD_WR_DATA(0x00);
  1182.                 LCD_WR_DATA(0x00);
  1183.                 LCD_WR_DATA(0x00);
  1184.                 LCD_WR_DATA(0x00);
  1185.                 LCD_WR_DATA(0x00);
  1186.                 LCD_WR_DATA(0x00);
  1187.                 LCD_WR_DATA(0x00);
  1188.                 LCD_WR_DATA(0x00);
  1189.                 LCD_WR_DATA(0x00);
  1190.                 LCD_WR_DATA(0x00);
  1191.                 LCD_WR_DATA(0x00);
  1192.                 LCD_WR_DATA(0x00);
  1193.                 LCD_WR_DATA(0x00);

  1194.                 LCD_WR_REG(0xE0);
  1195.                 LCD_WR_DATA(0x16);
  1196.                 LCD_WR_DATA(0x00);
  1197.                 LCD_WR_DATA(0x1C);
  1198.                 LCD_WR_DATA(0x00);
  1199.                 LCD_WR_DATA(0x21);
  1200.                 LCD_WR_DATA(0x00);
  1201.                 LCD_WR_DATA(0x36);
  1202.                 LCD_WR_DATA(0x00);
  1203.                 LCD_WR_DATA(0x46);
  1204.                 LCD_WR_DATA(0x00);
  1205.                 LCD_WR_DATA(0x52);
  1206.                 LCD_WR_DATA(0x00);
  1207.                 LCD_WR_DATA(0x64);
  1208.                 LCD_WR_DATA(0x00);
  1209.                 LCD_WR_DATA(0x7A);
  1210.                 LCD_WR_DATA(0x00);
  1211.                 LCD_WR_DATA(0x8B);
  1212.                 LCD_WR_DATA(0x00);
  1213.                 LCD_WR_DATA(0x99);
  1214.                 LCD_WR_DATA(0x00);
  1215.                 LCD_WR_DATA(0xA8);
  1216.                 LCD_WR_DATA(0x00);
  1217.                 LCD_WR_DATA(0xB9);
  1218.                 LCD_WR_DATA(0x00);
  1219.                 LCD_WR_DATA(0xC4);
  1220.                 LCD_WR_DATA(0x00);
  1221.                 LCD_WR_DATA(0xCA);
  1222.                 LCD_WR_DATA(0x00);
  1223.                 LCD_WR_DATA(0xD2);
  1224.                 LCD_WR_DATA(0x00);
  1225.                 LCD_WR_DATA(0xD9);
  1226.                 LCD_WR_DATA(0x00);
  1227.                 LCD_WR_DATA(0xE0);
  1228.                 LCD_WR_DATA(0x00);
  1229.                 LCD_WR_DATA(0xF3);
  1230.                 LCD_WR_DATA(0x00);

  1231.                 LCD_WR_REG(0xE1);
  1232.                 LCD_WR_DATA(0x16);
  1233.                 LCD_WR_DATA(0x00);
  1234.                 LCD_WR_DATA(0x1C);
  1235.                 LCD_WR_DATA(0x00);
  1236.                 LCD_WR_DATA(0x22);
  1237.                 LCD_WR_DATA(0x00);
  1238.                 LCD_WR_DATA(0x36);
  1239.                 LCD_WR_DATA(0x00);
  1240.                 LCD_WR_DATA(0x45);
  1241.                 LCD_WR_DATA(0x00);
  1242.                 LCD_WR_DATA(0x52);
  1243.                 LCD_WR_DATA(0x00);
  1244.                 LCD_WR_DATA(0x64);
  1245.                 LCD_WR_DATA(0x00);
  1246.                 LCD_WR_DATA(0x7A);
  1247.                 LCD_WR_DATA(0x00);
  1248.                 LCD_WR_DATA(0x8B);
  1249.                 LCD_WR_DATA(0x00);
  1250.                 LCD_WR_DATA(0x99);
  1251.                 LCD_WR_DATA(0x00);
  1252.                 LCD_WR_DATA(0xA8);
  1253.                 LCD_WR_DATA(0x00);
  1254.                 LCD_WR_DATA(0xB9);
  1255.                 LCD_WR_DATA(0x00);
  1256.                 LCD_WR_DATA(0xC4);
  1257.                 LCD_WR_DATA(0x00);
  1258.                 LCD_WR_DATA(0xCA);
  1259.                 LCD_WR_DATA(0x00);
  1260.                 LCD_WR_DATA(0xD2);
  1261.                 LCD_WR_DATA(0x00);
  1262.                 LCD_WR_DATA(0xD8);
  1263.                 LCD_WR_DATA(0x00);
  1264.                 LCD_WR_DATA(0xE0);
  1265.                 LCD_WR_DATA(0x00);
  1266.                 LCD_WR_DATA(0xF3);
  1267.                 LCD_WR_DATA(0x00);

  1268.                 LCD_WR_REG(0xE2);
  1269.                 LCD_WR_DATA(0x05);
  1270.                 LCD_WR_DATA(0x00);
  1271.                 LCD_WR_DATA(0x0B);
  1272.                 LCD_WR_DATA(0x00);
  1273.                 LCD_WR_DATA(0x1B);
  1274.                 LCD_WR_DATA(0x00);
  1275.                 LCD_WR_DATA(0x34);
  1276.                 LCD_WR_DATA(0x00);
  1277.                 LCD_WR_DATA(0x44);
  1278.                 LCD_WR_DATA(0x00);
  1279.                 LCD_WR_DATA(0x4F);
  1280.                 LCD_WR_DATA(0x00);
  1281.                 LCD_WR_DATA(0x61);
  1282.                 LCD_WR_DATA(0x00);
  1283.                 LCD_WR_DATA(0x79);
  1284.                 LCD_WR_DATA(0x00);
  1285.                 LCD_WR_DATA(0x88);
  1286.                 LCD_WR_DATA(0x00);
  1287.                 LCD_WR_DATA(0x97);
  1288.                 LCD_WR_DATA(0x00);
  1289.                 LCD_WR_DATA(0xA6);
  1290.                 LCD_WR_DATA(0x00);
  1291.                 LCD_WR_DATA(0xB7);
  1292.                 LCD_WR_DATA(0x00);
  1293.                 LCD_WR_DATA(0xC2);
  1294.                 LCD_WR_DATA(0x00);
  1295.                 LCD_WR_DATA(0xC7);
  1296.                 LCD_WR_DATA(0x00);
  1297.                 LCD_WR_DATA(0xD1);
  1298.                 LCD_WR_DATA(0x00);
  1299.                 LCD_WR_DATA(0xD6);
  1300.                 LCD_WR_DATA(0x00);
  1301.                 LCD_WR_DATA(0xDD);
  1302.                 LCD_WR_DATA(0x00);
  1303.                 LCD_WR_DATA(0xF3);
  1304.                 LCD_WR_DATA(0x00);
  1305.                 LCD_WR_REG(0xE3);
  1306.                 LCD_WR_DATA(0x05);
  1307.                 LCD_WR_DATA(0x00);
  1308.                 LCD_WR_DATA(0xA);
  1309.                 LCD_WR_DATA(0x00);
  1310.                 LCD_WR_DATA(0x1C);
  1311.                 LCD_WR_DATA(0x00);
  1312.                 LCD_WR_DATA(0x33);
  1313.                 LCD_WR_DATA(0x00);
  1314.                 LCD_WR_DATA(0x44);
  1315.                 LCD_WR_DATA(0x00);
  1316.                 LCD_WR_DATA(0x50);
  1317.                 LCD_WR_DATA(0x00);
  1318.                 LCD_WR_DATA(0x62);
  1319.                 LCD_WR_DATA(0x00);
  1320.                 LCD_WR_DATA(0x78);
  1321.                 LCD_WR_DATA(0x00);
  1322.                 LCD_WR_DATA(0x88);
  1323.                 LCD_WR_DATA(0x00);
  1324.                 LCD_WR_DATA(0x97);
  1325.                 LCD_WR_DATA(0x00);
  1326.                 LCD_WR_DATA(0xA6);
  1327.                 LCD_WR_DATA(0x00);
  1328.                 LCD_WR_DATA(0xB7);
  1329.                 LCD_WR_DATA(0x00);
  1330.                 LCD_WR_DATA(0xC2);
  1331.                 LCD_WR_DATA(0x00);
  1332.                 LCD_WR_DATA(0xC7);
  1333.                 LCD_WR_DATA(0x00);
  1334.                 LCD_WR_DATA(0xD1);
  1335.                 LCD_WR_DATA(0x00);
  1336.                 LCD_WR_DATA(0xD5);
  1337.                 LCD_WR_DATA(0x00);
  1338.                 LCD_WR_DATA(0xDD);
  1339.                 LCD_WR_DATA(0x00);
  1340.                 LCD_WR_DATA(0xF3);
  1341.                 LCD_WR_DATA(0x00);

  1342.                 LCD_WR_REG(0xE4);
  1343.                 LCD_WR_DATA(0x01);
  1344.                 LCD_WR_DATA(0x00);
  1345.                 LCD_WR_DATA(0x01);
  1346.                 LCD_WR_DATA(0x00);
  1347.                 LCD_WR_DATA(0x02);
  1348.                 LCD_WR_DATA(0x00);
  1349.                 LCD_WR_DATA(0x2A);
  1350.                 LCD_WR_DATA(0x00);
  1351.                 LCD_WR_DATA(0x3C);
  1352.                 LCD_WR_DATA(0x00);
  1353.                 LCD_WR_DATA(0x4B);
  1354.                 LCD_WR_DATA(0x00);
  1355.                 LCD_WR_DATA(0x5D);
  1356.                 LCD_WR_DATA(0x00);
  1357.                 LCD_WR_DATA(0x74);
  1358.                 LCD_WR_DATA(0x00);
  1359.                 LCD_WR_DATA(0x84);
  1360.                 LCD_WR_DATA(0x00);
  1361.                 LCD_WR_DATA(0x93);
  1362.                 LCD_WR_DATA(0x00);
  1363.                 LCD_WR_DATA(0xA2);
  1364.                 LCD_WR_DATA(0x00);
  1365.                 LCD_WR_DATA(0xB3);
  1366.                 LCD_WR_DATA(0x00);
  1367.                 LCD_WR_DATA(0xBE);
  1368.                 LCD_WR_DATA(0x00);
  1369.                 LCD_WR_DATA(0xC4);
  1370.                 LCD_WR_DATA(0x00);
  1371.                 LCD_WR_DATA(0xCD);
  1372.                 LCD_WR_DATA(0x00);
  1373.                 LCD_WR_DATA(0xD3);
  1374.                 LCD_WR_DATA(0x00);
  1375.                 LCD_WR_DATA(0xDD);
  1376.                 LCD_WR_DATA(0x00);
  1377.                 LCD_WR_DATA(0xF3);
  1378.                 LCD_WR_DATA(0x00);
  1379.                 LCD_WR_REG(0xE5);
  1380.                 LCD_WR_DATA(0x00);
  1381.                 LCD_WR_DATA(0x00);
  1382.                 LCD_WR_DATA(0x00);
  1383.                 LCD_WR_DATA(0x00);
  1384.                 LCD_WR_DATA(0x02);
  1385.                 LCD_WR_DATA(0x00);
  1386.                 LCD_WR_DATA(0x29);
  1387.                 LCD_WR_DATA(0x00);
  1388.                 LCD_WR_DATA(0x3C);
  1389.                 LCD_WR_DATA(0x00);
  1390.                 LCD_WR_DATA(0x4B);
  1391.                 LCD_WR_DATA(0x00);
  1392.                 LCD_WR_DATA(0x5D);
  1393.                 LCD_WR_DATA(0x00);
  1394.                 LCD_WR_DATA(0x74);
  1395.                 LCD_WR_DATA(0x00);
  1396.                 LCD_WR_DATA(0x84);
  1397.                 LCD_WR_DATA(0x00);
  1398.                 LCD_WR_DATA(0x93);
  1399.                 LCD_WR_DATA(0x00);
  1400.                 LCD_WR_DATA(0xA2);
  1401.                 LCD_WR_DATA(0x00);
  1402.                 LCD_WR_DATA(0xB3);
  1403.                 LCD_WR_DATA(0x00);
  1404.                 LCD_WR_DATA(0xBE);
  1405.                 LCD_WR_DATA(0x00);
  1406.                 LCD_WR_DATA(0xC4);
  1407.                 LCD_WR_DATA(0x00);
  1408.                 LCD_WR_DATA(0xCD);
  1409.                 LCD_WR_DATA(0x00);
  1410.                 LCD_WR_DATA(0xD3);
  1411.                 LCD_WR_DATA(0x00);
  1412.                 LCD_WR_DATA(0xDC);
  1413.                 LCD_WR_DATA(0x00);
  1414.                 LCD_WR_DATA(0xF3);
  1415.                 LCD_WR_DATA(0x00);

  1416.                 LCD_WR_REG(0xE6);
  1417.                 LCD_WR_DATA(0x11);
  1418.                 LCD_WR_DATA(0x00);
  1419.                 LCD_WR_DATA(0x34);
  1420.                 LCD_WR_DATA(0x00);
  1421.                 LCD_WR_DATA(0x56);
  1422.                 LCD_WR_DATA(0x00);
  1423.                 LCD_WR_DATA(0x76);
  1424.                 LCD_WR_DATA(0x00);
  1425.                 LCD_WR_DATA(0x77);
  1426.                 LCD_WR_DATA(0x00);
  1427.                 LCD_WR_DATA(0x66);
  1428.                 LCD_WR_DATA(0x00);
  1429.                 LCD_WR_DATA(0x88);
  1430.                 LCD_WR_DATA(0x00);
  1431.                 LCD_WR_DATA(0x99);
  1432.                 LCD_WR_DATA(0x00);
  1433.                 LCD_WR_DATA(0xBB);
  1434.                 LCD_WR_DATA(0x00);
  1435.                 LCD_WR_DATA(0x99);
  1436.                 LCD_WR_DATA(0x00);
  1437.                 LCD_WR_DATA(0x66);
  1438.                 LCD_WR_DATA(0x00);
  1439.                 LCD_WR_DATA(0x55);
  1440.                 LCD_WR_DATA(0x00);
  1441.                 LCD_WR_DATA(0x55);
  1442.                 LCD_WR_DATA(0x00);
  1443.                 LCD_WR_DATA(0x45);
  1444.                 LCD_WR_DATA(0x00);
  1445.                 LCD_WR_DATA(0x43);
  1446.                 LCD_WR_DATA(0x00);
  1447.                 LCD_WR_DATA(0x44);
  1448.                 LCD_WR_DATA(0x00);

  1449.                 LCD_WR_REG(0xE7);
  1450.                 LCD_WR_DATA(0x32);
  1451.                 LCD_WR_DATA(0x00);
  1452.                 LCD_WR_DATA(0x55);
  1453.                 LCD_WR_DATA(0x00);
  1454.                 LCD_WR_DATA(0x76);
  1455.                 LCD_WR_DATA(0x00);
  1456.                 LCD_WR_DATA(0x66);
  1457.                 LCD_WR_DATA(0x00);
  1458.                 LCD_WR_DATA(0x67);
  1459.                 LCD_WR_DATA(0x00);
  1460.                 LCD_WR_DATA(0x67);
  1461.                 LCD_WR_DATA(0x00);
  1462.                 LCD_WR_DATA(0x87);
  1463.                 LCD_WR_DATA(0x00);
  1464.                 LCD_WR_DATA(0x99);
  1465.                 LCD_WR_DATA(0x00);
  1466.                 LCD_WR_DATA(0xBB);
  1467.                 LCD_WR_DATA(0x00);
  1468.                 LCD_WR_DATA(0x99);
  1469.                 LCD_WR_DATA(0x00);
  1470.                 LCD_WR_DATA(0x77);
  1471.                 LCD_WR_DATA(0x00);
  1472.                 LCD_WR_DATA(0x44);
  1473.                 LCD_WR_DATA(0x00);
  1474.                 LCD_WR_DATA(0x56);
  1475.                 LCD_WR_DATA(0x00);
  1476.                 LCD_WR_DATA(0x23);
  1477.                 LCD_WR_DATA(0x00);
  1478.                 LCD_WR_DATA(0x33);
  1479.                 LCD_WR_DATA(0x00);
  1480.                 LCD_WR_DATA(0x45);
  1481.                 LCD_WR_DATA(0x00);

  1482.                 LCD_WR_REG(0xE8);
  1483.                 LCD_WR_DATA(0x00);
  1484.                 LCD_WR_DATA(0x00);
  1485.                 LCD_WR_DATA(0x99);
  1486.                 LCD_WR_DATA(0x00);
  1487.                 LCD_WR_DATA(0x87);
  1488.                 LCD_WR_DATA(0x00);
  1489.                 LCD_WR_DATA(0x88);
  1490.                 LCD_WR_DATA(0x00);
  1491.                 LCD_WR_DATA(0x77);
  1492.                 LCD_WR_DATA(0x00);
  1493.                 LCD_WR_DATA(0x66);
  1494.                 LCD_WR_DATA(0x00);
  1495.                 LCD_WR_DATA(0x88);
  1496.                 LCD_WR_DATA(0x00);
  1497.                 LCD_WR_DATA(0xAA);
  1498.                 LCD_WR_DATA(0x00);
  1499.                 LCD_WR_DATA(0xBB);
  1500.                 LCD_WR_DATA(0x00);
  1501.                 LCD_WR_DATA(0x99);
  1502.                 LCD_WR_DATA(0x00);
  1503.                 LCD_WR_DATA(0x66);
  1504.                 LCD_WR_DATA(0x00);
  1505.                 LCD_WR_DATA(0x55);
  1506.                 LCD_WR_DATA(0x00);
  1507.                 LCD_WR_DATA(0x55);
  1508.                 LCD_WR_DATA(0x00);
  1509.                 LCD_WR_DATA(0x44);
  1510.                 LCD_WR_DATA(0x00);
  1511.                 LCD_WR_DATA(0x44);
  1512.                 LCD_WR_DATA(0x00);
  1513.                 LCD_WR_DATA(0x55);
  1514.                 LCD_WR_DATA(0x00);

  1515.                 LCD_WR_REG(0xE9);
  1516.                 LCD_WR_DATA(0xAA);
  1517.                 LCD_WR_DATA(0x00);
  1518.                 LCD_WR_DATA(0x00);
  1519.                 LCD_WR_DATA(0x00);

  1520.                 LCD_WR_REG(0x00);
  1521.                 LCD_WR_DATA(0xAA);

  1522.                 LCD_WR_REG(0xCF);
  1523.                 LCD_WR_DATA(0x00);
  1524.                 LCD_WR_DATA(0x00);
  1525.                 LCD_WR_DATA(0x00);
  1526.                 LCD_WR_DATA(0x00);
  1527.                 LCD_WR_DATA(0x00);
  1528.                 LCD_WR_DATA(0x00);
  1529.                 LCD_WR_DATA(0x00);
  1530.                 LCD_WR_DATA(0x00);
  1531.                 LCD_WR_DATA(0x00);
  1532.                 LCD_WR_DATA(0x00);
  1533.                 LCD_WR_DATA(0x00);
  1534.                 LCD_WR_DATA(0x00);
  1535.                 LCD_WR_DATA(0x00);
  1536.                 LCD_WR_DATA(0x00);
  1537.                 LCD_WR_DATA(0x00);
  1538.                 LCD_WR_DATA(0x00);
  1539.                 LCD_WR_DATA(0x00);

  1540.                 LCD_WR_REG(0xF0);
  1541.                 LCD_WR_DATA(0x00);
  1542.                 LCD_WR_DATA(0x50);
  1543.                 LCD_WR_DATA(0x00);
  1544.                 LCD_WR_DATA(0x00);
  1545.                 LCD_WR_DATA(0x00);

  1546.                 LCD_WR_REG(0xF3);
  1547.                 LCD_WR_DATA(0x00);

  1548.                 LCD_WR_REG(0xF9);
  1549.                 LCD_WR_DATA(0x06);
  1550.                 LCD_WR_DATA(0x10);
  1551.                 LCD_WR_DATA(0x29);
  1552.                 LCD_WR_DATA(0x00);

  1553.                 LCD_WR_REG(0x3A);
  1554.                 LCD_WR_DATA(0x55);        //66

  1555.                 LCD_WR_REG(0x11);
  1556.                 delay_ms(100);
  1557.                 LCD_WR_REG(0x29);
  1558.                 LCD_WR_REG(0x35);
  1559.                 LCD_WR_DATA(0x00);

  1560.                 LCD_WR_REG(0x51);
  1561.                 LCD_WR_DATA(0xFF);
  1562.                 LCD_WR_REG(0x53);
  1563.                 LCD_WR_DATA(0x2C);
  1564.                 LCD_WR_REG(0x55);
  1565.                 LCD_WR_DATA(0x82);
  1566.                 LCD_WR_REG(0x2c);
  1567.         }else if(lcddev.id==0x5510)
  1568.         {
  1569.                 LCD_WriteReg(0xF000,0x55);
  1570.                 LCD_WriteReg(0xF001,0xAA);
  1571.                 LCD_WriteReg(0xF002,0x52);
  1572.                 LCD_WriteReg(0xF003,0x08);
  1573.                 LCD_WriteReg(0xF004,0x01);
  1574.                 //AVDD Set AVDD 5.2V
  1575.                 LCD_WriteReg(0xB000,0x0D);
  1576.                 LCD_WriteReg(0xB001,0x0D);
  1577.                 LCD_WriteReg(0xB002,0x0D);
  1578.                 //AVDD ratio
  1579.                 LCD_WriteReg(0xB600,0x34);
  1580.                 LCD_WriteReg(0xB601,0x34);
  1581.                 LCD_WriteReg(0xB602,0x34);
  1582.                 //AVEE -5.2V
  1583.                 LCD_WriteReg(0xB100,0x0D);
  1584.                 LCD_WriteReg(0xB101,0x0D);
  1585.                 LCD_WriteReg(0xB102,0x0D);
  1586.                 //AVEE ratio
  1587.                 LCD_WriteReg(0xB700,0x34);
  1588.                 LCD_WriteReg(0xB701,0x34);
  1589.                 LCD_WriteReg(0xB702,0x34);
  1590.                 //VCL -2.5V
  1591.                 LCD_WriteReg(0xB200,0x00);
  1592.                 LCD_WriteReg(0xB201,0x00);
  1593.                 LCD_WriteReg(0xB202,0x00);
  1594.                 //VCL ratio
  1595.                 LCD_WriteReg(0xB800,0x24);
  1596.                 LCD_WriteReg(0xB801,0x24);
  1597.                 LCD_WriteReg(0xB802,0x24);
  1598.                 //VGH 15V (Free pump)
  1599.                 LCD_WriteReg(0xBF00,0x01);
  1600.                 LCD_WriteReg(0xB300,0x0F);
  1601.                 LCD_WriteReg(0xB301,0x0F);
  1602.                 LCD_WriteReg(0xB302,0x0F);
  1603.                 //VGH ratio
  1604.                 LCD_WriteReg(0xB900,0x34);
  1605.                 LCD_WriteReg(0xB901,0x34);
  1606.                 LCD_WriteReg(0xB902,0x34);
  1607.                 //VGL_REG -10V
  1608.                 LCD_WriteReg(0xB500,0x08);
  1609.                 LCD_WriteReg(0xB501,0x08);
  1610.                 LCD_WriteReg(0xB502,0x08);
  1611.                 LCD_WriteReg(0xC200,0x03);
  1612.                 //VGLX ratio
  1613.                 LCD_WriteReg(0xBA00,0x24);
  1614.                 LCD_WriteReg(0xBA01,0x24);
  1615.                 LCD_WriteReg(0xBA02,0x24);
  1616.                 //VGMP/VGSP 4.5V/0V
  1617.                 LCD_WriteReg(0xBC00,0x00);
  1618.                 LCD_WriteReg(0xBC01,0x78);
  1619.                 LCD_WriteReg(0xBC02,0x00);
  1620.                 //VGMN/VGSN -4.5V/0V
  1621.                 LCD_WriteReg(0xBD00,0x00);
  1622.                 LCD_WriteReg(0xBD01,0x78);
  1623.                 LCD_WriteReg(0xBD02,0x00);
  1624.                 //VCOM
  1625.                 LCD_WriteReg(0xBE00,0x00);
  1626.                 LCD_WriteReg(0xBE01,0x64);
  1627.                 //Gamma Setting
  1628.                 LCD_WriteReg(0xD100,0x00);
  1629.                 LCD_WriteReg(0xD101,0x33);
  1630.                 LCD_WriteReg(0xD102,0x00);
  1631.                 LCD_WriteReg(0xD103,0x34);
  1632.                 LCD_WriteReg(0xD104,0x00);
  1633.                 LCD_WriteReg(0xD105,0x3A);
  1634.                 LCD_WriteReg(0xD106,0x00);
  1635.                 LCD_WriteReg(0xD107,0x4A);
  1636.                 LCD_WriteReg(0xD108,0x00);
  1637.                 LCD_WriteReg(0xD109,0x5C);
  1638.                 LCD_WriteReg(0xD10A,0x00);
  1639.                 LCD_WriteReg(0xD10B,0x81);
  1640.                 LCD_WriteReg(0xD10C,0x00);
  1641.                 LCD_WriteReg(0xD10D,0xA6);
  1642.                 LCD_WriteReg(0xD10E,0x00);
  1643.                 LCD_WriteReg(0xD10F,0xE5);
  1644.                 LCD_WriteReg(0xD110,0x01);
  1645.                 LCD_WriteReg(0xD111,0x13);
  1646.                 LCD_WriteReg(0xD112,0x01);
  1647.                 LCD_WriteReg(0xD113,0x54);
  1648.                 LCD_WriteReg(0xD114,0x01);
  1649.                 LCD_WriteReg(0xD115,0x82);
  1650.                 LCD_WriteReg(0xD116,0x01);
  1651.                 LCD_WriteReg(0xD117,0xCA);
  1652.                 LCD_WriteReg(0xD118,0x02);
  1653.                 LCD_WriteReg(0xD119,0x00);
  1654.                 LCD_WriteReg(0xD11A,0x02);
  1655.                 LCD_WriteReg(0xD11B,0x01);
  1656.                 LCD_WriteReg(0xD11C,0x02);
  1657.                 LCD_WriteReg(0xD11D,0x34);
  1658.                 LCD_WriteReg(0xD11E,0x02);
  1659.                 LCD_WriteReg(0xD11F,0x67);
  1660.                 LCD_WriteReg(0xD120,0x02);
  1661.                 LCD_WriteReg(0xD121,0x84);
  1662.                 LCD_WriteReg(0xD122,0x02);
  1663.                 LCD_WriteReg(0xD123,0xA4);
  1664.                 LCD_WriteReg(0xD124,0x02);
  1665.                 LCD_WriteReg(0xD125,0xB7);
  1666.                 LCD_WriteReg(0xD126,0x02);
  1667.                 LCD_WriteReg(0xD127,0xCF);
  1668.                 LCD_WriteReg(0xD128,0x02);
  1669.                 LCD_WriteReg(0xD129,0xDE);
  1670.                 LCD_WriteReg(0xD12A,0x02);
  1671.                 LCD_WriteReg(0xD12B,0xF2);
  1672.                 LCD_WriteReg(0xD12C,0x02);
  1673.                 LCD_WriteReg(0xD12D,0xFE);
  1674.                 LCD_WriteReg(0xD12E,0x03);
  1675.                 LCD_WriteReg(0xD12F,0x10);
  1676.                 LCD_WriteReg(0xD130,0x03);
  1677.                 LCD_WriteReg(0xD131,0x33);
  1678.                 LCD_WriteReg(0xD132,0x03);
  1679.                 LCD_WriteReg(0xD133,0x6D);
  1680.                 LCD_WriteReg(0xD200,0x00);
  1681.                 LCD_WriteReg(0xD201,0x33);
  1682.                 LCD_WriteReg(0xD202,0x00);
  1683.                 LCD_WriteReg(0xD203,0x34);
  1684.                 LCD_WriteReg(0xD204,0x00);
  1685.                 LCD_WriteReg(0xD205,0x3A);
  1686.                 LCD_WriteReg(0xD206,0x00);
  1687.                 LCD_WriteReg(0xD207,0x4A);
  1688.                 LCD_WriteReg(0xD208,0x00);
  1689.                 LCD_WriteReg(0xD209,0x5C);
  1690.                 LCD_WriteReg(0xD20A,0x00);

  1691.                 LCD_WriteReg(0xD20B,0x81);
  1692.                 LCD_WriteReg(0xD20C,0x00);
  1693.                 LCD_WriteReg(0xD20D,0xA6);
  1694.                 LCD_WriteReg(0xD20E,0x00);
  1695.                 LCD_WriteReg(0xD20F,0xE5);
  1696.                 LCD_WriteReg(0xD210,0x01);
  1697.                 LCD_WriteReg(0xD211,0x13);
  1698.                 LCD_WriteReg(0xD212,0x01);
  1699.                 LCD_WriteReg(0xD213,0x54);
  1700.                 LCD_WriteReg(0xD214,0x01);
  1701.                 LCD_WriteReg(0xD215,0x82);
  1702.                 LCD_WriteReg(0xD216,0x01);
  1703.                 LCD_WriteReg(0xD217,0xCA);
  1704.                 LCD_WriteReg(0xD218,0x02);
  1705.                 LCD_WriteReg(0xD219,0x00);
  1706.                 LCD_WriteReg(0xD21A,0x02);
  1707.                 LCD_WriteReg(0xD21B,0x01);
  1708.                 LCD_WriteReg(0xD21C,0x02);
  1709.                 LCD_WriteReg(0xD21D,0x34);
  1710.                 LCD_WriteReg(0xD21E,0x02);
  1711.                 LCD_WriteReg(0xD21F,0x67);
  1712.                 LCD_WriteReg(0xD220,0x02);
  1713.                 LCD_WriteReg(0xD221,0x84);
  1714.                 LCD_WriteReg(0xD222,0x02);
  1715.                 LCD_WriteReg(0xD223,0xA4);
  1716.                 LCD_WriteReg(0xD224,0x02);
  1717.                 LCD_WriteReg(0xD225,0xB7);
  1718.                 LCD_WriteReg(0xD226,0x02);
  1719.                 LCD_WriteReg(0xD227,0xCF);
  1720.                 LCD_WriteReg(0xD228,0x02);
  1721.                 LCD_WriteReg(0xD229,0xDE);
  1722.                 LCD_WriteReg(0xD22A,0x02);
  1723.                 LCD_WriteReg(0xD22B,0xF2);
  1724.                 LCD_WriteReg(0xD22C,0x02);
  1725.                 LCD_WriteReg(0xD22D,0xFE);
  1726.                 LCD_WriteReg(0xD22E,0x03);
  1727.                 LCD_WriteReg(0xD22F,0x10);
  1728.                 LCD_WriteReg(0xD230,0x03);
  1729.                 LCD_WriteReg(0xD231,0x33);
  1730.                 LCD_WriteReg(0xD232,0x03);
  1731.                 LCD_WriteReg(0xD233,0x6D);
  1732.                 LCD_WriteReg(0xD300,0x00);
  1733.                 LCD_WriteReg(0xD301,0x33);
  1734.                 LCD_WriteReg(0xD302,0x00);
  1735.                 LCD_WriteReg(0xD303,0x34);
  1736.                 LCD_WriteReg(0xD304,0x00);
  1737.                 LCD_WriteReg(0xD305,0x3A);
  1738.                 LCD_WriteReg(0xD306,0x00);
  1739.                 LCD_WriteReg(0xD307,0x4A);
  1740.                 LCD_WriteReg(0xD308,0x00);
  1741.                 LCD_WriteReg(0xD309,0x5C);
  1742.                 LCD_WriteReg(0xD30A,0x00);

  1743.                 LCD_WriteReg(0xD30B,0x81);
  1744.                 LCD_WriteReg(0xD30C,0x00);
  1745.                 LCD_WriteReg(0xD30D,0xA6);
  1746.                 LCD_WriteReg(0xD30E,0x00);
  1747.                 LCD_WriteReg(0xD30F,0xE5);
  1748.                 LCD_WriteReg(0xD310,0x01);
  1749.                 LCD_WriteReg(0xD311,0x13);
  1750.                 LCD_WriteReg(0xD312,0x01);
  1751.                 LCD_WriteReg(0xD313,0x54);
  1752.                 LCD_WriteReg(0xD314,0x01);
  1753.                 LCD_WriteReg(0xD315,0x82);
  1754.                 LCD_WriteReg(0xD316,0x01);
  1755.                 LCD_WriteReg(0xD317,0xCA);
  1756.                 LCD_WriteReg(0xD318,0x02);
  1757.                 LCD_WriteReg(0xD319,0x00);
  1758.                 LCD_WriteReg(0xD31A,0x02);
  1759.                 LCD_WriteReg(0xD31B,0x01);
  1760.                 LCD_WriteReg(0xD31C,0x02);
  1761.                 LCD_WriteReg(0xD31D,0x34);
  1762.                 LCD_WriteReg(0xD31E,0x02);
  1763.                 LCD_WriteReg(0xD31F,0x67);
  1764.                 LCD_WriteReg(0xD320,0x02);
  1765.                 LCD_WriteReg(0xD321,0x84);
  1766.                 LCD_WriteReg(0xD322,0x02);
  1767.                 LCD_WriteReg(0xD323,0xA4);
  1768.                 LCD_WriteReg(0xD324,0x02);
  1769.                 LCD_WriteReg(0xD325,0xB7);
  1770.                 LCD_WriteReg(0xD326,0x02);
  1771.                 LCD_WriteReg(0xD327,0xCF);
  1772.                 LCD_WriteReg(0xD328,0x02);
  1773.                 LCD_WriteReg(0xD329,0xDE);
  1774.                 LCD_WriteReg(0xD32A,0x02);
  1775.                 LCD_WriteReg(0xD32B,0xF2);
  1776.                 LCD_WriteReg(0xD32C,0x02);
  1777.                 LCD_WriteReg(0xD32D,0xFE);
  1778.                 LCD_WriteReg(0xD32E,0x03);
  1779.                 LCD_WriteReg(0xD32F,0x10);
  1780.                 LCD_WriteReg(0xD330,0x03);
  1781.                 LCD_WriteReg(0xD331,0x33);
  1782.                 LCD_WriteReg(0xD332,0x03);
  1783.                 LCD_WriteReg(0xD333,0x6D);
  1784.                 LCD_WriteReg(0xD400,0x00);
  1785.                 LCD_WriteReg(0xD401,0x33);
  1786.                 LCD_WriteReg(0xD402,0x00);
  1787.                 LCD_WriteReg(0xD403,0x34);
  1788.                 LCD_WriteReg(0xD404,0x00);
  1789.                 LCD_WriteReg(0xD405,0x3A);
  1790.                 LCD_WriteReg(0xD406,0x00);
  1791.                 LCD_WriteReg(0xD407,0x4A);
  1792.                 LCD_WriteReg(0xD408,0x00);
  1793.                 LCD_WriteReg(0xD409,0x5C);
  1794.                 LCD_WriteReg(0xD40A,0x00);
  1795.                 LCD_WriteReg(0xD40B,0x81);

  1796.                 LCD_WriteReg(0xD40C,0x00);
  1797.                 LCD_WriteReg(0xD40D,0xA6);
  1798.                 LCD_WriteReg(0xD40E,0x00);
  1799.                 LCD_WriteReg(0xD40F,0xE5);
  1800.                 LCD_WriteReg(0xD410,0x01);
  1801.                 LCD_WriteReg(0xD411,0x13);
  1802.                 LCD_WriteReg(0xD412,0x01);
  1803.                 LCD_WriteReg(0xD413,0x54);
  1804.                 LCD_WriteReg(0xD414,0x01);
  1805.                 LCD_WriteReg(0xD415,0x82);
  1806.                 LCD_WriteReg(0xD416,0x01);
  1807.                 LCD_WriteReg(0xD417,0xCA);
  1808.                 LCD_WriteReg(0xD418,0x02);
  1809.                 LCD_WriteReg(0xD419,0x00);
  1810.                 LCD_WriteReg(0xD41A,0x02);
  1811.                 LCD_WriteReg(0xD41B,0x01);
  1812.                 LCD_WriteReg(0xD41C,0x02);
  1813.                 LCD_WriteReg(0xD41D,0x34);
  1814.                 LCD_WriteReg(0xD41E,0x02);
  1815.                 LCD_WriteReg(0xD41F,0x67);
  1816.                 LCD_WriteReg(0xD420,0x02);
  1817.                 LCD_WriteReg(0xD421,0x84);
  1818.                 LCD_WriteReg(0xD422,0x02);
  1819.                 LCD_WriteReg(0xD423,0xA4);
  1820.                 LCD_WriteReg(0xD424,0x02);
  1821.                 LCD_WriteReg(0xD425,0xB7);
  1822.                 LCD_WriteReg(0xD426,0x02);
  1823.                 LCD_WriteReg(0xD427,0xCF);
  1824.                 LCD_WriteReg(0xD428,0x02);
  1825.                 LCD_WriteReg(0xD429,0xDE);
  1826.                 LCD_WriteReg(0xD42A,0x02);
  1827.                 LCD_WriteReg(0xD42B,0xF2);
  1828.                 LCD_WriteReg(0xD42C,0x02);
  1829.                 LCD_WriteReg(0xD42D,0xFE);
  1830.                 LCD_WriteReg(0xD42E,0x03);
  1831.                 LCD_WriteReg(0xD42F,0x10);
  1832.                 LCD_WriteReg(0xD430,0x03);
  1833.                 LCD_WriteReg(0xD431,0x33);
  1834.                 LCD_WriteReg(0xD432,0x03);
  1835.                 LCD_WriteReg(0xD433,0x6D);
  1836.                 LCD_WriteReg(0xD500,0x00);
  1837.                 LCD_WriteReg(0xD501,0x33);
  1838.                 LCD_WriteReg(0xD502,0x00);
  1839.                 LCD_WriteReg(0xD503,0x34);
  1840.                 LCD_WriteReg(0xD504,0x00);
  1841.                 LCD_WriteReg(0xD505,0x3A);
  1842.                 LCD_WriteReg(0xD506,0x00);
  1843.                 LCD_WriteReg(0xD507,0x4A);
  1844.                 LCD_WriteReg(0xD508,0x00);
  1845.                 LCD_WriteReg(0xD509,0x5C);
  1846.                 LCD_WriteReg(0xD50A,0x00);
  1847.                 LCD_WriteReg(0xD50B,0x81);

  1848.                 LCD_WriteReg(0xD50C,0x00);
  1849.                 LCD_WriteReg(0xD50D,0xA6);
  1850.                 LCD_WriteReg(0xD50E,0x00);
  1851.                 LCD_WriteReg(0xD50F,0xE5);
  1852.                 LCD_WriteReg(0xD510,0x01);
  1853.                 LCD_WriteReg(0xD511,0x13);
  1854.                 LCD_WriteReg(0xD512,0x01);
  1855.                 LCD_WriteReg(0xD513,0x54);
  1856.                 LCD_WriteReg(0xD514,0x01);
  1857.                 LCD_WriteReg(0xD515,0x82);
  1858.                 LCD_WriteReg(0xD516,0x01);
  1859.                 LCD_WriteReg(0xD517,0xCA);
  1860.                 LCD_WriteReg(0xD518,0x02);
  1861.                 LCD_WriteReg(0xD519,0x00);
  1862.                 LCD_WriteReg(0xD51A,0x02);
  1863.                 LCD_WriteReg(0xD51B,0x01);
  1864.                 LCD_WriteReg(0xD51C,0x02);
  1865.                 LCD_WriteReg(0xD51D,0x34);
  1866.                 LCD_WriteReg(0xD51E,0x02);
  1867.                 LCD_WriteReg(0xD51F,0x67);
  1868.                 LCD_WriteReg(0xD520,0x02);
  1869.                 LCD_WriteReg(0xD521,0x84);
  1870.                 LCD_WriteReg(0xD522,0x02);
  1871.                 LCD_WriteReg(0xD523,0xA4);
  1872.                 LCD_WriteReg(0xD524,0x02);
  1873.                 LCD_WriteReg(0xD525,0xB7);
  1874.                 LCD_WriteReg(0xD526,0x02);
  1875.                 LCD_WriteReg(0xD527,0xCF);
  1876.                 LCD_WriteReg(0xD528,0x02);
  1877.                 LCD_WriteReg(0xD529,0xDE);
  1878.                 LCD_WriteReg(0xD52A,0x02);
  1879.                 LCD_WriteReg(0xD52B,0xF2);
  1880.                 LCD_WriteReg(0xD52C,0x02);
  1881.                 LCD_WriteReg(0xD52D,0xFE);
  1882.                 LCD_WriteReg(0xD52E,0x03);
  1883.                 LCD_WriteReg(0xD52F,0x10);
  1884.                 LCD_WriteReg(0xD530,0x03);
  1885.                 LCD_WriteReg(0xD531,0x33);
  1886.                 LCD_WriteReg(0xD532,0x03);
  1887.                 LCD_WriteReg(0xD533,0x6D);
  1888.                 LCD_WriteReg(0xD600,0x00);
  1889.                 LCD_WriteReg(0xD601,0x33);
  1890.                 LCD_WriteReg(0xD602,0x00);
  1891.                 LCD_WriteReg(0xD603,0x34);
  1892.                 LCD_WriteReg(0xD604,0x00);
  1893.                 LCD_WriteReg(0xD605,0x3A);
  1894.                 LCD_WriteReg(0xD606,0x00);
  1895.                 LCD_WriteReg(0xD607,0x4A);
  1896.                 LCD_WriteReg(0xD608,0x00);
  1897.                 LCD_WriteReg(0xD609,0x5C);
  1898.                 LCD_WriteReg(0xD60A,0x00);
  1899.                 LCD_WriteReg(0xD60B,0x81);

  1900.                 LCD_WriteReg(0xD60C,0x00);
  1901.                 LCD_WriteReg(0xD60D,0xA6);
  1902.                 LCD_WriteReg(0xD60E,0x00);
  1903.                 LCD_WriteReg(0xD60F,0xE5);
  1904.                 LCD_WriteReg(0xD610,0x01);
  1905.                 LCD_WriteReg(0xD611,0x13);
  1906.                 LCD_WriteReg(0xD612,0x01);
  1907.                 LCD_WriteReg(0xD613,0x54);
  1908.                 LCD_WriteReg(0xD614,0x01);
  1909.                 LCD_WriteReg(0xD615,0x82);
  1910.                 LCD_WriteReg(0xD616,0x01);
  1911.                 LCD_WriteReg(0xD617,0xCA);
  1912.                 LCD_WriteReg(0xD618,0x02);
  1913.                 LCD_WriteReg(0xD619,0x00);
  1914.                 LCD_WriteReg(0xD61A,0x02);
  1915.                 LCD_WriteReg(0xD61B,0x01);
  1916.                 LCD_WriteReg(0xD61C,0x02);
  1917.                 LCD_WriteReg(0xD61D,0x34);
  1918.                 LCD_WriteReg(0xD61E,0x02);
  1919.                 LCD_WriteReg(0xD61F,0x67);
  1920.                 LCD_WriteReg(0xD620,0x02);
  1921.                 LCD_WriteReg(0xD621,0x84);
  1922.                 LCD_WriteReg(0xD622,0x02);
  1923.                 LCD_WriteReg(0xD623,0xA4);
  1924.                 LCD_WriteReg(0xD624,0x02);
  1925.                 LCD_WriteReg(0xD625,0xB7);
  1926.                 LCD_WriteReg(0xD626,0x02);
  1927.                 LCD_WriteReg(0xD627,0xCF);
  1928.                 LCD_WriteReg(0xD628,0x02);
  1929.                 LCD_WriteReg(0xD629,0xDE);
  1930.                 LCD_WriteReg(0xD62A,0x02);
  1931.                 LCD_WriteReg(0xD62B,0xF2);
  1932.                 LCD_WriteReg(0xD62C,0x02);
  1933.                 LCD_WriteReg(0xD62D,0xFE);
  1934.                 LCD_WriteReg(0xD62E,0x03);
  1935.                 LCD_WriteReg(0xD62F,0x10);
  1936.                 LCD_WriteReg(0xD630,0x03);
  1937.                 LCD_WriteReg(0xD631,0x33);
  1938.                 LCD_WriteReg(0xD632,0x03);
  1939.                 LCD_WriteReg(0xD633,0x6D);
  1940.                 //LV2 Page 0 enable
  1941.                 LCD_WriteReg(0xF000,0x55);
  1942.                 LCD_WriteReg(0xF001,0xAA);
  1943.                 LCD_WriteReg(0xF002,0x52);
  1944.                 LCD_WriteReg(0xF003,0x08);
  1945.                 LCD_WriteReg(0xF004,0x00);
  1946.                 //Display control
  1947.                 LCD_WriteReg(0xB100, 0xCC);
  1948.                 LCD_WriteReg(0xB101, 0x00);
  1949.                 //Source hold time
  1950.                 LCD_WriteReg(0xB600,0x05);
  1951.                 //Gate EQ control
  1952.                 LCD_WriteReg(0xB700,0x70);
  1953.                 LCD_WriteReg(0xB701,0x70);
  1954.                 //Source EQ control (Mode 2)
  1955.                 LCD_WriteReg(0xB800,0x01);
  1956.                 LCD_WriteReg(0xB801,0x03);
  1957.                 LCD_WriteReg(0xB802,0x03);
  1958.                 LCD_WriteReg(0xB803,0x03);
  1959.                 //Inversion mode (2-dot)
  1960.                 LCD_WriteReg(0xBC00,0x02);
  1961.                 LCD_WriteReg(0xBC01,0x00);
  1962.                 LCD_WriteReg(0xBC02,0x00);
  1963.                 //Timing control 4H w/ 4-delay
  1964.                 LCD_WriteReg(0xC900,0xD0);
  1965.                 LCD_WriteReg(0xC901,0x02);
  1966.                 LCD_WriteReg(0xC902,0x50);
  1967.                 LCD_WriteReg(0xC903,0x50);
  1968.                 LCD_WriteReg(0xC904,0x50);
  1969.                 LCD_WriteReg(0x3500,0x00);
  1970.                 LCD_WriteReg(0x3A00,0x55);  //16-bit/pixel
  1971.                 LCD_WR_REG(0x1100);
  1972.                 delay_us(120);
  1973.                 LCD_WR_REG(0x2900);
  1974.         }else if(lcddev.id==0x9325)//9325
  1975.         {
  1976.                 LCD_WriteReg(0x00E5,0x78F0);
  1977.                 LCD_WriteReg(0x0001,0x0100);
  1978.                 LCD_WriteReg(0x0002,0x0700);
  1979.                 LCD_WriteReg(0x0003,0x1030);
  1980.                 LCD_WriteReg(0x0004,0x0000);
  1981.                 LCD_WriteReg(0x0008,0x0202);  
  1982.                 LCD_WriteReg(0x0009,0x0000);
  1983.                 LCD_WriteReg(0x000A,0x0000);
  1984.                 LCD_WriteReg(0x000C,0x0000);
  1985.                 LCD_WriteReg(0x000D,0x0000);
  1986.                 LCD_WriteReg(0x000F,0x0000);
  1987.                 //power on sequence VGHVGL
  1988.                 LCD_WriteReg(0x0010,0x0000);   
  1989.                 LCD_WriteReg(0x0011,0x0007);  
  1990.                 LCD_WriteReg(0x0012,0x0000);  
  1991.                 LCD_WriteReg(0x0013,0x0000);
  1992.                 LCD_WriteReg(0x0007,0x0000);
  1993.                 //vgh
  1994.                 LCD_WriteReg(0x0010,0x1690);   
  1995.                 LCD_WriteReg(0x0011,0x0227);
  1996.                 //delayms(100);
  1997.                 //vregiout
  1998.                 LCD_WriteReg(0x0012,0x009D); //0x001b
  1999.                 //delayms(100);
  2000.                 //vom amplitude
  2001.                 LCD_WriteReg(0x0013,0x1900);
  2002.                 //delayms(100);
  2003.                 //vom H
  2004.                 LCD_WriteReg(0x0029,0x0025);
  2005.                 LCD_WriteReg(0x002B,0x000D);
  2006.                 //gamma
  2007.                 LCD_WriteReg(0x0030,0x0007);
  2008.                 LCD_WriteReg(0x0031,0x0303);
  2009.                 LCD_WriteReg(0x0032,0x0003);// 0006
  2010.                 LCD_WriteReg(0x0035,0x0206);
  2011.                 LCD_WriteReg(0x0036,0x0008);
  2012.                 LCD_WriteReg(0x0037,0x0406);
  2013.                 LCD_WriteReg(0x0038,0x0304);//0200
  2014.                 LCD_WriteReg(0x0039,0x0007);
  2015.                 LCD_WriteReg(0x003C,0x0602);// 0504
  2016.                 LCD_WriteReg(0x003D,0x0008);
  2017.                 //ram
  2018.                 LCD_WriteReg(0x0050,0x0000);
  2019.                 LCD_WriteReg(0x0051,0x00EF);
  2020.                 LCD_WriteReg(0x0052,0x0000);
  2021.                 LCD_WriteReg(0x0053,0x013F);  
  2022.                 LCD_WriteReg(0x0060,0xA700);
  2023.                 LCD_WriteReg(0x0061,0x0001);
  2024.                 LCD_WriteReg(0x006A,0x0000);
  2025.                 //
  2026.                 LCD_WriteReg(0x0080,0x0000);
  2027.                 LCD_WriteReg(0x0081,0x0000);
  2028.                 LCD_WriteReg(0x0082,0x0000);
  2029.                 LCD_WriteReg(0x0083,0x0000);
  2030.                 LCD_WriteReg(0x0084,0x0000);
  2031.                 LCD_WriteReg(0x0085,0x0000);
  2032.                 //
  2033.                 LCD_WriteReg(0x0090,0x0010);
  2034.                 LCD_WriteReg(0x0092,0x0600);
  2035.                
  2036.                 LCD_WriteReg(0x0007,0x0133);
  2037.                 LCD_WriteReg(0x00,0x0022);//
  2038.         }else if(lcddev.id==0x9328)//ILI9328   OK  
  2039.         {
  2040.                   LCD_WriteReg(0x00EC,0x108F);// internal timeing      
  2041.                 LCD_WriteReg(0x00EF,0x1234);// ADD        
  2042.                 //LCD_WriteReg(0x00e7,0x0010);      
  2043.         //LCD_WriteReg(0x0000,0x0001);//开启内部时钟
  2044.         LCD_WriteReg(0x0001,0x0100);     
  2045.         LCD_WriteReg(0x0002,0x0700);//电源开启                    
  2046.                 //LCD_WriteReg(0x0003,(1<<3)|(1<<4) );         //65K  RGB
  2047.                 //DRIVE TABLE(寄存器 03H)
  2048.                 //BIT3=AM BIT4:5=ID0:1
  2049.                 //AM ID0 ID1   FUNCATION
  2050.                 // 0  0   0           R->L D->U
  2051.                 // 1  0   0           D->U        R->L
  2052.                 // 0  1   0           L->R D->U
  2053.                 // 1  1   0    D->U        L->R
  2054.                 // 0  0   1           R->L U->D
  2055.                 // 1  0   1    U->D        R->L
  2056.                 // 0  1   1    L->R U->D 正常就用这个.
  2057.                 // 1  1   1           U->D        L->R
  2058.         LCD_WriteReg(0x0003,(1<<12)|(3<<4)|(0<<3) );//65K   
  2059.         LCD_WriteReg(0x0004,0x0000);                                   
  2060.         LCD_WriteReg(0x0008,0x0202);                   
  2061.         LCD_WriteReg(0x0009,0x0000);         
  2062.         LCD_WriteReg(0x000a,0x0000);//display setting         
  2063.         LCD_WriteReg(0x000c,0x0001);//display setting         
  2064.         LCD_WriteReg(0x000d,0x0000);//0f3c         
  2065.         LCD_WriteReg(0x000f,0x0000);
  2066.                 //电源配置
  2067.         LCD_WriteReg(0x0010,0x0000);   
  2068.         LCD_WriteReg(0x0011,0x0007);
  2069.         LCD_WriteReg(0x0012,0x0000);                                                                 
  2070.         LCD_WriteReg(0x0013,0x0000);                 
  2071.              LCD_WriteReg(0x0007,0x0001);                 
  2072.                delay_ms(50);
  2073.         LCD_WriteReg(0x0010,0x1490);   
  2074.         LCD_WriteReg(0x0011,0x0227);
  2075.         delay_ms(50);
  2076.         LCD_WriteReg(0x0012,0x008A);                  
  2077.         delay_ms(50);
  2078.         LCD_WriteReg(0x0013,0x1a00);   
  2079.         LCD_WriteReg(0x0029,0x0006);
  2080.         LCD_WriteReg(0x002b,0x000d);
  2081.         delay_ms(50);
  2082.         LCD_WriteReg(0x0020,0x0000);                                                            
  2083.         LCD_WriteReg(0x0021,0x0000);           
  2084.                 delay_ms(50);
  2085.                 //伽马校正
  2086.         LCD_WriteReg(0x0030,0x0000);
  2087.         LCD_WriteReg(0x0031,0x0604);   
  2088.         LCD_WriteReg(0x0032,0x0305);
  2089.         LCD_WriteReg(0x0035,0x0000);
  2090.         LCD_WriteReg(0x0036,0x0C09);
  2091.         LCD_WriteReg(0x0037,0x0204);
  2092.         LCD_WriteReg(0x0038,0x0301);        
  2093.         LCD_WriteReg(0x0039,0x0707);     
  2094.         LCD_WriteReg(0x003c,0x0000);
  2095.         LCD_WriteReg(0x003d,0x0a0a);
  2096.         delay_ms(50);
  2097.         LCD_WriteReg(0x0050,0x0000); //水平GRAM起始位置
  2098.         LCD_WriteReg(0x0051,0x00ef); //水平GRAM终止位置                    
  2099.         LCD_WriteReg(0x0052,0x0000); //垂直GRAM起始位置                    
  2100.         LCD_WriteReg(0x0053,0x013f); //垂直GRAM终止位置  

  2101.          LCD_WriteReg(0x0060,0xa700);        
  2102.         LCD_WriteReg(0x0061,0x0001);
  2103.         LCD_WriteReg(0x006a,0x0000);
  2104.         LCD_WriteReg(0x0080,0x0000);
  2105.         LCD_WriteReg(0x0081,0x0000);
  2106.         LCD_WriteReg(0x0082,0x0000);
  2107.         LCD_WriteReg(0x0083,0x0000);
  2108.         LCD_WriteReg(0x0084,0x0000);
  2109.         LCD_WriteReg(0x0085,0x0000);
  2110.       
  2111.         LCD_WriteReg(0x0090,0x0010);     
  2112.         LCD_WriteReg(0x0092,0x0600);  
  2113.         //开启显示设置   
  2114.         LCD_WriteReg(0x0007,0x0133);
  2115.         }else if(lcddev.id==0x9320)//测试OK.
  2116.         {
  2117.                 LCD_WriteReg(0x00,0x0000);
  2118.                 LCD_WriteReg(0x01,0x0100);        //Driver Output Contral.
  2119.                 LCD_WriteReg(0x02,0x0700);        //LCD Driver Waveform Contral.
  2120.                 LCD_WriteReg(0x03,0x1030);//Entry Mode Set.
  2121.                 //LCD_WriteReg(0x03,0x1018);        //Entry Mode Set.
  2122.        
  2123.                 LCD_WriteReg(0x04,0x0000);        //Scalling Contral.
  2124.                 LCD_WriteReg(0x08,0x0202);        //Display Contral 2.(0x0207)
  2125.                 LCD_WriteReg(0x09,0x0000);        //Display Contral 3.(0x0000)
  2126.                 LCD_WriteReg(0x0a,0x0000);        //Frame Cycle Contal.(0x0000)
  2127.                 LCD_WriteReg(0x0c,(1<<0));        //Extern Display Interface Contral 1.(0x0000)
  2128.                 LCD_WriteReg(0x0d,0x0000);        //Frame Maker Position.
  2129.                 LCD_WriteReg(0x0f,0x0000);        //Extern Display Interface Contral 2.            
  2130.                 delay_ms(50);
  2131.                 LCD_WriteReg(0x07,0x0101);        //Display Contral.
  2132.                 delay_ms(50);                                                                   
  2133.                 LCD_WriteReg(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));        //Power Control 1.(0x16b0)
  2134.                 LCD_WriteReg(0x11,0x0007);                                                                //Power Control 2.(0x0001)
  2135.                 LCD_WriteReg(0x12,(1<<8)|(1<<4)|(0<<0));                                //Power Control 3.(0x0138)
  2136.                 LCD_WriteReg(0x13,0x0b00);                                                                //Power Control 4.
  2137.                 LCD_WriteReg(0x29,0x0000);                                                                //Power Control 7.
  2138.        
  2139.                 LCD_WriteReg(0x2b,(1<<14)|(1<<4));            
  2140.                 LCD_WriteReg(0x50,0);        //Set X Star
  2141.                 //水平GRAM终止位置Set X End.
  2142.                 LCD_WriteReg(0x51,239);        //Set Y Star
  2143.                 LCD_WriteReg(0x52,0);        //Set Y End.t.
  2144.                 LCD_WriteReg(0x53,319);        //
  2145.        
  2146.                 LCD_WriteReg(0x60,0x2700);        //Driver Output Control.
  2147.                 LCD_WriteReg(0x61,0x0001);        //Driver Output Control.
  2148.                 LCD_WriteReg(0x6a,0x0000);        //Vertical Srcoll Control.
  2149.        
  2150.                 LCD_WriteReg(0x80,0x0000);        //Display Position? Partial Display 1.
  2151.                 LCD_WriteReg(0x81,0x0000);        //RAM Address Start? Partial Display 1.
  2152.                 LCD_WriteReg(0x82,0x0000);        //RAM Address End-Partial Display 1.
  2153.                 LCD_WriteReg(0x83,0x0000);        //Displsy Position? Partial Display 2.
  2154.                 LCD_WriteReg(0x84,0x0000);        //RAM Address Start? Partial Display 2.
  2155.                 LCD_WriteReg(0x85,0x0000);        //RAM Address End? Partial Display 2.
  2156.        
  2157.                 LCD_WriteReg(0x90,(0<<7)|(16<<0));        //Frame Cycle Contral.(0x0013)
  2158.                 LCD_WriteReg(0x92,0x0000);        //Panel Interface Contral 2.(0x0000)
  2159.                 LCD_WriteReg(0x93,0x0001);        //Panel Interface Contral 3.
  2160.                 LCD_WriteReg(0x95,0x0110);        //Frame Cycle Contral.(0x0110)
  2161.                 LCD_WriteReg(0x97,(0<<8));        //
  2162.                 LCD_WriteReg(0x98,0x0000);        //Frame Cycle Contral.          
  2163.                 LCD_WriteReg(0x07,0x0173);        //(0x0173)
  2164.         }else if(lcddev.id==0X9331)//OK |/|/|                         
  2165.         {
  2166.                 LCD_WriteReg(0x00E7, 0x1014);
  2167.                 LCD_WriteReg(0x0001, 0x0100); // set SS and SM bit
  2168.                 LCD_WriteReg(0x0002, 0x0200); // set 1 line inversion
  2169.         LCD_WriteReg(0x0003,(1<<12)|(3<<4)|(1<<3));//65K   
  2170.                 //LCD_WriteReg(0x0003, 0x1030); // set GRAM write direction and BGR=1.
  2171.                 LCD_WriteReg(0x0008, 0x0202); // set the back porch and front porch
  2172.                 LCD_WriteReg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
  2173.                 LCD_WriteReg(0x000A, 0x0000); // FMARK function
  2174.                 LCD_WriteReg(0x000C, 0x0000); // RGB interface setting
  2175.                 LCD_WriteReg(0x000D, 0x0000); // Frame marker Position
  2176.                 LCD_WriteReg(0x000F, 0x0000); // RGB interface polarity
  2177.                 //*************Power On sequence ****************//
  2178.                 LCD_WriteReg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
  2179.                 LCD_WriteReg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
  2180.                 LCD_WriteReg(0x0012, 0x0000); // VREG1OUT voltage
  2181.                 LCD_WriteReg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
  2182.                 delay_ms(200); // Dis-charge capacitor power voltage
  2183.                 LCD_WriteReg(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB
  2184.                 LCD_WriteReg(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
  2185.                 delay_ms(50); // Delay 50ms
  2186.                 LCD_WriteReg(0x0012, 0x000C); // Internal reference voltage= Vci;
  2187.                 delay_ms(50); // Delay 50ms
  2188.                 LCD_WriteReg(0x0013, 0x0800); // Set VDV[4:0] for VCOM amplitude
  2189.                 LCD_WriteReg(0x0029, 0x0011); // Set VCM[5:0] for VCOMH
  2190.                 LCD_WriteReg(0x002B, 0x000B); // Set Frame Rate
  2191.                 delay_ms(50); // Delay 50ms
  2192.                 LCD_WriteReg(0x0020, 0x0000); // GRAM horizontal Address
  2193.                 LCD_WriteReg(0x0021, 0x013f); // GRAM Vertical Address
  2194.                 // ----------- Adjust the Gamma Curve ----------//
  2195.                 LCD_WriteReg(0x0030, 0x0000);
  2196.                 LCD_WriteReg(0x0031, 0x0106);
  2197.                 LCD_WriteReg(0x0032, 0x0000);
  2198.                 LCD_WriteReg(0x0035, 0x0204);
  2199.                 LCD_WriteReg(0x0036, 0x160A);
  2200.                 LCD_WriteReg(0x0037, 0x0707);
  2201.                 LCD_WriteReg(0x0038, 0x0106);
  2202.                 LCD_WriteReg(0x0039, 0x0707);
  2203.                 LCD_WriteReg(0x003C, 0x0402);
  2204.                 LCD_WriteReg(0x003D, 0x0C0F);
  2205.                 //------------------ Set GRAM area ---------------//
  2206.                 LCD_WriteReg(0x0050, 0x0000); // Horizontal GRAM Start Address
  2207.                 LCD_WriteReg(0x0051, 0x00EF); // Horizontal GRAM End Address
  2208.                 LCD_WriteReg(0x0052, 0x0000); // Vertical GRAM Start Address
  2209.                 LCD_WriteReg(0x0053, 0x013F); // Vertical GRAM Start Address
  2210.                 LCD_WriteReg(0x0060, 0x2700); // Gate Scan Line
  2211.                 LCD_WriteReg(0x0061, 0x0001); // NDL,VLE, REV
  2212.                 LCD_WriteReg(0x006A, 0x0000); // set scrolling line
  2213.                 //-------------- Partial Display Control ---------//
  2214.                 LCD_WriteReg(0x0080, 0x0000);
  2215.                 LCD_WriteReg(0x0081, 0x0000);
  2216.                 LCD_WriteReg(0x0082, 0x0000);
  2217.                 LCD_WriteReg(0x0083, 0x0000);
  2218.                 LCD_WriteReg(0x0084, 0x0000);
  2219.                 LCD_WriteReg(0x0085, 0x0000);
  2220.                 //-------------- Panel Control -------------------//
  2221.                 LCD_WriteReg(0x0090, 0x0010);
  2222.                 LCD_WriteReg(0x0092, 0x0600);
  2223.                 LCD_WriteReg(0x0007, 0x0133); // 262K color and display ON
  2224.         }else if(lcddev.id==0x5408)
  2225.         {
  2226.                 LCD_WriteReg(0x01,0x0100);                                                                  
  2227.                 LCD_WriteReg(0x02,0x0700);//LCD Driving Waveform Contral
  2228.                 LCD_WriteReg(0x03,0x1030);//Entry Mode设置           
  2229.                 //指针从左至右自上而下的自动增模式
  2230.                 //Normal Mode(Window Mode disable)
  2231.                 //RGB格式
  2232.                 //16位数据2次传输的8总线设置
  2233.                 LCD_WriteReg(0x04,0x0000); //Scalling Control register     
  2234.                 LCD_WriteReg(0x08,0x0207); //Display Control 2
  2235.                 LCD_WriteReg(0x09,0x0000); //Display Control 3         
  2236.                 LCD_WriteReg(0x0A,0x0000); //Frame Cycle Control         
  2237.                 LCD_WriteReg(0x0C,0x0000); //External Display Interface Control 1
  2238.                 LCD_WriteReg(0x0D,0x0000); //Frame Maker Position                 
  2239.                 LCD_WriteReg(0x0F,0x0000); //External Display Interface Control 2
  2240.                 delay_ms(20);
  2241.                 //TFT 液晶彩色图像显示方法14
  2242.                 LCD_WriteReg(0x10,0x16B0); //0x14B0 //Power Control 1
  2243.                 LCD_WriteReg(0x11,0x0001); //0x0007 //Power Control 2
  2244.                 LCD_WriteReg(0x17,0x0001); //0x0000 //Power Control 3
  2245.                 LCD_WriteReg(0x12,0x0138); //0x013B //Power Control 4
  2246.                 LCD_WriteReg(0x13,0x0800); //0x0800 //Power Control 5
  2247.                 LCD_WriteReg(0x29,0x0009); //NVM read data 2
  2248.                 LCD_WriteReg(0x2a,0x0009); //NVM read data 3
  2249.                 LCD_WriteReg(0xa4,0x0000);         
  2250.                 LCD_WriteReg(0x50,0x0000); //设置操作窗口的X轴开始列
  2251.                 LCD_WriteReg(0x51,0x00EF); //设置操作窗口的X轴结束列
  2252.                 LCD_WriteReg(0x52,0x0000); //设置操作窗口的Y轴开始行
  2253.                 LCD_WriteReg(0x53,0x013F); //设置操作窗口的Y轴结束行
  2254.                 LCD_WriteReg(0x60,0x2700); //Driver Output Control
  2255.                 //设置屏幕的点数以及扫描的起始行
  2256.                 LCD_WriteReg(0x61,0x0001); //Driver Output Control
  2257.                 LCD_WriteReg(0x6A,0x0000); //Vertical Scroll Control
  2258.                 LCD_WriteReg(0x80,0x0000); //Display Position – Partial Display 1
  2259.                 LCD_WriteReg(0x81,0x0000); //RAM Address Start – Partial Display 1
  2260.                 LCD_WriteReg(0x82,0x0000); //RAM address End - Partial Display 1
  2261.                 LCD_WriteReg(0x83,0x0000); //Display Position – Partial Display 2
  2262.                 LCD_WriteReg(0x84,0x0000); //RAM Address Start – Partial Display 2
  2263.                 LCD_WriteReg(0x85,0x0000); //RAM address End – Partail Display2
  2264.                 LCD_WriteReg(0x90,0x0013); //Frame Cycle Control
  2265.                 LCD_WriteReg(0x92,0x0000);  //Panel Interface Control 2
  2266.                 LCD_WriteReg(0x93,0x0003); //Panel Interface control 3
  2267.                 LCD_WriteReg(0x95,0x0110);  //Frame Cycle Control
  2268.                 LCD_WriteReg(0x07,0x0173);                 
  2269.                 delay_ms(50);
  2270.         }       
  2271.         else if(lcddev.id==0x1505)//OK
  2272.         {
  2273.                 // second release on 3/5  ,luminance is acceptable,water wave appear during camera preview
  2274.         LCD_WriteReg(0x0007,0x0000);
  2275.         delay_ms(50);
  2276.         LCD_WriteReg(0x0012,0x011C);//0x011A   why need to set several times?
  2277.         LCD_WriteReg(0x00A4,0x0001);//NVM         
  2278.         LCD_WriteReg(0x0008,0x000F);
  2279.         LCD_WriteReg(0x000A,0x0008);
  2280.         LCD_WriteReg(0x000D,0x0008);            
  2281.                   //伽马校正
  2282.         LCD_WriteReg(0x0030,0x0707);
  2283.         LCD_WriteReg(0x0031,0x0007); //0x0707
  2284.         LCD_WriteReg(0x0032,0x0603);
  2285.         LCD_WriteReg(0x0033,0x0700);
  2286.         LCD_WriteReg(0x0034,0x0202);
  2287.         LCD_WriteReg(0x0035,0x0002); //?0x0606
  2288.         LCD_WriteReg(0x0036,0x1F0F);
  2289.         LCD_WriteReg(0x0037,0x0707); //0x0f0f  0x0105
  2290.         LCD_WriteReg(0x0038,0x0000);
  2291.         LCD_WriteReg(0x0039,0x0000);
  2292.         LCD_WriteReg(0x003A,0x0707);
  2293.         LCD_WriteReg(0x003B,0x0000); //0x0303
  2294.         LCD_WriteReg(0x003C,0x0007); //?0x0707
  2295.         LCD_WriteReg(0x003D,0x0000); //0x1313//0x1f08
  2296.         delay_ms(50);
  2297.         LCD_WriteReg(0x0007,0x0001);
  2298.         LCD_WriteReg(0x0017,0x0001);//开启电源
  2299.         delay_ms(50);
  2300.                   //电源配置
  2301.         LCD_WriteReg(0x0010,0x17A0);
  2302.         LCD_WriteReg(0x0011,0x0217);//reference voltage VC[2:0]   Vciout = 1.00*Vcivl
  2303.         LCD_WriteReg(0x0012,0x011E);//0x011c  //Vreg1out = Vcilvl*1.80   is it the same as Vgama1out ?
  2304.         LCD_WriteReg(0x0013,0x0F00);//VDV[4:0]-->VCOM Amplitude VcomL = VcomH - Vcom Ampl
  2305.         LCD_WriteReg(0x002A,0x0000);  
  2306.         LCD_WriteReg(0x0029,0x000A);//0x0001F  Vcomh = VCM1[4:0]*Vreg1out    gate source voltage??
  2307.         LCD_WriteReg(0x0012,0x013E);// 0x013C  power supply on
  2308.         //Coordinates Control//
  2309.         LCD_WriteReg(0x0050,0x0000);//0x0e00
  2310.         LCD_WriteReg(0x0051,0x00EF);
  2311.         LCD_WriteReg(0x0052,0x0000);
  2312.         LCD_WriteReg(0x0053,0x013F);
  2313.             //Pannel Image Control//
  2314.         LCD_WriteReg(0x0060,0x2700);
  2315.         LCD_WriteReg(0x0061,0x0001);
  2316.         LCD_WriteReg(0x006A,0x0000);
  2317.         LCD_WriteReg(0x0080,0x0000);
  2318.             //Partial Image Control//
  2319.         LCD_WriteReg(0x0081,0x0000);
  2320.         LCD_WriteReg(0x0082,0x0000);
  2321.         LCD_WriteReg(0x0083,0x0000);
  2322.         LCD_WriteReg(0x0084,0x0000);
  2323.         LCD_WriteReg(0x0085,0x0000);
  2324.                   //Panel Interface Control//
  2325.         LCD_WriteReg(0x0090,0x0013);//0x0010 frenqucy
  2326.         LCD_WriteReg(0x0092,0x0300);
  2327.         LCD_WriteReg(0x0093,0x0005);
  2328.         LCD_WriteReg(0x0095,0x0000);
  2329.         LCD_WriteReg(0x0097,0x0000);
  2330.         LCD_WriteReg(0x0098,0x0000);
  2331.   
  2332.         LCD_WriteReg(0x0001,0x0100);
  2333.         LCD_WriteReg(0x0002,0x0700);
  2334.         LCD_WriteReg(0x0003,0x1038);//扫描方向 上->下  左->右
  2335.         LCD_WriteReg(0x0004,0x0000);
  2336.         LCD_WriteReg(0x000C,0x0000);
  2337.         LCD_WriteReg(0x000F,0x0000);
  2338.         LCD_WriteReg(0x0020,0x0000);
  2339.         LCD_WriteReg(0x0021,0x0000);
  2340.         LCD_WriteReg(0x0007,0x0021);
  2341.         delay_ms(20);
  2342.         LCD_WriteReg(0x0007,0x0061);
  2343.         delay_ms(20);
  2344.         LCD_WriteReg(0x0007,0x0173);
  2345.         delay_ms(20);
  2346.         }else if(lcddev.id==0xB505)
  2347.         {
  2348.                 LCD_WriteReg(0x0000,0x0000);
  2349.                 LCD_WriteReg(0x0000,0x0000);
  2350.                 LCD_WriteReg(0x0000,0x0000);
  2351.                 LCD_WriteReg(0x0000,0x0000);
  2352.                
  2353.                 LCD_WriteReg(0x00a4,0x0001);
  2354.                 delay_ms(20);                  
  2355.                 LCD_WriteReg(0x0060,0x2700);
  2356.                 LCD_WriteReg(0x0008,0x0202);
  2357.                
  2358.                 LCD_WriteReg(0x0030,0x0214);
  2359.                 LCD_WriteReg(0x0031,0x3715);
  2360.                 LCD_WriteReg(0x0032,0x0604);
  2361.                 LCD_WriteReg(0x0033,0x0e16);
  2362.                 LCD_WriteReg(0x0034,0x2211);
  2363.                 LCD_WriteReg(0x0035,0x1500);
  2364.                 LCD_WriteReg(0x0036,0x8507);
  2365.                 LCD_WriteReg(0x0037,0x1407);
  2366.                 LCD_WriteReg(0x0038,0x1403);
  2367.                 LCD_WriteReg(0x0039,0x0020);
  2368.                
  2369.                 LCD_WriteReg(0x0090,0x001a);
  2370.                 LCD_WriteReg(0x0010,0x0000);
  2371.                 LCD_WriteReg(0x0011,0x0007);
  2372.                 LCD_WriteReg(0x0012,0x0000);
  2373.                 LCD_WriteReg(0x0013,0x0000);
  2374.                 delay_ms(20);
  2375.                
  2376.                 LCD_WriteReg(0x0010,0x0730);
  2377.                 LCD_WriteReg(0x0011,0x0137);
  2378.                 delay_ms(20);
  2379.                
  2380.                 LCD_WriteReg(0x0012,0x01b8);
  2381.                 delay_ms(20);
  2382.                
  2383.                 LCD_WriteReg(0x0013,0x0f00);
  2384.                 LCD_WriteReg(0x002a,0x0080);
  2385.                 LCD_WriteReg(0x0029,0x0048);
  2386.                 delay_ms(20);
  2387.                
  2388.                 LCD_WriteReg(0x0001,0x0100);
  2389.                 LCD_WriteReg(0x0002,0x0700);
  2390.         LCD_WriteReg(0x0003,0x1038);//扫描方向 上->下  左->右
  2391.                 LCD_WriteReg(0x0008,0x0202);
  2392.                 LCD_WriteReg(0x000a,0x0000);
  2393.                 LCD_WriteReg(0x000c,0x0000);
  2394.                 LCD_WriteReg(0x000d,0x0000);
  2395.                 LCD_WriteReg(0x000e,0x0030);
  2396.                 LCD_WriteReg(0x0050,0x0000);
  2397.                 LCD_WriteReg(0x0051,0x00ef);
  2398.                 LCD_WriteReg(0x0052,0x0000);
  2399.                 LCD_WriteReg(0x0053,0x013f);
  2400.                 LCD_WriteReg(0x0060,0x2700);
  2401.                 LCD_WriteReg(0x0061,0x0001);
  2402.                 LCD_WriteReg(0x006a,0x0000);
  2403.                 //LCD_WriteReg(0x0080,0x0000);
  2404.                 //LCD_WriteReg(0x0081,0x0000);
  2405.                 LCD_WriteReg(0x0090,0X0011);
  2406.                 LCD_WriteReg(0x0092,0x0600);
  2407.                 LCD_WriteReg(0x0093,0x0402);
  2408.                 LCD_WriteReg(0x0094,0x0002);
  2409.                 delay_ms(20);
  2410.                
  2411.                 LCD_WriteReg(0x0007,0x0001);
  2412.                 delay_ms(20);
  2413.                 LCD_WriteReg(0x0007,0x0061);
  2414.                 LCD_WriteReg(0x0007,0x0173);
  2415.                
  2416.                 LCD_WriteReg(0x0020,0x0000);
  2417.                 LCD_WriteReg(0x0021,0x0000);          
  2418.                 LCD_WriteReg(0x00,0x22);  
  2419.         }else if(lcddev.id==0xC505)
  2420.         {
  2421.                 LCD_WriteReg(0x0000,0x0000);
  2422.                 LCD_WriteReg(0x0000,0x0000);
  2423.                 delay_ms(20);                  
  2424.                 LCD_WriteReg(0x0000,0x0000);
  2425.                 LCD_WriteReg(0x0000,0x0000);
  2426.                 LCD_WriteReg(0x0000,0x0000);
  2427.                 LCD_WriteReg(0x0000,0x0000);
  2428.                 LCD_WriteReg(0x00a4,0x0001);
  2429.                 delay_ms(20);                  
  2430.                 LCD_WriteReg(0x0060,0x2700);
  2431.                 LCD_WriteReg(0x0008,0x0806);
  2432.                
  2433.                 LCD_WriteReg(0x0030,0x0703);//gamma setting
  2434.                 LCD_WriteReg(0x0031,0x0001);
  2435.                 LCD_WriteReg(0x0032,0x0004);
  2436.                 LCD_WriteReg(0x0033,0x0102);
  2437.                 LCD_WriteReg(0x0034,0x0300);
  2438.                 LCD_WriteReg(0x0035,0x0103);
  2439.                 LCD_WriteReg(0x0036,0x001F);
  2440.                 LCD_WriteReg(0x0037,0x0703);
  2441.                 LCD_WriteReg(0x0038,0x0001);
  2442.                 LCD_WriteReg(0x0039,0x0004);
  2443.                
  2444.                
  2445.                
  2446.                 LCD_WriteReg(0x0090, 0x0015);        //80Hz
  2447.                 LCD_WriteReg(0x0010, 0X0410);        //BT,AP
  2448.                 LCD_WriteReg(0x0011,0x0247);        //DC1,DC0,VC
  2449.                 LCD_WriteReg(0x0012, 0x01BC);
  2450.                 LCD_WriteReg(0x0013, 0x0e00);
  2451.                 delay_ms(120);
  2452.                 LCD_WriteReg(0x0001, 0x0100);
  2453.                 LCD_WriteReg(0x0002, 0x0200);
  2454.                 LCD_WriteReg(0x0003, 0x1030);
  2455.                
  2456.                 LCD_WriteReg(0x000A, 0x0008);
  2457.                 LCD_WriteReg(0x000C, 0x0000);
  2458.                
  2459.                 LCD_WriteReg(0x000E, 0x0020);
  2460.                 LCD_WriteReg(0x000F, 0x0000);
  2461.                 LCD_WriteReg(0x0020, 0x0000);        //H Start
  2462.                 LCD_WriteReg(0x0021, 0x0000);        //V Start
  2463.                 LCD_WriteReg(0x002A,0x003D);        //vcom2
  2464.                 delay_ms(20);
  2465.                 LCD_WriteReg(0x0029, 0x002d);
  2466.                 LCD_WriteReg(0x0050, 0x0000);
  2467.                 LCD_WriteReg(0x0051, 0xD0EF);
  2468.                 LCD_WriteReg(0x0052, 0x0000);
  2469.                 LCD_WriteReg(0x0053, 0x013F);
  2470.                 LCD_WriteReg(0x0061, 0x0000);
  2471.                 LCD_WriteReg(0x006A, 0x0000);
  2472.                 LCD_WriteReg(0x0092,0x0300);

  2473.                 LCD_WriteReg(0x0093, 0x0005);
  2474.                 LCD_WriteReg(0x0007, 0x0100);
  2475.         }else if(lcddev.id==0x4531)//OK |/|/|
  2476.         {
  2477.                 LCD_WriteReg(0X00,0X0001);   
  2478.                 delay_ms(10);   
  2479.                 LCD_WriteReg(0X10,0X1628);   
  2480.                 LCD_WriteReg(0X12,0X000e);//0x0006   
  2481.                 LCD_WriteReg(0X13,0X0A39);   
  2482.                 delay_ms(10);   
  2483.                 LCD_WriteReg(0X11,0X0040);   
  2484.                 LCD_WriteReg(0X15,0X0050);   
  2485.                 delay_ms(10);   
  2486.                 LCD_WriteReg(0X12,0X001e);//16   
  2487.                 delay_ms(10);   
  2488.                 LCD_WriteReg(0X10,0X1620);   
  2489.                 LCD_WriteReg(0X13,0X2A39);   
  2490.                 delay_ms(10);   
  2491.                 LCD_WriteReg(0X01,0X0100);   
  2492.                 LCD_WriteReg(0X02,0X0300);   
  2493.                 LCD_WriteReg(0X03,0X1038);//改变方向的   
  2494.                 LCD_WriteReg(0X08,0X0202);   
  2495.                 LCD_WriteReg(0X0A,0X0008);   
  2496.                 LCD_WriteReg(0X30,0X0000);   
  2497.                 LCD_WriteReg(0X31,0X0402);   
  2498.                 LCD_WriteReg(0X32,0X0106);   
  2499.                 LCD_WriteReg(0X33,0X0503);   
  2500.                 LCD_WriteReg(0X34,0X0104);   
  2501.                 LCD_WriteReg(0X35,0X0301);   
  2502.                 LCD_WriteReg(0X36,0X0707);   
  2503.                 LCD_WriteReg(0X37,0X0305);   
  2504.                 LCD_WriteReg(0X38,0X0208);   
  2505.                 LCD_WriteReg(0X39,0X0F0B);   
  2506.                 LCD_WriteReg(0X41,0X0002);   
  2507.                 LCD_WriteReg(0X60,0X2700);   
  2508.                 LCD_WriteReg(0X61,0X0001);   
  2509.                 LCD_WriteReg(0X90,0X0210);   
  2510.                 LCD_WriteReg(0X92,0X010A);   
  2511.                 LCD_WriteReg(0X93,0X0004);   
  2512.                 LCD_WriteReg(0XA0,0X0100);   
  2513.                 LCD_WriteReg(0X07,0X0001);   
  2514.                 LCD_WriteReg(0X07,0X0021);   
  2515.                 LCD_WriteReg(0X07,0X0023);   
  2516.                 LCD_WriteReg(0X07,0X0033);   
  2517.                 LCD_WriteReg(0X07,0X0133);   
  2518.                 LCD_WriteReg(0XA0,0X0000);
  2519.         }else if(lcddev.id==0x4535)
  2520.         {                             
  2521.                 LCD_WriteReg(0X15,0X0030);   
  2522.                 LCD_WriteReg(0X9A,0X0010);   
  2523.                 LCD_WriteReg(0X11,0X0020);   
  2524.                 LCD_WriteReg(0X10,0X3428);   
  2525.                 LCD_WriteReg(0X12,0X0002);//16   
  2526.                 LCD_WriteReg(0X13,0X1038);   
  2527.                 delay_ms(40);   
  2528.                 LCD_WriteReg(0X12,0X0012);//16   
  2529.                 delay_ms(40);   
  2530.                   LCD_WriteReg(0X10,0X3420);   
  2531.                 LCD_WriteReg(0X13,0X3038);   
  2532.                 delay_ms(70);   
  2533.                 LCD_WriteReg(0X30,0X0000);   
  2534.                 LCD_WriteReg(0X31,0X0402);   
  2535.                 LCD_WriteReg(0X32,0X0307);   
  2536.                 LCD_WriteReg(0X33,0X0304);   
  2537.                 LCD_WriteReg(0X34,0X0004);   
  2538.                 LCD_WriteReg(0X35,0X0401);   
  2539.                 LCD_WriteReg(0X36,0X0707);   
  2540.                 LCD_WriteReg(0X37,0X0305);   
  2541.                 LCD_WriteReg(0X38,0X0610);   
  2542.                 LCD_WriteReg(0X39,0X0610);
  2543.                   
  2544.                 LCD_WriteReg(0X01,0X0100);   
  2545.                 LCD_WriteReg(0X02,0X0300);   
  2546.                 LCD_WriteReg(0X03,0X1030);//改变方向的   
  2547.                 LCD_WriteReg(0X08,0X0808);   
  2548.                 LCD_WriteReg(0X0A,0X0008);   
  2549.                 LCD_WriteReg(0X60,0X2700);   
  2550.                 LCD_WriteReg(0X61,0X0001);   
  2551.                 LCD_WriteReg(0X90,0X013E);   
  2552.                 LCD_WriteReg(0X92,0X0100);   
  2553.                 LCD_WriteReg(0X93,0X0100);   
  2554.                 LCD_WriteReg(0XA0,0X3000);   
  2555.                 LCD_WriteReg(0XA3,0X0010);   
  2556.                 LCD_WriteReg(0X07,0X0001);   
  2557.                 LCD_WriteReg(0X07,0X0021);   
  2558.                 LCD_WriteReg(0X07,0X0023);   
  2559.                 LCD_WriteReg(0X07,0X0033);   
  2560.                 LCD_WriteReg(0X07,0X0133);   
  2561.         }else if(lcddev.id==0X1963)
  2562.         {
  2563.                 LCD_WR_REG(0xE2);                //Set PLL with OSC = 10MHz (hardware),        Multiplier N = 35, 250MHz < VCO < 800MHz = OSC*(N+1), VCO = 300MHz
  2564.                 LCD_WR_DATA(0x1D);                //参数1
  2565.                 LCD_WR_DATA(0x02);                //参数2 Divider M = 2, PLL = 300/(M+1) = 100MHz
  2566.                 LCD_WR_DATA(0x04);                //参数3 Validate M and N values   
  2567.                 delay_us(100);
  2568.                 LCD_WR_REG(0xE0);                // Start PLL command
  2569.                 LCD_WR_DATA(0x01);                // enable PLL
  2570.                 delay_ms(10);
  2571.                 LCD_WR_REG(0xE0);                // Start PLL command again
  2572.                 LCD_WR_DATA(0x03);                // now, use PLL output as system clock       
  2573.                 delay_ms(12);  
  2574.                 LCD_WR_REG(0x01);                //软复位
  2575.                 delay_ms(10);
  2576.                
  2577.                 LCD_WR_REG(0xE6);                //设置像素频率,33Mhz
  2578.                 LCD_WR_DATA(0x2F);
  2579.                 LCD_WR_DATA(0xFF);
  2580.                 LCD_WR_DATA(0xFF);
  2581.                
  2582.                 LCD_WR_REG(0xB0);                //设置LCD模式
  2583.                 LCD_WR_DATA(0x20);                //24位模式
  2584.                 LCD_WR_DATA(0x00);                //TFT 模式
  2585.        
  2586.                 LCD_WR_DATA((SSD_HOR_RESOLUTION-1)>>8);//设置LCD水平像素
  2587.                 LCD_WR_DATA(SSD_HOR_RESOLUTION-1);                 
  2588.                 LCD_WR_DATA((SSD_VER_RESOLUTION-1)>>8);//设置LCD垂直像素
  2589.                 LCD_WR_DATA(SSD_VER_RESOLUTION-1);                 
  2590.                 LCD_WR_DATA(0x00);                //RGB序列
  2591.                
  2592.                 LCD_WR_REG(0xB4);                //Set horizontal period
  2593.                 LCD_WR_DATA((SSD_HT-1)>>8);
  2594.                 LCD_WR_DATA(SSD_HT-1);
  2595.                 LCD_WR_DATA(SSD_HPS>>8);
  2596.                 LCD_WR_DATA(SSD_HPS);
  2597.                 LCD_WR_DATA(SSD_HOR_PULSE_WIDTH-1);
  2598.                 LCD_WR_DATA(0x00);
  2599.                 LCD_WR_DATA(0x00);
  2600.                 LCD_WR_DATA(0x00);
  2601.                 LCD_WR_REG(0xB6);                //Set vertical period
  2602.                 LCD_WR_DATA((SSD_VT-1)>>8);
  2603.                 LCD_WR_DATA(SSD_VT-1);
  2604.                 LCD_WR_DATA(SSD_VPS>>8);
  2605.                 LCD_WR_DATA(SSD_VPS);
  2606.                 LCD_WR_DATA(SSD_VER_FRONT_PORCH-1);
  2607.                 LCD_WR_DATA(0x00);
  2608.                 LCD_WR_DATA(0x00);
  2609.                
  2610.                 LCD_WR_REG(0xF0);        //设置SSD1963与CPU接口为16bit  
  2611.                 LCD_WR_DATA(0x03);        //16-bit(565 format) data for 16bpp

  2612.                 LCD_WR_REG(0x29);        //开启显示
  2613.                 //设置PWM输出  背光通过占空比可调
  2614.                 LCD_WR_REG(0xD0);        //设置自动白平衡DBC
  2615.                 LCD_WR_DATA(0x00);        //disable
  2616.        
  2617.                 LCD_WR_REG(0xBE);        //配置PWM输出
  2618.                 LCD_WR_DATA(0x05);        //1设置PWM频率
  2619.                 LCD_WR_DATA(0xFE);        //2设置PWM占空比
  2620.                 LCD_WR_DATA(0x01);        //3设置C
  2621.                 LCD_WR_DATA(0x00);        //4设置D
  2622.                 LCD_WR_DATA(0x00);        //5设置E
  2623.                 LCD_WR_DATA(0x00);        //6设置F
  2624.                
  2625.                 LCD_WR_REG(0xB8);        //设置GPIO配置
  2626.                 LCD_WR_DATA(0x03);        //2个IO口设置成输出
  2627.                 LCD_WR_DATA(0x01);        //GPIO使用正常的IO功能
  2628.                 LCD_WR_REG(0xBA);
  2629.                 LCD_WR_DATA(0X01);        //GPIO[1:0]=01,控制LCD方向
  2630.                
  2631.                 LCD_SSD_BackLightSet(100);//背光设置为最亮
  2632.         }                 
  2633.         LCD_Display_Dir(0);                //默认为竖屏
  2634.         LCD_LED=1;                                //点亮背光
  2635.         LCD_Clear(WHITE);
  2636. }  
  2637. //清屏函数
  2638. //color:要清屏的填充色
  2639. void LCD_Clear(u16 color)
  2640. {
  2641.         u32 index=0;      
  2642.         u32 totalpoint=lcddev.width;//---lcddev.height,lcddev.width这个是在LCD_Display_Dir中配置的
  2643.         totalpoint*=lcddev.height;                         //得到总点数
  2644.         if((lcddev.id==0X6804)&&(lcddev.dir==1))//6804横屏的时候特殊处理  
  2645.         {                                                    
  2646.                 lcddev.dir=0;         
  2647.                 lcddev.setxcmd=0X2A;
  2648.                 lcddev.setycmd=0X2B;                                  
  2649.                 LCD_SetCursor(0x00,0x0000);                //设置光标位置  
  2650.                 lcddev.dir=1;         
  2651.                   lcddev.setxcmd=0X2B;
  2652.                 lcddev.setycmd=0X2A;           
  2653.         }else LCD_SetCursor(0x00,0x0000);        //设置光标位置
  2654.         LCD_WriteRAM_Prepare();                     //开始写入GRAM         ---写入GRAM写入命令          
  2655.         for(index=0;index<totalpoint;index++)
  2656.         {
  2657.                 LCD->LCD_RAM=color;       
  2658.         }
  2659. }  
  2660. //在指定区域内填充单个颜色
  2661. //(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)   
  2662. //color:要填充的颜色
  2663. void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
  2664. {         
  2665.         u16 i,j;
  2666.         u16 xlen=0;
  2667.         u16 temp;
  2668.         if((lcddev.id==0X6804)&&(lcddev.dir==1))        //6804横屏的时候特殊处理  
  2669.         {
  2670.                 temp=sx;
  2671.                 sx=sy;
  2672.                 sy=lcddev.width-ex-1;          
  2673.                 ex=ey;
  2674.                 ey=lcddev.width-temp-1;
  2675.                 lcddev.dir=0;         
  2676.                 lcddev.setxcmd=0X2A;
  2677.                 lcddev.setycmd=0X2B;                                  
  2678.                 LCD_Fill(sx,sy,ex,ey,color);  
  2679.                 lcddev.dir=1;         
  2680.                   lcddev.setxcmd=0X2B;
  2681.                 lcddev.setycmd=0X2A;           
  2682.         }else
  2683.         {
  2684.                 xlen=ex-sx+1;         
  2685.                 for(i=sy;i<=ey;i++)
  2686.                 {
  2687.                          LCD_SetCursor(sx,i);                                      //设置光标位置
  2688.                         LCD_WriteRAM_Prepare();                             //开始写入GRAM          
  2689.                         for(j=0;j<xlen;j++)LCD->LCD_RAM=color;        //显示颜色             
  2690.                 }
  2691.         }         
  2692. }  
  2693. //在指定区域内填充指定颜色块                         
  2694. //(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)   
  2695. //color:要填充的颜色
  2696. void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color)
  2697. {  
  2698.         u16 height,width;
  2699.         u16 i,j;
  2700.         width=ex-sx+1;                         //得到填充的宽度
  2701.         height=ey-sy+1;                        //高度
  2702.         for(i=0;i<height;i++)
  2703.         {
  2704.                 LCD_SetCursor(sx,sy+i);           //设置光标位置
  2705.                 LCD_WriteRAM_Prepare();     //开始写入GRAM
  2706.                 for(j=0;j<width;j++)LCD->LCD_RAM=color[i*width+j];//写入数据
  2707.         }                  
  2708. }  
  2709. //画线
  2710. //x1,y1:起点坐标
  2711. //x2,y2:终点坐标  
  2712. void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
  2713. {
  2714.         u16 t;
  2715.         int xerr=0,yerr=0,delta_x,delta_y,distance;
  2716.         int incx,incy,uRow,uCol;
  2717.         delta_x=x2-x1; //计算坐标增量
  2718.         delta_y=y2-y1;
  2719.         uRow=x1;
  2720.         uCol=y1;
  2721.         if(delta_x>0)incx=1; //设置单步方向
  2722.         else if(delta_x==0)incx=0;//垂直线
  2723.         else {incx=-1;delta_x=-delta_x;}
  2724.         if(delta_y>0)incy=1;
  2725.         else if(delta_y==0)incy=0;//水平线
  2726.         else{incy=-1;delta_y=-delta_y;}
  2727.         if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴
  2728.         else distance=delta_y;
  2729.         for(t=0;t<=distance+1;t++ )//画线输出
  2730.         {  
  2731.                 LCD_DrawPoint(uRow,uCol);//画点
  2732.                 xerr+=delta_x ;
  2733.                 yerr+=delta_y ;
  2734.                 if(xerr>distance)
  2735.                 {
  2736.                         xerr-=distance;
  2737.                         uRow+=incx;
  2738.                 }
  2739.                 if(yerr>distance)
  2740.                 {
  2741.                         yerr-=distance;
  2742.                         uCol+=incy;
  2743.                 }
  2744.         }  
  2745. }   
  2746. //画矩形          
  2747. //(x1,y1),(x2,y2):矩形的对角坐标
  2748. void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
  2749. {
  2750.         LCD_DrawLine(x1,y1,x2,y1);
  2751.         LCD_DrawLine(x1,y1,x1,y2);
  2752.         LCD_DrawLine(x1,y2,x2,y2);
  2753.         LCD_DrawLine(x2,y1,x2,y2);
  2754. }
  2755. //在指定位置画一个指定大小的圆
  2756. //(x,y):中心点
  2757. //r    :半径
  2758. void LCD_Draw_Circle(u16 x0,u16 y0,u8 r)
  2759. {
  2760.         int a,b;
  2761.         int di;
  2762.         a=0;b=r;          
  2763.         di=3-(r<<1);             //判断下个点位置的标志
  2764.         while(a<=b)
  2765.         {
  2766.                 LCD_DrawPoint(x0+a,y0-b);             //5
  2767.                 LCD_DrawPoint(x0+b,y0-a);             //0           
  2768.                 LCD_DrawPoint(x0+b,y0+a);             //4               
  2769.                 LCD_DrawPoint(x0+a,y0+b);             //6
  2770.                 LCD_DrawPoint(x0-a,y0+b);             //1      
  2771.                 LCD_DrawPoint(x0-b,y0+a);            
  2772.                 LCD_DrawPoint(x0-a,y0-b);             //2            
  2773.                   LCD_DrawPoint(x0-b,y0-a);             //7                     
  2774.                 a++;
  2775.                 //使用Bresenham算法画圆     
  2776.                 if(di<0)di +=4*a+6;          
  2777.                 else
  2778.                 {
  2779.                         di+=10+4*(a-b);   
  2780.                         b--;
  2781.                 }                                                     
  2782.         }
  2783. }                                                                           
  2784. //在指定位置显示一个字符
  2785. //x,y:起始坐标
  2786. //num:要显示的字符:" "--->"~"
  2787. //size:字体大小 12/16/24
  2788. //mode:叠加方式(1)还是非叠加方式(0)
  2789. void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
  2790. {                                                            
  2791.     u8 temp,t1,t;
  2792.         u16 y0=y;
  2793.         u8 csize=(size/8+((size%8)?1:0))*(size/2);                //得到字体一个字符对应点阵集所占的字节数        ---一列有12个点,总共有6行
  2794.         num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)---每个字库都是从' '开始的
  2795.         for(t=0;t<csize;t++)
  2796.         {   
  2797.                 if(size==12)temp=asc2_1206[num][t];                  //调用1206字体
  2798.                 else if(size==16)temp=asc2_1608[num][t];        //调用1608字体
  2799.                 else if(size==24)temp=asc2_2412[num][t];        //调用2412字体
  2800.                 else return;                                                                //没有的字库
  2801.                 for(t1=0;t1<8;t1++)//---输入一个字节的颜色,如果字体大小是12则需要输入12个字节的颜色
  2802.                 {                            
  2803.                         if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);//---先输入最高位,写入画笔颜色
  2804.                         else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);//---如果没有颜色且是非叠加模式,则写人背景色
  2805.                         temp<<=1;//---移出最高位
  2806.                         y++;//---Y轴加1,X轴不变
  2807.                         if(y>=lcddev.height)return;                //超区域了---如果不够写入则退出写入
  2808.                         if((y-y0)==size)//---如果Y轴写入12个点后,进行换列,每一列的第二个字节超出12个点后的内容为无效内容
  2809.                         {
  2810.                                 y=y0;
  2811.                                 x++;
  2812.                                 if(x>=lcddev.width)return;        //超区域了---如果不够写入则退出写入
  2813.                                 break;//输入指定大小的点数后,跳出循环,放弃当前字节后面的无效数据,换列输入下一个字节
  2814.                         }
  2815.                 }
  2816.         }
  2817. }
  2818. //m^n函数
  2819. //返回值:m^n次方.
  2820. u32 LCD_Pow(u8 m,u8 n)
  2821. {
  2822.         u32 result=1;         
  2823.         while(n--)result*=m;   
  2824.         return result;
  2825. }                         
  2826. //显示数字,高位为0,则不显示
  2827. //x,y :起点坐标         
  2828. //len :数字的位数
  2829. //size:字体大小
  2830. //color:颜色
  2831. //num:数值(0~4294967295);         
  2832. void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
  2833. {                
  2834.         u8 t,temp;
  2835.         u8 enshow=0;                                                  
  2836.         for(t=0;t<len;t++)
  2837.         {
  2838.                 temp=(num/LCD_Pow(10,len-t-1))%10;//从最高位开始取值
  2839.                 if(enshow==0&&t<(len-1))
  2840.                 {
  2841.                         if(temp==0)
  2842.                         {
  2843.                                 LCD_ShowChar(x+(size/2)*t,y,' ',size,0);//---非叠加模式,如果最高位为0则输入空格
  2844.                                 continue;//---直接回到FOR循环,继续循环
  2845.                         }else enshow=1;
  2846.                           
  2847.                 }
  2848.                  LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0); //---非叠加模式,显示对应的字符
  2849.         }
  2850. }
  2851. //显示数字,高位为0,还是显示
  2852. //x,y:起点坐标
  2853. //num:数值(0~999999999);         
  2854. //len:长度(即要显示的位数)
  2855. //size:字体大小
  2856. //mode:
  2857. //[7]:0,不填充;1,填充0.
  2858. //[6:1]:保留
  2859. //[0]:0,非叠加显示;1,叠加显示.
  2860. void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode)
  2861. {  
  2862.         u8 t,temp;
  2863.         u8 enshow=0;                                                  
  2864.         for(t=0;t<len;t++)
  2865.         {
  2866.                 temp=(num/LCD_Pow(10,len-t-1))%10;
  2867.                 if(enshow==0&&t<(len-1))
  2868.                 {
  2869.                         if(temp==0)
  2870.                         {
  2871.                                 if(mode&0X80)LCD_ShowChar(x+(size/2)*t,y,'0',size,mode&0X01);  
  2872.                                 else LCD_ShowChar(x+(size/2)*t,y,' ',size,mode&0X01);  
  2873.                                 continue;
  2874.                         }else enshow=1;
  2875.                           
  2876.                 }
  2877.                  LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01);
  2878.         }
  2879. }
  2880. //显示字符串
  2881. //x,y:起点坐标
  2882. //width,height:区域大小  
  2883. //size:字体大小
  2884. //*p:字符串起始地址                  
  2885. void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)
  2886. {         
  2887.         u8 x0=x;
  2888.         width+=x;
  2889.         height+=y;
  2890.     while((*p<='~')&&(*p>=' '))//判断是不是非法字符! ---字符必须是这个区域内的字符
  2891.     {      
  2892.         if(x>=width){x=x0;y+=size;}//---如果X增加指定宽度还没有输入完字符串,则换一行
  2893.         if(y>=height)break;//退出 ---如果Y坐标超出指定范围,则退出循环。
  2894.         LCD_ShowChar(x,y,*p,size,0);//---写入一个字
  2895.         x+=size/2;//---写完一个字后,X坐标增加一个字的高度坐标
  2896.         p++;//---指针指向下一个字
  2897.     }  
  2898. }
  2899. //---    X
  2900. //---    ------------
  2901. //---   Y|          |
  2902. //---    |          |
  2903. //---    |          |
  2904. //---    |          |
  2905. //---    |          |
  2906. //---    |          |
  2907. //---    |          |
  2908. //---    |          |
  2909. //---    ------------
























复制代码
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"

  6. //ALIENTEK 探索者STM32F407开发板 实验13
  7. //LCD显示实验-库函数版本
  8. //技术支持:www.openedv.com
  9. //淘宝店铺:http://eboard.taobao.com  
  10. //广州市星翼电子科技有限公司  
  11. //作者:正点原子 @ALIENTEK

  12. int main(void)
  13. {
  14.         u8 x=0;
  15.         u8 lcd_id[12];                                //存放LCD ID字符串
  16.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  17.         delay_init(168);      //初始化延时函数
  18.         uart_init(115200);                //初始化串口波特率为115200
  19.        
  20.         LED_Init();                                          //初始化LED
  21.         LCD_Init();           //初始化LCD FSMC接口
  22.         POINT_COLOR=RED;      //画笔颜色:红色 ---POINT_COLOR在LCD.c中定义
  23.         sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。                                        
  24.           while(1)
  25.         {                 
  26.                 switch(x)
  27.                 {
  28.                         case 0:LCD_Clear(WHITE);break;
  29.                         case 1:LCD_Clear(BLACK);break;
  30.                         case 2:LCD_Clear(BLUE);break;
  31.                         case 3:LCD_Clear(RED);break;
  32.                         case 4:LCD_Clear(MAGENTA);break;
  33.                         case 5:LCD_Clear(GREEN);break;
  34.                         case 6:LCD_Clear(CYAN);break;
  35.                         case 7:LCD_Clear(YELLOW);break;
  36.                         case 8:LCD_Clear(BRRED);break;
  37.                         case 9:LCD_Clear(GRAY);break;
  38.                         case 10:LCD_Clear(LGRAY);break;
  39.                         case 11:LCD_Clear(BROWN);break;
  40.                 }
  41.                 POINT_COLOR=RED;          
  42.                 LCD_ShowString(30,40,210,24,24,"Explorer STM32F4");        //---字体是24
  43.                 LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
  44.                 LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
  45.                 LCD_ShowString(30,110,200,16,16,lcd_id);                //显示LCD ID                                                       
  46.                 LCD_ShowString(30,130,200,12,12,"2014/5/4");                                                       
  47.           x++;
  48.                 if(x==12)x=0;
  49.                 LED0=!LED0;         
  50.                 delay_ms(1000);       
  51.         }
  52. }
复制代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-3-3 12:09:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2022-3-3
在线时间
0 小时
发表于 2022-3-3 17:57:33 | 显示全部楼层
大佬你好,萌新很不理解这一段
  1. //LCD地址结构体
  2. typedef struct
  3. {
  4.         vu16 LCD_REG;//--LCD写命令
  5.         vu16 LCD_RAM;//--LCD写数据
  6. } LCD_TypeDef;
复制代码

LCD_REG表示的到底是寄存器的序号还是指令内容?我看写指令的时候用这个,但是注释说这是寄存器的序号。
话说寄存器何来序号之说,只有寄存器名称的说法吧?
回复 支持 反对

使用道具 举报

11

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2017-3-17
在线时间
83 小时
 楼主| 发表于 2022-4-13 21:46:03 | 显示全部楼层
老张头 发表于 2022-3-3 17:57
大佬你好,萌新很不理解这一段

LCD_REG表示的到底是寄存器的序号还是指令内容?我看写指令的时候用这个 ...

这个只是一个结构体,根据写人数据来配置它的作用。
回复 支持 反对

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-4-14 10:11:18 | 显示全部楼层
好帖,感谢楼主分享
回复 支持 反对

使用道具 举报

33

主题

218

帖子

0

精华

高级会员

Rank: 4

积分
568
金钱
568
注册时间
2015-1-12
在线时间
75 小时
发表于 2022-5-29 13:40:13 | 显示全部楼层
好贴帮顶
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表