汉字动态显示

2024-12-01

汉字动态显示(共8篇)

汉字动态显示 篇1

0 引言

Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它可以仿真、分析各种模拟器件和集成电路,该软件的特点是:a.实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路、数字电路仿真、单片机及其外围电路的仿真、各种虚拟仪器,如示波器等功能。b.支持主流单片机系统的仿真。c.提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。d.具有强大的原理图绘制功能。Proteus软件的使用彻底改变了传统单片机学习和开发方式,初学者可以在没有实验硬件条件下进行仿真实验,开发者可以直接用Proteus进行电路设计和仿真运行程序,运行成功后再制作产品,缩短开发周期,节约开发成本。汉字点阵显示电路设计时,显示部分应用16×16点阵字模提取软件,提取"广东工贸"显示汉字的字模数据,通过查表取出字模数据送输出动态显示。

1 汉字显示电路设计

汉字点阵的控制电路采用AT89C51单片机,硬件电路由单片机接口电路、LED显示屏行列驱动电路、LED点阵显示屏三部分组成,如图1所示,电路用Proteus软件画出,具体画法参见文献[1]。

一般情况下要完全显示出常用汉字至少需要16×16点阵,但由于Proteus元件库中没有16×16LED模块,为了达到显示要求,每个汉字可由四块8×8 LED模块组成。组合方式为先对每个8×8模块行列引脚连接好总线,然后四个单色模块组合紧密。

驱动电路采用动态扫描驱动方式,设计中行驱动信号采用了16个同向驱动器7407,并在每根信号线上接上拉电阻;列驱动信号先接一4-16译码器74HC154,然后十六个列驱动信号接16个反向驱动器7406,并每根信号线接上拉电阻。

单片机上电复位后,当按列扫描时,四个汉字的第一个字由P1口输出列信号,首先第1列输出"1",第1列字模数据由16行输出(P0、P2口);然后延时一定时间后,第2列输出"1",第2列字模数据再由16行输出;……;如此循环,直至第16列;16列扫描完成后,再进行下一次循环扫描。所以在某一时刻,只有一行或一列LED被对应的字模数据驱动点亮。只要扫描间隔时间合适,利用人眼的视觉暂留特性,看上去整个字符就显示在LED点阵显示器上。

2 汉字显示程序设计

根据以上硬件电路和单片机控制原理,编程思路如图2所示。

图2汉字点阵动态显示程序流程图(参见下页)

完整的程序代码如下:

3 仿真及结果

仿真方法是:

(1)在Keil C51仿真软件下创建项目,并把上述源程序添加到项目中,通过编译产生一个".hex"为后缀的文件,此文件就是用于烧写到Proteus软件中AT89C51芯片的文件[2]。

(2)把生成的".hex"为后缀的文件添加到Proteus软件中绘制的AT89C51芯片中作为控制程序。方法参见文献[3]。

(3)在Proteus软件仿真电路图中点击左下角的运行按钮,则可在LED显示点阵中看到"广东工贸"四个汉字轮流显示的结果。

从仿真图中可以看到"东"字在LED显示点阵中显示出来,设定每个字显示1秒,下秒将显示"工"字,"广东工贸"四个字循环显示。四个字显示出来如图3所示。

摘要:Proteus软件经常用于单片机仿真,本文用Proteus软件设计汉字LED点阵动态显示,给出了完整设计电路和仿真程序源代码,通过仿真运行,在LED点阵中动态显示出"广东工贸"四个汉字。仿真结果表明Proteus软件在单片机应用设计中具有重要的使用价值,能极大缩短产品开发周期,节约开发成本。

关键词:Proteus,仿真,单片机,汉字动态显示,LED点阵

参考文献

[1]周润景.基于Proteus的电路与单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2005.

[2]金炯泰,金奎焕.如何使用KEIL8051C编译器[M].北京:北京航空航天大学出版社,2002.

[3]李秀忠.单片机应用技术[M].北京:人民邮电出版社,2007.

汉字动态显示 篇2

1.1设计制作产品的背景、目的及设计要求

本项目为16x16点阵汉字显示“新年快乐”的设计,首先将本次实训的电路图在仿真软件上绘制完成,将点阵文件存入ROM,形成汉字编码,再进行相关转换,以新编码提取相应的点阵汉字显示。将相应编码代入运行程序,进行调试和准备。

1.2分工情况、工作计划及本人所承担工作

1.周一 1~4 进行分组,选题 和软件的安装 2.周二 1~4 进行电路的设计及程序编写 3.周三 1~4 进行电路的设计及程序编写 4.周四 1~4 进行说明书的填写 5.周五 1~4 答辩

本人在本次课程设计中承担电路图的绘制及相关程序的编写与调试。

1.3本课题的设计重点及难点

本次课程设计重点在于单片机控制系统程序采用单片机汇编语言进行编辑,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。而其中的难点就在于运行程序的编写及相关汉字的点阵数据,这种显示字符的点阵数据可以自行编写,也可以标准字库中提取。

在进行课题设计时需要熟练掌握相关电路软件及编程软件的使用,编写程序时需掌握一定的C语言逻辑关系的运用。在电路图的绘制时需要清楚的了解各个电路设备的功能及用途。

二、实训内容

2.1实训原理

本设计应用的扫描方法为水平方向(X方向)扫描。

每一个字由16行16列的点阵形成显示,即每个字均由256个点阵来表示,我们可以把每一个点理解为一个像素。一般我们使用的16×16的点阵宋体字库,即所谓的16×16,是每一个汉字在纵横各16点的区域内显示的。汉字库从该位置起的32字节信息记录了该字的字模信息。事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。

上半部分第一列完成之后,继续扫描下半部分的第一列,为了接线的方便,我们仍设计成由上往下的扫描方式,即从A8向A15方向扫描,按照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字。

2.2硬件设计 2.3软件设计

