编制16×16汉字显示子函数Wr ite-Hz.其中要调用另外两个子函数Lcd-Wait和Disp-address.Lcd-Wait为读取液晶控制器是否忙函数,而Disp-address为液晶控制器显示缓冲区地址设置函数,可根据液晶控制器资料编制。根据液晶控制器T 6963的操作方法,每次对液晶控制器进行读写时,应执行Lcd-Wait函数判断液晶控制器是否忙,在将汉字字模数据写入液晶控制器显示缓冲区前,应根据汉字在液晶屏上的显示位置设定写入数据的液晶控制器显示缓冲区地址,具体Write-Hz如下:
void Write-Hz(Uchar x,U char y,Uint p)//写汉字//x,y为汉字在液晶屏的显示位置坐标,
//p为要显示的汉字在数组中的下标。
{
Uchar i,low-ad,hig h??ad;
Uint addr ess,tp;
address=(Uint)x*Wide+y;//**
//根据要显示汉字在液晶屏幕的横坐标和纵坐标
//设定液晶控制器的显示缓冲区的偏移地址
tp=address;
for(i=0;i<16;i++)//写左半部
{
low-ad=(Uchar)(tp&0x f f);
hig h-ad=(Uchar)(tp 8);
Disp-address(low-ad,high-ad);
//设定写入地址
Lcd-Wait();
Lcd-Data=*(VBYT E(Hz-Dot+p+i));
//从EEPROM中提取汉字字模
Lcd-Wait();
Lcd-Code=0xC4;//写数据命令
tp=tp+Wide;
}
address++;
tp=address;
fo r(i=0;i<16;i++)//写右半部
{
low-ad=(U char)(tp&0xf f);
hig h-ad=(Uchar)(tp 8);
Disp-address(low??ad,high??ad);
Lcd-Wait();
Lcd-Data=*(VBYTE(Hz-Dot+p+16+i));
Lcd-Wait();
Lcd-Code=0xC4;
tp=tp+Wide;
}
}
函数Wr ite??Hz的参数x和y对应液晶屏幕的显示位置,以屏幕左上角为原点,x为纵坐标,y为横坐标,其在液晶控制器显示缓冲区中的地址通过行**计算出,该行中Wide为事先定义的液晶屏每行字节数,对于DG12864液晶模块而言,Wide为16。
函数Write-Hz根据16×16点阵汉字在液晶控制器显示缓冲区的存放形式,依次改变显示地址,先将左半部1~16个字节写入显示缓冲区,再写入右半部17~32个字节。设"合肥"两字存放在2864中最前列,则"合"字模首字节在2864中的偏移地址为0,共32个字节,紧跟在后面的肥!字模的首地址为0x20,若要液晶模块显示合肥!两字,只要在程序中带显示地址参数调用该函数即可。如:
Write-Hz(0,4,0);//合
Write-Hz(0,10,0x20);//肥
4结语
本文介绍了图形液晶的汉字显示方法,并以8051单片机为基础,结合液晶模块与单片机的典型接口电路,叙述了使用EEPROM或EPROM存放汉字字模的方法,并给出C51程序例子,具有很强的使用指导性。
文章原创来于液晶屏:http://www.hzjingxian.com,转载请注明出处