GPIO口配置:
#define LCD_DI 0x00000100 ;指令选择线P0.8
#define LCD_RW 0x00000200 //读写选择线P0.9
#define LCD_E 0x00000400 //使能线P0.10
#define LCD_CS1 0x00000800 //左屏选择线P0.11
#define LCD_CS1 0x00000800 //左屏选择线P0.11
#define IO_USE 0x00001FFF //13个GPIO口传输方向
传输字模数值到液晶显示器数据上的子程序如下:
void SendData(unsigned char date){
IOSET=data;
IOCLR="data%26;amp;0x000000FF;
}
备注:以上子程序为并行传输,也可以用串行移位进行传输,具体代码如下:
unsigned char i;
for(i=0;i<8;i++){ //依次发送8位数据
if((data%26;amp;0x80)!=0) //最高位为1,对应口线置1
IOSET=IO_TURN;
Else
IOCLR=IO_TURN; //否则置0
data<<=1; //移到下一数据线
}
IO_TURN=0x00000080; //8位数据传输完毕后,仍然将P0.7设为起始线
}
下面以左半屏来说明如何在屏幕上任意显示16%26;#215;16点阵汉字。
传送指令子程序如下:
void wcodel(unsigned char code){ //送指令
IOSET=LCD_CS1; //开左屏
IOCLR=LCD_CS2; //关右屏
IOCLR=LCD_RW; //写选择
IOCLR=LCD_DI; //指令选择
SendData(code); //依次将指令代码传到数据线上
IOSET=LCD_E; //模拟使能E下降沿
IOCLR=LCD_E;
}
同理,只要把IOCLR=LCD_DI改为IOSET=LCD_DI便成传送数据了。为便于区分,可将函数名改为wdata1(data)。
显示左屏汉字子程序如下:
void hzleft(unsigned char page,unsigned charrow,unsigned char number){ //形参分别为页、列、汉字序号
unsigned char i,j;
wcode1(0xc0); //设置12864从第1行显示
wcode1(0x3f); //开显示器
for(j=page;j[!--empirenews.page--]