#include #define uint unsigned int #define uchar unsigned char code uchar seg[]={ 0x02,0x04,0x22,0x48,0x2A,0x52,0xA6,0x41,0x63,0xFE,0x26,0x40,0x2A,0x50,0x22,0x49,0x00,0x06,0x3F,0xF8,0x22,0x00,0x22,0x00,0x23,0xFF,0x42,0x00,0x02,0x00,0x00,0x00,/*“新”,0*/ 0x00,0x20,0x04,0x20,0x18,0x20,0xE3,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xFF,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x20,0x20,0x00,0x20,0x00,0x00,/*“年”,1*/ 0x00,0x80,0x07,0x00,0x00,0x00,0xFF,0xFF,0x08,0x00,0x04,0x81,0x10,0x82,0x10,0x8C,0x10,0xB0,0xFF,0xC0,0x10,0xB0,0x10,0x8C,0x1F,0x82,0x00,0x81,0x00,0x81,0x00,0x00,/*“快”,2*/ 0x00,0x00,0x00,0x04,0x07,0x08,0x39,0x10,0x21,0x60,0x21,0x02,0x21,0x01,0x2F,0xFE,0x41,0x00,0x41,0x00,0xC1,0x40,0x41,0x20,0x01,0x10,0x01,0x0C,0x00,0x00,0x00,0x00,/*“乐”,3*/ };Const uchar sm[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,};void delay(uint n){ uint i;for(i=0;i

for(j=q;j<32+q;j++)

{ P1=sm[t];

P0=seg[j];

j++;

P2=seg[j];

delay(50);t--;

if(t==0)

t=16;}

q=q+32;

if(q==128)

q=0;} } 三.结论

3.1 实训过程中遇到的问题及解决措施

在本次实验中,我组在制作的16x16点阵显示汉字“新年快乐”的课程设计中,首先在使用单片机仿真软件找寻相关设备时没有找到16x16的点阵设备,继而用四个8x8的点阵排列组合予以替代。

依据相关教材及指导教师的参考和建议,我组对于本次设计的电路图采用了通用模板设计。

此次课程设计的运行程序是我组在设计中的最大难点,后经多方查资料及参考询问,我组找到了相应汉字在点阵中的排序规律,顺利编写出代码。

3.2 今后的学习展望

经过这次的单片机课程设计,从产生设计想法到实际操作,到最终的设计完成,中间遇到的困难及困难的解决,让我更进一步了解了单片机,让我不再仅仅局限于书本上。

本次的设计经验对于我们日后的学习工作有非常重要的作用,在遇到困难时可以不仅仅从书本上找解决方案,还可以自己亲自动手实践来验证相关问题及找到解决方法。

这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。

四、心得体会

本次的设计经验对于我们日后的学习工作有非常重要的作用,在遇到困难时可以不仅仅从书本上找解决方案,还可以自己亲自动手实践来验证相关问题及找到解决方法。

单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书。单片机并不象传统的数字电路或模拟电路那样比较直观,原因是除了“硬件”之外还存在一个“软件”的因素。正是这个“软件”的原因使得许多初学者怎么也弄不懂单片机的工作过程,怎么也不明白为什么将几个数送来送去就能让数码管显示一串字符或控制一个电机的变速。对初学单片机的人来说,需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,现在市场上大多数讲单片机的书一开始就讲解较复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,能够产生什么实际效果,那么也许用不了几天就会觉得枯燥乏味而半途而废。简单的说,使用单片机实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器。再简单些,就是控制单片机哪些引脚的电平什么时候输出高电平,什么时候输出低电平。由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。

调查显示国人汉字手写能力变差 篇3

据光明日报报道, 伴随着信息技术的发展, 键盘输入替代书写, 网络用语渐成风尚———在告别“铅与火”的同时, 我们逐渐失去很多与汉字“亲密接触”的机会, 很多人变成了“键盘手”, 患上了“失写症”, “汉字危机”成为一个令人忧心的文化现象。零点指标数据针对京、沪、穗等12个城市进行了“中国人书法”系列调查, 结果显示:有94.1%的受访者都曾提笔忘字, 其中26.8%的人经常出现该情况;除此之外, 很多人经常写错别字或者写字越来越难看, 甚至惧怕手写。《通用规范汉字表》研制组组长、北京师范大学教授王宁认为, 把提笔忘字归咎于电脑技术, 在逻辑上行不通。“人们应当检讨精神追求的失落、文化素养的降低, 以及对母语和汉字缺乏敬畏之心, 没有爱惜之情———这是在基础教育阶段没有培养成写字的爱好和习惯, 而不能怪罪于人类用智慧发明出来的电脑。”她表示:“我们可以探讨汉字手写机会少了, 很多人特别是青少年写字水平下降这个问题如何解决, 不过, 没有必要把这种现象夸大为‘汉字危机’。”中国工程院院士、微电子技术专家许居衍认为, 形码输入法对汉字的传承具有重要作用。他表示, “汉字走拼音化的道路”已经在年轻一代中形成了思维定式, 人们越来越多地使用拼音输入法, 不仅写字的机会减少了, 连汉字的构造都记不住。“‘形码’是依形编码, 输入时就相当于直接输入汉字, 会写就会输入, 会输入就会写。通过这种方式, 人们就不会忘掉汉字的笔画和结构, 这才是传承汉字文化的上上之策。”

基于FPGA的汉字显示系统设计 篇4

随着技术的发展,人们对信息交换手段的不断提出新的要求,同时对文字和图形现实的要求也越来越高。传统的数字电路、单片机以及EDA技术都为今天的文字和图形图像显示提供了技术支持。而文字和图形显示所使用的场合也越来越普遍。本文以EDA技术为手段,FPGA可编程逻辑器件为载体,讨论一种基于FPGA的汉字显示系统设计方法。

1 LED点阵显示原理

本文利用16×16LED点阵作为显示器件。

16×16的LED点阵是用256个发光二极管由4块8×8的点阵块组成,如图1、图2。其中Q0~Q15为点阵块的行选线,COM0~COM15为点阵块的列选线,每一行和列上的发光二极管都有一个公共的阴极(或阳极),一般以动态扫描方式显示。扫描分为点扫描,行扫描和列扫描三种方式即按点,行和列抽取字型码。以列扫描为例,由时钟提供脉冲信号,每当有一个脉冲到来时就扫描一列,通过地址数据来控制一列中的灯亮。同时显示时为了满足视觉暂留的要求,扫描频率必须大于人眼的识别速度即频率大于1024Hz,但在实际设计时应视情况而定。

2 系统设计原理

2.1 电路控制原理图

