16×16点阵字库
- 格式:doc
- 大小:13.00 KB
- 文档页数:2
在C51中,HZK16汉字库的使用(mydows's Blog转载)定义如下:unsigned char str[]="我"在运行时str被初始化为2个字节长度,内容为“我”的GBK码,为:0xCE(区码),0xD2(位码)。
使用如下换算公式得到“我”在HZK16文件中的地址,从该位置开始的顺序32字节为“我”的字模。
ADD=【(区码-0xa1)×0x5e + (位码-0xa1)】×0x20按照上面的计算方法,“我”的字模地址:0x216E0 。
他的C语言字模为:0x04, 0x80,0x0E,0xA0,0x78,0x90,0x08,0x90,0x08,0x84,0xFF,0xFE,0x08,0x80,0x08,0x90,0x0A,0x90,0x0C,0x60,0x18,0x40,0x68,0xA0,0x09,0x20,0x0A,0x14,0x28,0x14,0x10,0x0CHZK16字库是符合GB2312标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有6763个,符号682个。
其中一级汉字有3755个,按声序排列,二级汉字有3008个,按偏旁部首排列。
我们在一些应用场合根本用不到这么多汉字字模,所以在应用时就可以只提取部分字体作为己用。
HZK16字库里的16×16汉字一共需要256个点来显示,也就是说需要32个字节才能达到显示一个普通汉字的目的。
我们知道一个GB2312汉字是由两个字节编码的,范围为A1A1~FEFE。
A1-A9为符号区,B0到F7为汉字区。
每一个区有94个字符(注意:这只是编码的许可范围,不一定都有字型对应,比如符号区就有很多编码空白区域)。
下面以汉字“我”为例,介绍如何在HZK16文件中找到它对应的32个字节的字模数据。
前面说到一个汉字占两个字节,这两个中前一个字节为该汉字的区号,后一个字节为该字的位号。
中文点阵字库的使用方法安富莱电子 armfly2010-01-03在嵌入式设备LCD上显示的汉字大多数都属于点阵汉字。
常用的点阵字库来自UCDOS。
大家可以去网上下载一个UCDOS的完全安装版本,里面可以找到很多点阵字库文件。
下面几个字库文件是常用的:HZK12 : 12点阵汉字库(宽度x高度 = 12x12)ASC12 : 12点阵ASCII字库(宽度x高度 = 6x12)HZK16 : 16点阵汉字库(宽度x高度 = 16x16) 最常用的中文字库ASC16 : 16点阵ASCII字库(宽度x高度 = 8x16)最常用的ASCII字库HZK24 : 24点阵汉字库(宽度x高度 = 24x24)票据打印机用得较多UCDOS的字库排列标准符合国标一、二级字库标准,即GB2312,汉字个数为6000多个。
按照汉语拼音顺序排列,前面一部分是一级常用汉字大约2000多个,后面一部分是二级汉字大约4000多个。
大多数情况下,一二级字库就可以满足我们的需求。
但是在某些特殊应用(比如显示每个人的姓名)中可能需要用到GB18030字库,该字库除了包括一、二级字库外还包含很多不常用的汉字,总汉字个数为27538个。
安富莱STM32F103ZE-EK开发板配套的光盘上收录一个16点阵的GB18030字库(由于授权问题,这个字库不对外开放)。
下面是GB18030字库点阵的截图。
这个放大的汉字就是二级字库中最后一个汉字,这个字后面的汉字就属于GB18030特有的汉字了。
估计大多数人一个都不认识。
我们来看看GB18030字库最后区域的汉字长得啥样子。
汉字点阵在汉字库中的地址计算公式汉字库种类繁多,但都是按照区位的顺序排列的。
前一个字节为该汉字的区号,后一个字节为该字的位号。
每一个区记录94个汉字,位号则为该字在该区中的位置。
计算公式为: (94*(区号-1)+位号-1) * 一个汉字字模占用字节数对于16点阵的字库,1个汉字字模占用32字节。
16×16LED点阵显示摘要单片微型计算机(single chip microcomputer)简称单片机,它是为各类专用控制器而设计的通用或专用微型计算机系统,高密度集成了普通计算机微处理器,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。
单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。
单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。
在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字,汉字显示屏也广泛应用到汽车报站器,广告屏等。
所以研究LED显示有实用的意义。
LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。
本设计是4个16×16点阵LED电子显示屏的设计。
整机以美国ATMEL公司生产的40脚单片机AT89C51为核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。
通过该芯片控制一个行驱动器74LS154和八个列驱动器74HC595来驱动显示屏显示。
该电子显示屏可以显示各种文字或单色图像,全屏能显示4个汉字,采用16块8 x 8点阵LED显示模块来组成4个16x16点阵显示模式。
显示采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。
文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计,以及使用说明等。
关键词:AT89C51单片机 LED 16*16点阵显示动态显示目录第一章绪论 (1)1.1 设计课题背景知识 (1)1.2 问题提出 (3)1.3 LED显示屏的发展 (4)第二章功能要求及方案论证 (6)2.1 功能要求 (6)2.1 功能要求 (6)第三章系统电路的设计 (9)3.1 设计框图及介绍 (9)3.2 51系列单片机简介 (9)3.3 单片机最小应用系统电路设计 (13)3.4 LED点阵介绍 (14)3.5 LED显示方式 (14)3.6 点阵的移动 (17)3.7 点阵的颜色 (21)3.8 LED阵列驱动电路 (21)3.9 单片机延时子程序 (22)第四章系统程序的设计 (24)4.1 显示驱动程序 (24)4.2 系统主程序 (25)第五章调试及性能分析 (32)5.1 开发环境介绍 (32)5.2 理论性能分析 (32)5.3 系统调试 (33)第六章总结 (34)致谢 (35)附录 (36)一. 程序代码 (36)系统主程序 (37)二.主要芯片介绍 (42)三.点阵左移显示的流程图 (46)四.元件清单 (47)五.参考文献 (47)六.仿真电路图 (48)第一章绪论1.1 设计课题背景知识单片微型计算机(single chip microcomputer)简称单片机,它是为各类专用控制器而设计的通用或专用微型计算机系统,高密度集成了普通计算机微处理器,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。
计算机基础知识1、微型计算机的主要部件包括[ ]A) 电源,打印机,主机B) 硬件,软件,固件C) CPU,中央处理器,存储器D) CPU,存储器,I/O设备2、将八进制数777转换为对应的二进制数等于_______。
A) 111111111 B) 111111110 C) 11111111 D) 11111113、在16×16点阵字库中,存储一个汉字的字模信息所需的字节数是CA) 8 B) 16 C) 32 D) 644、下列术语中,属于显示器性能指标的是_______。
A) 速度B) 容量C) 刷新率D) 精度5、16根地址线的寻址范围是A) 64K B) 512K C) 640K D) 1MB6、软件系统主要由( B) A) 操作系统和数据库管理系统组成B) 系统软件和应用软件组成C) 应用软件和操作系统组成D) 系统软件和操作系统组成7、在微机系统中,硬件与软件的关系是_______。
A) 在一定条件下可以相互转化B) 逻辑功能上的等效关系C) 特有的关系D) 固定不变的关系8、某公司的工资管理软件属于( )A) 应用软件B) 系统软件C) 文字处理软件D) 工具软件9、下列叙述中错误的一条是A) 微型计算机应避免强磁场的干扰。
B) 微处理器的主要性能指标是字长、主频。
C) 内存容量是指微型计算机硬盘所能容纳信息的字节数。
D) 微型计算机房湿度不宜过大。
10、在下面的描述中,正确的是A) 外存中的信息,可直接被CPU处理。
B) 计算机中使用的汉字编码和ASCII码是一样的。
C) 键盘是输入设备,显示器是输出设备。
D) 操作系统是一种很重要的应用软件。
11、微型计算机的主要部件包括A) 电源,打印机,主机B) 硬件,软件,固件C) CPU,中央处理器,存储器D) CPU,存储器,I/O设备12、将八进制数777转换为对应的二进制数等于________。
A) 111111111 B) 111111110 C) 11111111 D) 111111113、在16×16点阵字库中,存储一个汉字的字模信息所需的字节数是A) 8 B) 16 C) 32 D) 6414、下列术语中,属于显示器性能指标的是_______。
16X16点阵汉字显示89C51(测试OK)1汉字显示的原理:我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。
即国标汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素我们以显示汉字“大”为例,来说明其扫描原理:在UCDOS中文宋体字库中,每一个字由16行16列的点阵组成显示。
如果用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。
一般我们把它拆分为上部和下部,上部由8*16点阵组成,下部也由8*16点阵组成。
在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00---p 07口。
方向为p00到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进制04 h.这一列完成后继续进行下半部分的扫描,p21点亮,为二进制00000010,即16进制02h.依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“大”的扫描代码为:04H,00H,04H,02H,04H,02H,04H,04H04H,08H,04H,30H,05H,0C0H,0FEH,00H05H,80H,04H,60H,04H,10H,04H,08H04H,04H,0CH,06H,04H,04H,00H,00H由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。
16×16点阵字库2007-06-25 09:07 分类:单片机一般我们使用16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的.不过后来又有了HZK12、HZK24,HZK32和HZK48字库及黑体、楷体和隶书字库.虽然汉字库种类繁多,但都是按照区位的顺序排列的.前一个字节为该汉字的区号,后一个字节为该字的位号.每一个区记录94个汉字,位号则为该字在该区中的位置.因此,汉字在汉字库中的具体位置计算公式为:94*(区号-1)+位号-1.减1是因为数组是以0为开始而区号位号是以1为开始的.这仅为以汉字为单位该汉字在汉字库中的位置,那么,如何得到以字节为单位得到该汉字在汉字库中的位置呢?只需乘上一个汉字字模占用的字节数即可,即:(94*(区号-1)+位号-1)*一个汉字字模占用字节数,而按每种汉字库的汉字大小不同又会得到不同的结果.以16*16点阵字库为例,计算公式则为:(94*(区号-1)+(位号-1))*32.汉字库文该从该位置起的32字节信息即记录了该字的字模信息.了解点阵汉字及汉字库的构成原理后,显示汉字就变得简单.以16*16点阵字库为例, 通常的方法是:将文件工作指针移到需要的汉字字模处、将汉字库文件读入一2*16数组再用for循环一位位地显示.#include "graphics.h"#include "stdio.h"main(){ int i=VGA,j=VGAHI,k;unsigned char mat[16][2],chinease[3]="我";FILE *HZK;if((HZK=fopen("hzk16","rb"))==NULL)exit(0);initgraph(&i,&j,"");i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*获得区码与位码*/fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET);fread(mat,32,1,HZK);for(j=0;j<16;j++)for(i=0;i<2;i++)for(k=0;k<8;k++)if(mat[j][i]&(0x80>>k)) /*测试为1的位则显示*/putpixel(i*8+k,j,WHITE);getch();closegraph(); fclose(HZK);。
16乘16点阵原理
16乘16点阵原理是一种打印原理,它是把一个字符用16个点来表示,每个点可以是黑色或白色,从而形成一个字符的图形。
16乘16点阵原理的实现是通过一个称为“点阵字库”的表格来实现的,这个表格由16行16列组成,每一行代表一个字符,每一列代表一个点,如果某一个点是黑色,则在表格中用1表示,如果某一个点是白色,则在表格中用0表示。
16乘16点阵原理可以用来打印出汉字、英文字母、数字等,它的优点是可以打印出清晰的字符,缺点是打印速度比较慢,而且打印出来的字符大小是固定的,不能改变。
电子技术综合设计总结报告姓名:专业与班级:设计题目:16*16 LED汉字点阵系统设计起始时间: 2010 ~ 2011 学年第(1)学期第14 周~第 19 周指导教师:成绩:日期:一、系统的基本理论概述⏹1.1前言当今世界,电子技术迅猛发展,点阵式显示器件作为现代信息显示的重要媒体,在金融证券、体育、机场、交通、商业、广告宣传、邮电电信、指挥调度、国防军事等许多领域中得到了广泛应用。
因此点阵式显示器件的研制、生产也的到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。
由于LED电子显示屏具有所显内容信息量大,外形美观大方,操作使用方便灵活.适用于火车,汽车站,码头,金融证券市场,文化中心,信息中心体育设施等公共场所。
该项目广泛涉及了计算机及电子技术中的电源技术、单片机技术、数据通讯技术、显示技术、存储技术、系统软件技术、接口及驱动等技术。
⏹1.2课题设计内容该电路系统是采用AT89C51单片机为控制器,控制点阵LED显示器进行显示,左移显示“百年矿大盛世华章”的内容。
⏹1.3设计目的1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。
2.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
3.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
4.培养学生从资料文献、科学实验中获得知识的能力。
5. 对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
⏹1.4方案比较与选择:对于扫描LED点阵的方法有以下三种:(1)点扫描;(2)行扫描;(3)列扫描。
对于8*8的LED点阵而言:若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。
若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。
16×16点阵字库
2007-06-25 09:07 分类:单片机
一般我们使用16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的.
不过后来又有了HZK12、HZK24,HZK32和HZK48字库及黑体、楷体和隶书字库.
虽然汉字库种类繁多,但都是按照区位的顺序排列的.前一个字节为该汉字的区号,后一个字节为该字的位号.
每一个区记录94个汉字,位号则为该字在该区中的位置.
因此,汉字在汉字库中的具体位置计算公式为:94*(区号-1)+位号-1.
减1是因为数组是以0为开始而区号位号是以1为开始的.
这仅为以汉字为单位该汉字在汉字库中的位置,那么,如何得到以字节为单位得到该汉字在汉字库中的位置呢?
只需乘上一个汉字字模占用的字节数即可,
即:(94*(区号-1)+位号-1)*一个汉字字模占用字节数,而按每种汉字库的汉字大小不同又会得到不同的结果.
以16*16点阵字库为例,计算公式则为:(94*(区号-1)+(位号-1))*32.
汉字库文该从该位置起的32字节信息即记录了该字的字模信息.
了解点阵汉字及汉字库的构成原理后,显示汉字就变得简单.以16*16点阵字库为例, 通常的方法是:将文件工作指针移到需要的汉字字模处、将汉字库文件读入一2*16数组再用for循环一位位地显示.
#include "graphics.h"
#include "stdio.h"
main()
{ int i=VGA,j=VGAHI,k;
unsigned char mat[16][2],chinease[3]="我";
FILE *HZK;
if((HZK=fopen("hzk16","rb"))==NULL)exit(0);
initgraph(&i,&j,"");
i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*获得区码与位码*/
fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET);
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i]&(0x80>>k)) /*测试为1的位则显示*/
putpixel(i*8+k,j,WHITE);
getch();
closegraph(); fclose(HZK);。