汉字点阵字库原理详解+例程

汉字点阵字库原理详解+例程
汉字点阵字库原理详解+例程

汉字点阵字库原理

一、汉字编码

1. 区位码

在国标GD2312—80 中规定,所有的国标汉字及符号分配在一个94 行、94 列的方

阵中,方阵的每一行称为一个“区”,编号为01 区到94 区,每一列称为一个“位”,编号为

01 位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。用区位码就

可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。汉字“母”字的区位码是3624,表明它在方阵的36 区24 位,问号“?”的区位码为

0331,则它在03区3l位。

一级汉字16-55区

二级汉字56-87区

三级汉字1-9区

空闲未用10-15区

2. 机内码

汉字机内码,又称“汉字ASCII码”,简称“内码”,汉字的机内码是指在计算机中表示一个汉字的编码。机内码与区位码稍有区别。如上所述,汉字区位码的区码和位码的取值均在1~94 之间,如直接用区位码作为机内码,就会与基本ASCII码混淆。为了避免机内码与基本ASCII码的冲突,需要避开基本ASCII码中的控制码(00H~1FH),还需与基本ASCII码中的字符相区别。为了实现这两点,可以先在区码和位码分别加上20H,在此基础上再加80H(此处“H”表示前两位数字为十六进制数)。经过这些处理,用机内码表示一个汉字需要占两个字节,分别称为高位字节和低位字节,这两位字节的机内码按如下规则表示:高位字节= 区码+ 20H + 80H(或区码+ A0H)

低位字节= 位码+ 20H + 80H(或位码+ AOH)

由于汉字的区码与位码的取值范围的十六进制数均为01H~5EH(即十进制的01~9

4),所以汉字的高位字节与低位字节的取值范围则为A1H~FEH(即十进制的161~254)。

例如,汉字“啊”的区位码为1601,区码和位码分别用十六进制表示即为1001H,它

的机内码的高位字节为B0H,低位字节为A1H,机内码就是B0A1H。

二、点阵字库结构

1. 点阵字库存储

在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉

字都是由一个矩形的点阵组成,0代表没有,1代表有点,将0和1分别用不同

颜色画出,就形成了一个汉字,常用的点阵矩阵有12*12, 14*14, 16*16三

种字库。

字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库

都是横向矩阵的存储方式(用得最多的应该是早期UCDOS字库),纵向矩阵一

般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库矩阵做成纵向,省得在显示时还要做矩阵转换。我们接下去所描述的都是指横向矩阵字库。

2. 16*16点阵字库

对于16*16的矩阵来说,它所需要的位数共是16*16=256个位,每个字

节为8位,因此,每个汉字都需要用256/8=32个字节来表示。

即每两个字节代表一行的16个点,共需要16行,显示汉字时,只需一次

性读取32个字节,并将每两个字节为一行打印出来,即可形成一个汉字。

点阵结构如下图所示:

3. 14*14与12*12点阵字库

对于14*14和12*12的字库,理论上计算,它们所需要的点阵分别为(14

*14/8)=25, (12*12/8)=18个字节,但是,如果按这种方式来存储,那么取

点阵和显示时,由于它们每一行都不是8的整位数,因此,就会涉到点阵的计算处理问题,会增加程序的复杂度,降低程序的效率。

为了解决这个问题,有些点阵字库会将14*14和12*12的字库按16*14

和16*12来存储,即,每行还是按两个字节来存储,但是14*14的字库,每

两个字节的最后两位是没有使用,12*12的字节,每两字节的最后4位是没有

使用,这个根据不同的字库会有不同的处理方式,所以在使用字库时要注意这个问题,特别是14*14的字库。

三、汉字点阵获取

1. 利用区位码获取汉字

汉字点阵字库是根据区位码的顺序进行存储的,因此,我们可以根据区位来

获取一个字库的点阵,它的计算公式如下:

点阵起始位置= ((区码- 1)*94 + (位码–1)) * 汉字点阵字节数

获取点阵起始位置后,我们就可以从这个位置开始,读取出一个汉字的点阵。

2. 利用汉字机内码获取汉字

前面我们己经讲过,汉字的区位码和机内码的关系如下:

机内码高位字节= 区码+ 20H + 80H(或区码+ A0H)

机内码低位字节= 位码+ 20H + 80H(或位码+ AOH)

反过来说,我们也可以根据机内码来获得区位码:

区码= 机内码高位字节- A0H

位码= 机内码低位字节- AOH

将这个公式与获取汉字点阵的公式进行合并计就可以得到汉字的点阵位置。

发现这个不错的程序,可以读取显示汉字点阵字库,如果想做个电子书之类的东东,很有参考价值,程序

虽然是用TC20写的,但是DOS时代的C和单片机的很相似的,主要的公式部分看明白就行了

/******************************************************

文件名:All.c

描述:12,14,16点阵汉字显示文件

语言:TC2.0

作者:刘利国

修改:

日期:2002-11-5

说明:需要12,14,16点阵汉字字库的支持

******************************************************/

#include

#include

#include

#include

int hzk_p,asc_p;

void open_hzk(char filename[]);

void open_asc(char filename[]);

void get_hz(char incode[],char bytes[],unsigned long uiSize );

void get_asc(char incode[],char bytes[],unsigned long uiSize );

void disasc(int x,int y,char code[],int color,

unsigned int uiDianZhenSize);

void dishz(int x0,int y0,char code[],int color,

unsigned int uiDianZhenSize,

unsigned int uiDuoYuBit);

/*字模的大小

16*16点阵ZI_MO_SIZE=32

14*14点阵ZI_MO_SIZE=28

12*12点阵ZI_MO_SIZE=24

//该变量一定为long,否则出错

*/

unsigned long ZI_MO_SIZE[3]={32,28,24};

/*汉字点阵

16*16点阵ZI_MO_SIZE=16

14*14点阵ZI_MO_SIZE=14

12*12点阵ZI_MO_SIZE=12

*/

unsigned int DIAN_ZHEN_SIZE[3]={16,14,12};

/*多余位数(对于12*12和14*14点阵字库,该位有意义)

16*16点阵ZI_MO_SIZE=0

14*14点阵ZI_MO_SIZE=2

12*12点阵ZI_MO_SIZE=4 */

unsigned int DUO_YU_BIT[3]={0,2,4};

#define ZOOMX 1 /*X方向的放大倍数,1为原始尺寸*/

#define ZOOMY 1 /*Y方向的放大倍数,1为原始尺寸*/

main()

