正点原子TFTLCD扩展
声明:该文章代码是在正点原子教学下写出的LCD驱动代码上进行了修改能兼容更多字号( ˘ ³˘)❤️
如有侵权,请私信联系删除
文章目录
- 前言
- 代码
- lcd.c
- lcd.h
- font.h
前言
由于TFTLCD4.3寸屏幕太大了,正点原子的代码只能显示12/16/24字号的字符或者汉字觉得太小了,所以便决定改一下代码,通过font.h移入3232和6464字号的ASCII字符集,修改能接受字库更广的LCD_ShowChar字符显示函数,加入LCD_ShowChinese能显示任意大小字符或者汉字的函数(宏定义range限制范围,默认为8~64),使用方法:在取字模软件中取字模,其配置要求与下面完全一致,然后将取出的字模移入font.h对应数组中,剩下的就是调用函数了
,**加字库的话按下面要求将字符集进行取模后也移到font.h里面去就可以了,加入字库或者更多大小自摸后,要将新的自摸数组或者字库数组按照下面格式写到下面函数中
//ASCII字符集: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
//PC2LCD2002取模方式设置:阴码+逐列式+顺向+C51格式
u8 Disguise_ChineseSize(u8 size,u8 num,u32 t)
{u8 tempx;if(size==8) tempx= chinese_one_88[num][t];if(size==9) tempx= chinese_one_99[num][t];if(size==10) tempx= chinese_one_1010[num][t];if(size==11) tempx= chinese_one_1111[num][t];if(size==12) tempx= chinese_one_1212[num][t];if(size==13) tempx= chinese_one_1313[num][t];if(size==14) tempx= chinese_one_1414[num][t];if(size==15) tempx= chinese_one_1515[num][t];if(size==16) tempx= chinese_one_1616[num][t];if(size==17) tempx= chinese_one_1717[num][t];if(size==18) tempx= chinese_one_1818[num][t];if(size==19) tempx= chinese_one_1919[num][t];if(size==20) tempx= chinese_one_2020[num][t];if(size==21) tempx= chinese_one_2121[num][t];if(size==22) tempx= chinese_one_2222[num][t];if(size==23) tempx= chinese_one_2323[num][t];if(size==24) tempx= chinese_one_2424[num][t];if(size==25) tempx= chinese_one_2525[num][t];if(size==26) tempx= chinese_one_2626[num][t];if(size==27) tempx= chinese_one_2727[num][t];if(size==28) tempx= chinese_one_2828[num][t];if(size==29) tempx= chinese_one_2929[num][t];if(size==30) tempx= chinese_one_3030[num][t];if(size==31) tempx= chinese_one_3131[num][t];if(size==32) tempx= chinese_one_3232[num][t];if(size==64) tempx= chinese_one_6464[num][t];return tempx;
}u8 Disguise_CharSize(u8 size,u8 num,u32 t)
{u8 tempx;if(size==12)tempx=asc2_1206[num][t]; //调用1206字体if(size==16)tempx=asc2_1608[num][t]; //调用1608字体if(size==24)tempx=asc2_2412[num][t]; //调用2412字体if(size==32)tempx=asc3232[num][t]; //32if(size==64)tempx=asc6464[num][t]; //64return tempx;
}
代码
lcd.c
#include "lcd.h"
#include "stdlib.h"
#include "font.h"
#include "usart.h"
#include "delay.h"
//
//STM32F103ZE核心板
//2.4寸/2.8寸/3.5寸/4.3寸/7寸 TFT液晶驱动
//支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
// SPFD5408/1505/B505/C505/NT35310/NT35510/SSD1963等 // //range为目前size的范围
#define range 64//LCD的画笔颜色和背景色
u16 POINT_COLOR=0x0000; //画笔颜色
u16 BACK_COLOR=0xFFFF; //背景色 //管理LCD重要参数
//默认为竖屏
_lcd_dev lcddev;//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(u16 regval)
{ LCD->LCD_REG=regval;//写入要写的寄存器序号
}
//写LCD数据
//data:要写入的值
void LCD_WR_DATA(u16 data)
{ LCD->LCD_RAM=data;
}
//读LCD数据
//返回值:读到的值
u16 LCD_RD_DATA(void)
{vu16 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); //写入要读的寄存器序号delay_us(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||lcddev.id==0X1963)LCD_WR_REG(0X2E);//9341/6804/3510/1963 发送读GRAM指令else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00); //5510 发送读GRAM指令else LCD_WR_REG(0X22); //其他IC发送读GRAM指令if(lcddev.id==0X9320)opt_delay(2); //FOR 9320,延时2us r=LCD_RD_DATA(); //dummy Read if(lcddev.id==0X1963)return r; //1963直接读就可以 opt_delay(2); r=LCD_RD_DATA(); //实际坐标颜色if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510) //9341/NT35310/NT35510要分2次读出{opt_delay(2); b=LCD_RD_DATA(); g=r&0XFF; //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位g<<=8;} if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0XB505||lcddev.id==0XC505)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||lcddev.id==0X1963)LCD_WR_REG(0X29); //开启显示else if(lcddev.id==0X5510)LCD_WR_REG(0X2900); //开启显示else LCD_WriteReg(0X07,0x0173); //开启显示
}
//LCD关闭显示
void LCD_DisplayOff(void)
{ if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X28); //关闭显示else if(lcddev.id==0X5510)LCD_WR_REG(0X2800); //关闭显示else LCD_WriteReg(0X07,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==0X1963){ if(lcddev.dir==0)//x坐标需要变换{Xpos=lcddev.width-1-Xpos;LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(0);LCD_WR_DATA(0); LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF); }else{LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF); LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF); } LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF); LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&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/5408/9341/5310/5510/1963等IC已经实际测试
void LCD_Scan_Dir(u8 dir)
{u16 regval=0;u16 dirreg=0;u16 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(); //开始写入GRAMLCD->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==0X1963){if(lcddev.dir==0)x=lcddev.width-1-x;LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF); 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); LCD_WR_DATA(y>>8);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;
}
//SSD1963 背光设置
//pwm:背光等级,0~100.越大越亮.
void LCD_SSD_BackLightSet(u8 pwm)
{ LCD_WR_REG(0xBE); //配置PWM输出LCD_WR_DATA(0x05); //1设置PWM频率LCD_WR_DATA(pwm*2.55);//2设置PWM占空比LCD_WR_DATA(0x01); //3设置CLCD_WR_DATA(0xFF); //4设置DLCD_WR_DATA(0x00); //5设置ELCD_WR_DATA(0x00); //6设置F
}//设置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==0x5510){lcddev.wramcmd=0X2C00;lcddev.setxcmd=0X2A00;lcddev.setycmd=0X2B00; lcddev.width=480;lcddev.height=800;}else if(lcddev.id==0X1963){lcddev.wramcmd=0X2C; //设置写入GRAM的指令 lcddev.setxcmd=0X2B; //设置写X坐标指令lcddev.setycmd=0X2A; //设置写Y坐标指令lcddev.width=480; //设置宽度480lcddev.height=800; //设置高度800 }else{lcddev.wramcmd=0X22;lcddev.setxcmd=0X20;lcddev.setycmd=0X21; }}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==0x5510){lcddev.wramcmd=0X2C00;lcddev.setxcmd=0X2A00;lcddev.setycmd=0X2B00; lcddev.width=800;lcddev.height=480;}else if(lcddev.id==0X1963){lcddev.wramcmd=0X2C; //设置写入GRAM的指令 lcddev.setxcmd=0X2A; //设置写X坐标指令lcddev.setycmd=0X2B; //设置写Y坐标指令lcddev.width=800; //设置宽度800lcddev.height=480; //设置高度480 }else{lcddev.wramcmd=0X22;lcddev.setxcmd=0X21;lcddev.setycmd=0X20; }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.
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height)
{ u8 hsareg,heareg,vsareg,veareg;u16 hsaval,heaval,vsaval,veaval; u16 twidth,theight;twidth=sx+width-1;theight=sy+height-1;if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X6804||(lcddev.dir==1&&lcddev.id==0X1963)){LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(sx>>8); LCD_WR_DATA(sx&0XFF); LCD_WR_DATA(twidth>>8); LCD_WR_DATA(twidth&0XFF); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(sy>>8); LCD_WR_DATA(sy&0XFF); LCD_WR_DATA(theight>>8); LCD_WR_DATA(theight&0XFF); }else if(lcddev.id==0X1963)//1963竖屏特殊处理{sx=lcddev.width-width-sx; height=sy+height-1; LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(sx>>8); LCD_WR_DATA(sx&0XFF); LCD_WR_DATA((sx+width-1)>>8); LCD_WR_DATA((sx+width-1)&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(twidth>>8); LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA(twidth&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(theight>>8); LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA(theight&0XFF); }else //其他驱动IC{if(lcddev.dir==1)//横屏{//窗口值hsaval=sy; heaval=theight;vsaval=lcddev.width-twidth-1;veaval=lcddev.width-sx-1; }else{ hsaval=sx; heaval=twidth;vsaval=sy;veaval=theight;} 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)
{ GPIO_InitTypeDef GPIO_InitStructure;FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef readWriteTiming; FSMC_NORSRAMTimingInitTypeDef writeTiming;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能FSMC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG,ENABLE);//使能PORTB,D,E,G以及AFIO复用功能时钟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); readWriteTiming.FSMC_AddressSetupTime = 0x01; //地址建立时间(ADDSET)为2个HCLK 1/36M=27nsreadWriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到 readWriteTiming.FSMC_DataSetupTime = 0x0f; // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;readWriteTiming.FSMC_CLKDivision = 0x00;readWriteTiming.FSMC_DataLatency = 0x00;readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A writeTiming.FSMC_AddressSetupTime = 0x00; //地址建立时间(ADDSET)为1个HCLK writeTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(A writeTiming.FSMC_DataSetupTime = 0x03; 数据保存时间为4个HCLK writeTiming.FSMC_BusTurnAroundDuration = 0x00;writeTiming.FSMC_CLKDivision = 0x00;writeTiming.FSMC_DataLatency = 0x00;writeTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;// 这里我们使用NE4 ,也就对应BTCR[6],[7]。FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; //SRAM FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; // 存储器写使能FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming; //写时序FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化FSMC配置FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE); // 使能BANK1 delay_ms(50); // delay 50 ms lcddev.id=LCD_ReadReg(0x0000); //读ID(9320/9325/9328/4531/4535等IC) if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)//读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300{ //尝试9341 ID的读取 LCD_WR_REG(0XD3); lcddev.id=LCD_RD_DATA(); //dummy read lcddev.id=LCD_RD_DATA(); //读到0X00lcddev.id=LCD_RD_DATA(); //读取93 lcddev.id<<=8;lcddev.id|=LCD_RD_DATA(); //读取41 if(lcddev.id!=0X9341) //非9341,尝试是不是6804{ LCD_WR_REG(0XBF); lcddev.id=LCD_RD_DATA(); //dummy read lcddev.id=LCD_RD_DATA(); //读回0X01 lcddev.id=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); lcddev.id=LCD_RD_DATA();//dummy read lcddev.id=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); lcddev.id=LCD_RD_DATA(); //读回0X00 LCD_WR_REG(0XDB00); lcddev.id=LCD_RD_DATA(); //读回0X80lcddev.id<<=8; LCD_WR_REG(0XDC00); lcddev.id|=LCD_RD_DATA(); //读回0X00 if(lcddev.id==0x8000)lcddev.id=0x5510;//NT35510读回的ID是8000H,为方便区分,我们强制设置为5510if(lcddev.id!=0X5510) //也不是NT5510,尝试看看是不是SSD1963{LCD_WR_REG(0XA1);lcddev.id=LCD_RD_DATA();lcddev.id=LCD_RD_DATA(); //读回0X57lcddev.id<<=8; lcddev.id|=LCD_RD_DATA(); //读回0X61 if(lcddev.id==0X5761)lcddev.id=0X1963;//SSD1963读回的ID是5761H,为方便区分,我们强制设置为1963}}}} } 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); //3FLCD_WR_DATA(0x30); //3CLCD_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 Sleepdelay_ms(120);LCD_WR_REG(0x29); //display on }else if(lcddev.id==0x6804) //6804初始化{LCD_WR_REG(0X11);delay_ms(20);LCD_WR_REG(0XD0);//VCI1 VCL VGH VGL DDVDH VREG1OUT power amplitude settingLCD_WR_DATA(0X07); LCD_WR_DATA(0X42); LCD_WR_DATA(0X1D); LCD_WR_REG(0XD1);//VCOMH VCOM_AC amplitude settingLCD_WR_DATA(0X00);LCD_WR_DATA(0X1a);LCD_WR_DATA(0X09); LCD_WR_REG(0XD2);//Operational Amplifier Circuit Constant Current Adjust , charge pump frequency settingLCD_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 0x03LCD_WR_DATA(0X03);LCD_WR_REG(0XC8);//Gamma settingLCD_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 modeLCD_WR_REG(0X36);LCD_WR_DATA(0X08);//原来是aLCD_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);delay_ms(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); //5fLCD_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); //66LCD_WR_REG(0x11);delay_ms(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.2VLCD_WriteReg(0xB000,0x0D);LCD_WriteReg(0xB001,0x0D);LCD_WriteReg(0xB002,0x0D);//AVDD ratioLCD_WriteReg(0xB600,0x34);LCD_WriteReg(0xB601,0x34);LCD_WriteReg(0xB602,0x34);//AVEE -5.2VLCD_WriteReg(0xB100,0x0D);LCD_WriteReg(0xB101,0x0D);LCD_WriteReg(0xB102,0x0D);//AVEE ratioLCD_WriteReg(0xB700,0x34);LCD_WriteReg(0xB701,0x34);LCD_WriteReg(0xB702,0x34);//VCL -2.5VLCD_WriteReg(0xB200,0x00);LCD_WriteReg(0xB201,0x00);LCD_WriteReg(0xB202,0x00);//VCL ratioLCD_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 ratioLCD_WriteReg(0xB900,0x34);LCD_WriteReg(0xB901,0x34);LCD_WriteReg(0xB902,0x34);//VGL_REG -10VLCD_WriteReg(0xB500,0x08);LCD_WriteReg(0xB501,0x08);LCD_WriteReg(0xB502,0x08);LCD_WriteReg(0xC200,0x03);//VGLX ratioLCD_WriteReg(0xBA00,0x24);LCD_WriteReg(0xBA01,0x24);LCD_WriteReg(0xBA02,0x24);//VGMP/VGSP 4.5V/0VLCD_WriteReg(0xBC00,0x00);LCD_WriteReg(0xBC01,0x78);LCD_WriteReg(0xBC02,0x00);//VGMN/VGSN -4.5V/0VLCD_WriteReg(0xBD00,0x00);LCD_WriteReg(0xBD01,0x78);LCD_WriteReg(0xBD02,0x00);//VCOMLCD_WriteReg(0xBE00,0x00);LCD_WriteReg(0xBE01,0x64);//Gamma SettingLCD_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 enableLCD_WriteReg(0xF000,0x55);LCD_WriteReg(0xF001,0xAA);LCD_WriteReg(0xF002,0x52);LCD_WriteReg(0xF003,0x08);LCD_WriteReg(0xF004,0x00);//Display controlLCD_WriteReg(0xB100, 0xCC);LCD_WriteReg(0xB101, 0x00);//Source hold timeLCD_WriteReg(0xB600,0x05);//Gate EQ controlLCD_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-delayLCD_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/pixelLCD_WR_REG(0x1100);delay_us(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 VGHVGLLCD_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 amplitudeLCD_WriteReg(0x0013,0x1900);//delayms(100); //vom HLCD_WriteReg(0x0029,0x0025); LCD_WriteReg(0x002B,0x000D); //gammaLCD_WriteReg(0x0030,0x0007);LCD_WriteReg(0x0031,0x0303);LCD_WriteReg(0x0032,0x0003);// 0006LCD_WriteReg(0x0035,0x0206);LCD_WriteReg(0x0036,0x0008);LCD_WriteReg(0x0037,0x0406); LCD_WriteReg(0x0038,0x0304);//0200LCD_WriteReg(0x0039,0x0007); LCD_WriteReg(0x003C,0x0602);// 0504LCD_WriteReg(0x003D,0x0008); //ramLCD_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->RLCD_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); delay_ms(50); LCD_WriteReg(0x0010,0x1490); LCD_WriteReg(0x0011,0x0227);delay_ms(50); LCD_WriteReg(0x0012,0x008A); delay_ms(50); LCD_WriteReg(0x0013,0x1a00); LCD_WriteReg(0x0029,0x0006);LCD_WriteReg(0x002b,0x000d);delay_ms(50); LCD_WriteReg(0x0020,0x0000); LCD_WriteReg(0x0021,0x0000); delay_ms(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);delay_ms(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. delay_ms(50); LCD_WriteReg(0x07,0x0101); //Display Contral.delay_ms(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 StarLCD_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 bitLCD_WriteReg(0x0002, 0x0200); // set 1 line inversionLCD_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 porchLCD_WriteReg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]LCD_WriteReg(0x000A, 0x0000); // FMARK functionLCD_WriteReg(0x000C, 0x0000); // RGB interface settingLCD_WriteReg(0x000D, 0x0000); // Frame marker PositionLCD_WriteReg(0x000F, 0x0000); // RGB interface polarity//*************Power On sequence ****************//LCD_WriteReg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STBLCD_WriteReg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]LCD_WriteReg(0x0012, 0x0000); // VREG1OUT voltageLCD_WriteReg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitudedelay_ms(200); // Dis-charge capacitor power voltageLCD_WriteReg(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STBLCD_WriteReg(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]delay_ms(50); // Delay 50msLCD_WriteReg(0x0012, 0x000C); // Internal reference voltage= Vci;delay_ms(50); // Delay 50msLCD_WriteReg(0x0013, 0x0800); // Set VDV[4:0] for VCOM amplitudeLCD_WriteReg(0x0029, 0x0011); // Set VCM[5:0] for VCOMHLCD_WriteReg(0x002B, 0x000B); // Set Frame Ratedelay_ms(50); // Delay 50msLCD_WriteReg(0x0020, 0x0000); // GRAM horizontal AddressLCD_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 AddressLCD_WriteReg(0x0051, 0x00EF); // Horizontal GRAM End AddressLCD_WriteReg(0x0052, 0x0000); // Vertical GRAM Start AddressLCD_WriteReg(0x0053, 0x013F); // Vertical GRAM Start AddressLCD_WriteReg(0x0060, 0x2700); // Gate Scan LineLCD_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 delay_ms(20);//TFT 液晶彩色图像显示方法14LCD_WriteReg(0x10,0x16B0); //0x14B0 //Power Control 1LCD_WriteReg(0x11,0x0001); //0x0007 //Power Control 2LCD_WriteReg(0x17,0x0001); //0x0000 //Power Control 3LCD_WriteReg(0x12,0x0138); //0x013B //Power Control 4LCD_WriteReg(0x13,0x0800); //0x0800 //Power Control 5LCD_WriteReg(0x29,0x0009); //NVM read data 2LCD_WriteReg(0x2a,0x0009); //NVM read data 3LCD_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 ControlLCD_WriteReg(0x6A,0x0000); //Vertical Scroll ControlLCD_WriteReg(0x80,0x0000); //Display Position – Partial Display 1LCD_WriteReg(0x81,0x0000); //RAM Address Start – Partial Display 1LCD_WriteReg(0x82,0x0000); //RAM address End - Partial Display 1LCD_WriteReg(0x83,0x0000); //Display Position – Partial Display 2LCD_WriteReg(0x84,0x0000); //RAM Address Start – Partial Display 2LCD_WriteReg(0x85,0x0000); //RAM address End – Partail Display2LCD_WriteReg(0x90,0x0013); //Frame Cycle ControlLCD_WriteReg(0x92,0x0000); //Panel Interface Control 2LCD_WriteReg(0x93,0x0003); //Panel Interface control 3LCD_WriteReg(0x95,0x0110); //Frame Cycle ControlLCD_WriteReg(0x07,0x0173); delay_ms(50);} else if(lcddev.id==0x1505)//OK{// second release on 3/5 ,luminance is acceptable,water wave appear during camera previewLCD_WriteReg(0x0007,0x0000);delay_ms(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); //0x0707LCD_WriteReg(0x0032,0x0603); LCD_WriteReg(0x0033,0x0700); LCD_WriteReg(0x0034,0x0202); LCD_WriteReg(0x0035,0x0002); //?0x0606LCD_WriteReg(0x0036,0x1F0F);LCD_WriteReg(0x0037,0x0707); //0x0f0f 0x0105LCD_WriteReg(0x0038,0x0000); LCD_WriteReg(0x0039,0x0000); LCD_WriteReg(0x003A,0x0707); LCD_WriteReg(0x003B,0x0000); //0x0303LCD_WriteReg(0x003C,0x0007); //?0x0707LCD_WriteReg(0x003D,0x0000); //0x1313//0x1f08delay_ms(50); LCD_WriteReg(0x0007,0x0001);LCD_WriteReg(0x0017,0x0001);//开启电源delay_ms(50); //电源配置LCD_WriteReg(0x0010,0x17A0); LCD_WriteReg(0x0011,0x0217);//reference voltage VC[2:0] Vciout = 1.00*VcivlLCD_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 AmplLCD_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);//0x0e00LCD_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 frenqucyLCD_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); delay_ms(20);LCD_WriteReg(0x0007,0x0061); delay_ms(20);LCD_WriteReg(0x0007,0x0173); delay_ms(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);delay_ms(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);delay_ms(20);LCD_WriteReg(0x0010,0x0730);LCD_WriteReg(0x0011,0x0137);delay_ms(20);LCD_WriteReg(0x0012,0x01b8);delay_ms(20);LCD_WriteReg(0x0013,0x0f00);LCD_WriteReg(0x002a,0x0080);LCD_WriteReg(0x0029,0x0048);delay_ms(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);delay_ms(20);LCD_WriteReg(0x0007,0x0001);delay_ms(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);delay_ms(20); LCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x00a4,0x0001);delay_ms(20); LCD_WriteReg(0x0060,0x2700);LCD_WriteReg(0x0008,0x0806);LCD_WriteReg(0x0030,0x0703);//gamma settingLCD_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); //80HzLCD_WriteReg(0x0010, 0X0410); //BT,APLCD_WriteReg(0x0011,0x0247); //DC1,DC0,VCLCD_WriteReg(0x0012, 0x01BC);LCD_WriteReg(0x0013, 0x0e00);delay_ms(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 StartLCD_WriteReg(0x0021, 0x0000); //V StartLCD_WriteReg(0x002A,0x003D); //vcom2delay_ms(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==0x4531)//OK |/|/|{LCD_WriteReg(0X00,0X0001); delay_ms(10); LCD_WriteReg(0X10,0X1628); LCD_WriteReg(0X12,0X000e);//0x0006 LCD_WriteReg(0X13,0X0A39); delay_ms(10); LCD_WriteReg(0X11,0X0040); LCD_WriteReg(0X15,0X0050); delay_ms(10); LCD_WriteReg(0X12,0X001e);//16 delay_ms(10); LCD_WriteReg(0X10,0X1620); LCD_WriteReg(0X13,0X2A39); delay_ms(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); delay_ms(40); LCD_WriteReg(0X12,0X0012);//16 delay_ms(40); LCD_WriteReg(0X10,0X3420); LCD_WriteReg(0X13,0X3038); delay_ms(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); }else if(lcddev.id==0X1963){LCD_WR_REG(0xE2); //Set PLL with OSC = 10MHz (hardware), Multiplier N = 35, 250MHz < VCO < 800MHz = OSC*(N+1), VCO = 300MHzLCD_WR_DATA(0x1D); //参数1 LCD_WR_DATA(0x02); //参数2 Divider M = 2, PLL = 300/(M+1) = 100MHzLCD_WR_DATA(0x04); //参数3 Validate M and N values delay_us(100);LCD_WR_REG(0xE0); // Start PLL commandLCD_WR_DATA(0x01); // enable PLLdelay_ms(10);LCD_WR_REG(0xE0); // Start PLL command againLCD_WR_DATA(0x03); // now, use PLL output as system clock delay_ms(12); LCD_WR_REG(0x01); //软复位delay_ms(10);LCD_WR_REG(0xE6); //设置像素频率,33MhzLCD_WR_DATA(0x2F);LCD_WR_DATA(0xFF);LCD_WR_DATA(0xFF);LCD_WR_REG(0xB0); //设置LCD模式LCD_WR_DATA(0x20); //24位模式LCD_WR_DATA(0x00); //TFT 模式 LCD_WR_DATA((SSD_HOR_RESOLUTION-1)>>8);//设置LCD水平像素LCD_WR_DATA(SSD_HOR_RESOLUTION-1); LCD_WR_DATA((SSD_VER_RESOLUTION-1)>>8);//设置LCD垂直像素LCD_WR_DATA(SSD_VER_RESOLUTION-1); LCD_WR_DATA(0x00); //RGB序列 LCD_WR_REG(0xB4); //Set horizontal periodLCD_WR_DATA((SSD_HT-1)>>8);LCD_WR_DATA(SSD_HT-1);LCD_WR_DATA(SSD_HPS>>8);LCD_WR_DATA(SSD_HPS);LCD_WR_DATA(SSD_HOR_PULSE_WIDTH-1);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_REG(0xB6); //Set vertical periodLCD_WR_DATA((SSD_VT-1)>>8);LCD_WR_DATA(SSD_VT-1);LCD_WR_DATA(SSD_VPS>>8);LCD_WR_DATA(SSD_VPS);LCD_WR_DATA(SSD_VER_FRONT_PORCH-1);LCD_WR_DATA(0x00);LCD_WR_DATA(0x00);LCD_WR_REG(0xF0); //设置SSD1963与CPU接口为16bit LCD_WR_DATA(0x03); //16-bit(565 format) data for 16bpp LCD_WR_REG(0x29); //开启显示//设置PWM输出 背光通过占空比可调 LCD_WR_REG(0xD0); //设置自动白平衡DBCLCD_WR_DATA(0x00); //disableLCD_WR_REG(0xBE); //配置PWM输出LCD_WR_DATA(0x05); //1设置PWM频率LCD_WR_DATA(0xFE); //2设置PWM占空比LCD_WR_DATA(0x01); //3设置CLCD_WR_DATA(0x00); //4设置DLCD_WR_DATA(0x00); //5设置E LCD_WR_DATA(0x00); //6设置F LCD_WR_REG(0xB8); //设置GPIO配置LCD_WR_DATA(0x03); //2个IO口设置成输出LCD_WR_DATA(0x01); //GPIO使用正常的IO功能 LCD_WR_REG(0xBA);LCD_WR_DATA(0X01); //GPIO[1:0]=01,控制LCD方向LCD_SSD_BackLightSet(100);//背光设置为最亮} LCD_Display_Dir(0); //默认为竖屏LCD_LED=1; //点亮背光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->LCD_RAM=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(); //开始写入GRAMfor(j=0;j<width;j++)LCD->LCD_RAM=color[i*width+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 LCD_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); //5LCD_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/24
mode:叠加方式(1)还是非叠加方式(0)
//void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
//{
// u8 temp,t1,t;
// u16 y0=y;
// u8 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
// num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
// for(t=0;t<csize;t++)
// {
// if(size==12)temp=asc2_1206[num][t]; //调用1206字体
// else if(size==16)temp=asc2_1608[num][t]; //调用1608字体
// else if(size==24)temp=asc2_2412[num][t]; //调用2412字体
// else if(size==32)temp=asc3232[num][t]; //32
// else if(size==64)temp=asc6464[num][t]; //64
// else return; //没有的字库
// for(t1=0;t1<8;t1++)
// {
// if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
// else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
// temp<<=1;
// y++;
// if(y>=lcddev.height)return; //超区域了
// if((y-y0)==size)
// {
// y=y0;
// x++;
// if(x>=lcddev.width)return; //超区域了
// break;
// }
// }
// }
//} //新的LCD_ShowChar,新增32,64ASC字库,可移植非8整数倍字号字库
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode);//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++;}
}u8 Disguise_ChineseSize(u8 size,u8 num,u32 t)
{u8 tempx;if(size==8) tempx= chinese_one_88[num][t];if(size==9) tempx= chinese_one_99[num][t];if(size==10) tempx= chinese_one_1010[num][t];if(size==11) tempx= chinese_one_1111[num][t];if(size==12) tempx= chinese_one_1212[num][t];if(size==13) tempx= chinese_one_1313[num][t];if(size==14) tempx= chinese_one_1414[num][t];if(size==15) tempx= chinese_one_1515[num][t];if(size==16) tempx= chinese_one_1616[num][t];if(size==17) tempx= chinese_one_1717[num][t];if(size==18) tempx= chinese_one_1818[num][t];if(size==19) tempx= chinese_one_1919[num][t];if(size==20) tempx= chinese_one_2020[num][t];if(size==21) tempx= chinese_one_2121[num][t];if(size==22) tempx= chinese_one_2222[num][t];if(size==23) tempx= chinese_one_2323[num][t];if(size==24) tempx= chinese_one_2424[num][t];if(size==25) tempx= chinese_one_2525[num][t];if(size==26) tempx= chinese_one_2626[num][t];if(size==27) tempx= chinese_one_2727[num][t];if(size==28) tempx= chinese_one_2828[num][t];if(size==29) tempx= chinese_one_2929[num][t];if(size==30) tempx= chinese_one_3030[num][t];if(size==31) tempx= chinese_one_3131[num][t];if(size==32) tempx= chinese_one_3232[num][t];if(size==64) tempx= chinese_one_6464[num][t];return tempx;
}u8 Disguise_CharSize(u8 size,u8 num,u32 t)
{u8 tempx;if(size==12)tempx=asc2_1206[num][t]; //调用1206字体if(size==16)tempx=asc2_1608[num][t]; //调用1608字体if(size==24)tempx=asc2_2412[num][t]; //调用2412字体if(size==32)tempx=asc3232[num][t]; //32if(size==64)tempx=asc6464[num][t]; //64return tempx;
}void LCD_ShowOneChinese(u8 x, u8 y, u8 num, u8 size, u8 mode)
{u8 temp,t1;u32 t;u8 y0 = y;u8 i;u16 csize;for(i=8;i<=range;i+=8){if(size>i&&size<i+8){csize = ((size + 7) / 8) * size; for(t = 0; t < csize; t++){ temp = Disguise_ChineseSize(size,num,t);u8 valid_bits = (t % ((i/8)+1) == (i/8)) ? (size%8) : 8; for(t1 = 0; t1 < valid_bits; t1++){if(temp & (0x80 >> t1)) // 从最高位开始逐位检测(右移t1位)LCD_Fast_DrawPoint(x, y, POINT_COLOR); // 前景色else LCD_Fast_DrawPoint(x, y, BACK_COLOR); // 背景色y++;if(y>=lcddev.height)return; //超区域了if((y - y0) == size) {y = y0;x++;if(x>=lcddev.width)return; //超区域了break;}} } }else if(size==i){csize = (size/8) * size; for(t=0;t<csize;t++){ temp = Disguise_ChineseSize(size,num,t); for(t1=0;t1<8;t1++){if(temp&0x80) LCD_Fast_DrawPoint(x,y,POINT_COLOR);else LCD_Fast_DrawPoint(x,y,BACK_COLOR);temp<<=1;y++;if(y>=lcddev.height)return; //超区域了if((y-y0)==size){y=y0;x++;if(x>=lcddev.width)return; //超区域了break;}} }}}}//number为一共有几个汉字
//form表示汉字是横排还是竖排,0为竖排1为横排,2为number表示序号用于显示font.h字库中汉字
void LCD_ShowChinese(u8 x, u8 y, u8 number , u8 size,u8 mode,u8 form)
{u8 i=0;u8 temp=x;u8 temp1=y;for(i=0;i<=number-1;i++){x=temp;y=temp1;if(form==1){x += size*i;LCD_ShowOneChinese(x,y,i,size,mode);}else if(form==0){y += size*i;LCD_ShowOneChinese(x,y,i,size,mode);}else{LCD_ShowOneChinese(x,y,number-1,size,mode);//此时number表示序号,1为起始序号}}}在指定位置显示一个字符
x,y:起始坐标
num:要显示的字符:" "--->"~"
size:字体大小 12/16/24
mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{ u8 temp,t1;u32 t;u8 y0 = y;u8 i;u16 csize;num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)for(i=8;i<=range;i+=8){if(size>i&&size<i+8){csize = ((size + 7) / 8) * size; for(t = 0; t < csize; t++){ temp = Disguise_CharSize(size,num,t);u8 valid_bits = (t % ((i/8)+1) == (i/8)) ? (size%8) : 8; for(t1 = 0; t1 < valid_bits; t1++){if(temp & (0x80 >> t1)) // 从最高位开始逐位检测(右移t1位)LCD_Fast_DrawPoint(x, y, POINT_COLOR); // 前景色else if(mode==0)LCD_Fast_DrawPoint(x, y, BACK_COLOR); // 背景色y++;if(y>=lcddev.height)return; //超区域了if((y - y0) == size) {y = y0;x++;if(x>=lcddev.width)return; //超区域了break;}} } }else if(size==i){csize=(size/8+((size%8)?1:0))*(size/2);for(t=0;t<csize;t++){ temp = Disguise_CharSize(size,num,t); for(t1=0;t1<8;t1++){if(temp&0x80) LCD_Fast_DrawPoint(x,y,POINT_COLOR);else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);temp<<=1;y++;if(y>=lcddev.height)return; //超区域了if((y-y0)==size){y=y0;x++;if(x>=lcddev.width)return; //超区域了break;}} }}}
}
lcd.h
#ifndef __LCD_H
#define __LCD_H
#include "sys.h"
#include "stdlib.h"
//
//STM32F103ZE核心板//2.4寸/2.8寸/3.5寸/4.3寸/7寸 TFT液晶驱动
//支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
// SPFD5408/1505/B505/C505/NT35310/NT35510/SSD1963等 //********************************************************************************// //LCD重要参数集
typedef struct
{ u16 width; //LCD 宽度u16 height; //LCD 高度u16 id; //LCD IDu8 dir; //横屏还是竖屏控制:0,竖屏;1,横屏。 u16 wramcmd; //开始写gram指令u16 setxcmd; //设置x坐标指令u16 setycmd; //设置y坐标指令
}_lcd_dev; //LCD参数
extern _lcd_dev lcddev; //管理LCD重要参数
//LCD的画笔颜色和背景色
extern u16 POINT_COLOR;//默认红色
extern u16 BACK_COLOR; //背景颜色.默认为白色//
//-----------------LCD端口定义----------------
#define LCD_LED PBout(0) //LCD背光 PB0
//LCD地址结构体
typedef struct
{vu16 LCD_REG;vu16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
//注意设置时STM32内部会右移一位对其!
#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
#define LCD ((LCD_TypeDef *) LCD_BASE)
////扫描方向定义
#define L2R_U2D 0 //从左到右,从上到下
#define L2R_D2U 1 //从左到右,从下到上
#define R2L_U2D 2 //从右到左,从上到下
#define R2L_D2U 3 //从右到左,从下到上#define U2D_L2R 4 //从上到下,从左到右
#define U2D_R2L 5 //从上到下,从右到左
#define D2U_L2R 6 //从下到上,从左到右
#define D2U_R2L 7 //从下到上,从右到左 #define DFT_SCAN_DIR L2R_U2D //默认的扫描方向//画笔颜色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
//GUI颜色#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
//以上三色为PANEL的颜色 #define LIGHTGREEN 0X841F //浅绿色
//#define LIGHTGRAY 0XEF5B //浅灰色(PANNEL)
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)void LCD_Init(void); //初始化
void LCD_DisplayOn(void); //开显示
void LCD_DisplayOff(void); //关显示
void LCD_Clear(u16 Color); //清屏
void LCD_SetCursor(u16 Xpos, u16 Ypos); //设置光标
void LCD_DrawPoint(u16 x,u16 y); //画点
void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color); //快速画点
u16 LCD_ReadPoint(u16 x,u16 y); //读点
void LCD_Draw_Circle(u16 x0,u16 y0,u8 r); //画圆
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //画线
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2); //画矩形
void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color); //填充单色
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color); //填充指定颜色
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode); //显示一个字符
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size); //显示一个数字
void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode); //显示 数字
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p); //显示一个字符串,12/16/24/32/64字体
void LCD_ShowChinese(u8 x, u8 y, u8 number , u8 size,u8 mode,u8 form); //显示一个8~64(可自行修改更大范围)字符或汉字,需取字模后移入font.hvoid LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
u16 LCD_ReadReg(u16 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);
void LCD_SSD_BackLightSet(u8 pwm); //SSD1963 背光控制
void LCD_Scan_Dir(u8 dir); //设置屏扫描方向
void LCD_Display_Dir(u8 dir); //设置屏幕显示方向
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height); //设置窗口
//LCD分辨率设置
#define SSD_HOR_RESOLUTION 800 //LCD水平分辨率
#define SSD_VER_RESOLUTION 480 //LCD垂直分辨率
//LCD驱动参数设置
#define SSD_HOR_PULSE_WIDTH 1 //水平脉宽
#define SSD_HOR_BACK_PORCH 46 //水平前廊
#define SSD_HOR_FRONT_PORCH 210 //水平后廊#define SSD_VER_PULSE_WIDTH 1 //垂直脉宽
#define SSD_VER_BACK_PORCH 23 //垂直前廊
#define SSD_VER_FRONT_PORCH 22 //垂直前廊
//如下几个参数,自动计算
#define SSD_HT (SSD_HOR_RESOLUTION+SSD_HOR_BACK_PORCH+SSD_HOR_FRONT_PORCH)
#define SSD_HPS (SSD_HOR_BACK_PORCH)
#define SSD_VT (SSD_VER_RESOLUTION+SSD_VER_BACK_PORCH+SSD_VER_FRONT_PORCH)
#define SSD_VPS (SSD_VER_BACK_PORCH)#endif
font.h
const u16 chinese_one_1616[][32]={
0x00,0x08,0x00,0x08,0x1F,0xC8,0x92,0x48,0x52,0x48,0x32,0x48,0x12,0x48,0x1F,0xFF,0x12,0x48,0x32,0x48,0x52,0x48,0x92,0x48,0x1F,0xC8,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",0*/0x00,0x00,0x00,0x01,0x00,0x06,0x7F,0xF8,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0xFC,0x40,0x04,0x7F,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,/*"片",1*/0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x08,0xC1,0x00,0x06,0x7F,0xF8,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0xFC,0x00,0x02,0x00,0x02,0x00,0x1E,0x00,0x00,/*"机",2*/
};const u16 chinese_one_88[][8];
const u16 chinese_one_99[][16];
const u16 chinese_one_1010[][20];
const u16 chinese_one_1111[][20];
const u16 chinese_one_1212[][24];
const u16 chinese_one_1313[][24];
const u16 chinese_one_1414[][24];
const u16 chinese_one_1515[][28];
//const u16 chinese_one_1616[][32];
const u16 chinese_one_1717[][48];
const u16 chinese_one_1818[][54];
const u16 chinese_one_1919[][54];
const u16 chinese_one_2020[][60];
const u16 chinese_one_2121[][60];
const u16 chinese_one_2222[][66];
const u16 chinese_one_2323[][66];
const u16 chinese_one_2424[][72];
const u16 chinese_one_2525[][96];
const u16 chinese_one_2626[][104];
const u16 chinese_one_2727[][104];
const u16 chinese_one_2828[][112];
const u16 chinese_one_2929[][112];
const u16 chinese_one_3030[][120];
const u16 chinese_one_3131[][120];
const u16 chinese_one_3232[][128];
//点阵为32*32
const u32 chinese_one_6464[][512];//ASCLL字库可自己添加
相关文章:
正点原子TFTLCD扩展
声明:该文章代码是在正点原子教学下写出的LCD驱动代码上进行了修改能兼容更多字号( ˘ ˘)❤️ 如有侵权,请私信联系删除 文章目录 前言代码lcd.clcd.hfont.h 前言 由于TFTLCD4.3寸屏幕太大了,正点原子的代码只能显示12/16/24字号的字符或者…...
部署Megatron - LM,快速上手使用
安装Megatron - LM 首先检查一下当前环境是否已经有 NVIDIA 驱动和 CUDA: nvidia-smi 直接在当前环境安装运行 PyTorch 和 Megatron-LM不使用 Docker 之前我们看到目前的环境有 NVIDIA V100 GPU 和 CUDA 12.1,我们可以安装对应的 GPU 版本 PyTorch。…...
赛灵思 XC7K325T-2FFG900I FPGA Xilinx Kintex‑7
XC7K325T-2FFG900I 是 Xilinx Kintex‑7 系列中一款工业级 (I) 高性能 FPGA,基于 28 nm HKMG HPL 工艺制程,核心电压标称 1.0 V,I/O 电压可在 0.97 V–1.03 V 之间灵活配置,并可在 –40 C 至 100 C 温度范围内稳定运行。该器件提供…...
20.1Linux的PWM驱动实验(知识点)_csdn
PWM 是很常用到功能,我们可以通过 PWM 来控制电机速度,也可以使用 PWM 来控制LCD 的背光亮度。本章我们就来学习一下如何在 Linux 下进行 PWM 驱动开发。 在之前学过STM32的就知道这部分内容,利用占空比来调节电机的转速。 1、PWM 驱动简析 …...
如何在 Java 中从 PDF 文件中删除页面(教程)
由于 PDF 文件格式不是 Java 原生支持的,因此要从 PDF 中删除页面,你需要使用外部库。 本教程介绍如何使用 JPedal 来实现这一功能。 开始使用 • 将 JPedal 添加到你的类路径或模块路径中(可从官网下载安装试用版 JAR 文件) •…...
2026《数据结构》考研复习笔记五(栈、队列)
栈、队列 一、栈1.卡特兰数2.不合法的出栈序列 二、队列1.循环队列2.输入输出受限队列(四个数1234) 三、算法1.栈在括号匹配中的应用2.中缀表达式求值(通过转化为后缀表达式再后缀表达式求值)3.中缀表达式转化为后缀表达式4.后缀表…...
本地部署DeepSeek大模型
本地部署 ollama 下载Ollama ollama支持的模型:Ollama Search 直接下载,发现默认是下载C盘,并且不能选择安装目录,这对我C盘的压力太大了。 查阅资料:发现可以修改 参考将Ollama安装到非C盘路径_ollama不安装在c盘…...
C++ / 引用 | 类
引用本 作用: 给变量起别名 语法: 数据类型 & 别名 原名; 应用代码 #include <iostream>using namespace std;int main() {int a 10;int& b a;b 100;cout << "a " << a << endl;cout <…...
在任意路径下简单开启jupyter notebook
正常的开启方式为: 安装anaconda, 在anaconda界面开启jupyter. 但是启动后root的路径不好改变。 可以直接通过cmd方式打开jupyter. cd D: # cd到d盘 jupyter notebook # 启动此时开启jupyter notebook, root为D盘路径。 按此方式可以在任意路径启动jupyter noteb…...
2025年阿里云云计算ACP高级工程师认证模拟试题(附答案解析)
这篇文章的内容是阿里云云计算ACP高级工程师认证考试的模拟试题。 所有模拟试题由AI自动生成,主要为了练习和巩固知识,并非所谓的 “题库”,考试中如果出现同样试题那真是纯属巧合。 1、设计云上架构时,如果能充分了解云服务的特…...
锂电池4.2V升压24V推荐哪些升压芯片?高效率国产SL4013输入耐压2.7V-25V
SL4013作为一款高性能升压型DC-DC转换芯片,在单节锂电池(4.2V)升压至24V的应用中展现出以下核心优势: 一、宽输入电压适应性 SL4013支持2.7V-25V的输入范围,尤其适合单节锂电池(3.7V-4.2V)的宽…...
中电金信联合阿里云推出智能陪练Agent
在金融业加速数智化转型的今天,提升服务效率与改善用户体验已成为行业升级的核心方向。面对这一趋势,智能体与智能陪练的结合应用,正帮助金融机构突破传统业务模式,开拓更具竞争力的创新机遇。 在近日召开的阿里云AI势能大会期间&…...
基于扣子(Coze.cn)与火山引擎构建高性能智能体的实践指南
1. 引言 1.1. 背景与目标 人工智能(AI)智能体(Agent)平台的兴起,例如扣子(Coze),正显著改变我们构建复杂 AI 应用的方式 1。这些平台旨在降低技术门槛,让不同技能水平的…...
w~视觉~3D~合集2
我自己的原文哦~ https://blog.51cto.com/whaosoft/13766161 #Sin3DGen 最近有点忙 可能给忘了,贴了我只是搬运工 发这些给自己看, 还有下面不是隐藏是发布出去 ~ 北京大学xxx团队联合山东大学和xxx AI Lab的研究人员,提出了首个基于单样例场景无需训练便可生…...
SAS宏核心知识与实战应用
1. SAS宏基础 1.1 核心概念 1.1.1 宏处理器 宏处理器在SAS程序运行前执行,用于生成动态代码,可实现代码的灵活定制。 通过宏处理器,可基于输入参数动态生成不同的SAS代码,提高代码复用性。 1.1.2 宏变量 宏变量是存储文本值的容器,用&符号引用,如&var,用于存储…...
windows使用openssl生成IIS自签证书全流程
使用 OpenSSL 生成适用于 IIS 的证书,通常需要经过以下步骤:生成私钥、生成证书签名请求(CSR)、生成自签名证书或通过 CA 签名,最后将证书转换为 IIS 所需的 PFX 格式。以下是详细步骤: 1. 安装 OpenSSL …...
笔记本电脑研发笔记:BIOS,Driver,Preloader详记
在笔记本电脑的研发过程中,Driver(驱动程序)、BIOS(基本输入输出系统)和 Preloader(预加载程序)之间存在着密切的相互关系和影响,具体如下: 相互关系 BIOS 与 Preload…...
鸿蒙生态:鸿蒙生态校园行心得
(个人观点,仅供参考) 兄弟们,今天来浅浅聊一聊这次的设立在长沙的鸿蒙生态行活动。 老样子,我们先来了解一下这个活动: Harmon&#x…...
云原生周刊:KubeSphere 平滑升级
开源项目推荐 Kagent Kagent 是一个开源的 K8s 原生框架,旨在帮助 DevOps 和平台工程师在 K8s 环境中构建和运行 AI 代理(Agentic AI)。与传统的生成式 AI 工具不同,Kagent 强调自主推理和多步骤任务的自动化执行,适…...
Uniapp:swiper(滑块视图容器)
目录 一、基本概述二、属性说明三、基本使用 一、基本概述 一般用于左右滑动或上下滑动,比如banner轮播图 二、属性说明 属性名类型默认值说明平台差异说明indicator-dotsBooleanfalse是否显示面板指示点indicator-colorColorrgba(0, 0, 0, .3)指示点颜色indicat…...
开源的自动驾驶模拟器
以下是目前主流的 开源自动驾驶模拟器,适用于算法开发、测试和研究: 1. CARLA 官网/GitHub: carla.org | GitHub许可证: MIT特点: 基于虚幻引擎(Unreal Engine),提供高保真城市场景(支…...
Uniapp:scroll-view(区域滑动视图)
目录 一、基本概述二、属性说明三、基本使用3.1 纵向滚动3.2 横向滚动 一、基本概述 scroll-view,可滚动视图区域。用于区域滚动。 二、属性说明 属性名类型默认值说明平台差异说明scroll-xBooleanfalse允许横向滚动scroll-yBooleanfalse允许纵向滚动 三、基本使…...
【漏洞复现】Struts2系列
【漏洞复现】Struts2系列 1. 了解Struts21. Struts2 S2-061 RCE (CVE-2020-17530)1. 漏洞描述2. 影响版本3. 复现过程 1. 了解Struts2 Apache Struts2是一个基于MVC设计模式的Web应用框架,会对某些标签属性(比如 id)的…...
洗车小程序系统前端uniapp 后台thinkphp
洗车小程序系统 前端uniapp 后台thinkphp 支持多门店 分销 在线预约 套餐卡等...
【RuleUtil】适用于全业务场景的规则匹配快速开发工具
一、RuleUtil 开发背景 1.1 越来越多,越来越复杂的业务规则 1、规则的应用场景多 2、规则配置的参数类型多(ID、数值、文本、日期等等) 3、规则的参数条件多(大于、小于、等于、包含、不包含、区间等等) 4、规则的结…...
多表查询之嵌套查询
目录 引言 一、标量嵌套查询 二、列嵌套查询 三、行嵌套查询 四、表嵌套查询 引言 1、概念 SQL语句中嵌套 select 语句,称为嵌套查询,又称子查询。嵌套查询外部的语句可以是 insert / update / delete / select 的任何一个。 嵌套…...
js原型链prototype解释
function Person(){} var personnew Person() console.log(啊啊,Person instanceof Function);//true console.log(,Person.__proto__Function.prototype);//true console.log(,Person.prototype.__proto__ Object.prototype);//true console.log(,Function.prototype.__prot…...
RK3588 ubuntu20禁用自带的TF卡挂载,并设置udev自动挂载
禁用系统的自动挂载(udisks2) sudo vim /etc/udev/rules.d/80-disable-automount.rules添加 ACTION"add", KERNEL"mmcblk1p1", ENV{UDISKS_IGNORE}"1"KERNEL“mmcblk1p1”:匹配设备名(TF卡通常是…...
【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现
介绍 广义上讲,扩散模型是一种生成式深度学习模型,它通过学习到的去噪过程来创建数据。扩散模型有很多变体,其中最流行的通常是文本条件模型,它可以根据提示生成特定的图像。一些扩散模型(例如 Control-Net࿰…...
AR/VR衍射光波导性能提升遇阻?OAS光学软件有方法
衍射波导准直系统设计案例 简介 在现代光学显示技术中,衍射光波导系统因其独特的光学性能和紧凑的结构设计,在增强现实(AR)、虚拟现实(VR)等领域展现出巨大的应用潜力。本案例聚焦于衍射波导准直系统&…...
联易融受邀参加上海审计局金融审计处专题交流座谈
近日,联易融科技集团受邀出席了由上海市审计局金融审计处组织的专题交流座谈,凭借其在供应链金融领域的深厚积累和创新实践,联易融为与会人员带来了精彩的分享,进一步加深现场对供应链金融等金融发展前沿领域的理解。 在交流座谈…...
【中级软件设计师】程序设计语言基础成分
【中级软件设计师】程序设计语言基础成分 目录 【中级软件设计师】程序设计语言基础成分一、历年真题二、考点:程序设计语言基础成分1、基本成分2、数据成分3、控制成分 三、真题的答案与解析答案解析 复习技巧: 若已掌握【程序设计语言基础成分】相关知…...
高并发抢券系统设计与落地实现详解
📚 目录 一、业务背景与系统目标 二、架构设计总览 三、热点数据预热与缓存设计 四、抢券逻辑核心 —— Redis Lua 脚本 五、抢券接口实现要点 六、结果同步机制设计 七、性能优化策略 八、总结 在电商系统中,抢券作为一种典型的秒杀业务场景&a…...
外商在国内宣传 活动|发布会|参展 邀请媒体
传媒如春雨,润物细无声,大家好,我是51媒体胡老师。 外商在国内开展宣传活动、发布会或参展时,邀请媒体是扩大影响力、提升品牌知名度的关键环节。 一、活动筹备阶段:选择具有实力且更有性价比的媒体服务商(…...
物联网 (IoT) 安全简介
什么是物联网安全? 物联网安全是网络安全的一个分支领域,专注于保护、监控和修复与物联网(IoT)相关的威胁。物联网是指由配备传感器、软件或其他技术的互联设备组成的网络,这些设备能够通过互联网收集、存储和共享数据…...
大模型面经 | 春招、秋招算法面试常考八股文附答案(四)
大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...
从零开始学习MySQL的系统学习大纲
文章目录 前言第一阶段:数据库与 MySQL 基础认知数据库基础概念MySQL 简介 第二阶段:MySQL 安装与环境搭建安装前的准备MySQL 安装过程安装后的配置 第三阶段:SQL 基础语法SQL 概述数据库操作数据表操作数据操作 第四阶段:SQL 高级…...
ycsb性能测试的优缺点
YCSB(Yahoo Cloud Serving Benchmark)是一个开源的性能测试框架,用于评估分布式系统的读写性能。它具有以下优点和缺点: 优点: 简单易用:YCSB提供了简单的API和配置文件,使得性能测试非常容易…...
Linux:简单自定义shell
1.实现原理 考虑下⾯这个与shell典型的互动: [rootlocalhost epoll]# ls client.cpp readme.md server.cpp utility.h [rootlocalhost epoll]# ps PID TTY TIME CMD 3451 pts/0 00:00:00 bash 3514 pts/0 00:00:00 ps ⽤下图的时间轴来表⽰事件的发⽣次序。其中时…...
Android Studio开发 SharedPreferences 详解
文章目录 SharedPreferences 详解基本概念获取 SharedPreferences 实例1. Context.getSharedPreferences()2. Activity.getPreferences()3. PreferenceManager.getDefaultSharedPreferences() 存储模式写入数据apply() vs commit() 读取数据监听数据变化最佳实践高级用法存储字…...
Qt基础006(事件)
文章目录 消息对话框QMessageBox快捷键开发基础 事件事件处理过程事件过滤器 消息对话框QMessageBox QMessageBox 是 Qt 框架中用于显示消息框的一个类,它常用于向用户显示信息、询问问题或者报告错 误。以下是 QMessageBox 的一些主要用途: 显示信息…...
Mediatek Android13 设置Launcher
概述: 本章将围绕Launcher讲述两种修改默认Launcher的情况。 一:完全覆盖 第一种方法和预置apk类似,区别在于增加LOCAL_OVERRIDES_PACKAGES说明,该方法会完全覆盖系统默认的Launcher。 关于如何预置apk,可见另一篇文章: Mediatek Android13 预置APP-CSDN博客 修改A…...
【Linux网络】构建基于UDP的简单聊天室系统
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
【微知】git reset --soft --hard以及不加的区别?
背景 在 Git 里,git reset 是用来将当前的 HEAD 复位到指定状态的命令。--soft、--hard 是它的两个常用选项,本文简单介绍他们的区别,以及不添加选项时的默认情况。 在 Git 里,HEAD 是一个重要的引用,它指向当前所在的…...
制作一个简单的操作系统7
实模式下到保护模式下并打印 运行效果: 完整代码: 【免费】制作一个简单的操作系统7的源代码资源-CSDN文库https://download.csdn.net/download/farsight_2098/90670296 从零开始写操作系统引导程序:实模式到保护模式的跨越 引言 操作系统的启动过程是计算机系统中最神…...
2025企微CRM系统功能对比:会话存档、客户画像与数据分析如何重构客户运营?
一、企微CRM管理系统:从“连接工具”到“智能中枢” 随着企业微信生态的成熟,企微CRM管理软件已从简单的客户沟通渠道,升级为融合数据、策略与服务的核心平台。2025年,企业对企微CRM系统的需求聚焦于三大能力:会话存档…...
【JAVA】十三、基础知识“接口”精细讲解!(二)(新手友好版~)
哈喽大家好呀qvq,这里是乎里陈,接口这一知识点博主分为三篇博客为大家进行讲解,今天为大家讲解第二篇java中实现多个接口,接口间的继承,抽象类和接口的区别知识点,更适合新手宝宝们阅读~更多内容持续更新中…...
小白工具视频转MPG, 功能丰富齐全,无需下载软件,在线使用,超实用
在视频格式转换需求日益多样的今天,小白工具网的在线视频转 MPG 功能https://www.xiaobaitool.net/videos/convert-to-mpg/ )脱颖而出,凭借其出色特性,成为众多用户处理视频格式转换的优质选择。 从格式兼容性来看,它支…...
#define RFOREACH(var, arr) for (ARR2IDX(arr) var=(arr).size(); var-->0; )
这个宏的定义: #define RFOREACH(var, arr) for (ARR2IDX(arr) var (arr).size(); var-- > 0; )是用来 反向遍历一个容器(比如 vector) 的,非常紧凑而且聪明的写法。 逐步解释一下: 假设你有一个容器,…...
MYSQL—两阶段提交
binlog 和 redo log: 有binlog了为什么还要有redo log: 历史原因,MyISAM不支持崩溃恢复,而InnoDB在加入MySQL前就已经支持崩溃恢复了InnoDB使用的是WAL技术,事务提交后,写完内存和日志,就算事…...