1、电气与信息工程系课程设计任务书10/11学年 2学期 11年6月3日专业电力系统自动化班级电力09-9(1)课程名称单片机原理设计题目LED点阵广告牌设计指导教师起止时间2011-6-3周数1设计地点301设计目的:通过为期一周的单片机设计,完成LED点阵广告牌设计原理及调试运行。设计任务或主要技术指标:1.设计一款能显示不同字符的LED点阵广告牌;2.设计不同的字符切换效果(闪烁,静止,平移等);3.设计控制按钮,可以在不同的效果间切换;*4.(创新功能) 其他功能;设计进度与要求:1.系统组成,确定,分析,系统框图,应用背景;2.硬件电路设计及原件清单;3.软件设计及系统流程图;4.仿真调
2、试;5.参考文献及总结;主要参考书及参考资料:1单片机原理及应用:C语言版/周国运主编.-北京:中国水利水电出版社,20092全国计算机等级考试二级教程.C语言程序设计:2010年版/教育部考试中心.-北京:高等教育出版社,2007.8(2009重印)教研室主任(签名) 系(部)主任(签名) 年 月 日课程设计评定意见设计题目: LED点阵广告牌设计 学生姓名: 王金涛 专业 电力系统自动化 班级 电力09-9-(1) 评定意见:评定成绩: 指导教师(签名): 年 月 日评定意见参考提纲:1.学生完成的工作量与内容是否符合任务书的要求。2.学生的勤勉态度。3.设计或说明书的优缺点,包括:学生对
3、理论知识的掌握程度、实践工作能力、表现出的创造性和综合应用能力等。摘要本设计使用AT89C51系列高速单片机作为主控制模块,利用简单的外围电路来驱动1616的点阵LED显示屏。利用AT89C51系列高速单片机本身强大的功能,可以很方便的实现单片机与PC机间的数据传输及存储,并能利用软件方便的进行显示内容的多样变化,另一方面点阵显示广告牌广泛的应用于医院、机场、银行等公共场所,所以本设计具有很强的现实应用性。本LED显示广告牌能够以动态扫描的方式同时显示4个1616点阵汉字,并能通过上位机软件修改显示内容和显示效果等等。把字符内码存储在空闲的单片机程序存储器空间,使本LED显示系统能掉电存储10
4、24个字符。设计中采用了SPI接口的GB2312标准字库,支持所有的国标字符和ASCII标准字符的显示。因为采用串行传输方式,使本系统的可扩展性得到提升,便于多个显示单元的级联。本文从LED的显示原理入手,详细阐述了LED动态显示的过程,以及硬件电路的设计、计算和软件的算法。关键词:动态显示;单片机;点阵字库目录1 LED概述11.1 LED电子显示屏概述12 显示原理及控制方式分析22.1 LED点阵模块结构22.2 LED 动态显示原理32.3 LED常见的控制方式43 系统硬件概述53.1单片机简介53.1.1 单片机概念63.1.2 单片机的发展史63.1.3单片机的特点73.1.4主
5、控单片机的接口说明73.2 74HC138译码器83.3 1616LED点阵显示制作93.3.1 1616LED点阵的内部结构及工作原理93.3.2 用88LED点阵构成1616LED点阵103.4 LED显示驱动电路114 字模生成134.1 字模简介134.1.1 LED显示屏领域字模实现技术134.1.2 软件控制系统字模提取的分析与设计134.2 字模存储技术144.3 字库生成155软件设计165.1 程序设计总体思路和结构165.1.1 程序设计总体思路165.1.2 程序流程图165.2 各模块程序设计175.2.1 系统初始化程序:175.2.2 LED动态显示185.2.3
6、字符显示的原理195.3系统功能测试195.3.1 单元模块电路测试195.3.2 系统整体功能测试19总结21致谢22附录A23附录B24参考文献34LED点阵广告牌设计1 LED概述1.1 LED电子显示屏概述LED(Light Emitting Diode),发光二极管,简称LED,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N兴办导体,在这边主要是电子。但这两种半导
7、体连接起来的时候,它们之间就形成一个“P-N结”。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。多个 LED发光灯组成固定的字符或图形进行显示,即形成LED点阵图文显示屏。其主要特征是只控制LED点阵中各发光器件的通断(发光或熄灭),而不控制LED的发光强弱。LED点阵的汉字显示方式是先根据所需要的汉字提取汉字点阵(如1616 点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时则需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。LED点阵显示具有如下特点:(1) 电压:
8、LED使用低压电源,供电电压在6-24V之间,根据产品不同而异,所以它是一种比使用高压电源更安全的电源。(2) 效能:消耗能量比同光效的白炽灯减少80%。(3) 适用性:每个单元LED小片是3-5mm的正方形,所以可以制备成各种形状的器件,并且适合于易变的环境。(4) 稳定性:10万小时,光衰为初始的50%。(5) 响应时间:其白炽灯的响应时间为毫秒级,LED灯的响应时间为纳秒级。(6) 对环境污染:无有害金属汞。(7) 颜色:改变电流可以变色,发光二极管方便地通过化学修饰方法,调整材料的能带结构和带隙,实现红黄绿兰橙多色发光。由于LED的众多优势,在市场中得到了广泛的应用,主要应用领域有:(
9、1)、信号指示应用:信号照明是LED单色光应用比较广泛也是比较早的一个领域,约占LED应用市场的4%左右。(2)、显示应用:指示牌、广告牌、大屏幕显示等, LED用于显示屏幕的应用约占LED应用的20%25%,显示屏幕可分为单色和彩色。(3)、照明应用:便携灯具,汽车用灯,特殊照明。由于LED尺寸小,便于动态的亮度和颜色控制,因此比较适合用于建筑装饰照明。背光照明:普通电子设备功能显示背光源、笔记本电脑背光源、大尺寸超大尺寸LCD显示器背光源等。以及投影仪用RGB光源。LED电子显示屏(Light Emitting Diode Panel)是由几百-几十万个半导体发光二极管构成的像素点,按矩阵
10、均匀排列组成。利用不同的半导体材料可以制造不同色彩的LED像素点。目前应用最广的是红色、绿色、黄色。而蓝色和纯绿色LED的开发已经达到了实用阶段。 LED显示屏是一种通过控制半导体发光二极管的亮度的方式,来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。 LED显示屏的发展前景极为广阔,目前正朝着更高亮度、更高气候耐受性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。1.2 LED电子显示屏的分类按颜色分类:单基色显示屏:单一颜色(红色或绿色)。双基色显示屏:红和绿双基色,256级灰度、可以显示65536种颜色。全彩色显示屏:红、绿、蓝三基色,256级灰度的全
11、彩色显示屏可以显示一千六百多万种颜色。按显示器件分类: LED数码显示屏:显示器件为7段码数码管,适于制作时钟屏、利率屏等,显示数字的电子显示屏。LED点阵图文显示屏:显示器件是由许多均匀排列的发光二极管组成的点阵显示模块,适于播放文字、图像信息。2 显示原理及控制方式分析2.1 LED点阵模块结构八十年代以来出现了LED点阵组合型模块,以发光二极管为像素,它用高亮度发光二极管芯阵列组合后,环氧树脂和塑模封装而成。这种一体化封装的点阵LED模块,具有高亮度、引脚少、视角大、寿命长、耐湿、耐冷热、耐腐蚀等特点。LED点阵规模常见的有44、48、57、58、88、1616等等。根据像素颜色的数目可
12、分为单色、双基色、三基色等。像素颜色不同,所显示的文字、图象等内容的颜色也不同。单色点阵只能显示固定色彩如红、绿、黄等单色,双基色和三基色点阵显示内容的颜色由像素内不同颜色发光二极管点亮组合方式决定,如红绿都亮时可显示黄色,如果按照脉冲方式控制二极管的点亮时间,则可实现256或更高级灰度显示,即可实现真彩色显示。图2.1示出最常见的88单色LED点阵显示器的内部电路结构和外型规格,其它型号点阵的结构与引脚可试验获得。 图2.1 88单色LED模块内部电路LED点阵显示器单块使用时,既可代替数码管显示数字,也可显示各种中西文字及符号如5x7点阵显示器用于显示西文字母58点阵显示器用于显示中西文,
13、8x8点阵可以用于显示简单的中文文字,也可用于简单图形显示。用多块点阵显示器组合则可构成大屏幕显示器,但这类实用装置常通过PC机或单片机控制驱动。2.2 LED 动态显示原理LED点阵显示系统中各模块的显示方式: 有静态和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲电压驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的列数据信号,反复循环以上操作,就可显示各种图形或文字信息。点阵式LED汉字广告屏绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视觉暂留特
14、性。将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。最典型的例子就是电影放映机。在电子领域中,因为这种动态扫描显示方式极大的缩减了发光单元的信号线数量,因此在LED显示技术中被广泛使用。以88点阵模块为例,说明一下其使用方法及控制过程。图2.1中,红色水平线Y0、Y1Y7叫做行线,接内部发光二极管的阳极,每一行8个LED的阳极都接在本行的行线上。相邻两行线间绝缘。同样,蓝色竖直线X0、X1X7叫做列线,接内部每列8个LED的阴极,相邻两列线间绝缘。在这种形式的LED点阵模块中,若在某行线上施加高电平(用“1”表示),在某列线上施加低电平(用“
15、0”表示)。则行线和列线的交叉点处的LED就会有电流流过而发光。比如,Y7为1,X0为0,则右下角的LED点亮。再如Y0为1,X0到X7均为0,则最上面一行8个LED全点亮。现描述一下用动态扫描显示的方式,显示字符“B”的过程。其过程如图2.2图2.2 用动态扫描显示字符“B”的过程2.3 LED常见的控制方式目前常见的是并行传输方式,通过8位锁存器将8位总线上的列数据进行锁存显示,各8位锁存器的片选信号由译码器提供。此种方式的优点是传输速度快,对微控制器(MCU)的通信速度要求较低。但是这种方案最大的缺点是不便于随意扩展显示单元的数目。每增加一个1616点阵的全角汉字显示单元,就需要在之前的
16、电路上多增加两根地址线,这就要求在PCB布线的时候要留有充足的地址线冗余量。再一个缺点是,每个单元的PCB随着安放位置的不同,布线结构也不相同,不利于厂家批量生产。并行传输需要的芯片较多,因此市场上已经出现用FPGA,CPLD等高密度可编程逻辑器件(PLD)来取代传统锁存器IC的方案。成本有所下降,但可扩展性仍旧较差。因此,并行传输方式适用于显示单元数目确定的条屏。随着广告屏显示内容的多媒体化,对控制器传输速度,运算能力的要求越来越高。因此控制器的种类也在不断发展以适应要求,从最初的8051单片机,到PIC单片机,又到FPGA,直到现在的ARM处理器。不同功能档次的广告屏对应着不同的处理器。一
17、以传统8051单片机为控制器的LED显示屏。因受到单片机运算速度及通信速率的限制,LED动态显示的刷新率不可能做得太高。对显示效果和移动算法的处理也比较吃力,在实际显示效果上有比较明显的闪烁感。除此之外,传统8051单片机的内部资源贫乏,仅128字节的数据存储器,几K字节的程序存储器,无E2PROM,SPI。这就需要对单片机扩展外设,无疑增加了硬件成本。因此,8051控制的条屏只能用于显示内容及其简单,不需要经常更改显示内容的场合。二以PIC单片机为控制器的LED显示屏。因PIC单片机是RISC架构的工业专用单片机,处理指令的速度有所增加,抗干扰能力优秀,型号种类繁多。作为条屏的控制器,可以明
18、显的改善显示效果,同时PIC单片机内部的资源较丰富,可节省外部电路设计难度,同时降低了硬件成本。因此,以PIC单片机为控制器的条屏目前仍是单色条屏市场的主流。三以FPGA(复杂可编程逻辑门阵列)为控制器的LED显示屏。FPGA以高速、并行著称。是近年来新兴的可编程逻辑器件。用他作为LED显示屏的控制器,能够高速的处理色阶PWM信号、高速的完成动态扫描逻辑、高速的完成字符移动算法。因此被运用于双基色、三基色的显示系统。但是其成本较高,开发难度较大。四以ARM(32位RISC架构高性能微处理器)为控制器的LED显示屏。ARM有着极高的指令效率,极高的时钟频率。因此其运算能力非常强大,内部资源也十分
19、丰富,极大的简化了硬件设计的难度,缩短了开发周期。在条屏的运用中,能用ARM来实现花样繁多的显示方式,以及高色阶,多像素的全彩屏驱动。ARM与FPGA的组合更是功能强大,除了海量存储技术,无线更新技术外,还能实时地显示视频信号。因此,以ARM为控制器的显示屏常为视频全彩屏。3 系统硬件概述整个电路由单片机89C51,4个74HC138,1个1616的LED组成。该电路所设计的电子屏可显示多个字符。3.1单片机简介AT89C51是一种带4KB可编程可擦除只读存储器的低电压,高性能微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造
20、,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51引脚即外观如图3.1所示。图3.1 AT89C51的管脚图3.1.1 单片机概念单片机全称为单片机微型计算机(Single Chip Microsoftcomputer)。从应用领域来看,单片机主要用来控制,所以又称为微控制器(Microcontroller Unit)或嵌入式控制器。单片机是将计算机的基本部件微型化并集成在一
21、块芯片上的微型计算机。3.1.2 单片机的发展史1975年,美国德克萨斯仪器公司首次推出4位单片机TMS-1000;此后,各个计算机公司竞相推出四位单片机。日本松下公司的MN1400系列,美国洛克威尔公司的PPS/1系列等。四位单片机的主要应用领域有:PC机的输入装置,电池充电器,运动器材,带液晶显示的音/视频产品控制器,一般家用电器的控制及遥控器,电子玩具,钟表,计算器,多功能电话等。 1972年,美国Intel公司首先推出8位微处理器8008,并于1976年9月率先推出MCS-48系列单片机。在这以后,8位单片机纷纷面市。例如,莫斯特克和仙童公司合作生产的3870系列,摩托罗拉公司生产的6
22、801系列等。随着集成电路工艺水平的提高,一些高性能的8位单片机相继问世。例如,1978年摩托罗拉公司的MC6801系列及齐洛格公司的Z8系列,1979年NEC公司的UPD78XX系列。这类单片机的寻址能力达64KB,片内ROM容量达4-8KB,片内除带有并行IO口外,还有串行IO口,甚至还有AD转化器功能。8位单片机由于功能强,被广泛用于自动化装置、智能仪器仪表、智能接口、过程控制、通信、家用电器等各个领域。1983年以后,集成电路的集成度可达几十万只管/片,各系列16位单片机纷纷面市。这一阶段的代表产品有1983年Intel公司推出的MCS-96系列,1987年Intel推出了80C96,
23、美国国家半导体公司推出的HPC16040,NEC公司推出的783XX系列等。16位单片机主要用于工业控制,智能仪器仪表,便携式设备等场合。20世纪80年代末推出了32位单片机,如Motorlora公司的MC683XX系列,Intel的80960系列,以及近年来流行的ARM系列单片机。32位单片机是单片机的发展趋势,随着技术的发展及开发成本和产品价格的下降。近年来,64位单片机在引擎控制,智能机器人,磁盘控制,语音图像通信,算法密集的实时控制场合已有应用,如英国Inmos公司的Transputer T800是高性能的64位单片机。3.1.3单片机的特点 1)单片机的存储器ROM和RAM时严格区分
24、的。ROM称为程序存储器,只存放程序,固定常数,及数据表格。RAM则为数据存储器,用作工作区及存放用户数据。2)采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。3)单片机的I/O口通常时多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能,可由指令来设置或由机器状态来区分。 3.1.4主控单片机的接口说明P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复制用口,作为输入口时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写入“1可作为高阻抗输入端用
25、。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期激活内部上拉电阻。在Flash编程时,PO口接收指令节,而在程序校检时,输出指令字节,校检时,要求外接上拉电阻。P1口:P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。Flash编程和程序校检期间,P1接收低8位地址。P2口:P2口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输
26、出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。在访问外部数据存储器或16位地址的外部数据存储(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVXRI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。Flash编程和校检时,P2亦接收高位地址和其他控制信号。P3口:P3口是一个带内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑
27、门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作输入端口,作输入端时,被外部拉低的P3口将用上拉电阻,输出电流I。P3口还接收一些用于Flash闪速存储器编程和程序校检的控制信号。RST:复位输入,当震荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于所存地址的低8位字节。即使不访问外部存储器,ALE乃以时钟振动频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。3.2 74HC138译码器译码器是组合逻辑电
28、路的一个重要的器件,74HC138的输出是低电平有效,故实现逻辑功能时,输出端不可接或门及或非门,74HC138与前面不同,其有使能端,故使能端必须加以处理,否则无法实现需要的逻辑功能。发光二极管点亮只须使其正向导通即可,根据LED的公共极是阳极还是阴极分为两类译码器,即针对共阳极的低电平有效的译码器;针对共阴极LED的高电平输出有效的译码器。74HC138译码器管脚如图3.2所示。图3.23.3 1616LED点阵显示制作3.3.1 1616LED点阵的内部结构及工作原理以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。即国家标准汉字库中的每一个字均由256点阵来表示。我们
29、可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。这里我们以“高”字说明,如图3.3所示。图3.3 16*16LED汉字显示用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。一般把它拆分为上部和下部,上部由816点阵组成,下部也由816点阵组成。在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00p07口。方向为p00到p07 ,显示汉字“高”时,p02点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭, p0.3 灭, p0.4 灭, p0.
30、5 亮,p0.6灭,p0.7 灭。即二进制00000100,转换为16进制为 04h。上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。然后单片机转向上半部第二列,仍为p01点亮,为00000100,即16进制04h.这一列完成后继续进行下半部分的扫描,p20点亮,为二进制00000010,即16进制02h.依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“高”的扫描代码为02h,00h,01h, 04h,0FFh,0FEh, 00h,0
31、0h,1Fh,0F0h, 10h, 10h, 10h, 10h, 1Fh,0F0h,00h, 04h, 7Fh,0FEh, 40h, 04h, 4Fh,0E4h,48h, 24h, 48h, 24h, 4Fh,0E4h, 40h, 0Ch。由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。不过现在有很多现成的汉字字模生成软件,就不必自己去画表格算代码了。3.3.2 用88LED点阵构成1616LED点阵Proteus中只有57和88等LED点阵,并没有1616LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要1616点阵。下面我们就首先
32、介绍使用88点阵构建1616点阵的方法,并构建一块1616LED点阵,用于本例的显示任务。首先,从Proteus7.1的元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90,使其水平放置,那么此时它的左面8个引脚是其行线,右边8个引脚是其列线(当然,如果你是将右转,则右边8个引脚是行线)。然后我们将四个元器件对应的行线和列线分别进行连接,使每一条行线引脚接一行16个LED,列线也相同。并注意要将行线和列线引出一定长度的引脚,以便下面我们使用。连接好的1616点阵如
33、图3.4所示。图3.4 点阵模块组合成如下图的1616点阵只是第一步,这样分开的数块并不能达到好的显示效果,下面我们要将其进一步组合。组合实际上很简单,首先选中如上图中右侧的两块88点阵,然后拖动并使其与左侧的两块相并拢,如图3.5所示。图3.5可以看到原来的连线已经自动隐藏了,至于线上的交点,我们不要去动。然后,我们再来最后一步,选中下侧的两块点阵,并拖动使其与上侧的两块并拢,最后的效果如图3.6所示。看到,原来杂乱的连线现在已经几乎全部隐藏了,一块1616的LED点阵做成了。需要注意,做成的LED点阵的行线为左侧的16个引脚,下侧的16个引脚为其列线,而且其行线为高电平有效,列线为低电平有
34、效。然后,我们将其保存,以便以后使用。图3.63.4 LED显示驱动电路LED显示驱动电路如图3.7所示。图3.7 显示驱动电路图4 字模生成4.1 字模简介文字的字模是一组数字,但它的意义却与数字的意义有着根本的变化,它是用数字的各位信息来记载英文或汉字的形状1。在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,其认识的概念只有内码(将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码)。如果你用启动盘启动系统后用DIR命令可能得到一串串莫名其妙的字符,但那确确实实是汉字,如果你启动UCDOS或其他的汉字系统后,
35、就会看到那是一个个熟悉的汉字。在硬件系统内,英文的字模信息一般固化在ROM里,即使在没有进入系统的CMOS里,也可以让你看到英文字符。而在DOS下,中文的字模信息一般记录在汉字库文件里(将制作好的字模放到一个个标准的库中,这就是点阵字库文件)。4.1.1 LED显示屏领域字模实现技术在通过软件实现的技术中,目前有许多字模生成软件,软件打开后输入汉字,点“检取”,十六进制数据的汉字代码即可自动生成,把我们所需要的竖排数据复制到我们的程序中即可。在通过硬件实现字模提取的技术中,有在单片机系统中增加硬汉字库的方法,主控器发送的汉字是其机内码,用两个字节来表示一个汉字。根据机内码,显示单元控制模块从汉
36、字库中查取显示字模,实现汉字显示。由于带有硬汉字库,进行动态文字显示时,通用智能显示单元仅接受汉字的机内码即可,这样数据通讯量大大减少。因此,“动态文字显示速度快”。4.1.2 软件控制系统字模提取的分析与设计而在LED显示屏控制系统具体应用的Windows操作系统下如何提取字模信息是设计的核心。软件控制系统在实际编辑过程中,要求各种字体、字号的文字都能被编辑、保存。所以系统在设计时,把文本区理解为由众多的象素点构成,而把不同字体、字号的文字理解为一幅图像。因为所开启的文本区大小与LED显示屏的大小对应,所以采用1616点阵为单位,把文本区内的每个像素点都看成一个二维数组,由于系统中各种颜色都
37、有对应的值,赋予每个不同颜色的像素点不同的对应值,再把每个点赋予一个int型的值,这样保存下来的信息就是二进制数据。通过这样的设计,我们不仅可以把任何字型,任何大小的文字保存下来,还可以显示以256个像素点阵为单位的任何图形。在软件控制系统中实现字模的提取,也就避免了在单片机中加载硬汉字库模块,从而简化了硬件模块的设计。以下以单色屏为例,介绍系统采用字模保存的算法设计:定义COLORREF zimo color为像素点的颜色,判断某个点的颜色值。如果值为0xffffff,说明此点为白色,赋予此点值0。由于单色屏只有红色和不显色两种,所以可以简单赋值为除白色外其余点赋值为1CClientDC d
38、c(this); CFile myfile;unsigned int zimo192 384=0;unsigned char zimo_data19248=0; COLORREF zimo_color; int row, col ; this -HideCaret(); for (row=0;row192;row+) for (col=0;col384;col+) zimo_color=do.GetPixel (col, row); if (zimo color = =Oxffffff) zimo row col=0;else zimo row col=1;定义unsigned int zim
39、o192384=0;/文本区像素点以8位为一字节(因为在随后的串行通讯中,传输的数据是8位的二进制数据)定义 unsigned char zimo_data19248=04.2 字模存储技术目前使用最广泛的技术是,通过上位机软件将待显示的字符串转换为对应的点阵字模数据,通过烧写的方式将这些字模数据按一定的顺序编址后存储在E2PROM中。在条屏显示的过程中按规定的方式取出E2PROM中的字模数据进行处理。对于一个1616点阵的汉字字模数据,需要连续32字节的E2PROM空间来存储。照此计算,若有256个需要显示的字符,则至少需要32B256=8192字节(8KB)的E2PROM存储空间。通常的单
40、片机内部没有集成这么大容量的E2PROM。因此这种方案,需要在单片机外部扩展大容量的E2PROM,增加硬件成本。上位机程序设计由于涉及到汉字取模,取模算法的难度较大。在多字下载的时候传输时间也较长。诸多弊端使本设计放弃了传统方案。而本设计创新使用了专用的点阵字库芯片,成本仅为8元,内含各种点阵规格的GB2312、ASCII等标准字库。专用字库芯片采用微型SO-8封装,使用高速同步串行SPI接口进行读写操作,节省了控制器的I/O。在本设计中,单片机内部的小容量E2PROM,用于存储待显示汉字的GB2312标准机内码,每个全角字符的内码占2字节,则在同样需要显示256个汉字的情况下,这种方案仅占用
41、512字节的E2PROM空间4.3 字库生成因为本设计中为行扫描,列输入,所以“魏”的自摸代码为:DB 49H,40H,4AH,51H,4CH,6AH,7FH,0C4H,4CH,4AH,8AH,71H,88H,42H,3FH,84HDB64H,98H,0A5H,0E0H,3EH,0BEH,24H,81H,24H,89H,7FH,81H,20H,07H,00H,00“佳”字代码为:DB 01H,00H,02H,00H,04H,00H,1FH,0FFH,0E2H,02H,12H,22H,12H,22H,12H,22HDB 12H,22H,0FFH,0FEH,12H,22H,12H,22H,32H,
42、62H,16H,26H,02H,02H,00H,00H5软件设计5.1 程序设计总体思路和结构5.1.1 程序设计总体思路用c语言程序设计,实现LED点阵显示内容,并使显示的内容在屏幕上从左到右的滚动显示。系统采用模块化结构,包括主程序、延时程序、显示子程序和串行口中断程序。用AT89C51、74HC138芯片和1个1616LED点阵显示器构成一个完整的16位点阵LED显示系统。5.1.2 程序流程图主要由开始、初始化、主程序、字库组成。其中主程序和子程序的流程图如图5.1所示。图5.1 单片机汉字显示程序流程图5.2 各模块程序设计5.2.1 系统初始化程序:#include #define
43、 int8 unsigned char#define int16 unsigned int#define int32 unsigned longsbit SW1=P10;sbit SW2=P11;sbit SW3=P12;sbit SW4=P13;sbit SW5=P14;5.2.2 LED动态显示显示要求字符在显示屏上按从右到左的顺序一个个的出现。设计时可采用如下方法:首先将LED显示屏对应的显示缓冲区全部清零,即 LED显示空白,然后每间隔一个“软定时器”设定的动态显示时间,显示缓冲区依次加入一个字符点阵数据并进行扫描显示,这样就可达到动态显示的效果。实现LED从右向左移动显示程序:if(
44、SW5_FLAG=1&SW5_OVER=0) for (i=0;i8;i+) /显示左半边屏幕 P0=*(u+offset+2*i); P2=i|0x08; /P2.4=0,P2.3=1 选中U2, 输出扫描码给U6 delay_ms(); P0=*(u+offset+2*i+1); P2=i|0x10; /P2.4=1,P2.3=0 选中U3, 输出扫描码给U7 delay_ms(); for (i=8;i16;i+) /显示右半边屏幕 P0=*(u+offset+2*i); P2=(i-8)|0x20; /P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8 delay_m
45、s(); P0=*(u+offset+2*i+1); P2=(i-8)|0x40; /P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9 delay_ms(); if(SW1=0&SW1_OVER=0) SW1_FLAG=1;if(SW1=1) SW1_FLAG=0; SW1_OVER=0;if(SW1_FLAG=1&SW1_OVER=0) for (i=0;i8;i+) /显示左半边屏幕 P0=*(p+offset+2*i); P2=i|0x08; /P2.4=0,P2.3=1 选中U2, 输出扫描码给U6 delay_ms(); P0=*(p+offset+2*i+1); P2=i|0x10; /P2.4=1,P2.3=0 选中U3, 输出扫描码给U7 delay_ms();