{

int x=10,i;

int y=10;

char *s;

char *filename[3]={"e:\\hzk\\hzk16","e:\\hzk\\hzk14","e:\\hzk\\hzk12"};

char *fileasc[3]={"e:\\hzk\\asc16","e:\\hzk\\asc14","e:\\hzk\\asc12"};

char code[32];/*因为不能动态定位,所以取最大值32*/

char tmpcode[3]={0};

unsigned char mask=0x80;

int driver=DETECT,errorcode;

int mode;

int iOffset;

initgraph(&driver,&mode,"");

errorcode=graphresult();

if(errorcode!=0)

{

printf("error ");

getch();

exit(1);

}

for(i=0;i<3;i++)

{

open_hzk(filename[i]);

open_asc(fileasc[i]);

s="北京惠234悦12通234电s子技术有限234公司";

while(*s!=NULL)

{

while(x<600 && (*s!=NULL))

{

tmpcode[0]=*s;

tmpcode[1]=*(s+1);

if(tmpcode[0] & mask)

{

get_hz(s,code,ZI_MO_SIZE[i]);

dishz(x,y,code,GREEN,DIAN_ZHEN_SIZE[i],DUO_YU_BIT[i]);

x+=20*ZOOMX;

s+=2; }

else

{

disasc(x,y,s,LIGHTGREEN,DIAN_ZHEN_SIZE[i]);

x+=10*ZOOMX;

s+=1;

}

}

x=10;

y+=20*ZOOMY;

}

y+=20;/*换行*/

close(hzk_p);

close(asc_p);

}

getch();

closegraph();

}

/******************************************************

函数名称:open_hzk

函数功能:打开字库文件

传入参数:无

返回值:无

建立时间:

修改时间:

建立人:

修改人:

其它说明:如果失败,则直接退出程序

******************************************************/

void open_hzk(char filename[])

