LCD/LCM的基本概念
液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。它包括了TFT,OLED,UFB,TFD,STN等类型的液晶显示屏.
LCM(LCD Module)即LCD显示模组、液晶模块,是指将液晶显示器件,连接件,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。 购买相应的LCD Module时,会提供相关驱动IC资料,很多会有驱动代码。不过价格会比单买 LCD显示屏贵很多。
LCD显示模式
LCD的接口有多种,分类很细。主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式,DSI模式。MCU模式(也写成MPU模式的)。只有TFT模块才有RGB接口。
MCU模式
因为主要针对单片机的领域在使用,因此得名.后在中低端手机大量使用,其主要特点是价格便宜的。MCU-LCD接口的标准术语是Intel提出的8080总线标准,因此在很多文档中用I80 来指MCU-LCD屏。主要又可以分为8080模式和6800模式,这两者之间主要是时序的区别。数据位传输有8位,9位,16位,18位,24位。
MCU接口标准名称是I80,管脚的控制脚有5个:
CS 片选信号
RS (置1为写数据,置0为写命令)
/WR (为0表示写数据) 数据命令区分信号
/RD (为0表示读数据)
RESET 复位LCD( 用固定命令系列 0 1 0来复位)
数据总线  DATA (8~24位) 
RGB模式
大屏采用较多的模式,数据位传输也有6位,16位和18位,24位之分。连线一般有:VSYNC,HSYNC,DOTCLK,CS,RESET,有的也需要RS,剩下就是数据线。它的优缺点正好和MCU模式相反。
MCU-LCD屏它与RGB-LCD屏主要区别在于显存的位置。RGB-LCD的显存是由系统内存充当的,因此其大小只受限于系统内存的大小,这样RGB-LCD可以做出较大尺寸,象现在4.3"只能算入门级,而MID中7",10"的屏都开始大量使用。而MCU-LCD的设计之初只要考虑单片机的内存较小,因此都是把显存内置在LCD模块内部.然后软件通过专门显示命令来更新显存,因此MCU屏往往不能做得很大。同时显示更新速度也比RGB-LCD慢。显示数据传输模式也有差别。RGB屏只需显存组织好数据。启动显示后,LCD-DMA会自动把显存中的数据通过RGB接口送到LCM。而MCU屏则需要发送画点的命令来修改MCU内部的RAM(即不能直接写MCU屏的RAM)。所以RGB显示速度明显比MCU快,而且播放视频方面,MCU-LCD也比较慢。
对于RGB接口的LCM,主机输出的直接是每个象素的RGB数据,不需要进行变换(GAMMA校正等除外),对于这种接口,需要在主机部分有个LCD控制器,以产生RGB数据和点、行、帧同步信号。
MCU接口和RGB接口主要的区别是:
MCU接口方式:显示数据写入DDRAM,常用于静止图片显示。控制简单方便,无需时钟和同步信号。要耗费GRAM,所以难以做到大屏(QVGA以上)。
RGB接口方式:显示数据不写入DDRAM,直接写屏,速度快,常用于显示视频或动画用。
VSYNC模式
该模式其实就是就是在MCU模式上加了一个VSYNC信号,应用于运动画面更新,这样就与上述两个接口有很大的区别。该模式支持直接进行动画显示的功能,它提供了一个对MCU接口最小的改动,实现动画显示的解决方案。
其他还有 SPI模式  MDDI模式   DSI模式 采用较少 这里不一一介绍。
显示屏的驱动IC采用Ili93xx 系列的居多,资料较多。我使用的是正点原子的开发板,显示屏驱动IC是xxxB505 ,不过驱动代码和ili9320类似,为i80接口。不过我一直有一个疑问,这块IC的具体位置在哪? 显示屏由屏幕和排线构成,LCM上只有一块芯片 XPT2046是触摸屏的驱动IC?这样的问题Google也不会知道。。 拆开了一个废旧的显示屏,熟悉了一下显示屏的结构,询问了不少淘宝卖家后,总算弄明白了。这块芯片的封装和常见的芯片不同,以2cm*2mm左右的一块硅片封装在屏幕下和排线相连接。如图:
这里对正点原子的相关代码进行了整理,使用库函数操作,并且整合和横竖屏的代码,实现横竖屏显示。
相关驱动代码如下:
LCD/ili93xx.c 
#include "ili93xx.h"
#include "font.h"#define USE_HORIZONTAL  0 //定义是否使用横屏//画笔颜色,背景颜色
u16 POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF;
u16 DeviceCode;  void LCD_Delay_Us(u32 us)
{u32 time=100*us/7;    while(--time);
}//LCD延时函数 10MS
void LCD_Delay (u32 nCount)
{volatile int i;        for (i=0;i<nCount*100;i++);
}//LCD_GPIO_DATA_PIN 模式设置
//u8 Mode :
//          1    推挽输出
//          0    上拉输出
void LCD_Data_Pin_Mode(u8 Mode){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = LCD_GPIO_DATA_PIN;if(Mode == 1)GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出elseGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;       // 上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD_GPIO_DATA_PORT, &GPIO_InitStructure);
}//写寄存器函数
void LCD_WR_REG(u8 data)
{ Clr_Rs;//写地址  Clr_Cs; Write_Data(data); Clr_Wr; Set_Wr; Set_Cs;
}  //写寄存器
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{   LCD_WR_REG(LCD_Reg);  LCD_WR_DATA(LCD_RegValue);
}    //读寄存器
u16 LCD_ReadReg(u8 LCD_Reg)
{                                          u16 t;LCD_WR_REG(LCD_Reg);   //写入要读的寄存器号 LCD_Data_Pin_Mode(0);   //上拉模式Set_Rs;Clr_Cs;//读取数据(读寄存器时,并不需要读2次)Clr_Rd;                       Set_Rd;t=Read_Data();        Set_Cs;   LCD_Data_Pin_Mode(1);    //推挽模式Write_Data(0xffff);return t;
}   //开始写GRAM
void LCD_WriteRAM_Prepare(void)
{LCD_WR_REG(R34);
}   //LCD写GRAM
void LCD_WriteRAM(u16 RGB_Code)
{                               LCD_WR_DATA(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);
}   //读取个某点的颜色值
//x:0~239
//y:0~319
//返回值:此点的颜色
u16 LCD_ReadPoint(u16 x,u16 y)
{u16 t; if(x>=LCD_WIDTH||y>=LCD_HEIGHT)return 0;//超过了范围,直接返回           LCD_SetCursor(x,y);LCD_WR_REG(R34);       //选择GRAM地址 LCD_Data_Pin_Mode(0);   //上拉模式Set_Rs;Clr_Cs;//读取数据(读GRAM时,需要读2次)Clr_Rd;                    Set_Rd;  LCD_Delay_Us(2);//dummy READClr_Rd; LCD_Delay_Us(2);                   Set_Rd;t=Read_Data();  Set_Cs;   LCD_Data_Pin_Mode(1);  //推挽模式Write_Data(0xFFFF); if(DeviceCode==0X4531||DeviceCode==0X8989||DeviceCode==0XB505)return t;//4531驱动ICelse return LCD_BGR2RGB(t);
}//LCD开启显示
void LCD_DisplayOn(void)
{                      LCD_WriteReg(R7, 0x0173); //26万色显示开启
}    //LCD关闭显示
void LCD_DisplayOff(void)
{      LCD_WriteReg(R7, 0x0);//关闭显示
}    //设置光标位置
//Xpos:横坐标
//Ypos:纵坐标
__inline void LCD_SetCursor(u8 Xpos, u16 Ypos)
{#if USE_HORIZONTALLCD_WriteReg(R32, Ypos);LCD_WriteReg(R33, 319-Xpos);#elseLCD_WriteReg(R32, Xpos);LCD_WriteReg(R33, Ypos);#endif
} //画点
//x:0~239
//y:0~319
//POINT_COLOR:此点的颜色
void LCD_DrawPoint(u16 x,u16 y)
{LCD_SetCursor(x,y);//设置光标位置 LCD_WR_REG(R34);//开始写入GRAMLCD_WR_DATA(POINT_COLOR);
}    //初始化lcd
void LCD_Config(void)
{ /*Set_Cs;Set_Rs; Set_Wr;Set_Rd;    */LCD_Delay(5); // LCD_Delay 50 ms LCD_WriteReg(0x0000,0x0001);LCD_Delay(5); // LCD_Delay 50 ms DeviceCode = LCD_ReadReg(0x0000);   //printf("ID:%d\n",DeviceCode);   if(DeviceCode==0x9325||DeviceCode==0x9328){           //ILI9325LCD_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,0x0207);              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_Delay(5); LCD_WriteReg(0x0010,0x1590);   LCD_WriteReg(0x0011,0x0227);LCD_Delay(5); LCD_WriteReg(0x0012,0x009c);                  LCD_Delay(5); LCD_WriteReg(0x0013,0x1900);   LCD_WriteReg(0x0029,0x0023);LCD_WriteReg(0x002b,0x000e);LCD_Delay(5); LCD_WriteReg(0x0020,0x0000);                                                            LCD_WriteReg(0x0021,0x013f);           LCD_Delay(5); //伽马校正LCD_WriteReg(0x0030,0x0007); LCD_WriteReg(0x0031,0x0707);   LCD_WriteReg(0x0032,0x0006);LCD_WriteReg(0x0035,0x0704);LCD_WriteReg(0x0036,0x1f04); LCD_WriteReg(0x0037,0x0004);LCD_WriteReg(0x0038,0x0000);        LCD_WriteReg(0x0039,0x0706);     LCD_WriteReg(0x003c,0x0701);LCD_WriteReg(0x003d,0x000f);LCD_Delay(5); LCD_WriteReg(0x0050,0x0000); //水平GRAM起始位置 LCD_WriteReg(0x0051,(LCD_WIDTH-1)); //水平GRAM终止位置                    LCD_WriteReg(0x0052,0x0000); //垂直GRAM起始位置                    LCD_WriteReg(0x0053,(LCD_HEIGHT-1)); //垂直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,0x0000);  LCD_WriteReg(0x0093,0x0003);LCD_WriteReg(0x0095,0x0110);LCD_WriteReg(0x0097,0x0000);        LCD_WriteReg(0x0098,0x0000);  //开启显示设置    LCD_WriteReg(0x0007,0x0133);   LCD_WriteReg(0x0020,0x0000);                                                            LCD_WriteReg(0x0021,0x013f);}else if(DeviceCode==0x9320||DeviceCode==0x9300){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.       LCD_Delay(5); LCD_WriteReg(0x07,0x0101);    //Display Contral.LCD_Delay(5);                                   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,(LCD_WIDTH-1)); //Set Y StarLCD_WriteReg(0x52,0);   //Set Y End.t.LCD_WriteReg(0x53,(LCD_HEIGHT-1));    //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(DeviceCode==0x1505){// second release on 3/5  ,luminance is acceptable,water wave appear during camera previewLCD_WriteReg(0x0007,0x0000);LCD_Delay(5); 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//0x1f08LCD_Delay(5); LCD_WriteReg(0x0007,0x0001);LCD_WriteReg(0x0017,0x0001);//开启电源LCD_Delay(5); //电源配置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,(LCD_WIDTH-1)); LCD_WriteReg(0x0052,0x0000); LCD_WriteReg(0x0053,(LCD_HEIGHT-1)); //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,0x1030); LCD_WriteReg(0x0004,0x0000); LCD_WriteReg(0x000C,0x0000); LCD_WriteReg(0x000F,0x0000); LCD_WriteReg(0x0020,0x0000); LCD_WriteReg(0x0021,0x0000); LCD_WriteReg(0x0007,0x0021); LCD_Delay(20);LCD_WriteReg(0x0007,0x0061); LCD_Delay(20);LCD_WriteReg(0x0007,0x0173); LCD_Delay(20);}else if(DeviceCode==0xB505){                   //stm32 正点原子 LCD 驱动ICLCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x0000,0x0000);LCD_WriteReg(0x00a4,0x0001);LCD_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);LCD_Delay(20);LCD_WriteReg(0x0010,0x0730);LCD_WriteReg(0x0011,0x0137);LCD_Delay(20);LCD_WriteReg(0x0012,0x01b8);LCD_Delay(20);LCD_WriteReg(0x0013,0x0f00);LCD_WriteReg(0x002a,0x0080);LCD_WriteReg(0x0029,0x0048);LCD_Delay(20);LCD_WriteReg(0x0001,0x0100);LCD_WriteReg(0x0002,0x0700);LCD_WriteReg(0x0003,0x1230);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);LCD_Delay(20);LCD_WriteReg(0x0007,0x0001);LCD_Delay(20);LCD_WriteReg(0x0007,0x0061);LCD_WriteReg(0x0007,0x0173);LCD_WriteReg(0x0020,0x0000);LCD_WriteReg(0x0021,0x0000);    LCD_WriteReg(0x00,0x22);  }else if(DeviceCode==0x8989){LCD_WriteReg(0x0000,0x0001);LCD_Delay(5);//打开晶振LCD_WriteReg(0x0003,0xA8A4);LCD_Delay(5);//0xA8A4LCD_WriteReg(0x000C,0x0000);LCD_Delay(5);    LCD_WriteReg(0x000D,0x080C);LCD_Delay(5);    LCD_WriteReg(0x000E,0x2B00);LCD_Delay(5);    LCD_WriteReg(0x001E,0x00B0);LCD_Delay(5);    LCD_WriteReg(0x0001,0x2B3F);LCD_Delay(5);//驱动输出控制320*240  0x6B3FLCD_WriteReg(0x0002,0x0600);LCD_Delay(5); LCD_WriteReg(0x0010,0x0000);LCD_Delay(5); LCD_WriteReg(0x0011,0x6070);LCD_Delay(5);//定义数据格式  16位色      横屏 0x6058LCD_WriteReg(0x0005,0x0000);LCD_Delay(5); LCD_WriteReg(0x0006,0x0000);LCD_Delay(5); LCD_WriteReg(0x0016,0xEF1C);LCD_Delay(5); LCD_WriteReg(0x0017,0x0003);LCD_Delay(5); LCD_WriteReg(0x0007,0x0233);LCD_Delay(5);//0x0233       LCD_WriteReg(0x000B,0x0000);LCD_Delay(5); LCD_WriteReg(0x000F,0x0000);LCD_Delay(5);//扫描开始地址LCD_WriteReg(0x0041,0x0000);LCD_Delay(5); LCD_WriteReg(0x0042,0x0000);LCD_Delay(5); LCD_WriteReg(0x0048,0x0000);LCD_Delay(5); LCD_WriteReg(0x0049,0x013F);LCD_Delay(5); LCD_WriteReg(0x004A,0x0000);LCD_Delay(5); LCD_WriteReg(0x004B,0x0000);LCD_Delay(5); LCD_WriteReg(0x0044,0xEF00);LCD_Delay(5); LCD_WriteReg(0x0045,0x0000);LCD_Delay(5); LCD_WriteReg(0x0046,0x013F);LCD_Delay(5); LCD_WriteReg(0x0030,0x0707);LCD_Delay(5); LCD_WriteReg(0x0031,0x0204);LCD_Delay(5); LCD_WriteReg(0x0032,0x0204);LCD_Delay(5); LCD_WriteReg(0x0033,0x0502);LCD_Delay(5); LCD_WriteReg(0x0034,0x0507);LCD_Delay(5); LCD_WriteReg(0x0035,0x0204);LCD_Delay(5); LCD_WriteReg(0x0036,0x0204);LCD_Delay(5); LCD_WriteReg(0x0037,0x0502);LCD_Delay(5); LCD_WriteReg(0x003A,0x0302);LCD_Delay(5); LCD_WriteReg(0x003B,0x0302);LCD_Delay(5); LCD_WriteReg(0x0023,0x0000);LCD_Delay(5); LCD_WriteReg(0x0024,0x0000);LCD_Delay(5); LCD_WriteReg(0x0025,0x8000);LCD_Delay(5); LCD_WriteReg(0x004f,0);        //行首址0LCD_WriteReg(0x004e,0);        //列首址0}else if(DeviceCode==0x4531){LCD_WriteReg(0X00,0X0001);   LCD_Delay(50);   LCD_WriteReg(0X10,0X1628);   LCD_WriteReg(0X12,0X000e);//0x0006    LCD_WriteReg(0X13,0X0A39);   LCD_Delay(10);   LCD_WriteReg(0X11,0X0040);   LCD_WriteReg(0X15,0X0050);   LCD_Delay(40);   LCD_WriteReg(0X12,0X001e);//16    LCD_Delay(40);   LCD_WriteReg(0X10,0X1620);   LCD_WriteReg(0X13,0X2A39);   LCD_Delay(10);   LCD_WriteReg(0X01,0X0100);   LCD_WriteReg(0X02,0X0300);   LCD_WriteReg(0X03,0X1030);//改变方向的   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); }     LCD_Delay(5000);Set_LED;//点亮背光   LCD_Clear(WHITE);
}  //清屏函数
//Color:要清屏的填充色
void LCD_Clear(u16 Color)
{u32 index=0;      LCD_SetCursor(0x00,0x0000);//设置光标位置 LCD_WriteRAM_Prepare();     //开始写入GRAM        for(index=0;index<76800;index++){LCD_WR_DATA(Color);   //向每个GRAM写入数据  }
}  //在指定区域内填充指定颜色
//区域大小:
//  (xend-xsta)*(yend-ysta)
void LCD_Fill(u8 xsta,u16 ysta,u8 xend,u16 yend,u16 color)
{     #if USE_HORIZONTAL        //横屏u16 colortemp=POINT_COLOR;u16 ytemp=ysta;POINT_COLOR=color;for(;xsta<=xend;xsta++){for(;ysta<=yend;ysta++)LCD_DrawPoint(xsta,ysta); ysta=ytemp;}  POINT_COLOR=colortemp; #else                  //竖屏u32 n;//设置窗口                                       LCD_WriteReg(R80, xsta); //水平方向GRAM起始地址LCD_WriteReg(R81, xend); //水平方向GRAM结束地址LCD_WriteReg(R82, ysta); //垂直方向GRAM起始地址LCD_WriteReg(R83, yend); //垂直方向GRAM结束地址    LCD_SetCursor(xsta,ysta);//设置光标位置  LCD_WriteRAM_Prepare();  //开始写入GRAM             n=(u32)(yend-ysta+1)*(xend-xsta+1);    while(n--){LCD_WR_DATA(color);}//显示所填充的颜色. //恢复设置LCD_WriteReg(R80, 0x0000); //水平方向GRAM起始地址LCD_WriteReg(R81, (LCD_WIDTH-1)); //水平方向GRAM结束地址LCD_WriteReg(R82, 0x0000); //垂直方向GRAM起始地址LCD_WriteReg(R83, (LCD_HEIGHT-1)); //垂直方向GRAM结束地址           #endif}  //画线
//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 ;  //X坐标增量yerr+=delta_y ;  //Y坐标增量if(xerr>distance) { xerr-=distance; uRow+=incx; } if(yerr>distance) { yerr-=distance; uCol+=incy; } }
}    //画矩形
void LCD_DrawRectangle(u8 x1, u16 y1, u8 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(u8 x0,u16 y0,u8 r)
{int a,b;int di;a=0;b=r;    di=3-(r<<1);             //判断下个点位置的标志while(a<=b){LCD_DrawPoint(x0-b,y0-a);             //3           LCD_DrawPoint(x0+b,y0-a);             //0           LCD_DrawPoint(x0-a,y0+b);             //1       LCD_DrawPoint(x0-b,y0-a);             //7           LCD_DrawPoint(x0-a,y0-b);             //2             LCD_DrawPoint(x0+b,y0+a);             //4               LCD_DrawPoint(x0+a,y0-b);             //5LCD_DrawPoint(x0+a,y0+b);             //6 LCD_DrawPoint(x0-b,y0+a);             a++;//使用Bresenham算法画圆     if(di<0){di +=4*a+6;   }else{di+=10+4*(a-b);   b--;} LCD_DrawPoint(x0+a,y0+b);}
} //在指定位置显示一个字符
//x:0~234
//y:0~308
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode)
{       #if USE_HORIZONTAL#define MAX_CHAR_POSX 312#define MAX_CHAR_POSY 232 u8 temp;u8 pos,t;u16 x0=x;u16 colortemp=POINT_COLOR;      if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;      //设置窗口         num=num-' ';//得到偏移后的值if(!mode) //非叠加方式{for(pos=0;pos<size;pos++){if(size==12)temp=asc2_1206[num][pos];//调用1206字体else temp=asc2_1608[num][pos];       //调用1608字体for(t=0;t<size/2;t++){                 if(temp&0x01)POINT_COLOR=colortemp;else POINT_COLOR=BACK_COLOR;LCD_DrawPoint(x,y);    temp>>=1; x++;}x=x0;y++;}   }else{                                          //叠加方式for(pos=0;pos<size;pos++){if(size==12)temp=asc2_1206[num][pos];//调用1206字体else temp=asc2_1608[num][pos];      //调用1608字体for(t=0;t<size/2;t++){                 if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点     temp>>=1; }}}POINT_COLOR=colortemp;#else     #define MAX_CHAR_POSX 232#define MAX_CHAR_POSY 304 u8 temp;u8 pos,t;      if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;     //设置窗口                                      LCD_WriteReg(R80,x);           //水平方向GRAM起始地址LCD_WriteReg(R81,x+(size/2-1));//水平方向GRAM结束地址LCD_WriteReg(R82,y);           //垂直方向GRAM起始地址LCD_WriteReg(R83,y+size-1);    //垂直方向GRAM结束地址  LCD_SetCursor(x,y);            //设置光标位置  LCD_WriteRAM_Prepare();        //开始写入GRAM     num=num-' ';//得到偏移后的值if(!mode) //非叠加方式{for(pos=0;pos<size;pos++){if(size==12) temp=asc2_1206[num][pos];//调用1206字体else temp=asc2_1608[num][pos];      //调用1608字体for(t=0;t<size/2;t++){                 if(temp&0x01){LCD_WR_DATA(POINT_COLOR);}else{ LCD_WR_DATA(BACK_COLOR);}temp>>=1; }}  }else{          //叠加方式for(pos=0;pos<size;pos++){if(size==12)temp=asc2_1206[num][pos];      //调用1206字体else temp=asc2_1608[num][pos];        //调用1608字体for(t=0;t<size/2;t++){                 if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点     temp>>=1; }}}     //恢复窗体大小     LCD_WriteReg(R80, 0x0000); //水平方向GRAM起始地址LCD_WriteReg(R81, (LCD_WIDTH-1)); //水平方向GRAM结束地址LCD_WriteReg(R82, 0x0000); //垂直方向GRAM起始地址LCD_WriteReg(R83, (LCD_HEIGHT-1)); //垂直方向GRAM结束地址#endif }  //m^n函数
u32 mypow(u8 m,u8 n)
{u32 result=1;  while(n--)result*=m;    return result;
}       //显示数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//color:颜色
//num:数值(0~4294967295);
void LCD_ShowNum(u8 x,u16 y,u32 num,u8 len,u8 size)
{           u8 t,temp;u8 enshow=0;                        for(t=0;t<len;t++){temp=(num/mypow(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); }
} //显示字符串
//x,y:起点坐标
//*p:字符串起始地址
//用16字体
void LCD_ShowString(u8 x,u16 y,const u8 *p)
{         while(*p!='\0')     //字符串到达结束{       if(x>MAX_CHAR_POSX){x=0;y+=16;}    //换行if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}  //超出屏幕显示范围LCD_ShowChar(x,y,*p,16,0);x+=8;p++;}
}

LCD/ili93xx.h (相关I/O操作在此文件中以宏定义的方式实现)
#include "stm32f10x.h"   //TFTLCD部分外要调用的函数
extern u16  POINT_COLOR;//默认红色
extern u16  BACK_COLOR; //背景颜色.默认为白色//定义LCD的尺寸
#define LCD_WIDTH 240
#define LCD_HEIGHT 320//9320/9325 LCD寄存器
#define R0             0x00
#define R1             0x01
#define R2             0x02
#define R3             0x03
#define R4             0x04
#define R5             0x05
#define R6             0x06
#define R7             0x07
#define R8             0x08
#define R9             0x09
#define R10            0x0A
#define R12            0x0C
#define R13            0x0D
#define R14            0x0E
#define R15            0x0F
#define R16            0x10
#define R17            0x11
#define R18            0x12
#define R19            0x13
#define R20            0x14
#define R21            0x15
#define R22            0x16
#define R23            0x17
#define R24            0x18
#define R25            0x19
#define R26            0x1A
#define R27            0x1B
#define R28            0x1C
#define R29            0x1D
#define R30            0x1E
#define R31            0x1F
#define R32            0x20
#define R33            0x21
#define R34            0x22
#define R36            0x24
#define R37            0x25
#define R40            0x28
#define R41            0x29
#define R43            0x2B
#define R45            0x2D
#define R48            0x30
#define R49            0x31
#define R50            0x32
#define R51            0x33
#define R52            0x34
#define R53            0x35
#define R54            0x36
#define R55            0x37
#define R56            0x38
#define R57            0x39
#define R59            0x3B
#define R60            0x3C
#define R61            0x3D
#define R62            0x3E
#define R63            0x3F
#define R64            0x40
#define R65            0x41
#define R66            0x42
#define R67            0x43
#define R68            0x44
#define R69            0x45
#define R70            0x46
#define R71            0x47
#define R72            0x48
#define R73            0x49
#define R74            0x4A
#define R75            0x4B
#define R76            0x4C
#define R77            0x4D
#define R78            0x4E
#define R79            0x4F
#define R80            0x50
#define R81            0x51
#define R82            0x52
#define R83            0x53
#define R96            0x60
#define R97            0x61
#define R106           0x6A
#define R118           0x76
#define R128           0x80
#define R129           0x81
#define R130           0x82
#define R131           0x83
#define R132           0x84
#define R133           0x85
#define R134           0x86
#define R135           0x87
#define R136           0x88
#define R137           0x89
#define R139           0x8B
#define R140           0x8C
#define R141           0x8D
#define R143           0x8F
#define R144           0x90
#define R145           0x91
#define R146           0x92
#define R147           0x93
#define R148           0x94
#define R149           0x95
#define R150           0x96
#define R151           0x97
#define R152           0x98
#define R153           0x99
#define R154           0x9A
#define R157           0x9D
#define R192           0xC0
#define R193           0xC1
#define R229           0xE5/*硬件相关的宏定义*/
#define LCD_FAST_IO     1   //定义是否使用快速IO     建议使用快速IO,效率更高//-----------------LCD端口定义----------------
/********************************************************************************/#define LCD_GPIO_LED_PORT              GPIOC
#define LCD_GPIO_LED_PIN               GPIO_Pin_10#define LCD_GPIO_CS_PORT              GPIOC
#define LCD_GPIO_CS_PIN               GPIO_Pin_9#define LCD_GPIO_RS_PORT              GPIOC
#define LCD_GPIO_RS_PIN               GPIO_Pin_8#define LCD_GPIO_WR_PORT             GPIOC
#define LCD_GPIO_WR_PIN              GPIO_Pin_7#define LCD_GPIO_RD_PORT              GPIOC
#define LCD_GPIO_RD_PIN               GPIO_Pin_6//16位数据所在端口,PB0~15作为数据线
#define LCD_GPIO_DATA_PORT            GPIOB
#define LCD_GPIO_DATA_PIN             GPIO_Pin_All   #if LCD_FAST_IO == 1 //快速IO#define   Set_Cs  GPIOC->BSRR=1<<9    //片选端口         PC9
#define Set_Rs  GPIOC->BSRR=1<<8    //数据/命令          PC8
#define Set_Wr  GPIOC->BSRR=1<<7    //写数据          PC7
#define Set_Rd  GPIOC->BSRR=1<<6    //读数据          PC6#define Clr_Cs  GPIOC->BRR=1<<9     //片选端口         PC9
#define Clr_Rs  GPIOC->BRR=1<<8     //数据/命令          PC8
#define Clr_Wr  GPIOC->BRR=1<<7     //写数据          PC7
#define Clr_Rd  GPIOC->BRR=1<<6     //读数据          PC6#else#define Set_Cs   {GPIO_SetBits(LCD_GPIO_CS_PORT,LCD_GPIO_CS_PIN);}
#define Clr_Cs   {GPIO_ResetBits(LCD_GPIO_CS_PORT,LCD_GPIO_CS_PIN);}
#define Set_Rs   {GPIO_SetBits(LCD_GPIO_RS_PORT,LCD_GPIO_RS_PIN);}
#define Clr_Rs   {GPIO_ResetBits(LCD_GPIO_RS_PORT,LCD_GPIO_RS_PIN);}
#define Set_Wr   {GPIO_SetBits(LCD_GPIO_WR_PORT,LCD_GPIO_WR_PIN);}
#define Clr_Wr   {GPIO_ResetBits(LCD_GPIO_WR_PORT,LCD_GPIO_WR_PIN);}
#define Set_Rd   {GPIO_SetBits(LCD_GPIO_RD_PORT,LCD_GPIO_RD_PIN);}
#define Clr_Rd   {GPIO_ResetBits(LCD_GPIO_RD_PORT,LCD_GPIO_RD_PIN);}#endif#define Set_LED  {GPIO_SetBits(LCD_GPIO_LED_PORT,LCD_GPIO_LED_PIN);}
#define Clr_LED  {GPIO_ResetBits(LCD_GPIO_LED_PORT,LCD_GPIO_LED_PIN);} #define Write_Data(DataValue) {GPIO_Write(LCD_GPIO_DATA_PORT,DataValue);}//直接操作寄存器读取,使用库函数读取I/O有问题,原因不详
#define Read_Data() (LCD_GPIO_DATA_PORT ->IDR)                       //必须使用宏定义,写成函数会有问题
//#define Read_Data()  (GPIO_ReadInputData(LCD_GPIO_DATA_PORT))     //这句有问题//写8位数据函数
//用宏定义,提高速度.
#define  LCD_WR_DATA(data){\
Set_Rs;\
Clr_Cs;\
Write_Data(data);\
Clr_Wr;\
Set_Wr;\
Set_Cs;\
} /********************************************************************************/                                    //画笔颜色
#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_Delay(u32 nCount);
void LCD_Config(void);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);
void LCD_Clear(u16 Color);
void LCD_SetCursor(u8 Xpos, u16 Ypos);
void LCD_DrawPoint(u16 x,u16 y);//画点
u16 LCD_ReadPoint(u16 x,u16 y); //读点
void Draw_Circle(u8 x0,u16 y0,u8 r);
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);
void LCD_DrawRectangle(u8 x1, u16 y1, u8 x2, u16 y2);
void LCD_Fill(u8 xsta,u16 ysta,u8 xend,u16 yend,u16 color);
void LCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode);//显示一个字符
void LCD_ShowNum(u8 x,u16 y,u32 num,u8 len,u8 size);  //显示一个数字
void LCD_ShowString(u8 x,u16 y,const u8 *p);         //显示一个字符串,16字体void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue);
u16 LCD_ReadReg(u8 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);
u16 LCD_ReadRAM(void);         
font.h (字库文件)