整个电路由五大部分组成,如图3所示。(1)四位二进制计数器:提供系统工作时钟和地址工作寻址时钟;(2)分频器部分,由4个74LS160串联组成的;(3)2位二进制计数器进行寻址操作;(4)并置模块完成时钟寻址计数整合扫描;(5)存储器ROM模块用来储存汉字显示电平数值。

2.2 总体设计思路

本设计的目的是要求循环显示“青海民族大学”六个汉字。其中en端作为电路的开关信号,高电平有效;时钟信号clk:一路作为lpm counter0的clk信号,用来控制不断循环扫描指定的汉字,另一路接入由74160组成的分屏器的clk中;74160的输出作为lpm counter1的clk信号,用以来控制显示的一个汉字;将lpm counter0和lpm counter1的输出并置后作为ROMZI模块的address信号来控制整体汉字的循环显示;最后用16位数据线在LED点阵显示板上自动循环的输出。

2.3 模块简介及相应的VHDL程序

本文仅简单介绍ROMZI模块和并置模块。

2.3.1 ROMZI模块

ROMZI模块直接利用QuartusⅡ中的Mega Wizard Plug-In Manager定制而成。定制前首先要制作LPM ROM初始化文件,用来存储待显示汉字的字模数据,然后按照LPM Mega Wizard Plug-In Manager的向导提示,根据设计要求进行定制。

图4为所作者定制的ROM模块中的初始化汉字“青海民族大学”的字型码。数据分配模块MUX要求能在16个时钟作用下,从ROM中读出一列(一个汉字的16个字型码)分别送到地址选通端中的输出端。

2.3.2 并置模块

模块的VHDL程序:

3 仿真结果

上述各模块分别在QuartusⅡ中通过了仿真验证,最后对整体设计进行了硬件验证。将设计下载到Cyclone系列的EP1C12Q240C8器件中,验证汉字滚动显示扫描情况均正常,能够按照预想进行循环显示,可以正确地实现所要求的设计功能。

4 系统扩展

本文只基于16X16点阵设计,所以输出端和ROM模块内的相应内容都是与其相匹配的设置,可稍加修改设计成为8X8或32X32位的显示,当需要显示的字数不同时只需修改ROM模块,lpm counter1的位数和并置模块的端口位数即可。此设计也可以扩展到可编程片上系统SOPC上实现,输出显示可用液晶显示屏效果更为理想。

5 结束语

本设计简单可行,使用了QuartusⅡ中自带的模块组成,尤其利用QuartusⅡ中的Mega Wizard Plug-In Manager定制模块,对所显示汉字进行预存储。如果显示内容有变化则只需修改相应的存储数据,使用方便,性能稳定。

参考文献

[1]汪国强.EDA技术与应用(第3版),电子工业出版社,2010.

[2]李玉山,来新泉.电子系统集成设计导论,西安电子科技大学出版社,2008.

汉字动态显示 篇5

关键词:军事指挥系统,嵌入式操作系统,VxWorks,WindML,汉字点阵

由于对实时性和可靠性的要求,现代军事指挥系统越来越广泛地采用嵌入式实时操作系统VxWorks。WindRiver公司的媒体库WindML(Wind Media Library)提供了基于VxWorks的图形解决方案,其UGL组件提供了显示模式设置、标准输入/输出控制和点、线、面作图等函数,但没有直接提供完备的汉字显示解决方案,不支持汉字显示。针对实际指挥系统中人机交互界面的需求,全西文的的交互方式显然不便于文件的传输和信息的交换。本文通过对汉字编码和WindML显示机制的分析,给出了VxWorks嵌入式平台下汉字显示的实施方案。

1 VxWorks在军事指挥系统中的应用

所谓嵌入式系统,是指内置到火控、战车、飞机、导弹以及卫星和舰船导航等各类武器系统和作战平台上的计算机系统。随着信息技术的迅猛发展,尤其是计算机技术和微电子技术的快速发展,嵌入式系统在军事上得到了广泛应用。嵌入式计算机系统,最早出现在20世纪60年代武器控制中,后来用于军事指挥控制和通信系统,所以军事国防历来就是嵌入式系统的一个重要应用领域。现在,各种武器控制(火炮控制、导弹控制、智能炸弹制导引爆装置)、坦克、舰艇、轰炸机等,以及陆海空各种军用电子装备、现代化的军事指挥系统等都可以看到嵌入式系统的影子。

在实时嵌入式操作系统中,VxWorks以其高可靠性和高实时性得到了广泛的应用。VxWorks是美国Wind River System公司(风河公司,简称WRS公司)推出的一个实时操作系统。VxWorks是一个运行在目标机上的高性能、可裁剪的嵌入式实时操作系统,具有专门为实时嵌入式系统设计开发的操作系统内核,它包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几部分。

VxWorks在军事指挥系统中应用时,由于指挥系统对人机交互能力的要求较高,需要对武器参数、操作进程以及作战指令等战场信息进行显示,因此迫切需要完成VxWorks下的中文显示开发。军事指挥系统中所显示战场信息如图1所示。

2 VxWorks下汉字显示方案

2.1 WindML基本功能

WindML是由WindRiver公司提供的媒体库,其UGL组件提供了显示模式设置、标准输入/输出控制和点、线、面作图等函数,以及对芯片、输入/输出设备、音频/视频、帧缓冲器等开放的应用程序接口。

WindML的主要功能有二维图形API、事件服务、区域和视窗管理、多媒体API和资源管理。其中,二维图形API是最常用的部分,包括基本绘图操作(如画线、矩形、椭圆、多边形、点等),选择字体输出文本、位图管理、光标管理、批量绘图操作、图形上下文、色彩管理和双缓冲等。事件服务程序用来处理输入设备的输入请求。它会把键盘、鼠标等输入数据转化为事件并加入应用队列;区域和视窗管理可以在界面上定义一个区域或多线程之间共享的窗口,以进行绘图操作;多媒体API支持NTSC,PAL,SECAM等视频制式下DSP或混频器两种设备的音频输出,也支持JPEG图形格式;资源管理器是指常规的WindML资源(例如设备和事件队列)、内存管理和驱动器注册等资源的建立、控制和删除。

2.2 WindML字体驱动体系结构

