#define LCD_BUS PORTC #define _WR PORTA.0 //复位信号 #define _RD PORTA.1 //芯片选择 #define _CS PORTA.2 //寄存器选择信号 #define _A0 PORTA.3 //读信号 #define _RES PORTA.4 //写信号 //写信号 union kdx{ char si[2]; int k; }; //------------------------------------------------------------------------------ //延迟子程序 //------------------------------------------------------------------------------ #pragma used+ void Delay(unsigned int t) { unsigned int i,j; for(i=0;i0) { DataWrite(*pstr); pstr++; } } #pragma used- #pragma used+ void PrintStrRAM(char *pstr) { CmdWrite(0x42); while(*pstr>0) { DataWrite(*pstr); pstr++; } } #pragma used- //------------------------------------------------------------------------------ //整屏幕写入数据 //------------------------------------------------------------------------------ #pragma used+ void FullScreenFill(unsigned char low,unsigned char high,unsigned char fill_data) { unsigned char i,j; CmdWrite(0x46); //光标显示位置设置 DataWrite(low); DataWrite(high); CmdWrite(0x42); for(i=0;i<128;i++) for(j=0;j<32;j++) DataWrite(fill_data); } #pragma used- //------------------------------------------------------------------------------ //模块初始化 //------------------------------------------------------------------------------ #pragma used+ void LCD_Initial() { _RES=0; Delay(100); _RES=1; Delay(100); CmdWrite(0x40); //系统设置 DataWrite(0x32); //P1参数:单屏幕,CGROM+CGRAM1+CGRAM2 DataWrite(0x85); //P2参数:6点列 DataWrite(0x07); //P3参数:8点行 DataWrite(0x19); //P4参数:显示窗口宽度为 26 DataWrite(0x20); //P5参数:TC/R>=C/R+4 DataWrite(0xA0); //P6参数:160扫描行 DataWrite(0x1A); //P7参数:APL DataWrite(0x00); //P8参数:APH CmdWrite(0x44); //显示区域设置 DataWrite(0x00); //显示一区首地址为 0000H DataWrite(0x00); DataWrite(0xA0); //显示一区的扫描行数 160行 DataWrite(0x00); //显示二区首地址为 0C80H DataWrite(0x10); DataWrite(0xA0); //显示二区的扫描行数 160行 DataWrite(0x00); //显示三区首地址为 1900H DataWrite(0x20); CmdWrite(0x58); //显示状态设置,显示总开关关闭 DataWrite(0x54); //打开各区显示和光标 CmdWrite(0x5b); //合成方式设置 DataWrite(0x00); //两重合成显示,一、三区为文本,三个区"或"关系 CmdWrite(0x5c); //CGRAM的起始地址为7800H DataWrite(0x00); DataWrite(0x80); CmdWrite(0x5d); //光标形状设置 DataWrite(0x07); DataWrite(0x06); CmdWrite(0x4c); //光标移动方向设为向右 FullScreenFill(0x00,0x00,0x00); //清显示一区 FullScreenFill(0x00,0x10,0x00); //清显示二区 FullScreenFill(0x00,0x20,0x00); //清显示三区 CmdWrite(0x59); //打开显示总开关 DataWrite(0x04); //04无光标,05无闪烁,07闪烁 } #pragma used- #pragma used+ void SetICON(char y,char x) { union kdx PX; PX.k=(int)y*26+x; CmdWrite(0x46); //定义光标在显示一区位置 DataWrite(PX.si[0]); DataWrite(PX.si[1]); } #pragma used- #pragma used+ void displayROM(char y,char x,char flash *str) { SetICON(y,x); PrintStrROM(str); } #pragma used- #pragma used+ void displayRAM(char y,char x,char *str) { SetICON(y,x); PrintStrRAM(str); } #pragma used- #pragma used+ void displayB(char y,char x,char cx) { SetICON(y,x); CmdWrite(0x42); DataWrite(cx); } #pragma used- #pragma used+ void displayB0(char cx) { CmdWrite(0x42); DataWrite(cx); } #pragma used-