//常用ASCII表
//偏移量32
//ASCII字符集
//偏移量32
//大小:12*6
const unsigned char asc2_1206[95][12]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x00,0x00},/*"!",1*/
{0x00,0x14,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x00,0x00,0x14,0x14,0x3F,0x14,0x0A,0x3F,0x0A,0x0A,0x00,0x00},/*"#",3*/
{0x00,0x04,0x1E,0x15,0x05,0x06,0x0C,0x14,0x15,0x0F,0x04,0x00},/*"$",4*/
{0x00,0x00,0x12,0x15,0x0D,0x0A,0x14,0x2C,0x2A,0x12,0x00,0x00},/*"%",5*/
{0x00,0x00,0x04,0x0A,0x0A,0x1E,0x15,0x15,0x09,0x36,0x00,0x00},/*"&",6*/
{0x00,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x20,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x20,0x00},/*"(",8*/
{0x00,0x02,0x04,0x08,0x08,0x08,0x08,0x08,0x08,0x04,0x02,0x00},/*")",9*/
{0x00,0x00,0x00,0x04,0x15,0x0E,0x0E,0x15,0x04,0x00,0x00,0x00},/*"*",10*/
{0x00,0x00,0x04,0x04,0x04,0x1F,0x04,0x04,0x04,0x00,0x00,0x00},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01},/*",",12*/
{0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00},/*".",14*/
{0x00,0x10,0x08,0x08,0x08,0x04,0x04,0x02,0x02,0x02,0x01,0x00},/*"/",15*/
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"0",16*/
{0x00,0x00,0x04,0x06,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"1",17*/
{0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x02,0x01,0x1F,0x00,0x00},/*"2",18*/
{0x00,0x00,0x0E,0x11,0x10,0x0C,0x10,0x10,0x11,0x0E,0x00,0x00},/*"3",19*/
{0x00,0x00,0x08,0x0C,0x0A,0x0A,0x09,0x1E,0x08,0x18,0x00,0x00},/*"4",20*/
{0x00,0x00,0x1F,0x01,0x01,0x0F,0x10,0x10,0x11,0x0E,0x00,0x00},/*"5",21*/
{0x00,0x00,0x0E,0x09,0x01,0x0F,0x11,0x11,0x11,0x0E,0x00,0x00},/*"6",22*/
{0x00,0x00,0x1F,0x09,0x08,0x04,0x04,0x04,0x04,0x04,0x00,0x00},/*"7",23*/
{0x00,0x00,0x0E,0x11,0x11,0x0E,0x11,0x11,0x11,0x0E,0x00,0x00},/*"8",24*/
{0x00,0x00,0x0E,0x11,0x11,0x11,0x1E,0x10,0x12,0x0E,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x04,0x00},/*";",27*/
{0x00,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x00,0x00},/*"<",28*/
{0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x1F,0x00,0x00,0x00,0x00},/*"=",29*/
{0x00,0x02,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x02,0x00,0x00},/*">",30*/
{0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x04,0x00,0x04,0x00,0x00},/*"?",31*/
{0x00,0x00,0x0E,0x11,0x19,0x15,0x15,0x1D,0x01,0x1E,0x00,0x00},/*"@",32*/
{0x00,0x00,0x04,0x04,0x0C,0x0A,0x0A,0x1E,0x12,0x33,0x00,0x00},/*"A",33*/
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x12,0x12,0x12,0x0F,0x00,0x00},/*"B",34*/
{0x00,0x00,0x1E,0x11,0x01,0x01,0x01,0x01,0x11,0x0E,0x00,0x00},/*"C",35*/
{0x00,0x00,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x00,0x00},/*"D",36*/
{0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x12,0x1F,0x00,0x00},/*"E",37*/
{0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x02,0x07,0x00,0x00},/*"F",38*/
{0x00,0x00,0x1C,0x12,0x01,0x01,0x39,0x11,0x12,0x0C,0x00,0x00},/*"G",39*/
{0x00,0x00,0x33,0x12,0x12,0x1E,0x12,0x12,0x12,0x33,0x00,0x00},/*"H",40*/
{0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"I",41*/
{0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x07,0x00},/*"J",42*/
{0x00,0x00,0x37,0x12,0x0A,0x06,0x0A,0x0A,0x12,0x37,0x00,0x00},/*"K",43*/
{0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x22,0x3F,0x00,0x00},/*"L",44*/
{0x00,0x00,0x1B,0x1B,0x1B,0x1B,0x15,0x15,0x15,0x15,0x00,0x00},/*"M",45*/
{0x00,0x00,0x3B,0x12,0x16,0x16,0x1A,0x1A,0x12,0x17,0x00,0x00},/*"N",46*/
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"O",47*/
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x02,0x02,0x02,0x07,0x00,0x00},/*"P",48*/
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x17,0x19,0x0E,0x18,0x00},/*"Q",49*/
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x0A,0x12,0x12,0x37,0x00,0x00},/*"R",50*/
{0x00,0x00,0x1E,0x11,0x01,0x06,0x08,0x10,0x11,0x0F,0x00,0x00},/*"S",51*/
{0x00,0x00,0x1F,0x15,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"T",52*/
{0x00,0x00,0x33,0x12,0x12,0x12,0x12,0x12,0x12,0x0C,0x00,0x00},/*"U",53*/
{0x00,0x00,0x33,0x12,0x12,0x0A,0x0A,0x0C,0x04,0x04,0x00,0x00},/*"V",54*/
{0x00,0x00,0x15,0x15,0x15,0x0E,0x0A,0x0A,0x0A,0x0A,0x00,0x00},/*"W",55*/
{0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x0A,0x0A,0x1B,0x00,0x00},/*"X",56*/
{0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"Y",57*/
{0x00,0x00,0x1F,0x09,0x08,0x04,0x04,0x02,0x12,0x1F,0x00,0x00},/*"Z",58*/
{0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1C,0x00},/*"[",59*/
{0x00,0x02,0x02,0x02,0x04,0x04,0x08,0x08,0x08,0x10,0x00,0x00},/*"\",60*/
{0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x00},/*"]",61*/
{0x00,0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F},/*"_",63*/
{0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1C,0x12,0x3C,0x00,0x00},/*"a",65*/
{0x00,0x00,0x03,0x02,0x02,0x0E,0x12,0x12,0x12,0x0E,0x00,0x00},/*"b",66*/
{0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x02,0x02,0x1C,0x00,0x00},/*"c",67*/
{0x00,0x00,0x18,0x10,0x10,0x1C,0x12,0x12,0x12,0x3C,0x00,0x00},/*"d",68*/
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1E,0x02,0x1C,0x00,0x00},/*"e",69*/
{0x00,0x00,0x38,0x04,0x04,0x1E,0x04,0x04,0x04,0x1E,0x00,0x00},/*"f",70*/
{0x00,0x00,0x00,0x00,0x00,0x3C,0x12,0x0C,0x02,0x1E,0x22,0x1C},/*"g",71*/
{0x00,0x00,0x03,0x02,0x02,0x0E,0x12,0x12,0x12,0x37,0x00,0x00},/*"h",72*/
{0x00,0x00,0x04,0x00,0x00,0x06,0x04,0x04,0x04,0x0E,0x00,0x00},/*"i",73*/
{0x00,0x00,0x08,0x00,0x00,0x0C,0x08,0x08,0x08,0x08,0x08,0x07},/*"j",74*/
{0x00,0x00,0x03,0x02,0x02,0x3A,0x0A,0x0E,0x12,0x37,0x00,0x00},/*"k",75*/
{0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"l",76*/
{0x00,0x00,0x00,0x00,0x00,0x0F,0x15,0x15,0x15,0x15,0x00,0x00},/*"m",77*/
{0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x37,0x00,0x00},/*"n",78*/
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0C,0x00,0x00},/*"o",79*/
{0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x0E,0x02,0x07},/*"p",80*/
{0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x12,0x12,0x1C,0x10,0x38},/*"q",81*/
{0x00,0x00,0x00,0x00,0x00,0x1B,0x06,0x02,0x02,0x07,0x00,0x00},/*"r",82*/
{0x00,0x00,0x00,0x00,0x00,0x1E,0x02,0x0C,0x10,0x1E,0x00,0x00},/*"s",83*/
{0x00,0x00,0x00,0x04,0x04,0x0E,0x04,0x04,0x04,0x18,0x00,0x00},/*"t",84*/
{0x00,0x00,0x00,0x00,0x00,0x1B,0x12,0x12,0x12,0x3C,0x00,0x00},/*"u",85*/
{0x00,0x00,0x00,0x00,0x00,0x37,0x12,0x0A,0x0C,0x04,0x00,0x00},/*"v",86*/
{0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x0E,0x0A,0x0A,0x00,0x00},/*"w",87*/
{0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x04,0x0A,0x1B,0x00,0x00},/*"x",88*/
{0x00,0x00,0x00,0x00,0x00,0x37,0x12,0x0A,0x0C,0x04,0x04,0x03},/*"y",89*/
{0x00,0x00,0x00,0x00,0x00,0x1E,0x08,0x04,0x04,0x1E,0x00,0x00},/*"z",90*/
{0x00,0x18,0x08,0x08,0x08,0x04,0x08,0x08,0x08,0x08,0x18,0x00},/*"{",91*/
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},/*"|",92*/
{0x00,0x06,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x06,0x00},/*"}",93*/
{0x02,0x25,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} /*"~",94*/
};
const unsigned char asc2_1608[95][16]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x18,0x18,0x00,0x00},/*"!",1*/
{0x00,0x48,0x6C,0x24,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x00,0x00,0x00,0x24,0x24,0x24,0x7F,0x12,0x12,0x12,0x7F,0x12,0x12,0x12,0x00,0x00},/*"#",3*/
{0x00,0x00,0x08,0x1C,0x2A,0x2A,0x0A,0x0C,0x18,0x28,0x28,0x2A,0x2A,0x1C,0x08,0x08},/*"$",4*/
{0x00,0x00,0x00,0x22,0x25,0x15,0x15,0x15,0x2A,0x58,0x54,0x54,0x54,0x22,0x00,0x00},/*"%",5*/
{0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0A,0x76,0x25,0x29,0x11,0x91,0x6E,0x00,0x00},/*"&",6*/
{0x00,0x06,0x06,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00},/*"(",8*/
{0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00},/*")",9*/
{0x00,0x00,0x00,0x00,0x08,0x08,0x6B,0x1C,0x1C,0x6B,0x08,0x08,0x00,0x00,0x00,0x00},/*"*",10*/
{0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x7F,0x08,0x08,0x08,0x08,0x00,0x00,0x00},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x04,0x03},/*",",12*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00},/*".",14*/
{0x00,0x00,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x00},/*"/",15*/
{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"0",16*/
{0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"1",17*/
{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00},/*"2",18*/
{0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00},/*"3",19*/
{0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00},/*"4",20*/
{0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00},/*"5",21*/
{0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"6",22*/
{0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00},/*"7",23*/
{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},/*"8",24*/
{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x04},/*";",27*/
{0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00},/*"<",28*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
{0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00},/*">",30*/
{0x00,0x00,0x00,0x3C,0x42,0x42,0x46,0x40,0x20,0x10,0x10,0x00,0x18,0x18,0x00,0x00},/*"?",31*/
{0x00,0x00,0x00,0x1C,0x22,0x5A,0x55,0x55,0x55,0x55,0x2D,0x42,0x22,0x1C,0x00,0x00},/*"@",32*/
{0x00,0x00,0x00,0x08,0x08,0x18,0x14,0x14,0x24,0x3C,0x22,0x42,0x42,0xE7,0x00,0x00},/*"A",33*/
{0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x1E,0x22,0x42,0x42,0x42,0x22,0x1F,0x00,0x00},/*"B",34*/
{0x00,0x00,0x00,0x7C,0x42,0x42,0x01,0x01,0x01,0x01,0x01,0x42,0x22,0x1C,0x00,0x00},/*"C",35*/
{0x00,0x00,0x00,0x1F,0x22,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1F,0x00,0x00},/*"D",36*/
{0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x42,0x42,0x3F,0x00,0x00},/*"E",37*/
{0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x02,0x02,0x07,0x00,0x00},/*"F",38*/
{0x00,0x00,0x00,0x3C,0x22,0x22,0x01,0x01,0x01,0x71,0x21,0x22,0x22,0x1C,0x00,0x00},/*"G",39*/
{0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00},/*"H",40*/
{0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"I",41*/
{0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x0F},/*"J",42*/
{0x00,0x00,0x00,0x77,0x22,0x12,0x0A,0x0E,0x0A,0x12,0x12,0x22,0x22,0x77,0x00,0x00},/*"K",43*/
{0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x7F,0x00,0x00},/*"L",44*/
{0x00,0x00,0x00,0x77,0x36,0x36,0x36,0x36,0x2A,0x2A,0x2A,0x2A,0x2A,0x6B,0x00,0x00},/*"M",45*/
{0x00,0x00,0x00,0xE3,0x46,0x46,0x4A,0x4A,0x52,0x52,0x52,0x62,0x62,0x47,0x00,0x00},/*"N",46*/
{0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x22,0x1C,0x00,0x00},/*"O",47*/
{0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x42,0x3E,0x02,0x02,0x02,0x02,0x07,0x00,0x00},/*"P",48*/
{0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x4D,0x53,0x32,0x1C,0x60,0x00},/*"Q",49*/
{0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x3E,0x12,0x12,0x22,0x22,0x42,0xC7,0x00,0x00},/*"R",50*/
{0x00,0x00,0x00,0x7C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x42,0x42,0x3E,0x00,0x00},/*"S",51*/
{0x00,0x00,0x00,0x7F,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00},/*"T",52*/
{0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00},/*"U",53*/
{0x00,0x00,0x00,0xE7,0x42,0x42,0x22,0x24,0x24,0x14,0x14,0x18,0x08,0x08,0x00,0x00},/*"V",54*/
{0x00,0x00,0x00,0x6B,0x49,0x49,0x49,0x49,0x55,0x55,0x36,0x22,0x22,0x22,0x00,0x00},/*"W",55*/
{0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00},/*"X",56*/
{0x00,0x00,0x00,0x77,0x22,0x22,0x14,0x14,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00},/*"Y",57*/
{0x00,0x00,0x00,0x7E,0x21,0x20,0x10,0x10,0x08,0x04,0x04,0x42,0x42,0x3F,0x00,0x00},/*"Z",58*/
{0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00},/*"[",59*/
{0x00,0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x40,0x40},/*"\",60*/
{0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00},/*"]",61*/
{0x00,0x38,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},/*"_",63*/
{0x00,0x06,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x78,0x44,0x42,0x42,0xFC,0x00,0x00},/*"a",65*/
{0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x26,0x1A,0x00,0x00},/*"b",66*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x02,0x02,0x02,0x44,0x38,0x00,0x00},/*"c",67*/
{0x00,0x00,0x00,0x60,0x40,0x40,0x40,0x78,0x44,0x42,0x42,0x42,0x64,0xD8,0x00,0x00},/*"d",68*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x02,0x02,0x42,0x3C,0x00,0x00},/*"e",69*/
{0x00,0x00,0x00,0xF0,0x88,0x08,0x08,0x7E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"f",70*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C},/*"g",71*/
{0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00},/*"h",72*/
{0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"i",73*/
{0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x1E},/*"j",74*/
{0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x72,0x12,0x0A,0x16,0x12,0x22,0x77,0x00,0x00},/*"k",75*/
{0x00,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"l",76*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x92,0x92,0x92,0x92,0x92,0xB7,0x00,0x00},/*"m",77*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00},/*"n",78*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00},/*"o",79*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x26,0x42,0x42,0x42,0x22,0x1E,0x02,0x07},/*"p",80*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x44,0x78,0x40,0xE0},/*"q",81*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x4C,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"r",82*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00},/*"s",83*/
{0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00},/*"t",84*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x42,0x42,0x42,0x42,0x62,0xDC,0x00,0x00},/*"u",85*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x08,0x08,0x00,0x00},/*"v",86*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEB,0x49,0x49,0x55,0x55,0x22,0x22,0x00,0x00},/*"w",87*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x24,0x18,0x18,0x18,0x24,0x6E,0x00,0x00},/*"x",88*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x18,0x08,0x08,0x07},/*"y",89*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x22,0x10,0x08,0x08,0x44,0x7E,0x00,0x00},/*"z",90*/
{0x00,0xC0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0xC0,0x00},/*"{",91*/
{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10},/*"|",92*/
{0x00,0x06,0x08,0x08,0x08,0x08,0x08,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x00},/*"}",93*/
{0x0C,0x32,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
};
配置好相应的IO为推挽输出,硬件初始化即可。不过这里需要注意的是,这里使用GPIOB作为I80总线数据口,所以和Jtag口冲突(详见:stm32 最小系统 中jtag说明)。所以在配置IO时要将 jtag口的IO复用关闭:
在GPIO_Configuration()配置中:GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP);必须加上这句,否则会导致串口无法使用 被折腾了很久  原因不详
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能注意:不要忘记在RCC_Configuration()中开启AFIO时钟,//AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
在main.c中直接调用相关函数:
int main(void)
{//stm32 初始化        RCC_Configuration();NVIC_Configuration();       USART_Configuration();SPI_Configuration();GPIO_Configuration();LCD_Init();POINT_COLOR = BLACK; //设置字体颜色LCD_ShowString(30,50,"Hello Dog .. ");    printf("\r\n test.. \r\n");while(1);
}
LCD显示效果:

stm32 驱动 TFT LCD相关推荐

  1. 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)

    简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...

  2. STM32 FSMC TFT LCD

    作者:蓝色星宇 转自:http://www.cnblogs.com/glguan/archive/2011/12/09/2282472.html STM32+SSD1963+TFT(FSMC)已调试通 ...

  3. AT32驱动TFT LCD显示示例

    1.1 案例 TFT LCD显示 1.1.1 简介 TFT LCD液晶显示屏是薄膜晶体管型液晶显示屏,TFT液晶每个像素都可以单独控制,因而每个节点都相对独立,并可以连续控制,这不仅提高了显示的反应速 ...

  4. stm32 驱动 触摸屏

    由于智能手机的发展和大屏幕的兴起,触摸屏已经得到了广泛的应用.触摸屏分为两种:电阻触屏   俗称"软屏":电容触屏俗称"硬屏". 电阻触摸屏的屏体部分是一块多层 ...

  5. STM32 FSMC接口驱动4.3寸TFT LCD屏

    STM32 FSMC接口驱动4.3寸TFT LCD屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏. 这里以STM32F103VET ...

  6. STM32 驱动4.3寸TFT LCD 触摸屏

    STM32 驱动4.3寸TFT LCD 触摸屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏.触摸屏是在显示屏上覆盖一层触摸感应的外 ...

  7. STM32驱动LCD实战

    目录 01 驱动时序 02 FSMC外设配置 03 背光驱动 04 复位驱动 05 寄存器配置 前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文 ...

  8. ESP8266-Arduino编程实例-2.8寸TFT LCD驱动(ILI9341控制器)

    2.8寸TFT LCD驱动(ILI9341控制器) 液晶显示器 (LCD) 是一种平板显示器或其他电子调制光学设备,它利用液晶与偏振器的光调制特性.液晶不直接发光,而是使用背光或反射器来产生彩色或单色 ...

  9. 嵌入式开发-STM32硬件SPI驱动TFT屏

    嵌入式开发-STM32硬件SPI驱动TFT屏 这次用到的TFT屏 CubeMX设置 代码编写 增加的内容 需要注意问题 代码下载 这次用到的TFT屏 现在的TFT屏幕已经很便宜了,65536色屏幕,2 ...

最新文章

  1. android 加载h5页面部分机型滑动卡顿回弹_网易爆款H5 的交互方法参考
  2. 2018java多线程面试题_2018JAVA面试题附答案
  3. 退出python交互模式_python如何退出交互模式
  4. 微信小游戏开发Canvas资源汇总
  5. VTK:Rendering之WalkCow
  6. 递归与分治——二分查找算法(折半查找算法)
  7. SOL注入——HTTP头部注入(六)
  8. bitwig编曲软件linux,Bitwig 中文视频教程——注册安装和基础功能入门
  9. 2.Redis数据操作
  10. 速度堪比Adam,准确率媲美SGD,还能稳定训练GAN:全新优化器成为NeurIPS爆款
  11. node历史版本下载
  12. webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
  13. 最长回文子串--动态规划
  14. group by 和count 联合使用问题
  15. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_1_函数式接口的概念函数式接口的定义...
  16. 抓linux肉鸡教程视频,超简单的菜鸟网吧抓肉鸡教程
  17. 算法设计与分析基础 (Anany Levitin 著)
  18. 五子棋java毕业设计论文_Java五子棋毕业设计论文
  19. 图形桌面与命令行模式相关切换快捷键
  20. Mongodb索引及explain

热门文章

  1. CIP数据核字号查询
  2. [xsy3553]游戏
  3. 文件系统学习 RAID原理学习 RAID0 RAID1 RAID2 RAID3 RAID4 RAID5 RAID6 RAID10
  4. IBM MB(IIB)访问数据库的消息流开发示例
  5. Exception 异常
  6. Lasso回归理论及代码实现
  7. 系统突然变慢的处理方案
  8. 系统突然访问变慢,如何排查和解决?
  9. 注册苹果开发者,登录后提示Need assistance with accessing your developer account?解决过程
  10. OTB数据集和VOT数据集融合跟踪算法接口示例