WindML字体驱动在WindML 2D API上提供了一个通用的抽象层,允许应用程序通过一个通用2D字体API库使用不同的字体引擎。通用2D字体API是提供给应用程序使用字体API的公共接口。字体驱动不同于VxWorks中的其他驱动,它不允许执行或使用任何图形驱动接口以下的程序,也就是说它不直接访问硬件,只访问系统所使用的图形驱动或间接通过UGL图形驱动结构来访问硬件。这就允许字体驱动可以运行在任何图形驱动之上,与字体引擎硬件无关。WindML字体驱动体系结构如图2所示。

2.3 点阵汉字输出过程

点阵汉字的显示是利用WindML的图形输出功能来实现的。设计开发中利用WindML对位图字符显示和双字节编码的支持,按照WindML位图字体文件的格式完成汉字点阵的转换存储,并使用WindML的双字节显示函数实现点阵获取、点阵显示,将汉字显示出来。

WindML有很多字库文件,原始安装状态下都是西文字库文件,要在VxWorks系统中显示中文汉字,解决方案是将西文字库文件修改成为中文字库文件,即设计一种类似西文字库格式的C语言文件,文件中存储双字节的汉字编码、点阵信息及字体的控制信息等。字库文件经过系统配置、编译后生成点阵字库文件目标代码,点阵驱动程序从目标代码中获取点阵信息传递给应用程序编程接口,应用程序调用图形显示函数输出汉字。WindML下汉字显示处理过程如图3所示。

2.4 点阵汉字存储结构

国家标准对汉字库结构做了统一规定:字库分为94个区,每个区有94个汉字,每个汉字有确定的区和位编码,用两个字节表示,第一个字节表示汉字所在的区号,第二个字节表示位号,即所谓的区位码。每个汉字在字库中以点阵字模形式存储,一般采用16×16点阵、24×24点阵,每个点用二进制位(0或1)表示,对应在屏幕上显示出来就是相应的汉字。每个汉字都有惟一的区位码,通过区位码计算出汉字在字库中的位置,从而确定汉字的字模。

点阵汉字字库C语言文件有固定的结构,分为三个部分:点阵属性表、点阵信息描述总表和点阵信息表。

点阵属性表 用来描述点阵汉字的字符结构和字模结构参数的结构体,包含参数有像素大小、字符名称、字符家族名称等,特别定义了指向点阵信息总表的数组指针,字体驱动程序利用这个指针寻找点阵信息总表。

点阵信息描述总表 它是一个存放指向点阵信息表指针的动态数组,其元素个数取决于汉字点阵信息表的个数。

点阵信息表 点阵信息表以数组的形式表示,主要用来存储汉字的GB2312码(西文是ASCII码)和详细点阵信息。可以是一个表也可以是若干个表。把汉字按GB2312编码的页分类,构建多个汉字分表,也可以把中西文装在混合表里做成一个大表,西文字符被扩展成双字节存储。

3 点阵汉字字库实例

自己开发点阵存储、点阵获取、点阵显示,改造WindML的双字节或单字节显示函数,使其能判断汉字码,一旦判断出汉字码,则使用自己开发的点阵获取、点阵显示等把汉字显示出来。该方法对点阵的操作更加灵活,适合非标准的点阵算法,或者当开发者已有成熟的点阵操作方法时,把该方法绑接到WindML上。

不必理会WindML双字节编码机制,这里需要的是一个汉字的点阵字库,这个点阵字库不必按照WindML的双字节编码机制进行编码,里面所存储的只是汉字的点阵信息和区位码信息,这个字库可以通过从Windows中导出;由于不选用WindML的双字节编码机制,所以对于VxWorks中关于如何控制打点以及显示点阵字体驱动,并不需要具体了解;更重要的是拥有更大的灵活性,只需把自己所写的汉字显示函数绑定到WindML上面即可。因此这里必须要求自己写点阵的存储、点阵显示、汉字显示函数。做起来比较简单,只要求了解汉字编码的基本知识,即汉字双字节编码中,高、低字节的最高位都是为‘1’,而西文字符编码中最高位为‘0’,利用这点来判断所要显示的字符是汉字还是英文。

在设计开发过程中,在现有的西文字库的基础上进行修改,添加相应的字体参数和汉字的点阵信息,形成点阵汉字字库文件uflhz12.c,uflhz16.c,uflhz24.c,以分别存储12,16和24号宋体的字库信息。这个过程用Windows编程来实现。

以下是16号宋体字库文件中的点阵信息表:

点阵信息表后定义了点阵信息描述总表:

该指针指向点阵信息表的首地址,并被点阵描述结构直接调用。

字库文件的最后定义了点阵属性表,该表规定了整个点阵字库的属性以及字模和间距,并定义点阵指针。

4 结 语

在VxWorks嵌入式平台下采用点阵汉字显示技术,使得战场信息、态势、指令等获得了中文显示。最终使设计开发的军事指挥系统不仅具有良好的可靠性和卓越的实时性,同时具有直观而方便的中文平台以及友好的交互能力,大大提升了整体作战效能。

参考文献

[1] WindRiver System,Inc..VxWorks Programmer′s Guide[Z].

[2] WindRiver System,Inc..WindML Programmer′s Guide[Z].

[3] 刘尚军,张志兵.ARM嵌入式技术原理与应用[M].北京:北京航空航天大学出版社,2007.

[4] 张海堂.Visual C++6.0编程指南[M].北京:航空工业出版社,1999.

[5] 王学龙.嵌入式VxWorks系统开发与应用[M].北京:人民邮电出版社,2003.

[6] 梁勇,孟桥.嵌入式操作系统VxWorks中的多媒体组件WindML 2.0[J].现代计算机,2002(10):88-91.

[7] 李德元.嵌入式计算机技术及其应用[J].计算机工程,1998,24(10):7-11.

[8] 孔详营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Tornado[M].北京:中国电力出版社,2002.

[9] 陈智育,温彦军,陈琪.VxWorks程序开发实践[M].北京:人民邮电出版社,2004.

动态移位显示屏的设计 篇6

1.1 点阵LED的概述

LED是发光二极管,LED工作电压低,能主动发光且有一定亮度,亮度又能用电压调节,本身耐冲击、抗振动、寿命长。把红色和绿色的LED放在一起作为一个象素制作的显示屏叫双色屏或彩色屏;把红、绿、蓝三种LED管放在一起作为一个象素的显示屏叫三色屏或全彩屏。

