|
@@ -0,0 +1,2988 @@
|
|
|
+#include "lcd.h"
|
|
|
+#include "dwt.h"
|
|
|
+#include "font.h"
|
|
|
+#include "stdlib.h"
|
|
|
+//////////////////////////////////////////////////////////////////////////////////
|
|
|
+//本程序只供学习使用,未经作者许可,不得用于其它任何用途
|
|
|
+// ALIENTEK战舰STM32开发板
|
|
|
+// 2.4寸/2.8寸/3.5寸/4.3寸 TFT液晶驱动
|
|
|
+//支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
|
|
|
+// SPFD5408/SSD1289/1505/B505/C505/NT35310/NT35510等
|
|
|
+//正点原子@ALIENTEK
|
|
|
+//技术论坛:www.openedv.com
|
|
|
+//修改日期:2014/2/11
|
|
|
+//版本:V2.5
|
|
|
+//版权所有,盗版必究。
|
|
|
+// Copyright(C) 广州市星翼电子科技有限公司 2009-2019
|
|
|
+// All rights reserved
|
|
|
+//********************************************************************************
|
|
|
+// V1.2修改说明
|
|
|
+//支持了SPFD5408的驱动,另外把液晶ID直接打印成HEX格式.方便查看LCD驱动IC.
|
|
|
+// V1.3
|
|
|
+//加入了快速IO的支持
|
|
|
+//修改了背光控制的极性(适用于V1.8及以后的开发板版本)
|
|
|
+//对于1.8版本之前(不包括1.8)的液晶模块,请修改LCD_Init函数的LCD_LED=1;为LCD_LED=1;
|
|
|
+// V1.4
|
|
|
+//修改了LCD_ShowChar函数,使用画点功能画字符。
|
|
|
+//加入了横竖屏显示的支持
|
|
|
+// V1.5 20110730
|
|
|
+// 1,修改了B505液晶读颜色有误的bug.
|
|
|
+// 2,修改了快速IO及横竖屏的设置方式.
|
|
|
+// V1.6 20111116
|
|
|
+// 1,加入对LGDP4535液晶的驱动支持
|
|
|
+// V1.7 20120713
|
|
|
+// 1,增加LCD_RD_DATA函数
|
|
|
+// 2,增加对ILI9341的支持
|
|
|
+// 3,增加ILI9325的独立驱动代码
|
|
|
+// 4,增加LCD_Scan_Dir函数(慎重使用)
|
|
|
+// 6,另外修改了部分原来的函数,以适应9341的操作
|
|
|
+// V1.8 20120905
|
|
|
+// 1,加入LCD重要参数设置结构体lcddev
|
|
|
+// 2,加入LCD_Display_Dir函数,支持在线横竖屏切换
|
|
|
+// V1.9 20120911
|
|
|
+// 1,新增RM68042驱动(ID:6804),但是6804不支持横屏显示!!原因:改变扫描方式,
|
|
|
+//导致6804坐标设置失效,试过很多方法都不行,暂时无解。
|
|
|
+// V2.0 20120924
|
|
|
+//在不硬件复位的情况下,ILI9341的ID读取会被误读成9300,修改LCD_Init,将无法识别
|
|
|
+//的情况(读到ID为9300/非法ID),强制指定驱动IC为ILI9341,执行9341的初始化。
|
|
|
+// V2.1 20120930
|
|
|
+//修正ILI9325读颜色的bug。
|
|
|
+// V2.2 20121007
|
|
|
+//修正LCD_Scan_Dir的bug。
|
|
|
+// V2.3 20130120
|
|
|
+//新增6804支持横屏显示
|
|
|
+// V2.4 20131120
|
|
|
+// 1,新增NT35310(ID:5310)驱动器的支持
|
|
|
+// 2,新增LCD_Set_Window函数,用于设置窗口,对快速填充,比较有用,但是该函数在横屏时,不支持6804.
|
|
|
+// V2.5 20140211
|
|
|
+// 1,新增NT35510(ID:5510)驱动器的支持
|
|
|
+//////////////////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+// LCD的画笔颜色和背景色
|
|
|
+u16 POINT_COLOR = 0x0000; //画笔颜色
|
|
|
+u16 BACK_COLOR = 0xFFFF; //背景色
|
|
|
+
|
|
|
+//管理LCD重要参数
|
|
|
+//默认为竖屏
|
|
|
+_lcd_dev lcddev;
|
|
|
+
|
|
|
+//写寄存器函数
|
|
|
+// regval:寄存器值
|
|
|
+void LCD_WR_REG(volatile u16 regval)
|
|
|
+{
|
|
|
+ regval = regval; //使用-O2优化的时候,必须插入的延时
|
|
|
+ LCD->LCD_REG = regval; //写入要写的寄存器序号
|
|
|
+}
|
|
|
+//写LCD数据
|
|
|
+// data:要写入的值
|
|
|
+void LCD_WR_DATA(volatile u16 data)
|
|
|
+{
|
|
|
+ data = data; //使用-O2优化的时候,必须插入的延时
|
|
|
+ LCD->LCD_RAM = data;
|
|
|
+}
|
|
|
+//读LCD数据
|
|
|
+//返回值:读到的值
|
|
|
+u16 LCD_RD_DATA(void)
|
|
|
+{
|
|
|
+ volatile u16 ram; //防止被优化
|
|
|
+ ram = LCD->LCD_RAM;
|
|
|
+ return ram;
|
|
|
+}
|
|
|
+//写寄存器
|
|
|
+// LCD_Reg:寄存器地址
|
|
|
+// LCD_RegValue:要写入的数据
|
|
|
+void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue)
|
|
|
+{
|
|
|
+ LCD->LCD_REG = LCD_Reg; //写入要写的寄存器序号
|
|
|
+ LCD->LCD_RAM = LCD_RegValue; //写入数据
|
|
|
+}
|
|
|
+//读寄存器
|
|
|
+// LCD_Reg:寄存器地址
|
|
|
+//返回值:读到的数据
|
|
|
+u16 LCD_ReadReg(u16 LCD_Reg)
|
|
|
+{
|
|
|
+ LCD_WR_REG(LCD_Reg); //写入要读的寄存器序号
|
|
|
+ us_delay(5);
|
|
|
+ return LCD_RD_DATA(); //返回读到的值
|
|
|
+}
|
|
|
+//开始写GRAM
|
|
|
+void LCD_WriteRAM_Prepare(void)
|
|
|
+{
|
|
|
+ LCD->LCD_REG = lcddev.wramcmd;
|
|
|
+}
|
|
|
+// LCD写GRAM
|
|
|
+// RGB_Code:颜色值
|
|
|
+void LCD_WriteRAM(u16 RGB_Code)
|
|
|
+{
|
|
|
+ LCD->LCD_RAM = RGB_Code; //写十六位GRAM
|
|
|
+}
|
|
|
+//从ILI93xx读出的数据为GBR格式,而我们写入的时候为RGB格式。
|
|
|
+//通过该函数转换
|
|
|
+// c:GBR格式的颜色值
|
|
|
+//返回值:RGB格式的颜色值
|
|
|
+u16 LCD_BGR2RGB(u16 c)
|
|
|
+{
|
|
|
+ u16 r, g, b, rgb;
|
|
|
+ b = (c >> 0) & 0x1f;
|
|
|
+ g = (c >> 5) & 0x3f;
|
|
|
+ r = (c >> 11) & 0x1f;
|
|
|
+ rgb = (b << 11) + (g << 5) + (r << 0);
|
|
|
+ return (rgb);
|
|
|
+}
|
|
|
+//当mdk -O1时间优化时需要设置
|
|
|
+//延时i
|
|
|
+void opt_delay(u8 i)
|
|
|
+{
|
|
|
+ while (i--)
|
|
|
+ ;
|
|
|
+}
|
|
|
+//读取个某点的颜色值
|
|
|
+// x,y:坐标
|
|
|
+//返回值:此点的颜色
|
|
|
+u16 LCD_ReadPoint(u16 x, u16 y)
|
|
|
+{
|
|
|
+ u16 r = 0, g = 0, b = 0;
|
|
|
+ if (x >= lcddev.width || y >= lcddev.height)
|
|
|
+ return 0; //超过了范围,直接返回
|
|
|
+ LCD_SetCursor(x, y);
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X6804 || lcddev.id == 0X5310)
|
|
|
+ LCD_WR_REG(0X2E); // 9341/6804/3510 发送读GRAM指令
|
|
|
+ else if (lcddev.id == 0X5510)
|
|
|
+ LCD_WR_REG(0X2E00); // 5510 发送读GRAM指令
|
|
|
+ else
|
|
|
+ LCD_WR_REG(R34); //其他IC发送读GRAM指令
|
|
|
+ if (lcddev.id == 0X9320)
|
|
|
+ opt_delay(2); // FOR 9320,延时2us
|
|
|
+ if (LCD->LCD_RAM)
|
|
|
+ r = 0; // dummy Read
|
|
|
+ opt_delay(2);
|
|
|
+ r = LCD->LCD_RAM; //实际坐标颜色
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X5310 || lcddev.id == 0X5510) // 9341/NT35310/NT35510要分2次读出
|
|
|
+ {
|
|
|
+ opt_delay(2);
|
|
|
+ b = LCD->LCD_RAM;
|
|
|
+ g = r & 0XFF; //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
|
|
|
+ g <<= 8;
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X6804)
|
|
|
+ r = LCD->LCD_RAM; // 6804第二次读取的才是真实值
|
|
|
+ if (lcddev.id == 0X9325 || lcddev.id == 0X4535 || lcddev.id == 0X4531 || lcddev.id == 0X8989 || lcddev.id == 0XB505)
|
|
|
+ return r; //这几种IC直接返回颜色值
|
|
|
+ else if (lcddev.id == 0X9341 || lcddev.id == 0X5310 || lcddev.id == 0X5510)
|
|
|
+ return (((r >> 11) << 11) | ((g >> 10) << 5) | (b >> 11)); // ILI9341/NT35310/NT35510需要公式转换一下
|
|
|
+ else
|
|
|
+ return LCD_BGR2RGB(r); //其他IC
|
|
|
+}
|
|
|
+// LCD开启显示
|
|
|
+void LCD_DisplayOn(void)
|
|
|
+{
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X6804 || lcddev.id == 0X5310)
|
|
|
+ LCD_WR_REG(0X29); //开启显示
|
|
|
+ else if (lcddev.id == 0X5510)
|
|
|
+ LCD_WR_REG(0X2900); //开启显示
|
|
|
+ else
|
|
|
+ LCD_WriteReg(R7, 0x0173); //开启显示
|
|
|
+}
|
|
|
+// LCD关闭显示
|
|
|
+void LCD_DisplayOff(void)
|
|
|
+{
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X6804 || lcddev.id == 0X5310)
|
|
|
+ LCD_WR_REG(0X28); //关闭显示
|
|
|
+ else if (lcddev.id == 0X5510)
|
|
|
+ LCD_WR_REG(0X2800); //关闭显示
|
|
|
+ else
|
|
|
+ LCD_WriteReg(R7, 0x0); //关闭显示
|
|
|
+}
|
|
|
+//设置光标位置
|
|
|
+// Xpos:横坐标
|
|
|
+// Ypos:纵坐标
|
|
|
+void LCD_SetCursor(u16 Xpos, u16 Ypos)
|
|
|
+{
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X5310)
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(Xpos >> 8);
|
|
|
+ LCD_WR_DATA(Xpos & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(Ypos >> 8);
|
|
|
+ LCD_WR_DATA(Ypos & 0XFF);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X6804)
|
|
|
+ {
|
|
|
+ if (lcddev.dir == 1)
|
|
|
+ Xpos = lcddev.width - 1 - Xpos; //横屏时处理
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(Xpos >> 8);
|
|
|
+ LCD_WR_DATA(Xpos & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(Ypos >> 8);
|
|
|
+ LCD_WR_DATA(Ypos & 0XFF);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X5510)
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(Xpos >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 1);
|
|
|
+ LCD_WR_DATA(Xpos & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(Ypos >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 1);
|
|
|
+ LCD_WR_DATA(Ypos & 0XFF);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (lcddev.dir == 1)
|
|
|
+ Xpos = lcddev.width - 1 - Xpos; //横屏其实就是调转x,y坐标
|
|
|
+ LCD_WriteReg(lcddev.setxcmd, Xpos);
|
|
|
+ LCD_WriteReg(lcddev.setycmd, Ypos);
|
|
|
+ }
|
|
|
+}
|
|
|
+//设置LCD的自动扫描方向
|
|
|
+//注意:其他函数可能会受到此函数设置的影响(尤其是9341/6804这两个奇葩),
|
|
|
+//所以,一般设置为L2R_U2D即可,如果设置为其他扫描方式,可能导致显示不正常.
|
|
|
+// dir:0~7,代表8个方向(具体定义见lcd.h)
|
|
|
+// 9320/9325/9328/4531/4535/1505/b505/8989/5408/9341/5310/5510等IC已经实际测试
|
|
|
+void LCD_Scan_Dir(uint8_t dir)
|
|
|
+{
|
|
|
+ uint16_t regval = 0;
|
|
|
+ uint16_t dirreg = 0;
|
|
|
+ uint16_t temp;
|
|
|
+ if ((lcddev.dir == 1 && lcddev.id != 0X6804 && lcddev.id != 0X1963) || (lcddev.dir == 0 && lcddev.id == 0X1963)) //横屏时,对6804和1963不改变扫描方向!竖屏时1963改变方向
|
|
|
+ {
|
|
|
+ switch (dir) //方向转换
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ dir = 6;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ dir = 7;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ dir = 4;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ dir = 5;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ dir = 1;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ dir = 0;
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ dir = 3;
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ dir = 2;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (lcddev.id == 0x9341 || lcddev.id == 0X6804 || lcddev.id == 0X5310 || lcddev.id == 0X5510 || lcddev.id == 0X1963) // 9341/6804/5310/5510/1963,特殊处理
|
|
|
+ {
|
|
|
+ switch (dir)
|
|
|
+ {
|
|
|
+ case L2R_U2D: //从左到右,从上到下
|
|
|
+ regval |= (0 << 7) | (0 << 6) | (0 << 5);
|
|
|
+ break;
|
|
|
+ case L2R_D2U: //从左到右,从下到上
|
|
|
+ regval |= (1 << 7) | (0 << 6) | (0 << 5);
|
|
|
+ break;
|
|
|
+ case R2L_U2D: //从右到左,从上到下
|
|
|
+ regval |= (0 << 7) | (1 << 6) | (0 << 5);
|
|
|
+ break;
|
|
|
+ case R2L_D2U: //从右到左,从下到上
|
|
|
+ regval |= (1 << 7) | (1 << 6) | (0 << 5);
|
|
|
+ break;
|
|
|
+ case U2D_L2R: //从上到下,从左到右
|
|
|
+ regval |= (0 << 7) | (0 << 6) | (1 << 5);
|
|
|
+ break;
|
|
|
+ case U2D_R2L: //从上到下,从右到左
|
|
|
+ regval |= (0 << 7) | (1 << 6) | (1 << 5);
|
|
|
+ break;
|
|
|
+ case D2U_L2R: //从下到上,从左到右
|
|
|
+ regval |= (1 << 7) | (0 << 6) | (1 << 5);
|
|
|
+ break;
|
|
|
+ case D2U_R2L: //从下到上,从右到左
|
|
|
+ regval |= (1 << 7) | (1 << 6) | (1 << 5);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (lcddev.id == 0X5510)
|
|
|
+ dirreg = 0X3600;
|
|
|
+ else
|
|
|
+ dirreg = 0X36;
|
|
|
+ if ((lcddev.id != 0X5310) && (lcddev.id != 0X5510) && (lcddev.id != 0X1963))
|
|
|
+ regval |= 0X08; // 5310/5510/1963不需要BGR
|
|
|
+ if (lcddev.id == 0X6804)
|
|
|
+ regval |= 0x02; // 6804的BIT6和9341的反了
|
|
|
+ LCD_WriteReg(dirreg, regval);
|
|
|
+ if (lcddev.id != 0X1963) // 1963不做坐标处理
|
|
|
+ {
|
|
|
+ if (regval & 0X20)
|
|
|
+ {
|
|
|
+ if (lcddev.width < lcddev.height) //交换X,Y
|
|
|
+ {
|
|
|
+ temp = lcddev.width;
|
|
|
+ lcddev.width = lcddev.height;
|
|
|
+ lcddev.height = temp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (lcddev.width > lcddev.height) //交换X,Y
|
|
|
+ {
|
|
|
+ temp = lcddev.width;
|
|
|
+ lcddev.width = lcddev.height;
|
|
|
+ lcddev.height = temp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (lcddev.id == 0X5510)
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 1);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 2);
|
|
|
+ LCD_WR_DATA((lcddev.width - 1) >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 3);
|
|
|
+ LCD_WR_DATA((lcddev.width - 1) & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 1);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 2);
|
|
|
+ LCD_WR_DATA((lcddev.height - 1) >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 3);
|
|
|
+ LCD_WR_DATA((lcddev.height - 1) & 0XFF);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_DATA((lcddev.width - 1) >> 8);
|
|
|
+ LCD_WR_DATA((lcddev.width - 1) & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_DATA(0);
|
|
|
+ LCD_WR_DATA((lcddev.height - 1) >> 8);
|
|
|
+ LCD_WR_DATA((lcddev.height - 1) & 0XFF);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ switch (dir)
|
|
|
+ {
|
|
|
+ case L2R_U2D: //从左到右,从上到下
|
|
|
+ regval |= (1 << 5) | (1 << 4) | (0 << 3);
|
|
|
+ break;
|
|
|
+ case L2R_D2U: //从左到右,从下到上
|
|
|
+ regval |= (0 << 5) | (1 << 4) | (0 << 3);
|
|
|
+ break;
|
|
|
+ case R2L_U2D: //从右到左,从上到下
|
|
|
+ regval |= (1 << 5) | (0 << 4) | (0 << 3);
|
|
|
+ break;
|
|
|
+ case R2L_D2U: //从右到左,从下到上
|
|
|
+ regval |= (0 << 5) | (0 << 4) | (0 << 3);
|
|
|
+ break;
|
|
|
+ case U2D_L2R: //从上到下,从左到右
|
|
|
+ regval |= (1 << 5) | (1 << 4) | (1 << 3);
|
|
|
+ break;
|
|
|
+ case U2D_R2L: //从上到下,从右到左
|
|
|
+ regval |= (1 << 5) | (0 << 4) | (1 << 3);
|
|
|
+ break;
|
|
|
+ case D2U_L2R: //从下到上,从左到右
|
|
|
+ regval |= (0 << 5) | (1 << 4) | (1 << 3);
|
|
|
+ break;
|
|
|
+ case D2U_R2L: //从下到上,从右到左
|
|
|
+ regval |= (0 << 5) | (0 << 4) | (1 << 3);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ dirreg = 0X03;
|
|
|
+ regval |= 1 << 12;
|
|
|
+ LCD_WriteReg(dirreg, regval);
|
|
|
+ }
|
|
|
+}
|
|
|
+//画点
|
|
|
+// x,y:坐标
|
|
|
+// POINT_COLOR:此点的颜色
|
|
|
+void LCD_DrawPoint(u16 x, u16 y)
|
|
|
+{
|
|
|
+ LCD_SetCursor(x, y); //设置光标位置
|
|
|
+ LCD_WriteRAM_Prepare(); //开始写入GRAM
|
|
|
+ LCD->LCD_RAM = POINT_COLOR;
|
|
|
+}
|
|
|
+//快速画点
|
|
|
+// x,y:坐标
|
|
|
+// color:颜色
|
|
|
+void LCD_Fast_DrawPoint(u16 x, u16 y, u16 color)
|
|
|
+{
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X5310)
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(x >> 8);
|
|
|
+ LCD_WR_DATA(x & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(y >> 8);
|
|
|
+ LCD_WR_DATA(y & 0XFF);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X5510)
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(x >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 1);
|
|
|
+ LCD_WR_DATA(x & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(y >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 1);
|
|
|
+ LCD_WR_DATA(y & 0XFF);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X6804)
|
|
|
+ {
|
|
|
+ if (lcddev.dir == 1)
|
|
|
+ x = lcddev.width - 1 - x; //横屏时处理
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(x >> 8);
|
|
|
+ LCD_WR_DATA(x & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(y >> 8);
|
|
|
+ LCD_WR_DATA(y & 0XFF);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (lcddev.dir == 1)
|
|
|
+ x = lcddev.width - 1 - x; //横屏其实就是调转x,y坐标
|
|
|
+ LCD_WriteReg(lcddev.setxcmd, x);
|
|
|
+ LCD_WriteReg(lcddev.setycmd, y);
|
|
|
+ }
|
|
|
+ LCD->LCD_REG = lcddev.wramcmd;
|
|
|
+ LCD->LCD_RAM = color;
|
|
|
+}
|
|
|
+
|
|
|
+//设置LCD显示方向
|
|
|
+// dir:0,竖屏;1,横屏
|
|
|
+void LCD_Display_Dir(u8 dir)
|
|
|
+{
|
|
|
+ if (dir == 0) //竖屏
|
|
|
+ {
|
|
|
+ lcddev.dir = 0; //竖屏
|
|
|
+ lcddev.width = 240;
|
|
|
+ lcddev.height = 320;
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X6804 || lcddev.id == 0X5310)
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = 0X2C;
|
|
|
+ lcddev.setxcmd = 0X2A;
|
|
|
+ lcddev.setycmd = 0X2B;
|
|
|
+ if (lcddev.id == 0X6804 || lcddev.id == 0X5310)
|
|
|
+ {
|
|
|
+ lcddev.width = 320;
|
|
|
+ lcddev.height = 480;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X8989)
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = R34;
|
|
|
+ lcddev.setxcmd = 0X4E;
|
|
|
+ lcddev.setycmd = 0X4F;
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x5510)
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = 0X2C00;
|
|
|
+ lcddev.setxcmd = 0X2A00;
|
|
|
+ lcddev.setycmd = 0X2B00;
|
|
|
+ lcddev.width = 480;
|
|
|
+ lcddev.height = 800;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = R34;
|
|
|
+ lcddev.setxcmd = R32;
|
|
|
+ lcddev.setycmd = R33;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else //横屏
|
|
|
+ {
|
|
|
+ lcddev.dir = 1; //横屏
|
|
|
+ lcddev.width = 320;
|
|
|
+ lcddev.height = 240;
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X5310)
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = 0X2C;
|
|
|
+ lcddev.setxcmd = 0X2A;
|
|
|
+ lcddev.setycmd = 0X2B;
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X6804)
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = 0X2C;
|
|
|
+ lcddev.setxcmd = 0X2B;
|
|
|
+ lcddev.setycmd = 0X2A;
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X8989)
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = R34;
|
|
|
+ lcddev.setxcmd = 0X4F;
|
|
|
+ lcddev.setycmd = 0X4E;
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x5510)
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = 0X2C00;
|
|
|
+ lcddev.setxcmd = 0X2A00;
|
|
|
+ lcddev.setycmd = 0X2B00;
|
|
|
+ lcddev.width = 800;
|
|
|
+ lcddev.height = 480;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ lcddev.wramcmd = R34;
|
|
|
+ lcddev.setxcmd = R33;
|
|
|
+ lcddev.setycmd = R32;
|
|
|
+ }
|
|
|
+ if (lcddev.id == 0X6804 || lcddev.id == 0X5310)
|
|
|
+ {
|
|
|
+ lcddev.width = 480;
|
|
|
+ lcddev.height = 320;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ LCD_Scan_Dir(DFT_SCAN_DIR); //默认扫描方向
|
|
|
+}
|
|
|
+//设置窗口,并自动设置画点坐标到窗口左上角(sx,sy).
|
|
|
+// sx,sy:窗口起始坐标(左上角)
|
|
|
+// width,height:窗口宽度和高度,必须大于0!!
|
|
|
+//窗体大小:width*height.
|
|
|
+// 68042,横屏时不支持窗口设置!!
|
|
|
+void LCD_Set_Window(u16 sx, u16 sy, u16 width, u16 height)
|
|
|
+{
|
|
|
+ u8 hsareg, heareg, vsareg, veareg;
|
|
|
+ u16 hsaval, heaval, vsaval, veaval;
|
|
|
+ width = sx + width - 1;
|
|
|
+ height = sy + height - 1;
|
|
|
+ if (lcddev.id == 0X9341 || lcddev.id == 0X5310 || lcddev.id == 0X6804) // 6804横屏不支持
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(sx >> 8);
|
|
|
+ LCD_WR_DATA(sx & 0XFF);
|
|
|
+ LCD_WR_DATA(width >> 8);
|
|
|
+ LCD_WR_DATA(width & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(sy >> 8);
|
|
|
+ LCD_WR_DATA(sy & 0XFF);
|
|
|
+ LCD_WR_DATA(height >> 8);
|
|
|
+ LCD_WR_DATA(height & 0XFF);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X5510)
|
|
|
+ {
|
|
|
+ LCD_WR_REG(lcddev.setxcmd);
|
|
|
+ LCD_WR_DATA(sx >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 1);
|
|
|
+ LCD_WR_DATA(sx & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 2);
|
|
|
+ LCD_WR_DATA(width >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setxcmd + 3);
|
|
|
+ LCD_WR_DATA(width & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd);
|
|
|
+ LCD_WR_DATA(sy >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 1);
|
|
|
+ LCD_WR_DATA(sy & 0XFF);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 2);
|
|
|
+ LCD_WR_DATA(height >> 8);
|
|
|
+ LCD_WR_REG(lcddev.setycmd + 3);
|
|
|
+ LCD_WR_DATA(height & 0XFF);
|
|
|
+ }
|
|
|
+ else //其他驱动IC
|
|
|
+ {
|
|
|
+ if (lcddev.dir == 1) //横屏
|
|
|
+ {
|
|
|
+ //窗口值
|
|
|
+ hsaval = sy;
|
|
|
+ heaval = height;
|
|
|
+ vsaval = lcddev.width - width - 1;
|
|
|
+ veaval = lcddev.width - sx - 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hsaval = sx;
|
|
|
+ heaval = width;
|
|
|
+ vsaval = sy;
|
|
|
+ veaval = height;
|
|
|
+ }
|
|
|
+ if (lcddev.id == 0X8989) // 8989 IC
|
|
|
+ {
|
|
|
+ hsareg = 0X44;
|
|
|
+ heareg = 0X44; //水平方向窗口寄存器 (1289的由一个寄存器控制)
|
|
|
+ hsaval |= (heaval << 8); //得到寄存器值.
|
|
|
+ heaval = hsaval;
|
|
|
+ vsareg = 0X45;
|
|
|
+ veareg = 0X46; //垂直方向窗口寄存器
|
|
|
+ }
|
|
|
+ else //其他驱动IC
|
|
|
+ {
|
|
|
+ hsareg = 0X50;
|
|
|
+ heareg = 0X51; //水平方向窗口寄存器
|
|
|
+ vsareg = 0X52;
|
|
|
+ veareg = 0X53; //垂直方向窗口寄存器
|
|
|
+ }
|
|
|
+ //设置寄存器值
|
|
|
+ LCD_WriteReg(hsareg, hsaval);
|
|
|
+ LCD_WriteReg(heareg, heaval);
|
|
|
+ LCD_WriteReg(vsareg, vsaval);
|
|
|
+ LCD_WriteReg(veareg, veaval);
|
|
|
+ LCD_SetCursor(sx, sy); //设置光标位置
|
|
|
+ }
|
|
|
+}
|
|
|
+//初始化lcd
|
|
|
+//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
|
|
|
+//在其他型号的驱动芯片上没有测试!
|
|
|
+void LCD_Init(void)
|
|
|
+{
|
|
|
+ FSMC_NORSRAMInitTypeDef init;
|
|
|
+ FSMC_NORSRAMTimingInitTypeDef timingWrite;
|
|
|
+ FSMC_NORSRAMTimingInitTypeDef timingRead;
|
|
|
+
|
|
|
+ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PB0 推挽输出 背光
|
|
|
+ // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
|
+ // GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
|
+
|
|
|
+ // // PORTD复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; // //PORTD复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
|
+ // GPIO_Init(GPIOD, &GPIO_InitStructure);
|
|
|
+
|
|
|
+ // // PORTE复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; // //PORTD复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
|
+ // GPIO_Init(GPIOE, &GPIO_InitStructure);
|
|
|
+
|
|
|
+ // // //PORTG12复用推挽输出 A0
|
|
|
+ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_12; // //PORTD复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
|
|
|
+ // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
|
+ // GPIO_Init(GPIOG, &GPIO_InitStructure);
|
|
|
+
|
|
|
+ timingWrite.FSMC_AddressSetupTime = 4;
|
|
|
+ timingWrite.FSMC_AddressHoldTime = 0;
|
|
|
+ timingWrite.FSMC_DataSetupTime = 6;
|
|
|
+ timingWrite.FSMC_BusTurnAroundDuration = 1;
|
|
|
+ timingWrite.FSMC_CLKDivision = 0;
|
|
|
+ timingWrite.FSMC_DataLatency = 0;
|
|
|
+ timingWrite.FSMC_AccessMode = FSMC_AccessMode_A;
|
|
|
+
|
|
|
+ timingRead.FSMC_AddressSetupTime = 4;
|
|
|
+ timingRead.FSMC_AddressHoldTime = 0;
|
|
|
+ timingRead.FSMC_DataSetupTime = 8;
|
|
|
+ timingRead.FSMC_BusTurnAroundDuration = 1;
|
|
|
+ timingRead.FSMC_CLKDivision = 0;
|
|
|
+ timingRead.FSMC_DataLatency = 0;
|
|
|
+ timingRead.FSMC_AccessMode = FSMC_AccessMode_A;
|
|
|
+
|
|
|
+ init.FSMC_Bank = FSMC_Bank1_NORSRAM4;
|
|
|
+ init.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
|
|
|
+ init.FSMC_MemoryType = FSMC_MemoryType_SRAM;
|
|
|
+ init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
|
|
|
+ init.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
|
|
|
+ init.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
|
|
|
+ init.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
|
|
|
+ init.FSMC_WrapMode = FSMC_WrapMode_Disable;
|
|
|
+ init.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
|
|
|
+ init.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
|
|
|
+ init.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
|
|
|
+ init.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
|
|
|
+ init.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
|
|
|
+
|
|
|
+ init.FSMC_ReadWriteTimingStruct = &timingRead;
|
|
|
+ init.FSMC_WriteTimingStruct = &timingWrite;
|
|
|
+
|
|
|
+ FSMC_NORSRAMInit(&init);
|
|
|
+
|
|
|
+ /* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
|
|
|
+ FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
|
|
|
+
|
|
|
+ ms_delay(50); // delay 50 ms
|
|
|
+ LCD_WriteReg(0x0000, 0x0001);
|
|
|
+ ms_delay(50); // delay 50 ms
|
|
|
+ lcddev.id = LCD_ReadReg(0x0000);
|
|
|
+ if (lcddev.id < 0XFF || lcddev.id == 0XFFFF || lcddev.id == 0X9300) //读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300
|
|
|
+ {
|
|
|
+ //尝试9341 ID的读取
|
|
|
+ LCD_WR_REG(0XD3);
|
|
|
+ LCD_RD_DATA(); // dummy read
|
|
|
+ LCD_RD_DATA(); //读到0X00
|
|
|
+ lcddev.id = LCD_RD_DATA(); //读取93
|
|
|
+ lcddev.id <<= 8;
|
|
|
+ lcddev.id |= LCD_RD_DATA(); //读取41
|
|
|
+ if (lcddev.id != 0X9341) //非9341,尝试是不是6804
|
|
|
+ {
|
|
|
+ LCD_WR_REG(0XBF);
|
|
|
+ LCD_RD_DATA(); // dummy read
|
|
|
+ LCD_RD_DATA(); //读回0X01
|
|
|
+ LCD_RD_DATA(); //读回0XD0
|
|
|
+ lcddev.id = LCD_RD_DATA(); //这里读回0X68
|
|
|
+ lcddev.id <<= 8;
|
|
|
+ lcddev.id |= LCD_RD_DATA(); //这里读回0X04
|
|
|
+ if (lcddev.id != 0X6804) //也不是6804,尝试看看是不是NT35310
|
|
|
+ {
|
|
|
+ LCD_WR_REG(0XD4);
|
|
|
+ LCD_RD_DATA(); // dummy read
|
|
|
+ LCD_RD_DATA(); //读回0X01
|
|
|
+ lcddev.id = LCD_RD_DATA(); //读回0X53
|
|
|
+ lcddev.id <<= 8;
|
|
|
+ lcddev.id |= LCD_RD_DATA(); //这里读回0X10
|
|
|
+ if (lcddev.id != 0X5310) //也不是NT35310,尝试看看是不是NT35510
|
|
|
+ {
|
|
|
+ LCD_WR_REG(0XDA00);
|
|
|
+ LCD_RD_DATA(); //读回0X00
|
|
|
+ LCD_WR_REG(0XDB00);
|
|
|
+ lcddev.id = LCD_RD_DATA(); //读回0X80
|
|
|
+ lcddev.id <<= 8;
|
|
|
+ LCD_WR_REG(0XDC00);
|
|
|
+ lcddev.id |= LCD_RD_DATA(); //读回0X00
|
|
|
+ if (lcddev.id == 0x8000)
|
|
|
+ lcddev.id = 0x5510; // NT35510读回的ID是8000H,为方便区分,我们强制设置为5510
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ printf(" LCD ID:%x\r\n", lcddev.id); //打印LCD ID
|
|
|
+ if (lcddev.id == 0X9341) // 9341初始化
|
|
|
+ {
|
|
|
+ LCD_WR_REG(0xCF);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC1);
|
|
|
+ LCD_WR_DATA(0X30);
|
|
|
+ LCD_WR_REG(0xED);
|
|
|
+ LCD_WR_DATA(0x64);
|
|
|
+ LCD_WR_DATA(0x03);
|
|
|
+ LCD_WR_DATA(0X12);
|
|
|
+ LCD_WR_DATA(0X81);
|
|
|
+ LCD_WR_REG(0xE8);
|
|
|
+ LCD_WR_DATA(0x85);
|
|
|
+ LCD_WR_DATA(0x10);
|
|
|
+ LCD_WR_DATA(0x7A);
|
|
|
+ LCD_WR_REG(0xCB);
|
|
|
+ LCD_WR_DATA(0x39);
|
|
|
+ LCD_WR_DATA(0x2C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x34);
|
|
|
+ LCD_WR_DATA(0x02);
|
|
|
+ LCD_WR_REG(0xF7);
|
|
|
+ LCD_WR_DATA(0x20);
|
|
|
+ LCD_WR_REG(0xEA);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_REG(0xC0); // Power control
|
|
|
+ LCD_WR_DATA(0x1B); // VRH[5:0]
|
|
|
+ LCD_WR_REG(0xC1); // Power control
|
|
|
+ LCD_WR_DATA(0x01); // SAP[2:0];BT[3:0]
|
|
|
+ LCD_WR_REG(0xC5); // VCM control
|
|
|
+ LCD_WR_DATA(0x30); // 3F
|
|
|
+ LCD_WR_DATA(0x30); // 3C
|
|
|
+ LCD_WR_REG(0xC7); // VCM control2
|
|
|
+ LCD_WR_DATA(0XB7);
|
|
|
+ LCD_WR_REG(0x36); // Memory Access Control
|
|
|
+ LCD_WR_DATA(0x48);
|
|
|
+ LCD_WR_REG(0x3A);
|
|
|
+ LCD_WR_DATA(0x55);
|
|
|
+ LCD_WR_REG(0xB1);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x1A);
|
|
|
+ LCD_WR_REG(0xB6); // Display Function Control
|
|
|
+ LCD_WR_DATA(0x0A);
|
|
|
+ LCD_WR_DATA(0xA2);
|
|
|
+ LCD_WR_REG(0xF2); // 3Gamma Function Disable
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_REG(0x26); // Gamma curve selected
|
|
|
+ LCD_WR_DATA(0x01);
|
|
|
+ LCD_WR_REG(0xE0); // Set Gamma
|
|
|
+ LCD_WR_DATA(0x0F);
|
|
|
+ LCD_WR_DATA(0x2A);
|
|
|
+ LCD_WR_DATA(0x28);
|
|
|
+ LCD_WR_DATA(0x08);
|
|
|
+ LCD_WR_DATA(0x0E);
|
|
|
+ LCD_WR_DATA(0x08);
|
|
|
+ LCD_WR_DATA(0x54);
|
|
|
+ LCD_WR_DATA(0XA9);
|
|
|
+ LCD_WR_DATA(0x43);
|
|
|
+ LCD_WR_DATA(0x0A);
|
|
|
+ LCD_WR_DATA(0x0F);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_REG(0XE1); // Set Gamma
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x15);
|
|
|
+ LCD_WR_DATA(0x17);
|
|
|
+ LCD_WR_DATA(0x07);
|
|
|
+ LCD_WR_DATA(0x11);
|
|
|
+ LCD_WR_DATA(0x06);
|
|
|
+ LCD_WR_DATA(0x2B);
|
|
|
+ LCD_WR_DATA(0x56);
|
|
|
+ LCD_WR_DATA(0x3C);
|
|
|
+ LCD_WR_DATA(0x05);
|
|
|
+ LCD_WR_DATA(0x10);
|
|
|
+ LCD_WR_DATA(0x0F);
|
|
|
+ LCD_WR_DATA(0x3F);
|
|
|
+ LCD_WR_DATA(0x3F);
|
|
|
+ LCD_WR_DATA(0x0F);
|
|
|
+ LCD_WR_REG(0x2B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x01);
|
|
|
+ LCD_WR_DATA(0x3f);
|
|
|
+ LCD_WR_REG(0x2A);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xef);
|
|
|
+ LCD_WR_REG(0x11); // Exit Sleep
|
|
|
+ ms_delay(120);
|
|
|
+ LCD_WR_REG(0x29); // display on
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x6804) // 6804初始化
|
|
|
+ {
|
|
|
+ LCD_WR_REG(0X11);
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WR_REG(0XD0); // VCI1 VCL VGH VGL DDVDH VREG1OUT power amplitude setting
|
|
|
+ LCD_WR_DATA(0X07);
|
|
|
+ LCD_WR_DATA(0X42);
|
|
|
+ LCD_WR_DATA(0X1D);
|
|
|
+ LCD_WR_REG(0XD1); // VCOMH VCOM_AC amplitude setting
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X1a);
|
|
|
+ LCD_WR_DATA(0X09);
|
|
|
+ LCD_WR_REG(0XD2); // Operational Amplifier Circuit Constant Current Adjust , charge pump frequency setting
|
|
|
+ LCD_WR_DATA(0X01);
|
|
|
+ LCD_WR_DATA(0X22);
|
|
|
+ LCD_WR_REG(0XC0); // REV SM GS
|
|
|
+ LCD_WR_DATA(0X10);
|
|
|
+ LCD_WR_DATA(0X3B);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X02);
|
|
|
+ LCD_WR_DATA(0X11);
|
|
|
+
|
|
|
+ LCD_WR_REG(0XC5); // Frame rate setting = 72HZ when setting 0x03
|
|
|
+ LCD_WR_DATA(0X03);
|
|
|
+
|
|
|
+ LCD_WR_REG(0XC8); // Gamma setting
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X25);
|
|
|
+ LCD_WR_DATA(0X21);
|
|
|
+ LCD_WR_DATA(0X05);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X0a);
|
|
|
+ LCD_WR_DATA(0X65);
|
|
|
+ LCD_WR_DATA(0X25);
|
|
|
+ LCD_WR_DATA(0X77);
|
|
|
+ LCD_WR_DATA(0X50);
|
|
|
+ LCD_WR_DATA(0X0f);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0XF8);
|
|
|
+ LCD_WR_DATA(0X01);
|
|
|
+
|
|
|
+ LCD_WR_REG(0XFE);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X02);
|
|
|
+
|
|
|
+ LCD_WR_REG(0X20); // Exit invert mode
|
|
|
+
|
|
|
+ LCD_WR_REG(0X36);
|
|
|
+ LCD_WR_DATA(0X08); //原来是a
|
|
|
+
|
|
|
+ LCD_WR_REG(0X3A);
|
|
|
+ LCD_WR_DATA(0X55); // 16位模式
|
|
|
+ LCD_WR_REG(0X2B);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X01);
|
|
|
+ LCD_WR_DATA(0X3F);
|
|
|
+
|
|
|
+ LCD_WR_REG(0X2A);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X00);
|
|
|
+ LCD_WR_DATA(0X01);
|
|
|
+ LCD_WR_DATA(0XDF);
|
|
|
+ ms_delay(120);
|
|
|
+ LCD_WR_REG(0X29);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x5310)
|
|
|
+ {
|
|
|
+ LCD_WR_REG(0xED);
|
|
|
+ LCD_WR_DATA(0x01);
|
|
|
+ LCD_WR_DATA(0xFE);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xEE);
|
|
|
+ LCD_WR_DATA(0xDE);
|
|
|
+ LCD_WR_DATA(0x21);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xF1);
|
|
|
+ LCD_WR_DATA(0x01);
|
|
|
+ LCD_WR_REG(0xDF);
|
|
|
+ LCD_WR_DATA(0x10);
|
|
|
+
|
|
|
+ // VCOMvoltage//
|
|
|
+ LCD_WR_REG(0xC4);
|
|
|
+ LCD_WR_DATA(0x8F); // 5f
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC6);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xE2);
|
|
|
+ LCD_WR_DATA(0xE2);
|
|
|
+ LCD_WR_DATA(0xE2);
|
|
|
+ LCD_WR_REG(0xBF);
|
|
|
+ LCD_WR_DATA(0xAA);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB0);
|
|
|
+ LCD_WR_DATA(0x0D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x0D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x11);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x19);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x21);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x2D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x3D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x5D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x5D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB1);
|
|
|
+ LCD_WR_DATA(0x80);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x8B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x96);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB2);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x02);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x03);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB4);
|
|
|
+ LCD_WR_DATA(0x8B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x96);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA1);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB5);
|
|
|
+ LCD_WR_DATA(0x02);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x03);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x04);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB6);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB7);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x3F);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x5E);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x64);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x8C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xAC);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xDC);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x70);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x90);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xEB);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xDC);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xB8);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xBA);
|
|
|
+ LCD_WR_DATA(0x24);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC1);
|
|
|
+ LCD_WR_DATA(0x20);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x54);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xFF);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC2);
|
|
|
+ LCD_WR_DATA(0x0A);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x04);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC3);
|
|
|
+ LCD_WR_DATA(0x3C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x3A);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x39);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x37);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x3C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x36);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x32);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x2F);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x2C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x29);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x26);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x24);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x24);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x23);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x3C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x36);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x32);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x2F);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x2C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x29);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x26);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x24);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x24);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x23);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC4);
|
|
|
+ LCD_WR_DATA(0x62);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x05);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x84);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF0);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x18);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA4);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x18);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x50);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x0C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x17);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x95);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xE6);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC5);
|
|
|
+ LCD_WR_DATA(0x32);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x44);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x65);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x76);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x88);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC6);
|
|
|
+ LCD_WR_DATA(0x20);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x17);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x01);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC7);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC8);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xC9);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE0);
|
|
|
+ LCD_WR_DATA(0x16);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x1C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x21);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x36);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x46);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x52);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x64);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x7A);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x8B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA8);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xB9);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC4);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xCA);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD2);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD9);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xE0);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE1);
|
|
|
+ LCD_WR_DATA(0x16);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x1C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x22);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x36);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x45);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x52);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x64);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x7A);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x8B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA8);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xB9);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC4);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xCA);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD2);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD8);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xE0);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE2);
|
|
|
+ LCD_WR_DATA(0x05);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x0B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x1B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x34);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x44);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x4F);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x61);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x79);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x88);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x97);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA6);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xB7);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC2);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC7);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD1);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD6);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xDD);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_REG(0xE3);
|
|
|
+ LCD_WR_DATA(0x05);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x1C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x33);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x44);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x50);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x62);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x78);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x88);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x97);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA6);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xB7);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC2);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC7);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD1);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD5);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xDD);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE4);
|
|
|
+ LCD_WR_DATA(0x01);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x01);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x02);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x2A);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x3C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x4B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x5D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x74);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x84);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x93);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA2);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xB3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xBE);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC4);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xCD);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xDD);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_REG(0xE5);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x02);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x29);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x3C);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x4B);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x5D);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x74);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x84);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x93);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xA2);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xB3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xBE);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xC4);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xCD);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xD3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xDC);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE6);
|
|
|
+ LCD_WR_DATA(0x11);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x34);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x56);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x76);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x77);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x66);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x88);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xBB);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x66);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x55);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x55);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x45);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x43);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x44);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE7);
|
|
|
+ LCD_WR_DATA(0x32);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x55);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x76);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x66);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x67);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x67);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x87);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xBB);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x77);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x44);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x56);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x23);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x33);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x45);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE8);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x87);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x88);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x77);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x66);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x88);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xAA);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0xBB);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x99);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x66);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x55);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x55);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x44);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x44);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x55);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xE9);
|
|
|
+ LCD_WR_DATA(0xAA);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0x00);
|
|
|
+ LCD_WR_DATA(0xAA);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xCF);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xF0);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x50);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xF3);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0xF9);
|
|
|
+ LCD_WR_DATA(0x06);
|
|
|
+ LCD_WR_DATA(0x10);
|
|
|
+ LCD_WR_DATA(0x29);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0x3A);
|
|
|
+ LCD_WR_DATA(0x55); // 66
|
|
|
+
|
|
|
+ LCD_WR_REG(0x11);
|
|
|
+ ms_delay(100);
|
|
|
+ LCD_WR_REG(0x29);
|
|
|
+ LCD_WR_REG(0x35);
|
|
|
+ LCD_WR_DATA(0x00);
|
|
|
+
|
|
|
+ LCD_WR_REG(0x51);
|
|
|
+ LCD_WR_DATA(0xFF);
|
|
|
+ LCD_WR_REG(0x53);
|
|
|
+ LCD_WR_DATA(0x2C);
|
|
|
+ LCD_WR_REG(0x55);
|
|
|
+ LCD_WR_DATA(0x82);
|
|
|
+ LCD_WR_REG(0x2c);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x5510)
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0xF000, 0x55);
|
|
|
+ LCD_WriteReg(0xF001, 0xAA);
|
|
|
+ LCD_WriteReg(0xF002, 0x52);
|
|
|
+ LCD_WriteReg(0xF003, 0x08);
|
|
|
+ LCD_WriteReg(0xF004, 0x01);
|
|
|
+ // AVDD Set AVDD 5.2V
|
|
|
+ LCD_WriteReg(0xB000, 0x0D);
|
|
|
+ LCD_WriteReg(0xB001, 0x0D);
|
|
|
+ LCD_WriteReg(0xB002, 0x0D);
|
|
|
+ // AVDD ratio
|
|
|
+ LCD_WriteReg(0xB600, 0x34);
|
|
|
+ LCD_WriteReg(0xB601, 0x34);
|
|
|
+ LCD_WriteReg(0xB602, 0x34);
|
|
|
+ // AVEE -5.2V
|
|
|
+ LCD_WriteReg(0xB100, 0x0D);
|
|
|
+ LCD_WriteReg(0xB101, 0x0D);
|
|
|
+ LCD_WriteReg(0xB102, 0x0D);
|
|
|
+ // AVEE ratio
|
|
|
+ LCD_WriteReg(0xB700, 0x34);
|
|
|
+ LCD_WriteReg(0xB701, 0x34);
|
|
|
+ LCD_WriteReg(0xB702, 0x34);
|
|
|
+ // VCL -2.5V
|
|
|
+ LCD_WriteReg(0xB200, 0x00);
|
|
|
+ LCD_WriteReg(0xB201, 0x00);
|
|
|
+ LCD_WriteReg(0xB202, 0x00);
|
|
|
+ // VCL ratio
|
|
|
+ LCD_WriteReg(0xB800, 0x24);
|
|
|
+ LCD_WriteReg(0xB801, 0x24);
|
|
|
+ LCD_WriteReg(0xB802, 0x24);
|
|
|
+ // VGH 15V (Free pump)
|
|
|
+ LCD_WriteReg(0xBF00, 0x01);
|
|
|
+ LCD_WriteReg(0xB300, 0x0F);
|
|
|
+ LCD_WriteReg(0xB301, 0x0F);
|
|
|
+ LCD_WriteReg(0xB302, 0x0F);
|
|
|
+ // VGH ratio
|
|
|
+ LCD_WriteReg(0xB900, 0x34);
|
|
|
+ LCD_WriteReg(0xB901, 0x34);
|
|
|
+ LCD_WriteReg(0xB902, 0x34);
|
|
|
+ // VGL_REG -10V
|
|
|
+ LCD_WriteReg(0xB500, 0x08);
|
|
|
+ LCD_WriteReg(0xB501, 0x08);
|
|
|
+ LCD_WriteReg(0xB502, 0x08);
|
|
|
+ LCD_WriteReg(0xC200, 0x03);
|
|
|
+ // VGLX ratio
|
|
|
+ LCD_WriteReg(0xBA00, 0x24);
|
|
|
+ LCD_WriteReg(0xBA01, 0x24);
|
|
|
+ LCD_WriteReg(0xBA02, 0x24);
|
|
|
+ // VGMP/VGSP 4.5V/0V
|
|
|
+ LCD_WriteReg(0xBC00, 0x00);
|
|
|
+ LCD_WriteReg(0xBC01, 0x78);
|
|
|
+ LCD_WriteReg(0xBC02, 0x00);
|
|
|
+ // VGMN/VGSN -4.5V/0V
|
|
|
+ LCD_WriteReg(0xBD00, 0x00);
|
|
|
+ LCD_WriteReg(0xBD01, 0x78);
|
|
|
+ LCD_WriteReg(0xBD02, 0x00);
|
|
|
+ // VCOM
|
|
|
+ LCD_WriteReg(0xBE00, 0x00);
|
|
|
+ LCD_WriteReg(0xBE01, 0x64);
|
|
|
+ // Gamma Setting
|
|
|
+ LCD_WriteReg(0xD100, 0x00);
|
|
|
+ LCD_WriteReg(0xD101, 0x33);
|
|
|
+ LCD_WriteReg(0xD102, 0x00);
|
|
|
+ LCD_WriteReg(0xD103, 0x34);
|
|
|
+ LCD_WriteReg(0xD104, 0x00);
|
|
|
+ LCD_WriteReg(0xD105, 0x3A);
|
|
|
+ LCD_WriteReg(0xD106, 0x00);
|
|
|
+ LCD_WriteReg(0xD107, 0x4A);
|
|
|
+ LCD_WriteReg(0xD108, 0x00);
|
|
|
+ LCD_WriteReg(0xD109, 0x5C);
|
|
|
+ LCD_WriteReg(0xD10A, 0x00);
|
|
|
+ LCD_WriteReg(0xD10B, 0x81);
|
|
|
+ LCD_WriteReg(0xD10C, 0x00);
|
|
|
+ LCD_WriteReg(0xD10D, 0xA6);
|
|
|
+ LCD_WriteReg(0xD10E, 0x00);
|
|
|
+ LCD_WriteReg(0xD10F, 0xE5);
|
|
|
+ LCD_WriteReg(0xD110, 0x01);
|
|
|
+ LCD_WriteReg(0xD111, 0x13);
|
|
|
+ LCD_WriteReg(0xD112, 0x01);
|
|
|
+ LCD_WriteReg(0xD113, 0x54);
|
|
|
+ LCD_WriteReg(0xD114, 0x01);
|
|
|
+ LCD_WriteReg(0xD115, 0x82);
|
|
|
+ LCD_WriteReg(0xD116, 0x01);
|
|
|
+ LCD_WriteReg(0xD117, 0xCA);
|
|
|
+ LCD_WriteReg(0xD118, 0x02);
|
|
|
+ LCD_WriteReg(0xD119, 0x00);
|
|
|
+ LCD_WriteReg(0xD11A, 0x02);
|
|
|
+ LCD_WriteReg(0xD11B, 0x01);
|
|
|
+ LCD_WriteReg(0xD11C, 0x02);
|
|
|
+ LCD_WriteReg(0xD11D, 0x34);
|
|
|
+ LCD_WriteReg(0xD11E, 0x02);
|
|
|
+ LCD_WriteReg(0xD11F, 0x67);
|
|
|
+ LCD_WriteReg(0xD120, 0x02);
|
|
|
+ LCD_WriteReg(0xD121, 0x84);
|
|
|
+ LCD_WriteReg(0xD122, 0x02);
|
|
|
+ LCD_WriteReg(0xD123, 0xA4);
|
|
|
+ LCD_WriteReg(0xD124, 0x02);
|
|
|
+ LCD_WriteReg(0xD125, 0xB7);
|
|
|
+ LCD_WriteReg(0xD126, 0x02);
|
|
|
+ LCD_WriteReg(0xD127, 0xCF);
|
|
|
+ LCD_WriteReg(0xD128, 0x02);
|
|
|
+ LCD_WriteReg(0xD129, 0xDE);
|
|
|
+ LCD_WriteReg(0xD12A, 0x02);
|
|
|
+ LCD_WriteReg(0xD12B, 0xF2);
|
|
|
+ LCD_WriteReg(0xD12C, 0x02);
|
|
|
+ LCD_WriteReg(0xD12D, 0xFE);
|
|
|
+ LCD_WriteReg(0xD12E, 0x03);
|
|
|
+ LCD_WriteReg(0xD12F, 0x10);
|
|
|
+ LCD_WriteReg(0xD130, 0x03);
|
|
|
+ LCD_WriteReg(0xD131, 0x33);
|
|
|
+ LCD_WriteReg(0xD132, 0x03);
|
|
|
+ LCD_WriteReg(0xD133, 0x6D);
|
|
|
+ LCD_WriteReg(0xD200, 0x00);
|
|
|
+ LCD_WriteReg(0xD201, 0x33);
|
|
|
+ LCD_WriteReg(0xD202, 0x00);
|
|
|
+ LCD_WriteReg(0xD203, 0x34);
|
|
|
+ LCD_WriteReg(0xD204, 0x00);
|
|
|
+ LCD_WriteReg(0xD205, 0x3A);
|
|
|
+ LCD_WriteReg(0xD206, 0x00);
|
|
|
+ LCD_WriteReg(0xD207, 0x4A);
|
|
|
+ LCD_WriteReg(0xD208, 0x00);
|
|
|
+ LCD_WriteReg(0xD209, 0x5C);
|
|
|
+ LCD_WriteReg(0xD20A, 0x00);
|
|
|
+
|
|
|
+ LCD_WriteReg(0xD20B, 0x81);
|
|
|
+ LCD_WriteReg(0xD20C, 0x00);
|
|
|
+ LCD_WriteReg(0xD20D, 0xA6);
|
|
|
+ LCD_WriteReg(0xD20E, 0x00);
|
|
|
+ LCD_WriteReg(0xD20F, 0xE5);
|
|
|
+ LCD_WriteReg(0xD210, 0x01);
|
|
|
+ LCD_WriteReg(0xD211, 0x13);
|
|
|
+ LCD_WriteReg(0xD212, 0x01);
|
|
|
+ LCD_WriteReg(0xD213, 0x54);
|
|
|
+ LCD_WriteReg(0xD214, 0x01);
|
|
|
+ LCD_WriteReg(0xD215, 0x82);
|
|
|
+ LCD_WriteReg(0xD216, 0x01);
|
|
|
+ LCD_WriteReg(0xD217, 0xCA);
|
|
|
+ LCD_WriteReg(0xD218, 0x02);
|
|
|
+ LCD_WriteReg(0xD219, 0x00);
|
|
|
+ LCD_WriteReg(0xD21A, 0x02);
|
|
|
+ LCD_WriteReg(0xD21B, 0x01);
|
|
|
+ LCD_WriteReg(0xD21C, 0x02);
|
|
|
+ LCD_WriteReg(0xD21D, 0x34);
|
|
|
+ LCD_WriteReg(0xD21E, 0x02);
|
|
|
+ LCD_WriteReg(0xD21F, 0x67);
|
|
|
+ LCD_WriteReg(0xD220, 0x02);
|
|
|
+ LCD_WriteReg(0xD221, 0x84);
|
|
|
+ LCD_WriteReg(0xD222, 0x02);
|
|
|
+ LCD_WriteReg(0xD223, 0xA4);
|
|
|
+ LCD_WriteReg(0xD224, 0x02);
|
|
|
+ LCD_WriteReg(0xD225, 0xB7);
|
|
|
+ LCD_WriteReg(0xD226, 0x02);
|
|
|
+ LCD_WriteReg(0xD227, 0xCF);
|
|
|
+ LCD_WriteReg(0xD228, 0x02);
|
|
|
+ LCD_WriteReg(0xD229, 0xDE);
|
|
|
+ LCD_WriteReg(0xD22A, 0x02);
|
|
|
+ LCD_WriteReg(0xD22B, 0xF2);
|
|
|
+ LCD_WriteReg(0xD22C, 0x02);
|
|
|
+ LCD_WriteReg(0xD22D, 0xFE);
|
|
|
+ LCD_WriteReg(0xD22E, 0x03);
|
|
|
+ LCD_WriteReg(0xD22F, 0x10);
|
|
|
+ LCD_WriteReg(0xD230, 0x03);
|
|
|
+ LCD_WriteReg(0xD231, 0x33);
|
|
|
+ LCD_WriteReg(0xD232, 0x03);
|
|
|
+ LCD_WriteReg(0xD233, 0x6D);
|
|
|
+ LCD_WriteReg(0xD300, 0x00);
|
|
|
+ LCD_WriteReg(0xD301, 0x33);
|
|
|
+ LCD_WriteReg(0xD302, 0x00);
|
|
|
+ LCD_WriteReg(0xD303, 0x34);
|
|
|
+ LCD_WriteReg(0xD304, 0x00);
|
|
|
+ LCD_WriteReg(0xD305, 0x3A);
|
|
|
+ LCD_WriteReg(0xD306, 0x00);
|
|
|
+ LCD_WriteReg(0xD307, 0x4A);
|
|
|
+ LCD_WriteReg(0xD308, 0x00);
|
|
|
+ LCD_WriteReg(0xD309, 0x5C);
|
|
|
+ LCD_WriteReg(0xD30A, 0x00);
|
|
|
+
|
|
|
+ LCD_WriteReg(0xD30B, 0x81);
|
|
|
+ LCD_WriteReg(0xD30C, 0x00);
|
|
|
+ LCD_WriteReg(0xD30D, 0xA6);
|
|
|
+ LCD_WriteReg(0xD30E, 0x00);
|
|
|
+ LCD_WriteReg(0xD30F, 0xE5);
|
|
|
+ LCD_WriteReg(0xD310, 0x01);
|
|
|
+ LCD_WriteReg(0xD311, 0x13);
|
|
|
+ LCD_WriteReg(0xD312, 0x01);
|
|
|
+ LCD_WriteReg(0xD313, 0x54);
|
|
|
+ LCD_WriteReg(0xD314, 0x01);
|
|
|
+ LCD_WriteReg(0xD315, 0x82);
|
|
|
+ LCD_WriteReg(0xD316, 0x01);
|
|
|
+ LCD_WriteReg(0xD317, 0xCA);
|
|
|
+ LCD_WriteReg(0xD318, 0x02);
|
|
|
+ LCD_WriteReg(0xD319, 0x00);
|
|
|
+ LCD_WriteReg(0xD31A, 0x02);
|
|
|
+ LCD_WriteReg(0xD31B, 0x01);
|
|
|
+ LCD_WriteReg(0xD31C, 0x02);
|
|
|
+ LCD_WriteReg(0xD31D, 0x34);
|
|
|
+ LCD_WriteReg(0xD31E, 0x02);
|
|
|
+ LCD_WriteReg(0xD31F, 0x67);
|
|
|
+ LCD_WriteReg(0xD320, 0x02);
|
|
|
+ LCD_WriteReg(0xD321, 0x84);
|
|
|
+ LCD_WriteReg(0xD322, 0x02);
|
|
|
+ LCD_WriteReg(0xD323, 0xA4);
|
|
|
+ LCD_WriteReg(0xD324, 0x02);
|
|
|
+ LCD_WriteReg(0xD325, 0xB7);
|
|
|
+ LCD_WriteReg(0xD326, 0x02);
|
|
|
+ LCD_WriteReg(0xD327, 0xCF);
|
|
|
+ LCD_WriteReg(0xD328, 0x02);
|
|
|
+ LCD_WriteReg(0xD329, 0xDE);
|
|
|
+ LCD_WriteReg(0xD32A, 0x02);
|
|
|
+ LCD_WriteReg(0xD32B, 0xF2);
|
|
|
+ LCD_WriteReg(0xD32C, 0x02);
|
|
|
+ LCD_WriteReg(0xD32D, 0xFE);
|
|
|
+ LCD_WriteReg(0xD32E, 0x03);
|
|
|
+ LCD_WriteReg(0xD32F, 0x10);
|
|
|
+ LCD_WriteReg(0xD330, 0x03);
|
|
|
+ LCD_WriteReg(0xD331, 0x33);
|
|
|
+ LCD_WriteReg(0xD332, 0x03);
|
|
|
+ LCD_WriteReg(0xD333, 0x6D);
|
|
|
+ LCD_WriteReg(0xD400, 0x00);
|
|
|
+ LCD_WriteReg(0xD401, 0x33);
|
|
|
+ LCD_WriteReg(0xD402, 0x00);
|
|
|
+ LCD_WriteReg(0xD403, 0x34);
|
|
|
+ LCD_WriteReg(0xD404, 0x00);
|
|
|
+ LCD_WriteReg(0xD405, 0x3A);
|
|
|
+ LCD_WriteReg(0xD406, 0x00);
|
|
|
+ LCD_WriteReg(0xD407, 0x4A);
|
|
|
+ LCD_WriteReg(0xD408, 0x00);
|
|
|
+ LCD_WriteReg(0xD409, 0x5C);
|
|
|
+ LCD_WriteReg(0xD40A, 0x00);
|
|
|
+ LCD_WriteReg(0xD40B, 0x81);
|
|
|
+
|
|
|
+ LCD_WriteReg(0xD40C, 0x00);
|
|
|
+ LCD_WriteReg(0xD40D, 0xA6);
|
|
|
+ LCD_WriteReg(0xD40E, 0x00);
|
|
|
+ LCD_WriteReg(0xD40F, 0xE5);
|
|
|
+ LCD_WriteReg(0xD410, 0x01);
|
|
|
+ LCD_WriteReg(0xD411, 0x13);
|
|
|
+ LCD_WriteReg(0xD412, 0x01);
|
|
|
+ LCD_WriteReg(0xD413, 0x54);
|
|
|
+ LCD_WriteReg(0xD414, 0x01);
|
|
|
+ LCD_WriteReg(0xD415, 0x82);
|
|
|
+ LCD_WriteReg(0xD416, 0x01);
|
|
|
+ LCD_WriteReg(0xD417, 0xCA);
|
|
|
+ LCD_WriteReg(0xD418, 0x02);
|
|
|
+ LCD_WriteReg(0xD419, 0x00);
|
|
|
+ LCD_WriteReg(0xD41A, 0x02);
|
|
|
+ LCD_WriteReg(0xD41B, 0x01);
|
|
|
+ LCD_WriteReg(0xD41C, 0x02);
|
|
|
+ LCD_WriteReg(0xD41D, 0x34);
|
|
|
+ LCD_WriteReg(0xD41E, 0x02);
|
|
|
+ LCD_WriteReg(0xD41F, 0x67);
|
|
|
+ LCD_WriteReg(0xD420, 0x02);
|
|
|
+ LCD_WriteReg(0xD421, 0x84);
|
|
|
+ LCD_WriteReg(0xD422, 0x02);
|
|
|
+ LCD_WriteReg(0xD423, 0xA4);
|
|
|
+ LCD_WriteReg(0xD424, 0x02);
|
|
|
+ LCD_WriteReg(0xD425, 0xB7);
|
|
|
+ LCD_WriteReg(0xD426, 0x02);
|
|
|
+ LCD_WriteReg(0xD427, 0xCF);
|
|
|
+ LCD_WriteReg(0xD428, 0x02);
|
|
|
+ LCD_WriteReg(0xD429, 0xDE);
|
|
|
+ LCD_WriteReg(0xD42A, 0x02);
|
|
|
+ LCD_WriteReg(0xD42B, 0xF2);
|
|
|
+ LCD_WriteReg(0xD42C, 0x02);
|
|
|
+ LCD_WriteReg(0xD42D, 0xFE);
|
|
|
+ LCD_WriteReg(0xD42E, 0x03);
|
|
|
+ LCD_WriteReg(0xD42F, 0x10);
|
|
|
+ LCD_WriteReg(0xD430, 0x03);
|
|
|
+ LCD_WriteReg(0xD431, 0x33);
|
|
|
+ LCD_WriteReg(0xD432, 0x03);
|
|
|
+ LCD_WriteReg(0xD433, 0x6D);
|
|
|
+ LCD_WriteReg(0xD500, 0x00);
|
|
|
+ LCD_WriteReg(0xD501, 0x33);
|
|
|
+ LCD_WriteReg(0xD502, 0x00);
|
|
|
+ LCD_WriteReg(0xD503, 0x34);
|
|
|
+ LCD_WriteReg(0xD504, 0x00);
|
|
|
+ LCD_WriteReg(0xD505, 0x3A);
|
|
|
+ LCD_WriteReg(0xD506, 0x00);
|
|
|
+ LCD_WriteReg(0xD507, 0x4A);
|
|
|
+ LCD_WriteReg(0xD508, 0x00);
|
|
|
+ LCD_WriteReg(0xD509, 0x5C);
|
|
|
+ LCD_WriteReg(0xD50A, 0x00);
|
|
|
+ LCD_WriteReg(0xD50B, 0x81);
|
|
|
+
|
|
|
+ LCD_WriteReg(0xD50C, 0x00);
|
|
|
+ LCD_WriteReg(0xD50D, 0xA6);
|
|
|
+ LCD_WriteReg(0xD50E, 0x00);
|
|
|
+ LCD_WriteReg(0xD50F, 0xE5);
|
|
|
+ LCD_WriteReg(0xD510, 0x01);
|
|
|
+ LCD_WriteReg(0xD511, 0x13);
|
|
|
+ LCD_WriteReg(0xD512, 0x01);
|
|
|
+ LCD_WriteReg(0xD513, 0x54);
|
|
|
+ LCD_WriteReg(0xD514, 0x01);
|
|
|
+ LCD_WriteReg(0xD515, 0x82);
|
|
|
+ LCD_WriteReg(0xD516, 0x01);
|
|
|
+ LCD_WriteReg(0xD517, 0xCA);
|
|
|
+ LCD_WriteReg(0xD518, 0x02);
|
|
|
+ LCD_WriteReg(0xD519, 0x00);
|
|
|
+ LCD_WriteReg(0xD51A, 0x02);
|
|
|
+ LCD_WriteReg(0xD51B, 0x01);
|
|
|
+ LCD_WriteReg(0xD51C, 0x02);
|
|
|
+ LCD_WriteReg(0xD51D, 0x34);
|
|
|
+ LCD_WriteReg(0xD51E, 0x02);
|
|
|
+ LCD_WriteReg(0xD51F, 0x67);
|
|
|
+ LCD_WriteReg(0xD520, 0x02);
|
|
|
+ LCD_WriteReg(0xD521, 0x84);
|
|
|
+ LCD_WriteReg(0xD522, 0x02);
|
|
|
+ LCD_WriteReg(0xD523, 0xA4);
|
|
|
+ LCD_WriteReg(0xD524, 0x02);
|
|
|
+ LCD_WriteReg(0xD525, 0xB7);
|
|
|
+ LCD_WriteReg(0xD526, 0x02);
|
|
|
+ LCD_WriteReg(0xD527, 0xCF);
|
|
|
+ LCD_WriteReg(0xD528, 0x02);
|
|
|
+ LCD_WriteReg(0xD529, 0xDE);
|
|
|
+ LCD_WriteReg(0xD52A, 0x02);
|
|
|
+ LCD_WriteReg(0xD52B, 0xF2);
|
|
|
+ LCD_WriteReg(0xD52C, 0x02);
|
|
|
+ LCD_WriteReg(0xD52D, 0xFE);
|
|
|
+ LCD_WriteReg(0xD52E, 0x03);
|
|
|
+ LCD_WriteReg(0xD52F, 0x10);
|
|
|
+ LCD_WriteReg(0xD530, 0x03);
|
|
|
+ LCD_WriteReg(0xD531, 0x33);
|
|
|
+ LCD_WriteReg(0xD532, 0x03);
|
|
|
+ LCD_WriteReg(0xD533, 0x6D);
|
|
|
+ LCD_WriteReg(0xD600, 0x00);
|
|
|
+ LCD_WriteReg(0xD601, 0x33);
|
|
|
+ LCD_WriteReg(0xD602, 0x00);
|
|
|
+ LCD_WriteReg(0xD603, 0x34);
|
|
|
+ LCD_WriteReg(0xD604, 0x00);
|
|
|
+ LCD_WriteReg(0xD605, 0x3A);
|
|
|
+ LCD_WriteReg(0xD606, 0x00);
|
|
|
+ LCD_WriteReg(0xD607, 0x4A);
|
|
|
+ LCD_WriteReg(0xD608, 0x00);
|
|
|
+ LCD_WriteReg(0xD609, 0x5C);
|
|
|
+ LCD_WriteReg(0xD60A, 0x00);
|
|
|
+ LCD_WriteReg(0xD60B, 0x81);
|
|
|
+
|
|
|
+ LCD_WriteReg(0xD60C, 0x00);
|
|
|
+ LCD_WriteReg(0xD60D, 0xA6);
|
|
|
+ LCD_WriteReg(0xD60E, 0x00);
|
|
|
+ LCD_WriteReg(0xD60F, 0xE5);
|
|
|
+ LCD_WriteReg(0xD610, 0x01);
|
|
|
+ LCD_WriteReg(0xD611, 0x13);
|
|
|
+ LCD_WriteReg(0xD612, 0x01);
|
|
|
+ LCD_WriteReg(0xD613, 0x54);
|
|
|
+ LCD_WriteReg(0xD614, 0x01);
|
|
|
+ LCD_WriteReg(0xD615, 0x82);
|
|
|
+ LCD_WriteReg(0xD616, 0x01);
|
|
|
+ LCD_WriteReg(0xD617, 0xCA);
|
|
|
+ LCD_WriteReg(0xD618, 0x02);
|
|
|
+ LCD_WriteReg(0xD619, 0x00);
|
|
|
+ LCD_WriteReg(0xD61A, 0x02);
|
|
|
+ LCD_WriteReg(0xD61B, 0x01);
|
|
|
+ LCD_WriteReg(0xD61C, 0x02);
|
|
|
+ LCD_WriteReg(0xD61D, 0x34);
|
|
|
+ LCD_WriteReg(0xD61E, 0x02);
|
|
|
+ LCD_WriteReg(0xD61F, 0x67);
|
|
|
+ LCD_WriteReg(0xD620, 0x02);
|
|
|
+ LCD_WriteReg(0xD621, 0x84);
|
|
|
+ LCD_WriteReg(0xD622, 0x02);
|
|
|
+ LCD_WriteReg(0xD623, 0xA4);
|
|
|
+ LCD_WriteReg(0xD624, 0x02);
|
|
|
+ LCD_WriteReg(0xD625, 0xB7);
|
|
|
+ LCD_WriteReg(0xD626, 0x02);
|
|
|
+ LCD_WriteReg(0xD627, 0xCF);
|
|
|
+ LCD_WriteReg(0xD628, 0x02);
|
|
|
+ LCD_WriteReg(0xD629, 0xDE);
|
|
|
+ LCD_WriteReg(0xD62A, 0x02);
|
|
|
+ LCD_WriteReg(0xD62B, 0xF2);
|
|
|
+ LCD_WriteReg(0xD62C, 0x02);
|
|
|
+ LCD_WriteReg(0xD62D, 0xFE);
|
|
|
+ LCD_WriteReg(0xD62E, 0x03);
|
|
|
+ LCD_WriteReg(0xD62F, 0x10);
|
|
|
+ LCD_WriteReg(0xD630, 0x03);
|
|
|
+ LCD_WriteReg(0xD631, 0x33);
|
|
|
+ LCD_WriteReg(0xD632, 0x03);
|
|
|
+ LCD_WriteReg(0xD633, 0x6D);
|
|
|
+ // LV2 Page 0 enable
|
|
|
+ LCD_WriteReg(0xF000, 0x55);
|
|
|
+ LCD_WriteReg(0xF001, 0xAA);
|
|
|
+ LCD_WriteReg(0xF002, 0x52);
|
|
|
+ LCD_WriteReg(0xF003, 0x08);
|
|
|
+ LCD_WriteReg(0xF004, 0x00);
|
|
|
+ // Display control
|
|
|
+ LCD_WriteReg(0xB100, 0xCC);
|
|
|
+ LCD_WriteReg(0xB101, 0x00);
|
|
|
+ // Source hold time
|
|
|
+ LCD_WriteReg(0xB600, 0x05);
|
|
|
+ // Gate EQ control
|
|
|
+ LCD_WriteReg(0xB700, 0x70);
|
|
|
+ LCD_WriteReg(0xB701, 0x70);
|
|
|
+ // Source EQ control (Mode 2)
|
|
|
+ LCD_WriteReg(0xB800, 0x01);
|
|
|
+ LCD_WriteReg(0xB801, 0x03);
|
|
|
+ LCD_WriteReg(0xB802, 0x03);
|
|
|
+ LCD_WriteReg(0xB803, 0x03);
|
|
|
+ // Inversion mode (2-dot)
|
|
|
+ LCD_WriteReg(0xBC00, 0x02);
|
|
|
+ LCD_WriteReg(0xBC01, 0x00);
|
|
|
+ LCD_WriteReg(0xBC02, 0x00);
|
|
|
+ // Timing control 4H w/ 4-delay
|
|
|
+ LCD_WriteReg(0xC900, 0xD0);
|
|
|
+ LCD_WriteReg(0xC901, 0x02);
|
|
|
+ LCD_WriteReg(0xC902, 0x50);
|
|
|
+ LCD_WriteReg(0xC903, 0x50);
|
|
|
+ LCD_WriteReg(0xC904, 0x50);
|
|
|
+ LCD_WriteReg(0x3500, 0x00);
|
|
|
+ LCD_WriteReg(0x3A00, 0x55); // 16-bit/pixel
|
|
|
+ LCD_WR_REG(0x1100);
|
|
|
+ us_delay(120);
|
|
|
+ LCD_WR_REG(0x2900);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x9325) // 9325
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x00E5, 0x78F0);
|
|
|
+ LCD_WriteReg(0x0001, 0x0100);
|
|
|
+ LCD_WriteReg(0x0002, 0x0700);
|
|
|
+ LCD_WriteReg(0x0003, 0x1030);
|
|
|
+ LCD_WriteReg(0x0004, 0x0000);
|
|
|
+ LCD_WriteReg(0x0008, 0x0202);
|
|
|
+ LCD_WriteReg(0x0009, 0x0000);
|
|
|
+ LCD_WriteReg(0x000A, 0x0000);
|
|
|
+ LCD_WriteReg(0x000C, 0x0000);
|
|
|
+ LCD_WriteReg(0x000D, 0x0000);
|
|
|
+ LCD_WriteReg(0x000F, 0x0000);
|
|
|
+ // power on sequence VGHVGL
|
|
|
+ LCD_WriteReg(0x0010, 0x0000);
|
|
|
+ LCD_WriteReg(0x0011, 0x0007);
|
|
|
+ LCD_WriteReg(0x0012, 0x0000);
|
|
|
+ LCD_WriteReg(0x0013, 0x0000);
|
|
|
+ LCD_WriteReg(0x0007, 0x0000);
|
|
|
+ // vgh
|
|
|
+ LCD_WriteReg(0x0010, 0x1690);
|
|
|
+ LCD_WriteReg(0x0011, 0x0227);
|
|
|
+ // delayms(100);
|
|
|
+ // vregiout
|
|
|
+ LCD_WriteReg(0x0012, 0x009D); // 0x001b
|
|
|
+ // delayms(100);
|
|
|
+ // vom amplitude
|
|
|
+ LCD_WriteReg(0x0013, 0x1900);
|
|
|
+ // delayms(100);
|
|
|
+ // vom H
|
|
|
+ LCD_WriteReg(0x0029, 0x0025);
|
|
|
+ LCD_WriteReg(0x002B, 0x000D);
|
|
|
+ // gamma
|
|
|
+ LCD_WriteReg(0x0030, 0x0007);
|
|
|
+ LCD_WriteReg(0x0031, 0x0303);
|
|
|
+ LCD_WriteReg(0x0032, 0x0003); // 0006
|
|
|
+ LCD_WriteReg(0x0035, 0x0206);
|
|
|
+ LCD_WriteReg(0x0036, 0x0008);
|
|
|
+ LCD_WriteReg(0x0037, 0x0406);
|
|
|
+ LCD_WriteReg(0x0038, 0x0304); // 0200
|
|
|
+ LCD_WriteReg(0x0039, 0x0007);
|
|
|
+ LCD_WriteReg(0x003C, 0x0602); // 0504
|
|
|
+ LCD_WriteReg(0x003D, 0x0008);
|
|
|
+ // ram
|
|
|
+ LCD_WriteReg(0x0050, 0x0000);
|
|
|
+ LCD_WriteReg(0x0051, 0x00EF);
|
|
|
+ LCD_WriteReg(0x0052, 0x0000);
|
|
|
+ LCD_WriteReg(0x0053, 0x013F);
|
|
|
+ LCD_WriteReg(0x0060, 0xA700);
|
|
|
+ LCD_WriteReg(0x0061, 0x0001);
|
|
|
+ LCD_WriteReg(0x006A, 0x0000);
|
|
|
+ //
|
|
|
+ LCD_WriteReg(0x0080, 0x0000);
|
|
|
+ LCD_WriteReg(0x0081, 0x0000);
|
|
|
+ LCD_WriteReg(0x0082, 0x0000);
|
|
|
+ LCD_WriteReg(0x0083, 0x0000);
|
|
|
+ LCD_WriteReg(0x0084, 0x0000);
|
|
|
+ LCD_WriteReg(0x0085, 0x0000);
|
|
|
+ //
|
|
|
+ LCD_WriteReg(0x0090, 0x0010);
|
|
|
+ LCD_WriteReg(0x0092, 0x0600);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0007, 0x0133);
|
|
|
+ LCD_WriteReg(0x00, 0x0022); //
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x9328) // ILI9328 OK
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x00EC, 0x108F); // internal timeing
|
|
|
+ LCD_WriteReg(0x00EF, 0x1234); // ADD
|
|
|
+ // LCD_WriteReg(0x00e7,0x0010);
|
|
|
+ // LCD_WriteReg(0x0000,0x0001);//开启内部时钟
|
|
|
+ LCD_WriteReg(0x0001, 0x0100);
|
|
|
+ LCD_WriteReg(0x0002, 0x0700); //电源开启
|
|
|
+ // LCD_WriteReg(0x0003,(1<<3)|(1<<4) ); //65K RGB
|
|
|
+ // DRIVE TABLE(寄存器 03H)
|
|
|
+ // BIT3=AM BIT4:5=ID0:1
|
|
|
+ // AM ID0 ID1 FUNCATION
|
|
|
+ // 0 0 0 R->L D->U
|
|
|
+ // 1 0 0 D->U R->L
|
|
|
+ // 0 1 0 L->R D->U
|
|
|
+ // 1 1 0 D->U L->R
|
|
|
+ // 0 0 1 R->L U->D
|
|
|
+ // 1 0 1 U->D R->L
|
|
|
+ // 0 1 1 L->R U->D 正常就用这个.
|
|
|
+ // 1 1 1 U->D L->R
|
|
|
+ LCD_WriteReg(0x0003, (1 << 12) | (3 << 4) | (0 << 3)); // 65K
|
|
|
+ LCD_WriteReg(0x0004, 0x0000);
|
|
|
+ LCD_WriteReg(0x0008, 0x0202);
|
|
|
+ LCD_WriteReg(0x0009, 0x0000);
|
|
|
+ LCD_WriteReg(0x000a, 0x0000); // display setting
|
|
|
+ LCD_WriteReg(0x000c, 0x0001); // display setting
|
|
|
+ LCD_WriteReg(0x000d, 0x0000); // 0f3c
|
|
|
+ LCD_WriteReg(0x000f, 0x0000);
|
|
|
+ //电源配置
|
|
|
+ LCD_WriteReg(0x0010, 0x0000);
|
|
|
+ LCD_WriteReg(0x0011, 0x0007);
|
|
|
+ LCD_WriteReg(0x0012, 0x0000);
|
|
|
+ LCD_WriteReg(0x0013, 0x0000);
|
|
|
+ LCD_WriteReg(0x0007, 0x0001);
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x0010, 0x1490);
|
|
|
+ LCD_WriteReg(0x0011, 0x0227);
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x0012, 0x008A);
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x0013, 0x1a00);
|
|
|
+ LCD_WriteReg(0x0029, 0x0006);
|
|
|
+ LCD_WriteReg(0x002b, 0x000d);
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x0020, 0x0000);
|
|
|
+ LCD_WriteReg(0x0021, 0x0000);
|
|
|
+ ms_delay(50);
|
|
|
+ //伽马校正
|
|
|
+ LCD_WriteReg(0x0030, 0x0000);
|
|
|
+ LCD_WriteReg(0x0031, 0x0604);
|
|
|
+ LCD_WriteReg(0x0032, 0x0305);
|
|
|
+ LCD_WriteReg(0x0035, 0x0000);
|
|
|
+ LCD_WriteReg(0x0036, 0x0C09);
|
|
|
+ LCD_WriteReg(0x0037, 0x0204);
|
|
|
+ LCD_WriteReg(0x0038, 0x0301);
|
|
|
+ LCD_WriteReg(0x0039, 0x0707);
|
|
|
+ LCD_WriteReg(0x003c, 0x0000);
|
|
|
+ LCD_WriteReg(0x003d, 0x0a0a);
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x0050, 0x0000); //水平GRAM起始位置
|
|
|
+ LCD_WriteReg(0x0051, 0x00ef); //水平GRAM终止位置
|
|
|
+ LCD_WriteReg(0x0052, 0x0000); //垂直GRAM起始位置
|
|
|
+ LCD_WriteReg(0x0053, 0x013f); //垂直GRAM终止位置
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0060, 0xa700);
|
|
|
+ LCD_WriteReg(0x0061, 0x0001);
|
|
|
+ LCD_WriteReg(0x006a, 0x0000);
|
|
|
+ LCD_WriteReg(0x0080, 0x0000);
|
|
|
+ LCD_WriteReg(0x0081, 0x0000);
|
|
|
+ LCD_WriteReg(0x0082, 0x0000);
|
|
|
+ LCD_WriteReg(0x0083, 0x0000);
|
|
|
+ LCD_WriteReg(0x0084, 0x0000);
|
|
|
+ LCD_WriteReg(0x0085, 0x0000);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0090, 0x0010);
|
|
|
+ LCD_WriteReg(0x0092, 0x0600);
|
|
|
+ //开启显示设置
|
|
|
+ LCD_WriteReg(0x0007, 0x0133);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x9320) //测试OK.
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x00, 0x0000);
|
|
|
+ LCD_WriteReg(0x01, 0x0100); // Driver Output Contral.
|
|
|
+ LCD_WriteReg(0x02, 0x0700); // LCD Driver Waveform Contral.
|
|
|
+ LCD_WriteReg(0x03, 0x1030); // Entry Mode Set.
|
|
|
+ // LCD_WriteReg(0x03,0x1018); //Entry Mode Set.
|
|
|
+
|
|
|
+ LCD_WriteReg(0x04, 0x0000); // Scalling Contral.
|
|
|
+ LCD_WriteReg(0x08, 0x0202); // Display Contral 2.(0x0207)
|
|
|
+ LCD_WriteReg(0x09, 0x0000); // Display Contral 3.(0x0000)
|
|
|
+ LCD_WriteReg(0x0a, 0x0000); // Frame Cycle Contal.(0x0000)
|
|
|
+ LCD_WriteReg(0x0c, (1 << 0)); // Extern Display Interface Contral 1.(0x0000)
|
|
|
+ LCD_WriteReg(0x0d, 0x0000); // Frame Maker Position.
|
|
|
+ LCD_WriteReg(0x0f, 0x0000); // Extern Display Interface Contral 2.
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x07, 0x0101); // Display Contral.
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x10, (1 << 12) | (0 << 8) | (1 << 7) | (1 << 6) | (0 << 4)); // Power Control 1.(0x16b0)
|
|
|
+ LCD_WriteReg(0x11, 0x0007); // Power Control 2.(0x0001)
|
|
|
+ LCD_WriteReg(0x12, (1 << 8) | (1 << 4) | (0 << 0)); // Power Control 3.(0x0138)
|
|
|
+ LCD_WriteReg(0x13, 0x0b00); // Power Control 4.
|
|
|
+ LCD_WriteReg(0x29, 0x0000); // Power Control 7.
|
|
|
+
|
|
|
+ LCD_WriteReg(0x2b, (1 << 14) | (1 << 4));
|
|
|
+ LCD_WriteReg(0x50, 0); // Set X Star
|
|
|
+ //水平GRAM终止位置Set X End.
|
|
|
+ LCD_WriteReg(0x51, 239); // Set Y Star
|
|
|
+ LCD_WriteReg(0x52, 0); // Set Y End.t.
|
|
|
+ LCD_WriteReg(0x53, 319); //
|
|
|
+
|
|
|
+ LCD_WriteReg(0x60, 0x2700); // Driver Output Control.
|
|
|
+ LCD_WriteReg(0x61, 0x0001); // Driver Output Control.
|
|
|
+ LCD_WriteReg(0x6a, 0x0000); // Vertical Srcoll Control.
|
|
|
+
|
|
|
+ LCD_WriteReg(0x80, 0x0000); // Display Position? Partial Display 1.
|
|
|
+ LCD_WriteReg(0x81, 0x0000); // RAM Address Start? Partial Display 1.
|
|
|
+ LCD_WriteReg(0x82, 0x0000); // RAM Address End-Partial Display 1.
|
|
|
+ LCD_WriteReg(0x83, 0x0000); // Displsy Position? Partial Display 2.
|
|
|
+ LCD_WriteReg(0x84, 0x0000); // RAM Address Start? Partial Display 2.
|
|
|
+ LCD_WriteReg(0x85, 0x0000); // RAM Address End? Partial Display 2.
|
|
|
+
|
|
|
+ LCD_WriteReg(0x90, (0 << 7) | (16 << 0)); // Frame Cycle Contral.(0x0013)
|
|
|
+ LCD_WriteReg(0x92, 0x0000); // Panel Interface Contral 2.(0x0000)
|
|
|
+ LCD_WriteReg(0x93, 0x0001); // Panel Interface Contral 3.
|
|
|
+ LCD_WriteReg(0x95, 0x0110); // Frame Cycle Contral.(0x0110)
|
|
|
+ LCD_WriteReg(0x97, (0 << 8)); //
|
|
|
+ LCD_WriteReg(0x98, 0x0000); // Frame Cycle Contral.
|
|
|
+ LCD_WriteReg(0x07, 0x0173); //(0x0173)
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0X9331) // OK |/|/|
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x00E7, 0x1014);
|
|
|
+ LCD_WriteReg(0x0001, 0x0100); // set SS and SM bit
|
|
|
+ LCD_WriteReg(0x0002, 0x0200); // set 1 line inversion
|
|
|
+ LCD_WriteReg(0x0003, (1 << 12) | (3 << 4) | (1 << 3)); // 65K
|
|
|
+ // LCD_WriteReg(0x0003, 0x1030); // set GRAM write direction and BGR=1.
|
|
|
+ LCD_WriteReg(0x0008, 0x0202); // set the back porch and front porch
|
|
|
+ LCD_WriteReg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
|
|
|
+ LCD_WriteReg(0x000A, 0x0000); // FMARK function
|
|
|
+ LCD_WriteReg(0x000C, 0x0000); // RGB interface setting
|
|
|
+ LCD_WriteReg(0x000D, 0x0000); // Frame marker Position
|
|
|
+ LCD_WriteReg(0x000F, 0x0000); // RGB interface polarity
|
|
|
+ //*************Power On sequence ****************//
|
|
|
+ LCD_WriteReg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
|
|
|
+ LCD_WriteReg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
|
|
|
+ LCD_WriteReg(0x0012, 0x0000); // VREG1OUT voltage
|
|
|
+ LCD_WriteReg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
|
|
|
+ ms_delay(200); // Dis-charge capacitor power voltage
|
|
|
+ LCD_WriteReg(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB
|
|
|
+ LCD_WriteReg(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
|
|
|
+ ms_delay(50); // Delay 50ms
|
|
|
+ LCD_WriteReg(0x0012, 0x000C); // Internal reference voltage= Vci;
|
|
|
+ ms_delay(50); // Delay 50ms
|
|
|
+ LCD_WriteReg(0x0013, 0x0800); // Set VDV[4:0] for VCOM amplitude
|
|
|
+ LCD_WriteReg(0x0029, 0x0011); // Set VCM[5:0] for VCOMH
|
|
|
+ LCD_WriteReg(0x002B, 0x000B); // Set Frame Rate
|
|
|
+ ms_delay(50); // Delay 50ms
|
|
|
+ LCD_WriteReg(0x0020, 0x0000); // GRAM horizontal Address
|
|
|
+ LCD_WriteReg(0x0021, 0x013f); // GRAM Vertical Address
|
|
|
+ // ----------- Adjust the Gamma Curve ----------//
|
|
|
+ LCD_WriteReg(0x0030, 0x0000);
|
|
|
+ LCD_WriteReg(0x0031, 0x0106);
|
|
|
+ LCD_WriteReg(0x0032, 0x0000);
|
|
|
+ LCD_WriteReg(0x0035, 0x0204);
|
|
|
+ LCD_WriteReg(0x0036, 0x160A);
|
|
|
+ LCD_WriteReg(0x0037, 0x0707);
|
|
|
+ LCD_WriteReg(0x0038, 0x0106);
|
|
|
+ LCD_WriteReg(0x0039, 0x0707);
|
|
|
+ LCD_WriteReg(0x003C, 0x0402);
|
|
|
+ LCD_WriteReg(0x003D, 0x0C0F);
|
|
|
+ //------------------ Set GRAM area ---------------//
|
|
|
+ LCD_WriteReg(0x0050, 0x0000); // Horizontal GRAM Start Address
|
|
|
+ LCD_WriteReg(0x0051, 0x00EF); // Horizontal GRAM End Address
|
|
|
+ LCD_WriteReg(0x0052, 0x0000); // Vertical GRAM Start Address
|
|
|
+ LCD_WriteReg(0x0053, 0x013F); // Vertical GRAM Start Address
|
|
|
+ LCD_WriteReg(0x0060, 0x2700); // Gate Scan Line
|
|
|
+ LCD_WriteReg(0x0061, 0x0001); // NDL,VLE, REV
|
|
|
+ LCD_WriteReg(0x006A, 0x0000); // set scrolling line
|
|
|
+ //-------------- Partial Display Control ---------//
|
|
|
+ LCD_WriteReg(0x0080, 0x0000);
|
|
|
+ LCD_WriteReg(0x0081, 0x0000);
|
|
|
+ LCD_WriteReg(0x0082, 0x0000);
|
|
|
+ LCD_WriteReg(0x0083, 0x0000);
|
|
|
+ LCD_WriteReg(0x0084, 0x0000);
|
|
|
+ LCD_WriteReg(0x0085, 0x0000);
|
|
|
+ //-------------- Panel Control -------------------//
|
|
|
+ LCD_WriteReg(0x0090, 0x0010);
|
|
|
+ LCD_WriteReg(0x0092, 0x0600);
|
|
|
+ LCD_WriteReg(0x0007, 0x0133); // 262K color and display ON
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x5408)
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x01, 0x0100);
|
|
|
+ LCD_WriteReg(0x02, 0x0700); // LCD Driving Waveform Contral
|
|
|
+ LCD_WriteReg(0x03, 0x1030); // Entry Mode设置
|
|
|
+ //指针从左至右自上而下的自动增模式
|
|
|
+ // Normal Mode(Window Mode disable)
|
|
|
+ // RGB格式
|
|
|
+ // 16位数据2次传输的8总线设置
|
|
|
+ LCD_WriteReg(0x04, 0x0000); // Scalling Control register
|
|
|
+ LCD_WriteReg(0x08, 0x0207); // Display Control 2
|
|
|
+ LCD_WriteReg(0x09, 0x0000); // Display Control 3
|
|
|
+ LCD_WriteReg(0x0A, 0x0000); // Frame Cycle Control
|
|
|
+ LCD_WriteReg(0x0C, 0x0000); // External Display Interface Control 1
|
|
|
+ LCD_WriteReg(0x0D, 0x0000); // Frame Maker Position
|
|
|
+ LCD_WriteReg(0x0F, 0x0000); // External Display Interface Control 2
|
|
|
+ ms_delay(20);
|
|
|
+ // TFT 液晶彩色图像显示方法14
|
|
|
+ LCD_WriteReg(0x10, 0x16B0); // 0x14B0 //Power Control 1
|
|
|
+ LCD_WriteReg(0x11, 0x0001); // 0x0007 //Power Control 2
|
|
|
+ LCD_WriteReg(0x17, 0x0001); // 0x0000 //Power Control 3
|
|
|
+ LCD_WriteReg(0x12, 0x0138); // 0x013B //Power Control 4
|
|
|
+ LCD_WriteReg(0x13, 0x0800); // 0x0800 //Power Control 5
|
|
|
+ LCD_WriteReg(0x29, 0x0009); // NVM read data 2
|
|
|
+ LCD_WriteReg(0x2a, 0x0009); // NVM read data 3
|
|
|
+ LCD_WriteReg(0xa4, 0x0000);
|
|
|
+ LCD_WriteReg(0x50, 0x0000); //设置操作窗口的X轴开始列
|
|
|
+ LCD_WriteReg(0x51, 0x00EF); //设置操作窗口的X轴结束列
|
|
|
+ LCD_WriteReg(0x52, 0x0000); //设置操作窗口的Y轴开始行
|
|
|
+ LCD_WriteReg(0x53, 0x013F); //设置操作窗口的Y轴结束行
|
|
|
+ LCD_WriteReg(0x60, 0x2700); // Driver Output Control
|
|
|
+ //设置屏幕的点数以及扫描的起始行
|
|
|
+ LCD_WriteReg(0x61, 0x0001); // Driver Output Control
|
|
|
+ LCD_WriteReg(0x6A, 0x0000); // Vertical Scroll Control
|
|
|
+ LCD_WriteReg(0x80, 0x0000); // Display Position – Partial Display 1
|
|
|
+ LCD_WriteReg(0x81, 0x0000); // RAM Address Start – Partial Display 1
|
|
|
+ LCD_WriteReg(0x82, 0x0000); // RAM address End - Partial Display 1
|
|
|
+ LCD_WriteReg(0x83, 0x0000); // Display Position – Partial Display 2
|
|
|
+ LCD_WriteReg(0x84, 0x0000); // RAM Address Start – Partial Display 2
|
|
|
+ LCD_WriteReg(0x85, 0x0000); // RAM address End – Partail Display2
|
|
|
+ LCD_WriteReg(0x90, 0x0013); // Frame Cycle Control
|
|
|
+ LCD_WriteReg(0x92, 0x0000); // Panel Interface Control 2
|
|
|
+ LCD_WriteReg(0x93, 0x0003); // Panel Interface control 3
|
|
|
+ LCD_WriteReg(0x95, 0x0110); // Frame Cycle Control
|
|
|
+ LCD_WriteReg(0x07, 0x0173);
|
|
|
+ ms_delay(50);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x1505) // OK
|
|
|
+ {
|
|
|
+ // second release on 3/5 ,luminance is acceptable,water wave appear during camera preview
|
|
|
+ LCD_WriteReg(0x0007, 0x0000);
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x0012, 0x011C); // 0x011A why need to set several times?
|
|
|
+ LCD_WriteReg(0x00A4, 0x0001); // NVM
|
|
|
+ LCD_WriteReg(0x0008, 0x000F);
|
|
|
+ LCD_WriteReg(0x000A, 0x0008);
|
|
|
+ LCD_WriteReg(0x000D, 0x0008);
|
|
|
+ //伽马校正
|
|
|
+ LCD_WriteReg(0x0030, 0x0707);
|
|
|
+ LCD_WriteReg(0x0031, 0x0007); // 0x0707
|
|
|
+ LCD_WriteReg(0x0032, 0x0603);
|
|
|
+ LCD_WriteReg(0x0033, 0x0700);
|
|
|
+ LCD_WriteReg(0x0034, 0x0202);
|
|
|
+ LCD_WriteReg(0x0035, 0x0002); //?0x0606
|
|
|
+ LCD_WriteReg(0x0036, 0x1F0F);
|
|
|
+ LCD_WriteReg(0x0037, 0x0707); // 0x0f0f 0x0105
|
|
|
+ LCD_WriteReg(0x0038, 0x0000);
|
|
|
+ LCD_WriteReg(0x0039, 0x0000);
|
|
|
+ LCD_WriteReg(0x003A, 0x0707);
|
|
|
+ LCD_WriteReg(0x003B, 0x0000); // 0x0303
|
|
|
+ LCD_WriteReg(0x003C, 0x0007); //?0x0707
|
|
|
+ LCD_WriteReg(0x003D, 0x0000); // 0x1313//0x1f08
|
|
|
+ ms_delay(50);
|
|
|
+ LCD_WriteReg(0x0007, 0x0001);
|
|
|
+ LCD_WriteReg(0x0017, 0x0001); //开启电源
|
|
|
+ ms_delay(50);
|
|
|
+ //电源配置
|
|
|
+ LCD_WriteReg(0x0010, 0x17A0);
|
|
|
+ LCD_WriteReg(0x0011, 0x0217); // reference voltage VC[2:0] Vciout = 1.00*Vcivl
|
|
|
+ LCD_WriteReg(0x0012, 0x011E); // 0x011c //Vreg1out = Vcilvl*1.80 is it the same as Vgama1out ?
|
|
|
+ LCD_WriteReg(0x0013, 0x0F00); // VDV[4:0]-->VCOM Amplitude VcomL = VcomH - Vcom Ampl
|
|
|
+ LCD_WriteReg(0x002A, 0x0000);
|
|
|
+ LCD_WriteReg(0x0029, 0x000A); // 0x0001F Vcomh = VCM1[4:0]*Vreg1out gate source voltage??
|
|
|
+ LCD_WriteReg(0x0012, 0x013E); // 0x013C power supply on
|
|
|
+ // Coordinates Control//
|
|
|
+ LCD_WriteReg(0x0050, 0x0000); // 0x0e00
|
|
|
+ LCD_WriteReg(0x0051, 0x00EF);
|
|
|
+ LCD_WriteReg(0x0052, 0x0000);
|
|
|
+ LCD_WriteReg(0x0053, 0x013F);
|
|
|
+ // Pannel Image Control//
|
|
|
+ LCD_WriteReg(0x0060, 0x2700);
|
|
|
+ LCD_WriteReg(0x0061, 0x0001);
|
|
|
+ LCD_WriteReg(0x006A, 0x0000);
|
|
|
+ LCD_WriteReg(0x0080, 0x0000);
|
|
|
+ // Partial Image Control//
|
|
|
+ LCD_WriteReg(0x0081, 0x0000);
|
|
|
+ LCD_WriteReg(0x0082, 0x0000);
|
|
|
+ LCD_WriteReg(0x0083, 0x0000);
|
|
|
+ LCD_WriteReg(0x0084, 0x0000);
|
|
|
+ LCD_WriteReg(0x0085, 0x0000);
|
|
|
+ // Panel Interface Control//
|
|
|
+ LCD_WriteReg(0x0090, 0x0013); // 0x0010 frenqucy
|
|
|
+ LCD_WriteReg(0x0092, 0x0300);
|
|
|
+ LCD_WriteReg(0x0093, 0x0005);
|
|
|
+ LCD_WriteReg(0x0095, 0x0000);
|
|
|
+ LCD_WriteReg(0x0097, 0x0000);
|
|
|
+ LCD_WriteReg(0x0098, 0x0000);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0001, 0x0100);
|
|
|
+ LCD_WriteReg(0x0002, 0x0700);
|
|
|
+ LCD_WriteReg(0x0003, 0x1038); //扫描方向 上->下 左->右
|
|
|
+ LCD_WriteReg(0x0004, 0x0000);
|
|
|
+ LCD_WriteReg(0x000C, 0x0000);
|
|
|
+ LCD_WriteReg(0x000F, 0x0000);
|
|
|
+ LCD_WriteReg(0x0020, 0x0000);
|
|
|
+ LCD_WriteReg(0x0021, 0x0000);
|
|
|
+ LCD_WriteReg(0x0007, 0x0021);
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WriteReg(0x0007, 0x0061);
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WriteReg(0x0007, 0x0173);
|
|
|
+ ms_delay(20);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0xB505)
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x00a4, 0x0001);
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WriteReg(0x0060, 0x2700);
|
|
|
+ LCD_WriteReg(0x0008, 0x0202);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0030, 0x0214);
|
|
|
+ LCD_WriteReg(0x0031, 0x3715);
|
|
|
+ LCD_WriteReg(0x0032, 0x0604);
|
|
|
+ LCD_WriteReg(0x0033, 0x0e16);
|
|
|
+ LCD_WriteReg(0x0034, 0x2211);
|
|
|
+ LCD_WriteReg(0x0035, 0x1500);
|
|
|
+ LCD_WriteReg(0x0036, 0x8507);
|
|
|
+ LCD_WriteReg(0x0037, 0x1407);
|
|
|
+ LCD_WriteReg(0x0038, 0x1403);
|
|
|
+ LCD_WriteReg(0x0039, 0x0020);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0090, 0x001a);
|
|
|
+ LCD_WriteReg(0x0010, 0x0000);
|
|
|
+ LCD_WriteReg(0x0011, 0x0007);
|
|
|
+ LCD_WriteReg(0x0012, 0x0000);
|
|
|
+ LCD_WriteReg(0x0013, 0x0000);
|
|
|
+ ms_delay(20);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0010, 0x0730);
|
|
|
+ LCD_WriteReg(0x0011, 0x0137);
|
|
|
+ ms_delay(20);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0012, 0x01b8);
|
|
|
+ ms_delay(20);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0013, 0x0f00);
|
|
|
+ LCD_WriteReg(0x002a, 0x0080);
|
|
|
+ LCD_WriteReg(0x0029, 0x0048);
|
|
|
+ ms_delay(20);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0001, 0x0100);
|
|
|
+ LCD_WriteReg(0x0002, 0x0700);
|
|
|
+ LCD_WriteReg(0x0003, 0x1038); //扫描方向 上->下 左->右
|
|
|
+ LCD_WriteReg(0x0008, 0x0202);
|
|
|
+ LCD_WriteReg(0x000a, 0x0000);
|
|
|
+ LCD_WriteReg(0x000c, 0x0000);
|
|
|
+ LCD_WriteReg(0x000d, 0x0000);
|
|
|
+ LCD_WriteReg(0x000e, 0x0030);
|
|
|
+ LCD_WriteReg(0x0050, 0x0000);
|
|
|
+ LCD_WriteReg(0x0051, 0x00ef);
|
|
|
+ LCD_WriteReg(0x0052, 0x0000);
|
|
|
+ LCD_WriteReg(0x0053, 0x013f);
|
|
|
+ LCD_WriteReg(0x0060, 0x2700);
|
|
|
+ LCD_WriteReg(0x0061, 0x0001);
|
|
|
+ LCD_WriteReg(0x006a, 0x0000);
|
|
|
+ // LCD_WriteReg(0x0080,0x0000);
|
|
|
+ // LCD_WriteReg(0x0081,0x0000);
|
|
|
+ LCD_WriteReg(0x0090, 0X0011);
|
|
|
+ LCD_WriteReg(0x0092, 0x0600);
|
|
|
+ LCD_WriteReg(0x0093, 0x0402);
|
|
|
+ LCD_WriteReg(0x0094, 0x0002);
|
|
|
+ ms_delay(20);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0007, 0x0001);
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WriteReg(0x0007, 0x0061);
|
|
|
+ LCD_WriteReg(0x0007, 0x0173);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0020, 0x0000);
|
|
|
+ LCD_WriteReg(0x0021, 0x0000);
|
|
|
+ LCD_WriteReg(0x00, 0x22);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0xC505)
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x0000, 0x0000);
|
|
|
+ LCD_WriteReg(0x00a4, 0x0001);
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WriteReg(0x0060, 0x2700);
|
|
|
+ LCD_WriteReg(0x0008, 0x0806);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0030, 0x0703); // gamma setting
|
|
|
+ LCD_WriteReg(0x0031, 0x0001);
|
|
|
+ LCD_WriteReg(0x0032, 0x0004);
|
|
|
+ LCD_WriteReg(0x0033, 0x0102);
|
|
|
+ LCD_WriteReg(0x0034, 0x0300);
|
|
|
+ LCD_WriteReg(0x0035, 0x0103);
|
|
|
+ LCD_WriteReg(0x0036, 0x001F);
|
|
|
+ LCD_WriteReg(0x0037, 0x0703);
|
|
|
+ LCD_WriteReg(0x0038, 0x0001);
|
|
|
+ LCD_WriteReg(0x0039, 0x0004);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0090, 0x0015); // 80Hz
|
|
|
+ LCD_WriteReg(0x0010, 0X0410); // BT,AP
|
|
|
+ LCD_WriteReg(0x0011, 0x0247); // DC1,DC0,VC
|
|
|
+ LCD_WriteReg(0x0012, 0x01BC);
|
|
|
+ LCD_WriteReg(0x0013, 0x0e00);
|
|
|
+ ms_delay(120);
|
|
|
+ LCD_WriteReg(0x0001, 0x0100);
|
|
|
+ LCD_WriteReg(0x0002, 0x0200);
|
|
|
+ LCD_WriteReg(0x0003, 0x1030);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x000A, 0x0008);
|
|
|
+ LCD_WriteReg(0x000C, 0x0000);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x000E, 0x0020);
|
|
|
+ LCD_WriteReg(0x000F, 0x0000);
|
|
|
+ LCD_WriteReg(0x0020, 0x0000); // H Start
|
|
|
+ LCD_WriteReg(0x0021, 0x0000); // V Start
|
|
|
+ LCD_WriteReg(0x002A, 0x003D); // vcom2
|
|
|
+ ms_delay(20);
|
|
|
+ LCD_WriteReg(0x0029, 0x002d);
|
|
|
+ LCD_WriteReg(0x0050, 0x0000);
|
|
|
+ LCD_WriteReg(0x0051, 0xD0EF);
|
|
|
+ LCD_WriteReg(0x0052, 0x0000);
|
|
|
+ LCD_WriteReg(0x0053, 0x013F);
|
|
|
+ LCD_WriteReg(0x0061, 0x0000);
|
|
|
+ LCD_WriteReg(0x006A, 0x0000);
|
|
|
+ LCD_WriteReg(0x0092, 0x0300);
|
|
|
+
|
|
|
+ LCD_WriteReg(0x0093, 0x0005);
|
|
|
+ LCD_WriteReg(0x0007, 0x0100);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x8989) // OK |/|/|
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0x0000, 0x0001); //打开晶振
|
|
|
+ LCD_WriteReg(0x0003, 0xA8A4); // 0xA8A4
|
|
|
+ LCD_WriteReg(0x000C, 0x0000);
|
|
|
+ LCD_WriteReg(0x000D, 0x080C);
|
|
|
+ LCD_WriteReg(0x000E, 0x2B00);
|
|
|
+ LCD_WriteReg(0x001E, 0x00B0);
|
|
|
+ LCD_WriteReg(0x0001, 0x2B3F); //驱动输出控制320*240 0x6B3F
|
|
|
+ LCD_WriteReg(0x0002, 0x0600);
|
|
|
+ LCD_WriteReg(0x0010, 0x0000);
|
|
|
+ LCD_WriteReg(0x0011, 0x6078); //定义数据格式 16位色 横屏 0x6058
|
|
|
+ LCD_WriteReg(0x0005, 0x0000);
|
|
|
+ LCD_WriteReg(0x0006, 0x0000);
|
|
|
+ LCD_WriteReg(0x0016, 0xEF1C);
|
|
|
+ LCD_WriteReg(0x0017, 0x0003);
|
|
|
+ LCD_WriteReg(0x0007, 0x0233); // 0x0233
|
|
|
+ LCD_WriteReg(0x000B, 0x0000);
|
|
|
+ LCD_WriteReg(0x000F, 0x0000); //扫描开始地址
|
|
|
+ LCD_WriteReg(0x0041, 0x0000);
|
|
|
+ LCD_WriteReg(0x0042, 0x0000);
|
|
|
+ LCD_WriteReg(0x0048, 0x0000);
|
|
|
+ LCD_WriteReg(0x0049, 0x013F);
|
|
|
+ LCD_WriteReg(0x004A, 0x0000);
|
|
|
+ LCD_WriteReg(0x004B, 0x0000);
|
|
|
+ LCD_WriteReg(0x0044, 0xEF00);
|
|
|
+ LCD_WriteReg(0x0045, 0x0000);
|
|
|
+ LCD_WriteReg(0x0046, 0x013F);
|
|
|
+ LCD_WriteReg(0x0030, 0x0707);
|
|
|
+ LCD_WriteReg(0x0031, 0x0204);
|
|
|
+ LCD_WriteReg(0x0032, 0x0204);
|
|
|
+ LCD_WriteReg(0x0033, 0x0502);
|
|
|
+ LCD_WriteReg(0x0034, 0x0507);
|
|
|
+ LCD_WriteReg(0x0035, 0x0204);
|
|
|
+ LCD_WriteReg(0x0036, 0x0204);
|
|
|
+ LCD_WriteReg(0x0037, 0x0502);
|
|
|
+ LCD_WriteReg(0x003A, 0x0302);
|
|
|
+ LCD_WriteReg(0x003B, 0x0302);
|
|
|
+ LCD_WriteReg(0x0023, 0x0000);
|
|
|
+ LCD_WriteReg(0x0024, 0x0000);
|
|
|
+ LCD_WriteReg(0x0025, 0x8000);
|
|
|
+ LCD_WriteReg(0x004f, 0); //行首址0
|
|
|
+ LCD_WriteReg(0x004e, 0); //列首址0
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x4531) // OK |/|/|
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0X00, 0X0001);
|
|
|
+ ms_delay(10);
|
|
|
+ LCD_WriteReg(0X10, 0X1628);
|
|
|
+ LCD_WriteReg(0X12, 0X000e); // 0x0006
|
|
|
+ LCD_WriteReg(0X13, 0X0A39);
|
|
|
+ ms_delay(10);
|
|
|
+ LCD_WriteReg(0X11, 0X0040);
|
|
|
+ LCD_WriteReg(0X15, 0X0050);
|
|
|
+ ms_delay(10);
|
|
|
+ LCD_WriteReg(0X12, 0X001e); // 16
|
|
|
+ ms_delay(10);
|
|
|
+ LCD_WriteReg(0X10, 0X1620);
|
|
|
+ LCD_WriteReg(0X13, 0X2A39);
|
|
|
+ ms_delay(10);
|
|
|
+ LCD_WriteReg(0X01, 0X0100);
|
|
|
+ LCD_WriteReg(0X02, 0X0300);
|
|
|
+ LCD_WriteReg(0X03, 0X1038); //改变方向的
|
|
|
+ LCD_WriteReg(0X08, 0X0202);
|
|
|
+ LCD_WriteReg(0X0A, 0X0008);
|
|
|
+ LCD_WriteReg(0X30, 0X0000);
|
|
|
+ LCD_WriteReg(0X31, 0X0402);
|
|
|
+ LCD_WriteReg(0X32, 0X0106);
|
|
|
+ LCD_WriteReg(0X33, 0X0503);
|
|
|
+ LCD_WriteReg(0X34, 0X0104);
|
|
|
+ LCD_WriteReg(0X35, 0X0301);
|
|
|
+ LCD_WriteReg(0X36, 0X0707);
|
|
|
+ LCD_WriteReg(0X37, 0X0305);
|
|
|
+ LCD_WriteReg(0X38, 0X0208);
|
|
|
+ LCD_WriteReg(0X39, 0X0F0B);
|
|
|
+ LCD_WriteReg(0X41, 0X0002);
|
|
|
+ LCD_WriteReg(0X60, 0X2700);
|
|
|
+ LCD_WriteReg(0X61, 0X0001);
|
|
|
+ LCD_WriteReg(0X90, 0X0210);
|
|
|
+ LCD_WriteReg(0X92, 0X010A);
|
|
|
+ LCD_WriteReg(0X93, 0X0004);
|
|
|
+ LCD_WriteReg(0XA0, 0X0100);
|
|
|
+ LCD_WriteReg(0X07, 0X0001);
|
|
|
+ LCD_WriteReg(0X07, 0X0021);
|
|
|
+ LCD_WriteReg(0X07, 0X0023);
|
|
|
+ LCD_WriteReg(0X07, 0X0033);
|
|
|
+ LCD_WriteReg(0X07, 0X0133);
|
|
|
+ LCD_WriteReg(0XA0, 0X0000);
|
|
|
+ }
|
|
|
+ else if (lcddev.id == 0x4535)
|
|
|
+ {
|
|
|
+ LCD_WriteReg(0X15, 0X0030);
|
|
|
+ LCD_WriteReg(0X9A, 0X0010);
|
|
|
+ LCD_WriteReg(0X11, 0X0020);
|
|
|
+ LCD_WriteReg(0X10, 0X3428);
|
|
|
+ LCD_WriteReg(0X12, 0X0002); // 16
|
|
|
+ LCD_WriteReg(0X13, 0X1038);
|
|
|
+ ms_delay(40);
|
|
|
+ LCD_WriteReg(0X12, 0X0012); // 16
|
|
|
+ ms_delay(40);
|
|
|
+ LCD_WriteReg(0X10, 0X3420);
|
|
|
+ LCD_WriteReg(0X13, 0X3038);
|
|
|
+ ms_delay(70);
|
|
|
+ LCD_WriteReg(0X30, 0X0000);
|
|
|
+ LCD_WriteReg(0X31, 0X0402);
|
|
|
+ LCD_WriteReg(0X32, 0X0307);
|
|
|
+ LCD_WriteReg(0X33, 0X0304);
|
|
|
+ LCD_WriteReg(0X34, 0X0004);
|
|
|
+ LCD_WriteReg(0X35, 0X0401);
|
|
|
+ LCD_WriteReg(0X36, 0X0707);
|
|
|
+ LCD_WriteReg(0X37, 0X0305);
|
|
|
+ LCD_WriteReg(0X38, 0X0610);
|
|
|
+ LCD_WriteReg(0X39, 0X0610);
|
|
|
+
|
|
|
+ LCD_WriteReg(0X01, 0X0100);
|
|
|
+ LCD_WriteReg(0X02, 0X0300);
|
|
|
+ LCD_WriteReg(0X03, 0X1030); //改变方向的
|
|
|
+ LCD_WriteReg(0X08, 0X0808);
|
|
|
+ LCD_WriteReg(0X0A, 0X0008);
|
|
|
+ LCD_WriteReg(0X60, 0X2700);
|
|
|
+ LCD_WriteReg(0X61, 0X0001);
|
|
|
+ LCD_WriteReg(0X90, 0X013E);
|
|
|
+ LCD_WriteReg(0X92, 0X0100);
|
|
|
+ LCD_WriteReg(0X93, 0X0100);
|
|
|
+ LCD_WriteReg(0XA0, 0X3000);
|
|
|
+ LCD_WriteReg(0XA3, 0X0010);
|
|
|
+ LCD_WriteReg(0X07, 0X0001);
|
|
|
+ LCD_WriteReg(0X07, 0X0021);
|
|
|
+ LCD_WriteReg(0X07, 0X0023);
|
|
|
+ LCD_WriteReg(0X07, 0X0033);
|
|
|
+ LCD_WriteReg(0X07, 0X0133);
|
|
|
+ }
|
|
|
+ LCD_Display_Dir(0); //默认为竖屏
|
|
|
+ LCD_PWM_HIGH; //点亮背光
|
|
|
+ LCD_Clear(WHITE);
|
|
|
+}
|
|
|
+//清屏函数
|
|
|
+// color:要清屏的填充色
|
|
|
+void LCD_Clear(u16 color)
|
|
|
+{
|
|
|
+ u32 index = 0;
|
|
|
+ u32 totalpoint = lcddev.width;
|
|
|
+ totalpoint *= lcddev.height; //得到总点数
|
|
|
+ if ((lcddev.id == 0X6804) && (lcddev.dir == 1)) // 6804横屏的时候特殊处理
|
|
|
+ {
|
|
|
+ lcddev.dir = 0;
|
|
|
+ lcddev.setxcmd = 0X2A;
|
|
|
+ lcddev.setycmd = 0X2B;
|
|
|
+ LCD_SetCursor(0x00, 0x0000); //设置光标位置
|
|
|
+ lcddev.dir = 1;
|
|
|
+ lcddev.setxcmd = 0X2B;
|
|
|
+ lcddev.setycmd = 0X2A;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ LCD_SetCursor(0x00, 0x0000); //设置光标位置
|
|
|
+ LCD_WriteRAM_Prepare(); //开始写入GRAM
|
|
|
+ for (index = 0; index < totalpoint; index++)
|
|
|
+ {
|
|
|
+ LCD->LCD_RAM = color;
|
|
|
+ }
|
|
|
+}
|
|
|
+//在指定区域内填充单个颜色
|
|
|
+//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)
|
|
|
+// color:要填充的颜色
|
|
|
+void LCD_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 color)
|
|
|
+{
|
|
|
+ u16 i, j;
|
|
|
+ u16 xlen = 0;
|
|
|
+ u16 temp;
|
|
|
+ if ((lcddev.id == 0X6804) && (lcddev.dir == 1)) // 6804横屏的时候特殊处理
|
|
|
+ {
|
|
|
+ temp = sx;
|
|
|
+ sx = sy;
|
|
|
+ sy = lcddev.width - ex - 1;
|
|
|
+ ex = ey;
|
|
|
+ ey = lcddev.width - temp - 1;
|
|
|
+ lcddev.dir = 0;
|
|
|
+ lcddev.setxcmd = 0X2A;
|
|
|
+ lcddev.setycmd = 0X2B;
|
|
|
+ LCD_Fill(sx, sy, ex, ey, color);
|
|
|
+ lcddev.dir = 1;
|
|
|
+ lcddev.setxcmd = 0X2B;
|
|
|
+ lcddev.setycmd = 0X2A;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ xlen = ex - sx + 1;
|
|
|
+ for (i = sy; i <= ey; i++)
|
|
|
+ {
|
|
|
+ LCD_SetCursor(sx, i); //设置光标位置
|
|
|
+ LCD_WriteRAM_Prepare(); //开始写入GRAM
|
|
|
+ for (j = 0; j < xlen; j++)
|
|
|
+ LCD_WR_DATA(color); //设置光标位置
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+//在指定区域内填充指定颜色块
|
|
|
+//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)
|
|
|
+// color:要填充的颜色
|
|
|
+void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 *color)
|
|
|
+{
|
|
|
+ u16 height, width;
|
|
|
+ u16 i, j;
|
|
|
+ width = ex - sx + 1; //得到填充的宽度
|
|
|
+ height = ey - sy + 1; //高度
|
|
|
+ for (i = 0; i < height; i++)
|
|
|
+ {
|
|
|
+ LCD_SetCursor(sx, sy + i); //设置光标位置
|
|
|
+ LCD_WriteRAM_Prepare(); //开始写入GRAM
|
|
|
+ for (j = 0; j < width; j++)
|
|
|
+ LCD->LCD_RAM = color[i * height + j]; //写入数据
|
|
|
+ }
|
|
|
+}
|
|
|
+//画线
|
|
|
+// x1,y1:起点坐标
|
|
|
+// x2,y2:终点坐标
|
|
|
+void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
|
|
|
+{
|
|
|
+ u16 t;
|
|
|
+ int xerr = 0, yerr = 0, delta_x, delta_y, distance;
|
|
|
+ int incx, incy, uRow, uCol;
|
|
|
+ delta_x = x2 - x1; //计算坐标增量
|
|
|
+ delta_y = y2 - y1;
|
|
|
+ uRow = x1;
|
|
|
+ uCol = y1;
|
|
|
+ if (delta_x > 0)
|
|
|
+ incx = 1; //设置单步方向
|
|
|
+ else if (delta_x == 0)
|
|
|
+ incx = 0; //垂直线
|
|
|
+ else
|
|
|
+ {
|
|
|
+ incx = -1;
|
|
|
+ delta_x = -delta_x;
|
|
|
+ }
|
|
|
+ if (delta_y > 0)
|
|
|
+ incy = 1;
|
|
|
+ else if (delta_y == 0)
|
|
|
+ incy = 0; //水平线
|
|
|
+ else
|
|
|
+ {
|
|
|
+ incy = -1;
|
|
|
+ delta_y = -delta_y;
|
|
|
+ }
|
|
|
+ if (delta_x > delta_y)
|
|
|
+ distance = delta_x; //选取基本增量坐标轴
|
|
|
+ else
|
|
|
+ distance = delta_y;
|
|
|
+ for (t = 0; t <= distance + 1; t++) //画线输出
|
|
|
+ {
|
|
|
+ LCD_DrawPoint(uRow, uCol); //画点
|
|
|
+ xerr += delta_x;
|
|
|
+ yerr += delta_y;
|
|
|
+ if (xerr > distance)
|
|
|
+ {
|
|
|
+ xerr -= distance;
|
|
|
+ uRow += incx;
|
|
|
+ }
|
|
|
+ if (yerr > distance)
|
|
|
+ {
|
|
|
+ yerr -= distance;
|
|
|
+ uCol += incy;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+//画矩形
|
|
|
+//(x1,y1),(x2,y2):矩形的对角坐标
|
|
|
+void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
|
|
|
+{
|
|
|
+ LCD_DrawLine(x1, y1, x2, y1);
|
|
|
+ LCD_DrawLine(x1, y1, x1, y2);
|
|
|
+ LCD_DrawLine(x1, y2, x2, y2);
|
|
|
+ LCD_DrawLine(x2, y1, x2, y2);
|
|
|
+}
|
|
|
+//在指定位置画一个指定大小的圆
|
|
|
+//(x,y):中心点
|
|
|
+// r :半径
|
|
|
+void Draw_Circle(u16 x0, u16 y0, u8 r)
|
|
|
+{
|
|
|
+ int a, b;
|
|
|
+ int di;
|
|
|
+ a = 0;
|
|
|
+ b = r;
|
|
|
+ di = 3 - (r << 1); //判断下个点位置的标志
|
|
|
+ while (a <= b)
|
|
|
+ {
|
|
|
+ LCD_DrawPoint(x0 + a, y0 - b); // 5
|
|
|
+ LCD_DrawPoint(x0 + b, y0 - a); // 0
|
|
|
+ LCD_DrawPoint(x0 + b, y0 + a); // 4
|
|
|
+ LCD_DrawPoint(x0 + a, y0 + b); // 6
|
|
|
+ LCD_DrawPoint(x0 - a, y0 + b); // 1
|
|
|
+ LCD_DrawPoint(x0 - b, y0 + a);
|
|
|
+ LCD_DrawPoint(x0 - a, y0 - b); // 2
|
|
|
+ LCD_DrawPoint(x0 - b, y0 - a); // 7
|
|
|
+ a++;
|
|
|
+ //使用Bresenham算法画圆
|
|
|
+ if (di < 0)
|
|
|
+ di += 4 * a + 6;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ di += 10 + 4 * (a - b);
|
|
|
+ b--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+//在指定位置显示一个字符
|
|
|
+// x,y:起始坐标
|
|
|
+// num:要显示的字符:" "--->"~"
|
|
|
+// size:字体大小 12/16
|
|
|
+// mode:叠加方式(1)还是非叠加方式(0)
|
|
|
+void LCD_ShowChar(u16 x, u16 y, u8 num, u8 size, u8 mode)
|
|
|
+{
|
|
|
+ u8 temp, t1, t;
|
|
|
+ u16 y0 = y;
|
|
|
+ u16 colortemp = POINT_COLOR;
|
|
|
+ //设置窗口
|
|
|
+ num = num - ' '; //得到偏移后的值
|
|
|
+ if (!mode) //非叠加方式
|
|
|
+ {
|
|
|
+ for (t = 0; t < size; t++)
|
|
|
+ {
|
|
|
+ if (size == 12)
|
|
|
+ temp = asc2_1206[num][t]; //调用1206字体
|
|
|
+ else
|
|
|
+ temp = asc2_1608[num][t]; //调用1608字体
|
|
|
+ for (t1 = 0; t1 < 8; t1++)
|
|
|
+ {
|
|
|
+ if (temp & 0x80)
|
|
|
+ POINT_COLOR = colortemp;
|
|
|
+ else
|
|
|
+ POINT_COLOR = BACK_COLOR;
|
|
|
+ LCD_DrawPoint(x, y);
|
|
|
+ temp <<= 1;
|
|
|
+ y++;
|
|
|
+ if (x >= lcddev.width)
|
|
|
+ {
|
|
|
+ POINT_COLOR = colortemp;
|
|
|
+ return;
|
|
|
+ } //超区域了
|
|
|
+ if ((y - y0) == size)
|
|
|
+ {
|
|
|
+ y = y0;
|
|
|
+ x++;
|
|
|
+ if (x >= lcddev.width)
|
|
|
+ {
|
|
|
+ POINT_COLOR = colortemp;
|
|
|
+ return;
|
|
|
+ } //超区域了
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else //叠加方式
|
|
|
+ {
|
|
|
+ for (t = 0; t < size; t++)
|
|
|
+ {
|
|
|
+ if (size == 12)
|
|
|
+ temp = asc2_1206[num][t]; //调用1206字体
|
|
|
+ else
|
|
|
+ temp = asc2_1608[num][t]; //调用1608字体
|
|
|
+ for (t1 = 0; t1 < 8; t1++)
|
|
|
+ {
|
|
|
+ if (temp & 0x80)
|
|
|
+ LCD_DrawPoint(x, y);
|
|
|
+ temp <<= 1;
|
|
|
+ y++;
|
|
|
+ if (x >= lcddev.height)
|
|
|
+ {
|
|
|
+ POINT_COLOR = colortemp;
|
|
|
+ return;
|
|
|
+ } //超区域了
|
|
|
+ if ((y - y0) == size)
|
|
|
+ {
|
|
|
+ y = y0;
|
|
|
+ x++;
|
|
|
+ if (x >= lcddev.width)
|
|
|
+ {
|
|
|
+ POINT_COLOR = colortemp;
|
|
|
+ return;
|
|
|
+ } //超区域了
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ POINT_COLOR = colortemp;
|
|
|
+}
|
|
|
+// m^n函数
|
|
|
+//返回值:m^n次方.
|
|
|
+u32 LCD_Pow(u8 m, u8 n)
|
|
|
+{
|
|
|
+ u32 result = 1;
|
|
|
+ while (n--)
|
|
|
+ result *= m;
|
|
|
+ return result;
|
|
|
+}
|
|
|
+//显示数字,高位为0,则不显示
|
|
|
+// x,y :起点坐标
|
|
|
+// len :数字的位数
|
|
|
+// size:字体大小
|
|
|
+// color:颜色
|
|
|
+// num:数值(0~4294967295);
|
|
|
+void LCD_ShowNum(u16 x, u16 y, u32 num, u8 len, u8 size)
|
|
|
+{
|
|
|
+ u8 t, temp;
|
|
|
+ u8 enshow = 0;
|
|
|
+ for (t = 0; t < len; t++)
|
|
|
+ {
|
|
|
+ temp = (num / LCD_Pow(10, len - t - 1)) % 10;
|
|
|
+ if (enshow == 0 && t < (len - 1))
|
|
|
+ {
|
|
|
+ if (temp == 0)
|
|
|
+ {
|
|
|
+ LCD_ShowChar(x + (size / 2) * t, y, ' ', size, 0);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ enshow = 1;
|
|
|
+ }
|
|
|
+ LCD_ShowChar(x + (size / 2) * t, y, temp + '0', size, 0);
|
|
|
+ }
|
|
|
+}
|
|
|
+//显示数字,高位为0,还是显示
|
|
|
+// x,y:起点坐标
|
|
|
+// num:数值(0~999999999);
|
|
|
+// len:长度(即要显示的位数)
|
|
|
+// size:字体大小
|
|
|
+// mode:
|
|
|
+//[7]:0,不填充;1,填充0.
|
|
|
+//[6:1]:保留
|
|
|
+//[0]:0,非叠加显示;1,叠加显示.
|
|
|
+void LCD_ShowxNum(u16 x, u16 y, u32 num, u8 len, u8 size, u8 mode)
|
|
|
+{
|
|
|
+ u8 t, temp;
|
|
|
+ u8 enshow = 0;
|
|
|
+ for (t = 0; t < len; t++)
|
|
|
+ {
|
|
|
+ temp = (num / LCD_Pow(10, len - t - 1)) % 10;
|
|
|
+ if (enshow == 0 && t < (len - 1))
|
|
|
+ {
|
|
|
+ if (temp == 0)
|
|
|
+ {
|
|
|
+ if (mode & 0X80)
|
|
|
+ LCD_ShowChar(x + (size / 2) * t, y, '0', size, mode & 0X01);
|
|
|
+ else
|
|
|
+ LCD_ShowChar(x + (size / 2) * t, y, ' ', size, mode & 0X01);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ enshow = 1;
|
|
|
+ }
|
|
|
+ LCD_ShowChar(x + (size / 2) * t, y, temp + '0', size, mode & 0X01);
|
|
|
+ }
|
|
|
+}
|
|
|
+//显示字符串
|
|
|
+// x,y:起点坐标
|
|
|
+// width,height:区域大小
|
|
|
+// size:字体大小
|
|
|
+//*p:字符串起始地址
|
|
|
+void LCD_ShowString(u16 x, u16 y, u16 width, u16 height, u8 size, u8 *p)
|
|
|
+{
|
|
|
+ u8 x0 = x;
|
|
|
+ width += x;
|
|
|
+ height += y;
|
|
|
+ while ((*p <= '~') && (*p >= ' ')) //判断是不是非法字符!
|
|
|
+ {
|
|
|
+ if (x >= width)
|
|
|
+ {
|
|
|
+ x = x0;
|
|
|
+ y += size;
|
|
|
+ }
|
|
|
+ if (y >= height)
|
|
|
+ break; //退出
|
|
|
+ LCD_ShowChar(x, y, *p, size, 0);
|
|
|
+ x += size / 2;
|
|
|
+ p++;
|
|
|
+ }
|
|
|
+}
|