视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
点阵汉字显示原理
2025-09-29 16:28:54 责编:小OO
文档
点阵汉字显示原理

点阵汉字显示原理

汉字内码 

  在电脑中,所有的数据都是以0和1保存的,按不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 

汉字字模

  得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模中是这样记载的: 

而中文的“你”在字模中却是这样记载的:

在硬件系统内,英文的字模信息一般固化在ROM里,中文的字模信息一般记录在汉字库文件HZK16里。

采用汉字字模点阵数据批量生成工具(下载)汉字字模工具 产生的随意字模 如何在点阵LED或LCD中显示汉字?

假设你采用16x16点阵汉字,水平扫描。

显示汉字为“模”,用产生如下字模

unsigned char mo[]={

0x00,0x00, 0x10,0x90, 0x10,0x94, 0x13,0xFE, 

0x7C,0x90, 0x11,0xFC, 0x19,0x04, 0x35,0xFC, 

0x35,0x04, 0x51,0xFC, 0x50,0x40, 0x17,0xFE, 

0x10,0x90, 0x11,0x08, 0x16,0x06, 0x00,0x00

};

代码如下:

unsigned char cmp_w[8]={128,,32,16,8,4,2,1};

void FontDisplay(int x, int y, unsigned char * FontModule)

for(int row=0;row<16;row++)

for(int c=0;c<8;c++)

if((FontModule[row*2]&cmp_w[c])!=0)

putpixel(c+x,row+y,15); 

for(c=0;c<8;c++)

if((FontModule[row*2+1]&cmp_w[c])!=0)

putpixel(c+8+x,row+y,15); 

}

main(){

FontDisplay(5,10,mo);

}

24x24点阵代码示例(水平扫描):

unsigned char mo[]={

0x00,0x00,0x00, 0x00,0x00,0x00, 0x07,0x0C,0xC0, 0x06,0x0C,0xC0,

0x06,0x0C,0xDC, 0x06,0x7F,0xF0, 0x06,0xCC,0xC0, 0x1F,0xF0,0x70, 

0x06,0x3F,0xF0, 0x07,0x30,0x70, 0x0F,0xBF,0xF0, 0x0E,0xF0,0x70, 

0x1E,0xF0,0x70, 0x1E,0x3F,0xF0, 0x36,0x06,0x18, 0x06,0xFF,0xFC, 

0x06,0x07,0x00, 0x06,0x0F,0x80, 0x06,0x0C,0xE0, 0x06,0x38,0x7C, 

0x06,0xE0,0x18, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00

};

unsigned char cmp_w[8]={128,,32,16,8,4,2,1};

void FontDisplay(int x, int y, unsigned char * FontModule)

for(int row=0;row<24;row++)

{

for(int c=0;c<8;c++)

if((FontModule[row*3]&cmp_w[c])!=0)

putpixel(c+x,row+y,15); 

for(c=0;c<8;c++)

if((FontModule[row*3+1]&cmp_w[c])!=0)

putpixel(c+8+x,row+y,15); 

for(c=0;c<8;c++)

if((FontModule[row*3+2]&cmp_w[c])!=0)

putpixel(c+16+x,row+y,15); 

}

}

main(){

FontDisplay(5,10,mo);

}

putpixel函数:

putpixel(int x,int y,int color)

x,y为坐标,color为颜色值.该函数在(x,y)点设定象素的颜色.由于硬件的不同,也许提供的函数不同,用户可把此函数作为参考,必要时用硬件提供的函数取而代之。

[此贴子已经被作者于2006-7-31 21:36:54编辑过]

图片附件: [[分享]点阵汉字显示原理] CMBnHndz.gif (2006-7-19 05:29, 5.51 K)

图片附件: [[分享]点阵汉字显示原理] 8Xlp7dFU.gif (2006-7-19 05:30, 8.45 K)下载本文

显示全文
专题