随着LED应用领域的扩大,要求生产更为直接和方便的LED显示器件。因而出现了数码管、字符管、电平管、LED点阵等多种LED显示器。不管显示器的结构怎么变,它的核心部件仍然是发光半导体芯片。例如一个8×8的点阵是由64个发光二极管按一个规律组成的[1]。

1.2 显示原理

人眼的亮度感觉不会因光源的消失而立即消失,要有一个延迟时间,这就是视觉的惰性。视觉惰性可以说是LED显示屏得以广泛应用的生理基础。首先,在LED显示屏中可以利用视觉惰性,改善驱动电路的设计,形成了目前广为采用的扫描驱动方式。扫描动方式的优点在于LED显示屏不必对每个发光灯提供单独的驱动电路,而是若干个发光灯为一组共用一个驱动电路,通过扫描的方法,使各组发光灯依次点燃,只要扫描频率高于临界闪烁频率,人眼看起来各组灯都在发光。由于LED显示屏所使用的发光灯数量很大,一般在几千只到几十万只的范围,所以节约驱动电路的效益是十分可观的。

2. 系统硬件部分设计

硬件部分由单片机最小系统电路、LED点阵显示屏模块、电子屏驱动模块、串口通信模块、外部数据存储模块等几大块组成。

2.1 单片机最小系统

该模块为此设计的控制电路,其功能是从上位机经过串行通信端口发来的数据中读取字库码数据,再将这些数据送到扩展的外部数据存储中。接收完毕后从数据存储器读出字库码送到LED点阵屏中显示。系统由单片机、时钟电路和复合电路组成。其中时钟电路采用11.0592MHz的晶体振荡器,目的是用于串口通信。

2.2 LED点阵显示模块

该数码点阵是共阳的,其连接方式如图1,要使点阵上Aa二极管点亮,则A为高电平,a为低电平。其余依此类推。因第一排至第八排发光二极管的阳极是连接在一起的,因此,该点阵为共阳点阵,当然也可以理解成共阴连接方式。

该模块的功能是为了显示文字信息,因此也是本设计的主要模块,此点阵屏应有80×16点,是由20个8×8的LED点阵组成,可同时显示5个汉字。如图2所示。上面为列管脚,而下面则为行管脚。本设计为行扫描,行由P1.0———P1.5接的两片74HC138来控制,而列由10片HC595来控制。

本设计采用逐行扫描方式,扫描字送P2口,数据送P0口。P2口接A~H,P0口接a~h。当P2的扫描字为80H,P0口的数据为7FH时,此时第一号Aa发光二极管点亮。

2.3 点阵屏驱动模块

点阵驱动模块列控制主要由10块74HC595组成,构成了80位,以控制点阵显示屏的80列。两块74HC138构成输出16位,以控制点阵显示屏的行。74HC595是硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。74HC595具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别得时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入存储寄存器。如果两个时钟连在一起,则移位寄存器总是比储存寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),一个串行输出(Q7)和一个异步的低电平复位,储存寄存器有一个并行8位,具备三态的总线输出,当使能OE时(为低电平),储存寄存器的数据输出到总线。

8位串行输出/输入或者并行输出移位寄存器,具有高阻关断状态,三态。输出寄存器可以直接清除100MHz的移位频率。74HC595的主要优点具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。它的使用方法很简单,在正常使用时SCLR为高电平,G为低电平。从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。入时钟SCK上升沿有效一次,知道八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。

本次设计就是利用了74HC595的串行输入,并行移位输出。数据由单片机从外部数据存储器取出,再一位一位地放送到第一个74HC595的第9引脚向第二个74HC595的第14引脚进一位,以此类推,直至发送80位装满10个74HC595,锁存数据。

点阵驱动模块的行控制是由两片74LS138来控制的。将单片机的P1的前五位接到两片74LS138上,分配好地址。而两片74LS138的输出就刚好控制点阵屏的16行。

2.4 串口通信模块

本设计采用串口的同步通信的全双工方式。采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。在同步传输过程中,一个字符可以对应5~8位。当然,对同一个传输过程,所有字符对应同样的数位,比如说n位划分为一个时间片,发送端在一个时间片中发送一个字符,接收端则在一个时间片中接受一个字符。本次设计采用MAX232作为通信的芯片,因为采用同步通信的方式,所以只用了发送和接受两个接口。

MAX232芯片是美信公司为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。

2.5 外部数据存储模块

本设计采用具有8k×8存储量的数据存储器Intel6264,它与74HC373三态输出的八D透明锁存器构成了外部数据存储模块,挂到单片机的系统总线上。

Intel6264的容量为8KB,是28引脚双列直插式芯片,采用CMOS工艺制造。

Intel6264的操作方式:

(1)写入:当和为低电平,且和CE2为高电平时,数据输入缓冲器打开,数据由数据线由D7~D0写入被选中的存储单元。

(2)读出:当和为低电平,且和CE2为高电平时,数据输出缓冲器选通,被选中单元的数据发送到数据线D7~D0上。

(3)保持:当为高电平,CE2为任意时,芯片未被选中,处于保持状态,数据线呈现高阻状态。

3. 单片机显示控制的软件设计

本文设计的LED点阵显示牌可实现静态显示、闪烁显示、移位显示三种显示方式。显示方式的设置由微机任意控制,微机在传送汉字点阵字模或字符ASCH码时,先传送显示方式控制字,单片机根据接收到的显示方式控制字,确定显示方式。显示过程由单片机定时中断程序控制,每次定时中断点亮一行,定时中断时间为1/1024秒,每中断8次,即可对整个显示屏扫描一次,完成一屏信息的刷新,每秒显示画面数达32屏,可保证画面无闪烁感。在静态显示方式下,只要在每一定时中断程序中传送一行点阵数据及相应的行扫描信号,按顺序循环点亮一行,即可实现静态显示。闪烁显示方式与静态显示方式类似,不同的是每隔一定时间控制显示牌黑屏一定时间,点亮时间与黑屏时间相等,即可达到闪烁显示的目的[3]。

