S3C2440 LCD字符显示
- /**************************************************************
- *在LCD屏幕上指定坐标点写ASCII码(8X16)
- *取模方式为阴码逐行式顺向十六进制数C51格式(使用软件为(PCtoLCD2002))
- *参数x,y为字符左上点坐标
- *c为字体颜色bk_c为字体背景色
- *st为1时不使用背景色为0时使用背景色
- *pZK为字符的数组
- **************************************************************/
- voidLcd_PutASCII(unsignedintx,unsignedinty,unsignedintc,unsignedintbk_c,unsignedintst,unsignedchar*pZK)
- {
- unsignedshortinti,j;
- unsignedcharmask,buf;
- for(i=0;i<16;i++)
- {
- mask=0x80;
- buf=pZK[i];
- for(j=0;j<8;j++)
- {
- if(buf&mask)
- {
- PutPixel(x+j,y+i,c);
- }
- else
- {
- if(!st)
- {
- PutPixel(x+j,y+i,bk_c);
- }
- }
- mask=mask>>1;
- }
- }
- }
- /**************************************************************
- *在LCD屏幕上指定坐标点写汉字(16X16)
- *取模方式为阴码逐行式顺向十六进制数C51格式(使用软件为(PCtoLCD2002))
- *参数x,y为汉字左上点坐标
- *c为字体颜色bk_c为字体背景色
- *st为1时不使用背景色为0时使用背景色
- *pZK为汉字的数组
- **************************************************************/
- voidLcd_PutHZ(unsignedintx,unsignedinty,unsignedintc,unsignedintbk_c,unsignedintst,unsignedchar*pZK)
- {
- unsignedshortinti,j;
- unsignedcharmask,buf;
- for(i=0;i<16;i++)
- {
- //左
- mask=0x80;
- buf=pZK[i*2];
- for(j=0;j<8;j++)
- {
- if(buf&mask)
- {
- PutPixel(x+j,y+i,c);
- }
- else
- {
- if(!st)
- {
- PutPixel(x+j,y+i,bk_c);
- }
- }
- mask=mask>>1;
- }
- //右
- mask=0x80;
- buf=pZK[i*2+1];
- for(j=0;j<8;j++)
- {
- if(buf&mask)
- {
- PutPixel(x+j+8,y+i,c);
- }
- else
- {
- if(!st)
- {
- PutPixel(x+j+8,y+i,bk_c);
- }
- }
- mask=mask>>1;
- }
- }
- }
如果要在程序中显示大量的中文字符,是不是要把这些字符都取模啊?回答是肯定的,但前人已经为我们完成了这一步,做成了数据库,并且进行了编码,只要按照编码规则调用该库文件,就可以检索到相要的字符。下面就来说说编码规则:每个汉字是由两个字节表示的,前一个字节表示的区号,后一个字节表示的位号,那么汉字在汉字库中的位置为:94×(区号-1)+(位号-1)。94表示的是每个区里一共有94个汉字,减1表示的是数组是从0开始,而区号和位号是从1开始的。具体到汉字在某一数据库中的位置,还需要乘以一个汉字字模所占的字节数,即[94×(区号-1)+(位号-1)]×一个汉字字模所占字节数。如一个字模大小为16×16的宋体数据库,库里每个汉字所占的字节为16×16÷8=32,则每个汉字在该宋体数据库中的位置为:[94×(区号-1)+(位号-1)]×32。ASCII码的字符调用比汉字字符要简单,只要把它乘以字模所占字节数即可找到该字符所在字库的位置,如8×16的ASCII字库,ASCII码在该字库的位置为ASCII×16。如果中文字符和ASCII码混合在一样,如何区分它们呢?其实也很简单,ASCII码的最高位是0,而中文的最高位是1,因此当读取到的一个字节的最高位是0,则该字节为ASCII码,它的下一个字节与这个字节无关;当取得到的字节的最高位是1,则表示的是中文字符,并且该字节与它的下一个字节组合在一起表示完整的一个汉字。每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。
贴出使用字库显示汉字和字符的代码
[cpp]view plaincopy
- /**************************************************************
- 在LCD屏幕上指定坐标点写ASCII码
- **************************************************************/
- voidLcd_PutASCII(unsignedintx,unsignedinty,unsignedcharch,unsignedintc,unsignedintbk_c,unsignedintst)
- {
- unsignedshortinti,j;
- unsignedchar*pZK,mask,buf;
- pZK=&__VGA[ch*16];
- for(i=0;i<16;i++)
- {
- mask=0x80;
- buf=pZK[i];
- for(j=0;j<8;j++)
- {
- if(buf&mask)
- {
- PutPixel(x+j,y+i,c);
- }
- else
- {
- if(!st)
- {
- PutPixel(x+j,y+i,bk_c);
- }
- }
- mask=mask>>1;
- }
- }
S3C2440LCD字符显 相关文章:
- s3c2440的LCD字符显示(11-19)
- s3c2440之LCD字符显示(11-11)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)