{

hzk_p=open(filename,O_BINARY|O_RDONL Y);

if(hzk_p==-1)

{

printf("The file HZK not exits!

");

getch();

closegraph();

exit(1);

}

}

/****************************************************** 函数名称:open_asc

函数功能:打开字库文件传入参数:无

返回值:无

建立时间:

修改时间:

建立人:

修改人:

其它说明:如果失败,则直接退出程序

******************************************************/ void open_asc(char filename[])

{

asc_p=open(filename,O_BINARY|O_RDONL Y);

if(asc_p==-1)

{

printf("The file asc not exits!

");

getch();

closegraph();

exit(1);

}

}

/****************************************************** 函数名称:

函数功能:

传入参数:

返回值:

建立时间:

修改时间:

建立人:

修改人:

其它说明:

******************************************************/

void get_hz(char incode[],char bytes[],unsigned long uiSize )

{

unsigned char qh,wh;

unsigned long offset;

qh=incode[0]-0xa0;

wh=incode[1]-0xa0;

offset=(94*(qh-1)+(wh-1))*uiSize;

lseek(hzk_p,offset,SEEK_SET);

read(hzk_p,bytes,uiSize);

}

/******************************************************

函数名称:

函数功能:传入参数:

返回值:

建立时间:

修改时间:

建立人:

修改人:

其它说明:

******************************************************/

void get_asc(char incode[],char bytes[],unsigned long uiSize )

{

unsigned char qh,wh;

unsigned long offset;

offset=incode[0]*uiSize;

lseek(asc_p,offset,SEEK_SET);

read(asc_p,bytes,uiSize);

}

/******************************************************

函数名称:

函数功能:

传入参数:

返回值:

建立时间:

修改时间:

建立人:

修改人:

其它说明:对于24*24的点阵字库,存放格式如下:

纵向存放3个字节(24位),横向存放24个字节,每个字模占72个字节

字符排列顺序如下:

1 4 7 10 ......

2 5 8 11 ......

3 6 9 12 ......

对于16*16的点阵字库,存放格式如下:横向存放2个字节(16位),其中第二个字节没有多余的数据

纵向存放16个字节,每个字模占32个字节

字符排列顺序如下:

1 2

3 4

5 6

......

对于14*14的点阵字库,存放格式如下:横向存放2个字节(16位),其中第二个字节的后2位是多余的数据

纵向存放14个字节,每个字模占28个字节字符排列顺序如下:

1 2

3 4

5 6

......

对于12*12的点阵字库,存放格式如下:横向存放2个字节(16位),其中第二个字节的后4位是多余的数据

纵向存放12个字节,每个字模占24个字节

字符排列顺序如下:

1 2

3 4

5 6

......

******************************************************/

void dishz(int x0,int y0,char mat[],int color,

unsigned int uiDianZhenSize,

unsigned int uiDuoYuBit

)

{

unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

register int x,y,row,col;

register int byte;

int zoomX,zoomY;/*x,y方向*/

x=x0;y=y0;

byte=0;

for(col=0;col

{

for(zoomY=0;zoomY

{

for(row=0;row

{

for(zoomX=0;zoomX

{

if((mask[byte%8]& mat[byte/8])!=NULL)

{

putpixel(x,y,color);

}

x++; /*x位置加一*/

}

byte++;

}

byte+=uiDuoYuBit; /*去掉多余位,对于16*16点阵来说,该位为0*/

x=x0; y++;/*y坐标加1*/

byte-=16; /*重新修正byte,重复绘制y像点*/

}

byte+=16; /*每次写完1行(2个字节,16位),修正byte*/

}

}

void disasc(int x0,int y0,char code[],int color,

unsigned int uiDianZhenSize

)

{

unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

register int x,y,row,col;

register int byte;

int zoomX,zoomY;/*x,y方向*/

char mat[16]={0};/*因为不能动态定位,所以取最大值16*/

get_asc(code,mat,uiDianZhenSize);

x=x0;y=y0;

byte=0;

for(col=0;col

{

for(zoomY=0;zoomY

{

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

{

for(zoomX=0;zoomX

{

if((mask[byte%8]& mat[byte/8])!=NULL)

{

putpixel(x,y,color);

}

x++; /*x位置加一*/

}

byte++;

}

x=x0;

y++;/*y坐标加1*/

byte-=8; /*重新修正byte,重复绘制y像点*/

}

byte+=8; /*每次写完1行(2个字节,16位),修正byte*/

}

}

运用在单片机的例程:

INT8U *HZK = (INT8U *)0x801c0000; /* 汉字字库的存储地址*/

INT8U *ASCII = (INT8U *)0x801fba00; /* ASCII码字库的存储地址*/

INT8U const cmp_w[8]={128,64,32,16,8,4,2,1};

/*

***************************************************************** ****************************************

* Function : DisplayHZ()

*

* Description: 该函数用于在FDGK/GUI上显示一个汉字。汉字为:16*16点阵

*

* Arguments : x 预显示的位置的横坐标

* y 预显示的位置的纵坐标

* FontModule 预显示的汉字模指针

* color 该点的颜色值:16位,闪烁位(1位)+ RGB555(15位)

*

* Returns : none

***************************************************************** ****************************************

*/

static void DisplayHZ(INT16U x, INT16U y, INT8U *FontModule, INT16U color) {

INT16U row,c;

for( row="0";row<16;row++) /* 十六行点阵*/

{

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

if((FontModule[row*2]&cmp_w[c])!=0) /* 前八位显示*/

LCD_DrawPixel(c+x,row+y,color);

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

if((FontModule[row*2+1]&cmp_w[c])!=0) /* 后八位显示*/

LCD_DrawPixel(c+8+x,row+y,color);

}

}

/*

***************************************************************** ****************************************

* Function : GUI_WriteHZ()

*

* Description: 该函数用于在FDGK/GUI上显示一个或多个汉字。

*

* Arguments : x 预显示的位置的横坐标

* y 预显示的位置的纵坐标

* HZ 预显示的汉字串指针

* color 该点的颜色值:16位,闪烁位(1位)+ RGB555(15位)

*

* Returns : none

* Note : 汉字串里面不能带有ASC字符,因为它们使用的字库不一样,会导致无法正常显示。

***************************************************************** ****************************************

*/

void GUI_WriteHZ(INT16U x,INT16U y,INT8U *HZ, INT16U color)

{

INT32U i,j,k;

INT8U *str;

k = 0;

while(1)

{

if(*HZ=='\0') break; /* 显示所有,直到结束*/

/* 取得字在字库里面的索引地址*/

i = *HZ++ - 0xa0;

j = *HZ++ - 0xa0;

str = HZK+((i-6-1)*94+(j-1))*32; /* -6 操作是因为本终端对字库做了处理,汉字是由16区开始,而不是从11区开始*/

DisplayHZ(x+k*16,y,str,color); /* 在相应的地方写上汉字*/

k++;

}

}

这样就可以显示一大串的汉字了。但是还有一个问题,就是如果要显示的文字里面夹带英文字母,就无法显示。于是,对函数进行改进。

void GUI_PutString(INT16U x,INT16U y,INT8U *font, INT16U color)

{

INT8U i,j;

INT8U *str;

INT16U x0,y0;

x0 = x;

y0 = y;

while(1)

{

if(*font == '\0') break;

i = *font;

if( (i & 0x80) == 0) /* 判断是否是扩展ASCII码*/

{

i = *font++;

str = ASCII + (i-0x20)*16;

DisplayASCII(x0,y0,str,color); /* 在相应的地方写上ASC码*/

x0 += 8;

}

else {

i = *font++ - 0xa0;

j = *font++ - 0xa0;

str = HZK+((i-6-1)*94+(j-1))*32; /* -6 操作是因为本终端对字库做了处理,汉字是由16区开始,而不是从11区开始*/

DisplayHZ(x0,y0,str,color); /* 在相应的地方写上汉字*/

x0 += 16;

}

}

}

这样,无论是汉字,还是英文单词,都可以很好的显示了。

大漠插件字库原理介绍

首先说明下大漠综合工具制作字库的过程和原理 1.截取你所需要的图片 2.点击你所需要字的颜色 3.点击提取点阵 4.输入字符按回车生成字库 具体的原理我不好说,但是就我的理解是:对图片中不符合指定颜色的部分去除掉,然后二值化获取点阵,点阵也就是这些颜色的分布规律,二值化就是黑白两色,RGB格式中黑色"000000"白色"ffffff" 由于我的脚本在别人电脑上运行的时候经常失效,今天改成16位色后我机器上运行也失效了,而我这个脚本主要采用的就是大漠插件的找字功能,我以为是机器间的色偏造成的,一直想法子算色偏,但是我失败了。 后来我想起论坛上有个帖子专门讲过同色系的RGB格式中R值是不变的(不好意思忘了作者了,在这里致谢) 于是我就在大漠综合工具的色偏处输入了00ffff结果是在16位色环境下,大漠综合工具中二值化区域内的字显示的跟我在32位色环境下做的一模一样,接着我提取点阵,制作字库,进行调试,命令格式如下: dm_ret =dm.FindStr(0,0,978,585, "码", "ffd463-00ffff", 1.0, x1, y1) If x1 >= 0 Then MessageBox x1 & y1 End If 准确的弹出了x,y的坐标值 接着我换32位色做同样的调试,显示结果与16位色下相同,我测了坐标正好是我要找的字的左上角 经多次测试发现这个方法中字色的R值必须为FF或00(至于F1,01等未测试,有兴趣的朋友可以试试) 庆幸啊以后找字可以不考虑偏色了呵呵再说了考虑我也不会算 具体原理我也不是很懂,但是我估计应该是:我比较了点阵中R值相同的所有点,取得符合二值化点阵区域内所有的点造成的 再次提醒此方法只适合R值为00,FF的其他位置相同的未测试 当然这么做效率是低了点,但是在我看来脚本应该是:稳定性>通用性>执行效率,毕竟脚本也是你编写的一种软件吗 鲜花,银币在哪拿来啊呵呵 简单说下后台操作的方法,先判断该窗口是否支持后台,用下面的语句: Hwnd=Plugin.Window.Foreground() Hwmd=Plugin.Window.GetkeyFocusWnd() If Hwmd<>0 then Messagebox "可以" Else

汉字点阵显示屏设计报告

广西交通职业技术学院信息工程系 作品设计报告书 课程名称电子电路设计与制作_____________ 题目16*16 汉字点阵显示屏 _________________ 班级___________ 电信2011-1班_____________ 学号007 032 ____________________ 姓名_________________ 范杰________________

任课老师_____________ 韦家正 _______________ 二O 一三年一月 目录 摘要 一、系统方案选择和论证 (2) 1.1设计要求 (2) 2.1系统基本方案 (2) 2.1.1.主控电路选择 (2) 2.1.2.点阵显示屏部分 (2) 2.1.3.显示屏控制部分 (3) 二、电路模块的设计与分析 (3) 2.1.系统程序的设计 (3) 2.2.单片机系统及外围电路 (4) 23 LED点阵显示 (6) 24.汉字扫描的原理 (7) 25.方案的实现 (7) 三、系统软件设计 (8) 四、系统测试与分析 (10) 4.1点阵显示屏的仿真与程序调试 (10) 4.2整机测试 (10) 4.3系统主程序............................... 错误!未定义书签。 4.4系统测试结果分析 (21) 五、设计制作总结 (21) 5.1 总结 (21) 5.2 致谢词 (22) 六、参考文献 (22)

附录一:系统主要元件清单 (14)

摘要 摘要 LED点阵显示屏作为一种新兴的显示器件,是由多个独立的高亮度的LED发光二极管封装而成。LED点阵显示屏可以显示数字或符号,通常用来显示时间、速度、系统状态等灵活的动态显示。文章给出了一种基于MCS-51/52单片机的 16X16点阵LED显示屏的设计方案,包括系统具体的硬件设计方案,软件流程图和汇编语言程序等方面内容。在负载范围内,只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉、亮 度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定的图文显示方案。 Abstract LED dot matrix display, as a new display device, by a nu mber of in depe ndent high- bright ness LED light-emitt ing diode packages. LED dot matrix display can display nu mbers or symbols, usually used to display time, speed, system status, and a flexible dyn amic display. Pap er, a microcomputer-based MCS-51/52 16 16 dot matrix LED display desig n, in cludi ng the system specific hardware desig n, software flowcharts and assembly Ian guage programs and other aspects. Withi n the load range, by simply cascad ing Jiu expa nsion can right display Jin Xin g, is a low cost, high brightness, low voltage Gong Hao Xiao, miniaturization, Yi Yu IC match, Qu Dong simple, Shou Ming Ion g, impact resista nee, stable performa nee, graphics and display opti ons.

基于51单片机的汉字点阵显示设计

湖南科技大学测控技术与仪器专业
单 片 机 课 程 设 计
题 姓 学 名 号

指导教师 成 绩 ____________________
湖南科技大学机电工程学院 二〇一五年十二月制

湖南科技大学课程设计
摘要
LED 显示屏在我们的周围随处可见,它的应用已经普及到社会中的方方面面。作为 一种新型的显示器件,在许多场合都可以见到它的身影,不仅是它的应用使呈现出来的 东西更加美观,更重要的是它的应用方便,成本很低,除了能给人视觉上的冲击外,更 能给人一种美的享受。LED 显示屏是由多个发光二极管按矩阵形式排列封装而成,通常 用来显示时间、图文等各种信息。本设计是基于 ATS52 单片机的 16*16 点阵式显示屏, 该 LED 显示屏能实现 16*16 个汉字,简单的显示图像, 然后一直循环着显示下去。该设 计包含了硬件、软件、调试等方案,只需简单的级联就能实现显示屏的拓展,但要注意 不要超过负载能力。本次设计的作品体积小、功能多、方便实用、花费小,电路具有结 构简单、操作方便、精度高、应用广泛的特点。 关键词: LED,ATS51 单片机,显示屏
-2-

湖南科技大学课程设计
目录
摘要…………………………………………………………………………i 第一章 系统功能要求 ……………………………………………………1 1.1 系统设计要求 ……………………………………………………1 第二章 方案论证 …………………………………………………………1 2.1 方案论证 …………………………………………………………1 第三章 系统硬件电路设计 ………………………………………………1 3.1 AT89S51 芯片的介绍 ………………………………………………1 3.1.1 系统单片机选型…………………………………………………1 3.1.2 AT89S51 引脚功能介绍 …………………………………………2 3.2 LED 点阵介绍………………………………………………………2 3.2.1LED 点阵……………………………………………………………2 3.3 系统各硬件电路介绍 ………………………………………………3
3.3.1 系统电源电路设计介绍……………………………………………3 3.3.2 复位电路……………………………………………………………4 3.3.3 晶振电路……………………………………………………………4 3.4 系统的总的原理图……………………………………………………5 第四章 系统程序设计 ………………………………………………………5 4.1 基于 PROTEUS 的电路仿真……………………………………………5 4.2 用 PROTEUS 绘制原理 ………………………………………………6
4.3PROTEUS 对单片机内核的仿真 ………………………………………6
-3-

字模生成原理

字模生成原理 本设计中因为使用汉字的点阵显示,需要提取汉字字模,因此我们首先来了解汉字点阵字模的提取方法。 汉字的点阵字模是从点阵字库文件中提取出来的。例如常用的16×16点阵HZK16文件,12×12点阵HZK12文件等等,这些文件包括了GB 2312字符集中的所有汉字。现在只要弄清汉字点阵在字库文件中的格式,就可以按照自己的意愿去显示汉字了。 下面以HZK16文件为例,分析取得汉字点阵字模的方法。 HZK16文件是按照GB 2312-80标准,也就是通常所说的国标码或区位码的标准排列的。国标码分为94 个区(Section),每个区94 个位(Position),所以也称为区位码。其中01~09 区为符号、数字区,16~87 区为汉字区。而10~15 区、88~94 区是空白区域。 如何取得汉字的区位码呢?在计算机处理汉字和ASCII字符时,使每个ASCII字符占用1个字节,而一个汉字占用两个字节,其值称为汉字的内码。其中第一个字节的值为区号加上32(20H),第二个字节的值为位号加上32(20H)。为了与ASCII字符区别开,表示汉字的两个字节的最高位都是1,也就是两个字节的值都又加上了128(80H)。这样,通过汉字的内码,就可以计算出汉字的区位码。 具体算式如下: qh=c1-32-128=c1-160 wh=c2-32-128=c2-160 或 qh=c1-0xa0 wh=c2-0xa0 qh,wh为汉字的区号和位号,c1,c2为汉字的第一字节和第二字节。 根据区号和位号可以得到汉字字模在文件中的位置: location=(94*(qh-1)+(wh-1))*一个点阵字模的字节数。 那么一个点阵字模究竟占用多少字节数呢?我们来分析一下汉字字模的具体排列方式。 例如下图中显示的“汉”字,使用16×16点阵。字模中每一点使用一个二进制位(Bit)表示,如果是1,则说明此处有点,若是0,则说明没有。这样,一个16×16点阵的汉字总共需要16*16/8=32个字节表示。字模的表示顺序为:先从左到右,再从上到下,也就是先画左上方的8个点,再是右上方的8个点,然后是第二行左边8个点,右边8个点,依此类推,画满16×16个点。 对于其它点阵字库文件,则也是使用类似的方法进行显示。例如HZK12,但是HZK12文件的格式有些特别,如果你将它的字模当作12*12位计算的话,根本无法正常显示汉字。因为字库设计者为了使用的方便,字模每行的位数均补齐为8的整数倍,于是实际该字库的位长度是16*12,每个字模大小为24字节,虽然每行都多出了4位,但这4位都是0(不显示),并不影响显示效果。还有UCDOS下的HZK24S(宋体)、HZK24K(楷体)或HZK24H(黑体)这些打印字库文件,每个字模占用24*24/8=72字节,不过这类大字模汉字库为了打印的方便,将字模都放倒了,所以在显示时要注意把横纵方向颠倒过来就可以了。 这样我们就完全清楚了如何得到汉字的点阵字模,这样就可以在程序中随意的显示汉字了。 5.7.2 字模提取程序 如果在程序中使用的汉字数目不多,也可以不必总是在程序里带上几百K的字库文件,也

单片机课程设计---16×16点阵式汉字显示

目录 摘要 (1) Abstract (2) 1设计原理 (3) 1.1 MCS-51单片机的结构及编程方法 (3) 1.2 16*16点阵LED原理 (5) 1.3 3-8译码器原理 (6) 2.设计方案介绍 (7) 2.1 设计总体思路 (7) 2.2 与题目相关的具体设计 (7) 2.3程序设计流程图 (8) 3.源程序,原理图和仿真图 (9) 3.1程序清单(见附录) (9) 3.2电路图 (9) 3.2.1电路原理图 (9) 3.2.2电路图分析 (9) 3.3仿真图 (9) 4性能分析 (10) 5.总结和心得 (11) 6.参考文献 (12) 附录:程序代码 (13)

摘要 LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。文章给出了一种基于MCS-51单片机的16×16 点阵LED显示屏的设计方案。包括系统具体的硬件设计方案,软件流程图和部分汇编语言程序等方面。在负载范围内, 只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉的图文显示方案。 关键词:MCS-51;LED;单片机

Abstract As a popular display device component, LED dot-matrix display board consists of several independent LED (Light Emitting Diode). The LED dot-matrix display board can display the number or sign, and it is usually used to show time, speed, the state of system etc. This paper introduces a kind of simple 16x16 LED display screen design process based on MCS-51 single chip minicomputer . The detail hardware scheme, software flow and assemble language programmer design and so on is followed. The display part can be cascaded to meet the need. The practice proves the design is low-cost and effective. Key words: MCS-51;LED;MCU

基于单片机的点阵汉字显示(附C语言程序)资料

湖南科技大学测控技术与仪器专业 单片机课程设计 题目基于单片机的点阵汉字显示设计姓名 学号 指导教师 成绩____________________ 湖南科技大学机电工程学院

二〇一五年十二月制 摘要 LED显示屏在我们的周围随处可见,它的应用已经普及到社会中的方方面面。作为一种新型的显示器件,在许多场合都可以见到它的身影,不仅是它的应用使呈现出来的东西更加美观,更重要的是它的应用方便,成本很低,除了能给人视觉上的冲击外,更能给人一种美的享受。LED显示屏是由多个发光二极管按矩阵形式排列封装而成,通常用来显示时间、图文等各种信息。本设计是基于STC89C51单片机的16*16点阵式显示屏,该LED显示屏能实现16*16个汉字,简单的显示图像, 然后一直循环着显示下去。该设计包含了硬件、软件、调试等方案,只需简单的级联就能实现显示屏的拓展,但要注意不要超过负载能力。本次设计的作品体积小、功能多、方便实用、花费小,电路具有结构简单、操作方便、精度高、应用广泛的特点。 关键词: LED,STC89C51单片机,显示屏

目录 摘要 (i) 第一章系统功能要求 (1) 1.1系统设计要求 (1) 第二章方案论证 (1) 2.1方案论证 (1) 第三章系统硬件电路设计 (1) 3.1 STC89C51芯片的介绍 (1) 3.1.1 系统单片机选型 (1) 3.1.2 STC89C51引脚功能介绍 (2) 3.1.374LS595的总体特点和工作原理..........................................3.2 LED点阵介绍 (2) 3.2.1LED点阵 (2) 3.3系统各硬件电路介绍 (3) 3.3.1系统电源电路设计介绍 (3) 3.3.2复位电路 (3) 3.3.3晶振电路 (4) 3.4系统的总的原理图 (4) 第四章系统程序设计 (5) 4.1基于PROTEUS的电路仿真 (5)

点阵字库的原理

点阵字库的原理 2010-12-06 17:12:46 分类: 点阵字库的原理(引文) 所有的汉字或者英文都是下面的原理, 由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最高位向最低位排列。 生成的字库说明:(以12×12例子) 一个汉字占用字节数:12÷8=1····4也就是占用了2×12=24个字节。 编码排序A0A0→A0FE A1A0→A2FE依次排列。 以12×12字库的“我”为例:“我”的编码为CED2,所以在汉字排在CEH-AOH=2EH区的D2H-A0H=32H个。所以在12×12字库的起始位置就是[{FE-A0}*2EH+32H]*24=104976开始的24个字节就是我的点阵模。 其他的类推即可。 英文点阵也是如此推理。 在DOS程序中使用点阵字库的方法 首先需要理解的是点阵字库是一个数据文件,在这个数据文件里面保存了所有文字的点阵数据.至于什么是点阵,我想我不讲大家都知道的,使用过"文曲星"之类的电子辞典吧,那个的液晶显示器上面显示的汉子就能够明显的看出"点阵"的痕迹.在PC 机上也是如此,文字也是由点阵来组成了,不同的是,PC机显示器的显示分辨率更高,高到了我们肉眼无法区分的地步,因此"点阵"的痕迹也就不那么明显了. 点阵、矩阵、位图这三个概念在本质上是有联系的,从某种程度上来讲,这三个就是同义词.点阵从本质上讲就是单色位图,他使用一个比特来表示一个点,如果这个比特为0,表示某个位置没有点,如果为1表示某个位置有点.矩阵和位图有着密不可分的联系,矩阵其实是位图的数学抽象,是一个二维的阵列.位图就是这种二维的阵列,这个阵列中的(x,y) 位置上的数据代表的就是对原始图形进行采样量化后的颜色值.但是,另一方面,我们要面对的问题是,计算机中数据的存放都是一维的,线性的.因此,我们需要将二维的数据线性化到一维里面去.通常的做法就是将二维数据按行顺序的存放,这样就线性化到了一维. 那么点阵字的数据存放细节到底是怎么样的呢.其实也十分的简单,举个例子最能说明问题.比如说16*16 的点阵,也就是说每一行有16个点,由于一个点使用一个比特来表示,如果这个比特的值为1,则表示这个位置有点,如果这个比特的值为0,则表示这个位置没有点,那么一行也就需要16个比特,而8个比特就是一个字节,也就是说,这个点阵中,一行的数据需要两个字节来存放.第一行的前八个点的数据存放在点阵数据的第一个字节里面,第一行的后面八个点的数据存放在点阵数据的第二个字节里面,第二行的前八个点的数据存放在点阵数据的

点阵式汉字LED显示屏的原理与制作(精)

单片机应用 电子报 /2004年 /08月 /08日 /第 011版 / 点阵式汉字 L ED 显示屏的原理与制作 深圳石学军 本文介绍一种实用汉字显示屏的制作。该显示屏使用 256只高亮度发光二极管组成 16×16点阵。为降低制作难度 , 此处仅作了一个字的轮流显示。 每个字由 16×16点阵组成 , 每点为一个像素 , 每个字的字形为一幅图像 , 故此屏既可以显示汉字 , 也可以显示 256像素范围内的任何图形。下面以显示“大” 字为例说明其扫描原理。 在 UCDOS 宋体字库中 , 每个字由 16×16, , 一个字要拆分为上、下两部分 , 由两个 8×16 部分 , 即第 0列的 P00~, 时 , 只有 P05点亮 , 即 04H 。 , 即从 P27向 P20方向扫描 , 这一 , , , 依照这个方法 , 扫描 32个 8位 , 得出汉字“大” :04H、 00H 、 04H 、 02H 、 04H 、 02H 、 04H 、 04H 、 04H 、 08H 、 04H 、 30H 、 05H 、0C0H 、 0FEH 、 00H 、 05H 、 80H 、 04H 、 60H 、 04H 、 10H 、 04H 、 08H 、 04H 、 04H 、 0CH 、 06H 、 04H 、 04H 、 00H 、 00H 。 无论显示何种字体或图像 , 都可以用这个方法分析扫描代码。目前有很多现成的汉字字模生成软件 , 软件打开后输入汉字 , 点“检取” 键 , 即可自动生成十六进制汉字代码。此例使用 4-16线译码器 74L S154完成列显示 , 行的 16条线接 P0口和 P2口。源程序清单如下 : OR G 00H LOOP :MOVA , #0FFH ; 初始化

点阵式汉字LED显示屏电路原理与制作(精)

点阵式汉字LED显示屏电路原理与制作 汉字显示屏广泛应用与汽车报站器,广告屏等。本文介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,没有使用8*8的点阵发光管模块,而是直接使用了256个高量度发光管,组成了16行16列的发光点阵。同时为了降低制作难度,仅作了一个字的轮流显示,实际使用 时可根据这个原理自行扩充显示的字数。 1汉字显示的原理: 我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。即国标汉字库中的每一个字均由256点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。 用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。 一般我们把它拆分为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。 在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p07口。方向为p 00到p07 ,显示汉字“大”时,p05点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭p0.3 灭, p0.4 灭, p0.5 亮,p0.6 灭,p0.7 灭。即二进制00000100,转换为16进制为 04h.。 上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为 00h。 然后单片机转向上半部第二列,仍为p05点亮,为00000100,即16进制04h. 这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h. 依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大” 的扫描代码为: 04H,00H,04H,02H,04H,02H,04H,04H 04H,08H,04H,30H,05H,0C0H,0FEH,00H 05H,80H,04H,60H,04H,10H,04H,08H 04H,04H,0CH,06H,04H,04H,00H,00H 由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从 而显示在屏幕上。 不过现在有很多现成的汉字字模生成软件,我们就不必自己去画表格算代码了。

12点阵汉字在HD系列机型中的应用-汉字点阵字库原理

汉字点阵字库原理 一、汉字编码 1.区位码 在国标GD2312—80中规定,所有的国标汉字及符号分配在一个94行、94列的方阵中,方阵的每一行称为一个“区”,编号为01区到94区,每一列称为一个“位”,编号为01位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。用区位码就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。汉字“母”字的区位码是3624,表明它在方阵的36区24位,问号“?”的区位码为0331,则它在03区3l位。 2.机内码 汉字的机内码是指在计算机中表示一个汉字的编码。机内码与区位码稍有区别。如上所述,汉字区位码的区码和位码的取值均在1~94之间,如直接用区位码作为机内码,就会与基本ASCII码混淆。为了避免机内码与基本ASCII码的冲突,需要避开基本ASCII码中的控制码(00H~1FH),还需与基本ASCII码中的字符相区别。为了实现这两点,可以先在区码和位码分别加上20H,在此基础上再加80H(此处“H”表示前两位数字为十六进制数)。经过这些处理,用机内码表示一个汉字需要占两个字节,分别称为高位字节和低位字节,这两位字节的机内码按如下规则表示: 高位字节=区码+20H+80H(或区码+A0H) 低位字节=位码+20H+80H(或位码+AOH) 由于汉字的区码与位码的取值范围的十六进制数均为01H~5EH(即十进制的01~94),所以汉字的高位字节与低位字节的取值范围则为A1H~FEH(即十进制的161~254)。 例如,汉字“啊”的区位码为1601,区码和位码分别用十六进制表示即为1001H,它的机内码的高位字节为B0H,低位字节为A1H,机内码就是B0A1H。

8×8LED点阵显示汉字课程设计

目录 第1章本设计的研究背景及目的要 求 0 1.1凌阳单片 机 0 1.2 LED(8×8)点阵模块简 介 (1) 第2章设计方案和基本原 理 (3) 2.1设计方 案 (3) 2.2 基本原 理 (3) 1. 8×8LED点阵的工作原 理 (3) 第3章程序设 计 (6) 3.1程序流程 图 (6) 3.2 程序代 码 (6) 第4章调试结果及分 析 (8) 4.1调试结 果 (8) 4.2结果分 析 (9) 第5章结论与体 会 (10) 参考文 献 .................................................................. 11 附 录 .................................................................. . (12) 第1章本设计的研究背景及目的要求

1.1凌阳单片机 (1)来源 随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理数据处理以及数字信号处理,DSP(Digital Signal Processing)等领域。凌阳的16位单片机就是为适应这种发展而设计的。 (2)构造 它的CPU内核采用凌阳最新推出的Microcontroller and Signal Processor 16 位微机处理器芯片,以下简称μ'nSP?。围绕μ'nSP?所形成的16位μ'nSP?系 列单片机,以下简称μ'nSP? 家族。采用的是模块式集成结构,它以μ'nSP?内核为中心集成不同规模的ROM PAM和功能丰富的各种外设部件。μ'nSP?内核 是一个通用的和结构。除此之外的其它功能模块均为可选结构。以及这种结构可大可小可有可无,借助这种通用结构附加可选结构的积木式的构成,便可成为各种系列的派生产品,以适合不同场合,这样做无疑会使每种派生产品具有更强的功能和更低的成本。μ'nSP?家族有有以下特点:体积小,集成度高,可靠性 好易于扩展。μ'nSP? 家族把各功能把各功能部件模块化地集成在一个芯片里。内部采用总线结构,因为减少了各功能部件之间的连接,提高了其可靠性和抗干扰能力,另外,模块化的结构易于系列的扩展,以适应不同用户的需求。具有较强的中断处理能力。μ'nSP?家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。高性能价格比:μ'nSP?家族片内带有高寻址能力的ROM,静态RAM和多功能的I/O口,另外μ'nSP?的指令系统提供出具有较高运算速度的16位,16位的乘法运算指令和内积运算指令,为其应用添加了DSP功能,使得μ'nSP?家族运用在复杂的数字信号处理方面既很便利又比专用的DSP芯片廉价。 优点: 功能强、效率高的指令系统:μ'nSP?的指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。低功耗、低电压:μ'nSP?家族采用CMOS制造工艺,同时增加了软件激发的弱振方式,空闲方式和掉电方式,极大地降低了其功耗,另外,μ'nSP?家族的工 作电压范围大,能在低电压供电时正常工作,且能用电池供电,这对于其在野外作业等领域中的应用具有特殊的意义。 (3)应用领域 凌阳单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: 1.在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控例且功能比起采用电子或数字电路更加强大。智能化、微型化,制使得仪器仪表数字化、. 。如精密的测量设备(功率计,示波器,各种分析仪)在工业控制中的应用2. 例如工厂流水线的智能化管数据采集系统。用单片机可以构成形式多样的控制系统、

点阵汉字的原理及应用

点阵汉字原理与应用 一.汉字的编码 由于在电脑中,所有的数据都是以0和1保存的。因此,想要用计算机来显示汉字前提就是要将汉字以二进制,即0和1形式进行编码。 GBK内码 在英文的显示操作中,一个字母、数字及字符均由1个ASCII码表示,并且由于英文字符种类相对较少,故其ASCII码是小于等于127的。而汉字由于种类繁多,每个汉字有2个ASCII码构成,这两个ASCII码称为汉字的GBK内码,通常用十六进制表示。例如,“啊”的GBK内码=B0 A1。汉字的GBK内码一定大于A0H,即160,目的是为了防止与英文的ASCII码产生冲突。 区位码 为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。由于国标码是四位十六进制,如汉字的GBK内码,为了便于交流,大家常用的是四位十进制的区位码。所有的国标汉字与符号组成一个94×94的矩阵(见图1所示)。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。区位码和GBK内码之间可以相互转换,区位码=GBK内码-A0H。例如:“啊”的GBK内码=B0 A1,则其区码=B0-A0=10H=16,而其位码=A1-A0=01,所以“啊”的区位码=16 01,为4位十进制码。 在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字。其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。因此利用区位码便可实现对6000多个汉字的提取。 图1汉字的区位码表

点阵字库生成的原理

所有的汉字或者英文都是下面的原理, 由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最高位向最低位排列。 生成的字库说明:(以12×12例子) 一个汉字占用字节数:12÷8=1····4也就是占用了2×12=24个字节。 编码排序A0A0→A0FE A1A0→A2FE依次排列。 以12×12字库的“我”为例:“我”的编码为CED2,所以在汉字排在CEH-AOH=2EH区的D2H-A0H=32H个。所以在12×12字库的起始位置就是[{FE-A0}*2EH+32H]*24=104976开始的24个字节就是我的点阵模。 其他的类推即可。 英文点阵也是如此推理。 51单片机的13×14点阵缩码汉卡 我们历时数载,开发成"51单片机13×14点阵缩码汉卡",适用于目前国内外应用最为广泛的MCSX-51及其兼容系列单片机. 与此同时,还开发了13×14点阵汉字字模.13×14点阵字模,可完全与目前通用的16×16点阵汉字字模媲美,其在单片机和嵌入式系统的汉字显示应用中也具有明显的经济价值和实用意义. 1.单片机目前的汉字显示 信息交流的最主要方式之一即文字交流,但由于我国方块汉字数量繁多,构形迥异,使汉字显示一直是我国计算机普及的障碍.随着计算机技术的迅速发展,PC机的汉字显示已不成问题.但对于成本低、体积小、应用灵活且用量极为巨大的单片机而言,因其结构简单,硬件资源十分有限,其汉字显示仍面对着捉襟见肘,力不从心的窘境. 目前单片机的汉字显示有三种基本方法. ①采用标准字库法.即将国标汉字库固人ROM中,将单片机的硬件和软件进行特别扩展后以显示汉字.众所周知,即使是16×16点阵标准字库,也须占用200KB以上的单元内存,而就目前主流5l系列单片机而言,最大寻址范围仅64KB,即使程序区与数据区合起来也仅128KB内存.因此,若不加特别的扩展设计,不要说检字程序和用户空间,仅字库都装不下.这种方法虽然可以方便地使用现成标准字库,但却需占用大量的硬件和软件资源,增加很大一部分成本和设计难度,所以不经常使用. ②字模直接固化法.即将所显示的汉字,依先后顺序将其字模一一从标准字库中提取后,重新固化,予以显示.此法虽为简捷,但只适于显示少量汉字,且字模的制取繁琐,软件的修改维护都很困难. ③带索引小字库法.即将欲显示文件中的汉字字模,从标准字库中逐一提取固化,制成小型字

Verilog程序(汉字点阵显示

中国石油大学 数电课程设计报告题目: 学院: 班级: 姓名: 学号: 日期: 2012 年 12月

摘要 设计要求: 利用EDA/SOPC 实验开发平台提供的16*16点阵LED以及EPC235核心板,实现循环显示“中国石油大学”这6个汉字(左移或者右移均可)。 (1)手动生成“中国石油大学”这6个汉字在16*16点阵LED 上的6个字模(即控制某些LED亮,某些LED灭)。 (2)实现循环显示“中国石油大学”这6个汉字(左移或者右移均可)。 (3)拓展要求:自主设计(如控制循环速度,方向)。 关键词: 扫描分频,控制速度,点阵,点阵汉字显示,

设计原理及方案: 1、16*16点阵LED内部结构如下图所示。 2、总体设计框图: 3、各子模块的设计: (1)、分频,扫描: module fenpin (clk_50Mhz,clk_4hz,k2,k3); input clk_50Mhz,k2,k3; // 输入端口声明

output clk_4hz; // 输出端口声明reg[24:0] count,ccount; reg clk_4hz; always @(posedge clk_50Mhz) begin if ((k2==0) && (k3==0)) ccount<=500000000; if ((k2==0) && (k3==1)) ccount<=100000000; if ((k2==1) && (k3==0)) ccount<=50000000; if ((k2==1) && (k3==1)) ccount<=10000000; if(count

点阵LED显示原理与点阵汉字库的编码和从标准字库中提取汉字编码的方法

点阵LED显示原理与点阵汉字库的编码和从标准字库中提取汉字编码的方法。2009年06月03日下午 04:27 一.实验要求 编程实现中英文字符的显示。 二.实验目的 1.了解LED点阵显示的基本原理和实现方法。 2.掌握 三.实验电路及连线 点阵显示模块WTD3088的(红色)列输入线接至内部LED的阴极端,行输入线接至内部LED的阳极端(若阳极端输入为高电平,阴极端输入低电平,则该LED 点亮)。发光点的分布如图22-0所示。

Fig 22-0 WTD3088 LED分布 如图22-1示,本实验模块使用74LS374来控制列输入线的电平值。将74LS374的某输出置0,则对应的LED阴极端被置低。如图22-2示,本实验模块使用 74LS273来控制行输入线,并通过9013提供电流驱动。将74LS273的某输出置1,则对应的LED阳极端被置高。每次系统重新开启或总清后,74LS273输出为全0,LED显示被关闭。 通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。 Fig 22-1 LED模块及列扫描电路

Fig 22-2 行扫描电路 Fig 22-3地址译码电路

本实验模块使用4块WTD3088组成16×16点阵,以满足汉字显示的要求。为了方便的控制四个单元,使用了一片74LS139译码,产生四个地址片选信号:CLKR1= CSLED,CLKR2= CSLED+1,用于行控制的两片74LS273;CLKC1= CSLED+2,CLKC2= CSLED+3,用于列控制的两片74LS374。 实验接线:按示例程序,模块的CSLED接51/96地址的8000H。 四.实验说明 使用高亮度LED发光管构成点阵,通过编程控制可以显示中英文字符、图形及视频动态图形。LED显示以其组构方式灵活、亮度高、技术成熟、成本低廉等特点在证券、运动场馆及各种室内/外显示场合得到广泛的应用。 所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库(如ASC16、HZ16)中提取。后者需要正确掌握字库的编码方法和字符定位的计算。 实验盘片中“字符转换”子目录下提供的,可方便的将单个字符的码表从标准字库Asc16,Hzk16中提取出来。具体使用方法是运行上述可执行程序,根据提示输入所需字符(如是汉字还需要先启动dos下的汉字环境,如ucdos,pdos95等)。程序将该字符的码表提取出来,存放在该字符ASC或区位码为文件名称的.dat 文件中。用户只需将该文件中内容拷贝、粘贴到自己的程序中即可。但需要注意字节排列顺序、字节中每一位与具体显示点的一一对应关系,必要时还要对码表

24乘24点阵汉字显示设计

HUBEI NORMAL UNIVERSITY 综合课程设计 (二) Integrated Curriculum Design(2)

目录 1 设计目的 0 2 设计思路 0 3 设计过程 0 时钟电路模块 (1) 复位电路模块 (1) 单片机控制模块 (2) 显示模块 (2) 列控制模块 (2) 行控制模块 (2) 汉字取模 (3) 4电路仿真与分析 (3) 仿真结果显示 (3) 仿真分析 (5) 5 焊接实物 (5) 点阵部分 (5) 最小系统 (5) 整体实物图 (5) 焊接线路图 (6) 6 总结 (6) 参考文献 (6) 附件 (7)

LED点阵(24*24)汉字系统设计 1 设计目的 (1) 熟悉Proteus仿真软件的使用,了解各元件的功能及作用; (2) 熟悉LED点阵的行与列的判别方法,以及熟悉一般设计过程。 (3) 熟悉AT89C52单片机的基本结构、引脚功能、存储器结构等基本知识。 (4) 掌握74HC138芯片的引脚功能及使用方法,芯片的级联方法,以及掌握电路的基本调试能力。 (5) 掌握Keil软件的使用方法,以及如何创建文件和编写程序。 2 设计思路 本次设计采用Proteus单片机仿真平台对用9个8*8点阵组成的24*24点阵式LED显示屏进行仿真设计,实现汉字显示。在设计中共有6个模块,其分别是时钟电路模块,复位电路模块,单片机控制模块,显示器模块,列控制模块,行控制模块。在Proteus中完成硬件的设计,同时采用Keil开发平台软件设计程序,最终实现点阵显示屏的特定汉字显示。 3 设计过程 LED点阵汉字系统主要有6个模块,每个模块都有自己特定的功能,是不可缺少的组成部分。在设计前的首要条件是先对LED点阵汉字系统的实现过程有深入的了解,然后按功能分模块设计电路,最后组成完整的工作电路。 本次设计由AT89C52作为主控单元,显示屏选用9个8*8点阵显示模块来组成24*24点阵显示器,行控制直接使用单片机的引脚控制,列控制选用3个移位寄存器74HC138来控制,汉字的字模是使用取模软件实现的。本系统的总体设计图1所示。

16-16点阵LED显示汉字汇编语言

LED16X16点阵显示课程设计报告 学院 专业 班级 学生 指导老师

一、设计目的 本次课程设计目的剖析试验箱,利用微机接口芯片8255,并行控制LED点阵显示;其次就是掌握8088微机系统与LED点阵显示模块之间接口电路设计及编程,了解LED点阵显示的基本原理和如何来实现汉字的的循环左移显示。 二、设计容 利用598H试验系统扩展接口CZ7座,在控制板MC1上以并行通信的方式控制LED点阵显示。要求自建字库,编制程序实现点阵循环左移显示汉字,并要求通过protues仿真软件画出电路图,运行程序。 三、硬件电路设计 整个电路由8088CPU,两片8255,1个74ls373,1个74LS138,1个16×16的LED,5个7407。该电路可静态显示1个16*16位的汉字,也可循环显示。 1、8255 Intel8255A是一种通用的可编程序并行I/O接口芯片,又称“可编程外设接口芯片”,是为Intel8080/8085系列微处理据设计的,也可用于其它系列的微机系统。可由程序来改变其功能,通用性强、使用灵活。通过8255A,CPU可直接同外设相连接,是应用最广的并行I/O接口芯片。其中含3个独立的8位并行输入/输出端口,各端口均具有数据的控制和锁存能力。可通过编程设置各端口的工作方式和数据传送方向(入/出/双向)。 2、138译码器 译码器是组合逻辑电路的一个重要的器件,74LS138的输出是低电平有效,故实现逻辑功能时,输出端不可接或门及或非门,74LS138与前面不同,其有使能端,故使能端必须加以处理,否则无法实现需要的逻辑功能。发光二极管点亮只须使其正向导通即可,根据LED的公共极是阳极还是阴极分为两类译码器,即针对共阳极的低电平有效的译码器;针对共阴极LED的高电平输出有效的译码器。 3、373锁存器 74LS373是低功耗肖特基TTL8D锁存器,有8个相同的D型(三态同相)锁存器,由两个控制端(11脚G或EN;1脚OUT、CONT、OE)控制。当OE接地时,若G为高电平,74LS373接收由PPU输出的地址信号;如果G为低电平,则将地址信号锁存。工作原理:74LS373的输出端O0—O7可直接与总线相连。当三态允许控制端OE为低电平时,O0—O7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,O0—O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器部的逻辑操作不受影响。当锁存允许端LE为高电平时,O随数据D而变。当LE为低电平时,O被锁存在已建立的数据电平。 4、LED 动态显示原理 LED点阵显示系统中各模块的显示方式:有静态和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲电压驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的列数据信号,反复循环以上操作,就可显示各种图形或文字信息。 点阵式LED绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视

相关文档
最新文档