在动态移位显示方式下,显示牌的显示内容每隔一定时间循环左移1列,动态移位显示的效果是由一幅幅不同内容的屏幕画面组成的,因此在软件设计上,只要按一定时间间隔改变显示缓冲区的内容,使显示缓冲区的点阵数据左移一列,即可实现动态移位显示的效果,由于显示缓冲区所有数据左移1列需要一定时间,不可能在两次定时中断间隔内实现这一处理过程,为此,需要设置两个显示缓冲区,一个用于保存当前屏幕显示的数据,另一个用于对当前数据左移一列,到达左移时间间隔后,切换当前显示缓冲区到已左移一列的缓冲区,然后对另一缓冲区执行左移一列的处理,在左移之前,把当前显示缓冲区的内容复制到要进行左移的缓冲区,保证两个显示缓冲区数据的一致性[4]。

采用动态移位显示的目的主要是使同时显示字符数较少的显示牌能显示较多内容,因此,在动态移位显示方式下,微机传送的汉字数或ASCII码字符数可以比显示牌所能同时显示的字符数要多,为此,显示缓冲区的大小也应比显示牌能显示的点阵数据大。随着显示缓冲区大小的增加,移位处理的时间也增加,这时可以通过提高CPU时钟频率、延长定时中断时间间隔等方式增加移位处理的时间,当要显示的内容不太多时,采用这些方法可以达到目的,但当动态移位显示的内容是显示牌同时显示内容的数倍时,采用对显示缓冲区数据移位的算法已不能满足要求。这时可采用显示缓冲区内容固定不变,而改变显示缓冲区起始地址指针的方法。假设显示x x牌点阵为8 nl点,动态显示内容为8 n(n>m)点。显示第一屏时,显示缓冲区的起始地址指针指向第1行第1列,显示区为8行x(1~re)Y0的窗口区,移位显示第二屏时,显示缓冲的起始地址指针加1,显示区为8行X(2~m+1)列的窗口区,通过改变显示缓冲区的地址指针,依次使显示窗口区右移一列,把显示窗口区的点阵数据和行扫描信号移位到74HC4094的输出端并锁存到74HC373和74HC4514的输出端,即可实现任多个字符的动态移位显示。

4. 总结

以8×8点阵为基础,设计了一个动态移位显示屏。全屏由20块8×8点阵LED显示模块组成,显示采用动态显示,使文字或图形能实现静止、移入移出等多种显示方式。在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。本系统具有硬件少、结构简单、容易实现、性能稳定可靠、成本低等特点。

参考文献

[1]陈元灯.LED制造技术与应用[M].北京:电子工业出版社,2009.

[2]李广弟.单片机基础[M].北京:航空航天大学出版社,2007.

[3]赵嘉蔚.单片机原理与接口技术[M].北京:清华大学出版社,2010.

汉字动态显示 篇7

A1.问题的提出

实际操作Oracle数据库的过程中, 想要显示的汉字有时会莫明其妙地变为英文问号或者一些英文乱码。其实, 这是因为客户端Oracle字符集“NLS_LANG”设置不同于服务器数据库字符集“CHARACTER_SET”, 造成中文字符显示错误。因此, 解决汉字显示的问题, 最简单的方法就是将数据库的客户端字符集与数据库字符集设置一致。然而, 如果存储的汉字出现乱码, 问题就非常复杂。本文试从此方面进行Oracle汉字存储的微观分析。首先, 简介一下计算机存储字符的基础知识。

(1) 英文ASCII编码

ASCII是英文American Standard Code for Information Inter-change的缩写。它是计算机编码方案的基础, 是最通用的单字节编码系统。计算机只能以二进制“0”和“1”代码存储数据, 所以ASCII码将每个字符对应一个数值, 比如字母A的ASCII码是65, 数值0的ASCII码是48。但是, ASCII码比较原始, 使用一个7位二进制存储, 最多只能代表128个字符。其中, 第0—32号和第127号是通信和控制字符, 比如“回车”、“NULL”、“退出”等;第33—126号是94个字符, 包括:第48—57号是0—9十个数字, 第65—90号是26个大写英文字母, 第97—122号为26个小写英文字母, 其余32个字符是一些标点和运算符号。

(2) 简体中文GB2312-1980编码

GB2312是中国国家标准的简体中文字符集, 基本满足了汉字的计算机处理需要。GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母, 共7445个图形字符。其中包括6763个汉字, 其中一级汉字3755个, 二级汉字3008个。GB2312用“分区”存储字符, 每区有94个汉字或符号, 称作区位码。01—09区为特殊符号;16—55区为一级汉字, 以拼音排序;56—87区为二级汉字, 以部首/笔画排序;10—15区和88—94区为空。所以, 汉字的总码位共72×94=6768个, 其中第5590 (D7FAH) —5594 (D7FEH) 位是5个空值。汉字使用两个8位二进制存储, 占用两个字节, “高位字节”存储区号, “低位字节”存储位号。“区字节”的存储范围是A1H—F7H, 即01—87区的区号加上A0H;“位字节”的存储范围是A1H—FEH, 即01—94位的位号加上A0H, 一个汉字的区号和位号都加上160, 就得到了机内码。GB2312字符集的第一个汉字是“啊”, 区位码是1601:区号=16、位号=01, 高低字节都加上A0H得到汉字处理编码B0A1H。

2.数据库数据的存储和显示

如果只存储英文, 最好采用us7ascii单字节的字符集, 高效且节省空间。

如果存储汉字, 最好选择zhs16gbk字符集, 在中文处理和统计方面比较方便。

但是, 由于诸多历史原因, 企事业单位的很多应用系统都使用基于us7ascii字符集的数据库。近年来, 由于引进了基于zhs16gbk字符集数据库的应用程序, 造成数据库客户端字符集的设置不同, 使得汉字显示和存储遇到了上述一开始提到的问题。以下通过实例分析数据库客户端字符集和数据库字符集不同时的汉字存储和显示。

(1) 同一客户端需要连接两个字符集的数据库

Oracle官方不赞同使用字符集转换功能, 虽然us7ascii是zhs16gbk的子集, 也不十分建议子集到超集的升级。所以启动不同的应用程序之前, 要按所连数据库的字符集修改本地客户端的字符集设置。有两个方法:

1) 修改应用程序的初始化设置, 程序连接数据库前, 自动执行Oracle客户端字符集设置“set nls_lang=AMERI-CAN_AMERICA.US7ASCII”或者“set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK”。

2) 编写.reg注册表文件, 程序启动前手动修改客户端字符集, 如图1所示。

不过, 也可尝试升级数据库的字符集, 从根本上避免连接两个字符集的数据库。可用“ALTER DATABASE...”语句修改数据库, 但必须是子集到超集的升级。此项操作存在风险, 慎重执行。如下步骤:

(2) 数据库客户端的字符集不同于数据库的字符集, 如何解决存储汉字的错误。

测试环境:客户端操作系统是WindowsXP简体中文版sp2, 服务器是Windows2003 Server简体中文版, 数据库及其客户端都是Oracle9.2.0.1。

1) 数据库的客户端字符集是数据库字符集的子集。

(1) 字符集:数据库客户端字符集是us7ascii, 数据库字符集是zhs16gbk。

(2) 测试结果:从客户端保存的汉字出现乱码。

(3) 微观分析:Oracle客户端将汉字传送给服务器前会自动转换编码, 将汉字编码变为ASCII码。由于标准ASCII码不能表示汉字, 所以一个汉字被替换为两个ASCII字符。

(4) 例如:汉字“中”的机内码是D6D0H, 由于ASCII码利用一个7位二进制存储, 所以转换时造成汉字高低位两个字节的首位缺失。即:高位字节和低位字节同时减去80H, 得到了它的国标码:5650H。56H和50H两个字节就是英文V和P的机内码。英文字符集客户端传送给中文字符集数据库的一个汉字就变成了两个单字节字符。汉字GB2312-80字符集的区位码范围是1601D—8794D, 区码和位码同时加上20H是汉字的国标码, 范围是1001H+2020H—575EH+2020H, 即:3021H—777EH, 对应的ASCII字符就是“0!”—“w~”。因此, 掌握了汉字区位码、国标码和机内码的含义和换算, 就有了处理错误编码的技巧和方法。万一客户端录入存储汉字出现如上错误, 可以科学计算还原汉字。如图2所示:

(5) 图例解释:

a) Oracle的convert函数将数据存储从一种编码转换为另一种编码。语法:convert (‘字符’, ‘目标字符集’, ‘源字符集’) 。

b) Oracle的dump函数返回参数的存储值。语法:dump (‘参数’, 1016) , 返回参数类型、占用字节数、数据库字符集设置、存储值的十六进制表示。1010是十进制值表示。

c) 还原乱码为汉字。汉字ASCII值=汉字编码高位字节×256+低位字节。通过逆运算, 将两个乱码字符的ASCII值加上128, 即:两个8位二进制字节置回丢失的首位1。chr (前字符十进制复原值×256+后字符十进制复原值) 得到相应的汉字。

d) 转换错误的乱码。取得汉字机内码的十进制值, 将每个字节的值减去128, 即:首位1变0。chr (单字节值-128) 得到相应的字符乱码。

e) WTZH是zhs16gbk字符集数据库的连接串。

(6) 结论:如果发生存储错误, 必须全是中文字符, 包括:汉字、中文标点、运算符等, 才能利用以上算法还原每个双字节为正确汉字。万一含有英文及其标点符号等单字节编码的字符, 就需要复杂的字符串分析, 甚至需要汉字库的乱码对照表, 通过单、双字节依次比对来筛选乱码, 还原汉字。

2) 数据库的客户端字符集是数据库字符集的超集。

(1) 字符集:数据库客户端字符集是zhs16gbk, 数据库字符集是us7ascii。

(2) 测试结果:从客户端保存的汉字全变成英文问号。

(3) 微观分析:客户端的字符集包括数据库字符集, Oracle客户端将汉字传送给服务器时找不到相应的对照关系, 就会用英文问号代替每一个字符, 所以汉字全变成“?”。

(4) 例如:存储“中华人民共和国”, 因为英文ASCII码表找不到对应值, 所以保存的全是?号。当然, dump函数传递的汉字参数同样变为?号, 如图3所示:

(5) 图例解释:

a) Oracle的userenv (‘lang’) 取得数据库客户端的字符集:zhs16gbk。

b) Oracle的userenv (‘language’) 取得数据库的字符集:us7ascii。

c) 字符集前的语言和地域设置不影响数据的存储和显示。Language代表服务器消息的语言, territory为服务器的日期和数字格式。

d) WTUS是us7ascii字符集数据库的连接串。

(6) 结论:存储英文等单字节字符没有问题。但是, 存储中文字符的错误无法挽回。

(3) 数据库客户端的字符集和数据库的字符集相同, O-ralce不进行编码转换, 存储汉字正确, 如图4所示。

(4) 数据库客户端的字符集不同于数据库的字符集, 显示汉字的错误同理于存储汉字, 如图5所示。

1) 图例解释:

(1) 数据库客户端字符集是zhs16gbk, 数据库字符集是us7ascii, 将汉字显示为错误的ASCII字符。

(2) 数据库客户端字符集是us7ascii, 数据库字符集是zhs16gbk, 将汉字显示为?号。

(3) Oralce的dump () 函数得到cnchar字段的机内码一致, 两个数据库内存储的汉字正确。

2) 结论:仅显示错误没有问题, 按开篇提出的设置客户端字符集和数据库一样就能正确显示汉字。

3.数据库数据的导出和导入

利用Exp/Imp导出和导入数据是最安全的备份和恢复数据库的方法简便、高效。但是, 假如数据库的客户端和数据库字符集不一致, 就会发生备份和恢复错误。为此, 编制程序生成并存储GB2310—80的全部6763个汉字, 分析数据库中文数据的备份和恢复。

(1) 通过C#2005生成区位码范围1601D—8794D的简体汉字, 如图6所示。

核心语句解释:

1) 设置C#语言集:Encoding GB=system.Text.Encoding.GetEncoding ("GB2312") ;

2) 取得区码后, 加上A0H变为机内码:chrBt[0]= (byte) (i/100+160) ;

3) 取得位码后, 加上A0H变为机内码:chrBt[1]= (byte) (i%100+160) ;

4) 取得简体汉字:chrCn=GB.GetString (chrBt) ;

5) 如果位码超过94, 跳到下区从01开始:if (i.ToString () .EndsWith ("94") ) {i=i+6;}。计算机的基本存储单位是一个8位二进制, 数值94十六进制为5EH, 加上A0H变为机内码是FEH。那95的变形码就是FFH, 全1不存储数据。96—99的变形码是100H—103H, 超出一个字节。所以, 位码94之后不能存储汉字编码。

(2) 数据库客户端的字符集不论与数据库的字符集是否相同, 导出DMP文件的表数据都正确, 如图7所示。

1) 图例解释:图中文件名命名规则:zh是zhs16gbk, us是us7ascii。to左侧代表数据库字符集, 右侧代表客户端字符集。

2) 结论:表数据以二进制编码存储, 只要存在表中的汉字正确, exp备份的结果是一样的。但是, 如果数据库客户端和数据库字符集不同, 表字段的汉字描述、后台函数过程里的中文都会变成乱码或?号。同理, 导入和目标数据库字符集一样的DMP文件, 客户端字符集不影响表数据的导入, 只是中文描述发生错误。

(3) 数据库客户端的字符集和数据库的字符集相同, 如何正确导入不同于目标数据库字符集的DMP文件。

数据库DMP文件的第52和53字节记录了源数据库的字符集, 也就是DMP文件的字符集设置。第2和3字节记录了导出时客户端的字符集设置。通过SQL语句:“selectnls_charset_name (to_number ('0001', 'xxxx') ) , nls_charset_name (to_number ('0354', 'xxxx') ) from dual;”得到0001H代表us7ascii字符集, 0354H代表zhs16gbk字符集。

第2和3字节的设置不会影响DMP文件的导入, 要导入不同于目标数据库字符集的DMP文件, 必须修改第52、53字节为目标数据库字符集的十六进制值, 如图8所示。

数码管动态显示及实现方法 篇8

1 系统整体设计

本系统是由AT89C52单片机、2个74HC573锁存器U3和U4, 1个10K的电阻排, 6个7段共阴极数码管、电源电路和复位电路组成。

74HC573锁存器的锁存端LE是高电平的时候, 它的输入端D0~D7和输出端Q0~Q7是直通的, 此时输入端数据会直接输出给输出端。74HC573锁存器的锁存端LE是低电平的时候, 输入端和输出端断开, 输出端保持原来的数值。

通过2个74HC573锁存器可以实现对数码管的段选和位选的选择。所谓段选是表示数码管中亮的内容 (比如1, 2, 3, 4, 5.......) , 而位选是表示让哪一个数码管亮, 本系统中同时接入了6个数码管, 通过对位选的赋值, 可以选择让哪一个数码管亮。

锁存器U3的输出WE1、WE2、WE3、WE4、WE5和WE6用来控制数码管的位选, 锁存器U4的输出a、b、c、d、e、f、g和h用来控制数码管的段选, 这两个锁存器的输入端全部接在了P0口上, P0口的内部无上拉电阻, 需在它的外部加一个10K的上拉电阻排P1, 这样的话, 单片机一上电后, P0口就是高电平。

2 数码管显示分析

如果想让哪个数码管亮, 那么先将控制位选的锁存器U3的锁存端LE设为高电平, 然后通过P0口送数值选择哪一位数码管亮, 当这一位的数码管亮了以后, 然后把锁存端LE设为低电平, 锁存器的数据输出端的位选就保持住了, 然后再把控制段选的锁存器U4的锁存端LE设置为高电平, 然后通过P0口送数值, 使数码管显示相应的数值, 然后再把锁存器U4的锁存端LE设置为低电平, 这时候段选和位选都赋上值了, 数码管就亮了, 并且显示相应的数值。这就是用一个P0端口通过两个锁存器U3和U4控制六位数码管。

要在第一个数码管上显示数字1, 可以这样操作:将锁存器U3的锁存端LE设为高电平, 通过P0口送数0xfe, 然后再将锁存端LE设为低电平, 这时在锁存器U3的右端就保持住了0xfe这个数值, 不管再怎么改变P0口的数值, 锁存器U3右端的数值还是0xfe, 不会发生变化;将锁存器U4的锁存端LE设为高电平, 然后给P0口送数据0x06 (0x06对应十进制数1) , 然后将锁存端LE设为低电平, 这样就把段选数值锁存住了, 这样的话在第一个数码管上就会显示十进制数字1。

3 动态显示实现方法

通过编写“从左向右让六位数码管中的每一位每隔一秒依次显示123456”的程序来讲述数码管的动态显示实现方法。

在程序中会用到共阴极数码管编码表{0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d}, 此编码表中的数值分别对应十进制数1, 2, 3, 4, 5, 6, 此编码表的表示可以使用数组biao[], 将biao[]定义成编码的格式, 利用biao[]数组将编码表{0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d}中的数值取出来。利用位选数组biaowe[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf}选择点亮六位数码管中的哪一位。在程序中, 利用定时器和中断服务程序来控制数码管的显示时间实现了数码管的动态显示。部分程序如下所示:

此程序是让6个数码管中的数值依次每隔1秒显示, 现在稍微得加快数码管显示速度, 通过将程序中的aa==40修改为aa==10让数码管中的数值依次每隔250毫秒显示, 通过单片机仿真系统原理图, 可以看出数码管显示速度加快;将数码管显示速度进一步加快, 通过修改程序让数码管中的数值依次每隔50毫秒显示, 观察数码管的变化效果, 可以看到数码管显示速度加快, 6个数值在数码管上隐约全部显示出来;再让数码管中的数值依次每隔5毫秒显示, 看看数码管的变化效果, 可以看到123456这六个数在数码管上完全清晰地显示出来了。

4 结束语

在本文中, 通过对锁存器功能的介绍、数码管显示的分析和案例程序的编写, 详细阐述了数码管的动态显示及实现方法。

摘要:本文讲述利用74HC573锁存器和定时器来实现对数码管的动态显示, 通过从左向右让六位数码管中的每一位每隔一秒依次显示123456来阐述数码管动态显示具体实现方法。

关键词:动态显示,数码管,锁存器

参考文献

[1]吴振磊, 刘孝赵.74HC595在单片机控制多位数码管中的应用[J].科技广场, 2013.

上一篇:语感及其培养下一篇:安全技术管理类专业