16×16 LED点阵电子显示屏的设计
专业: 学号: 4 学生姓名: 指导老师:
摘要:本设计是一个16×16点阵LED电子显示屏显示滚动汉字的设计。整机以ATMEL 公司生产的40脚单片机AT89S52为控制核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。驱动部分使用两个移位存储器的74HC595和两个移位寄存器74HC164组成,74HC595负责列扫描数据,74HC164负责行扫描数据。行控制电路采用三极管放大电流,加大扫描强度,提高点阵屏亮度。该电子显示屏可以显示各种单色图像及汉字,全屏能显示1个汉字,本文就是使用4块8×8共阳型点阵组成1块16×16点阵,采用按列扫描按行控制控制方式,扫描顺序自上而下,以满足汉字显示的要求。文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部分的功能及原理、相应程序的设计及调试。
关键词:AT89S52单片机, 16×16LED, 彩灯显示
I
摘要
The design of 16×16-dot-matrix of LED display
Abstract: This design is a 16×16 lattice LED electronic display screen display rolled characters design. The productions of the company are in the 40 feet ATMEL AT89S52 SCM, which is the control core, introducing it for the control system of LED dot matrix electronic display dynamic design and development process. Driving part of memory is formed by two 74HC164 which include shift packet and the two 74HC595, 74HC595 is used to scan the data of rolls, 74HC164 is for controlling data. Using transistor amplifier circuit control line current, increase the strength of scanning, improve the dot-matrix-scan brightness. The electronic display screen can show all sorts of color image and characters, full screen can show 1 character, this text is to use 4 pieces of type of 8×8-dot-matrix to make 16×16-dot-matrix, rows of scanning according to list control mode, scanning sequence control, in order to meet the requirements of that. This text introduces the hardware design of dot-matrix of LED display, the circuit of hardware and the function of each part of the hardware, corresponding program, design and debugging. Keywords: AT89S52 MCU, 16 ×16LED, lights display
II
目 录
目 录
摘要 .................................................................................................................................................. I Abstrct. ............................................................................................................................................. II 第一章 绪论 .................................................................................................................................... 1
1.1 问题的提出及研究背景 ......................................................................................................... 1 1.2 国内外研究现状及发展趋势................................................................................................. 1 1.3 本文所做的主要工作 ............................................................................................................. 2 1.4 方案实现 .................................................................................................................................. 2 第二章 系统硬件部分设计........................................................................................................... 4
2.1整体模块设计 .......................................................................................................................... 4 2.2 电源电路设计.......................................................................................................................... 4 2.3单片机最小系统电路 .............................................................................................................. 5 2.3.1 复位电路 ...................................................................................................................... 5 2.3.2 晶振电路 ...................................................................................................................... 5 2.4列扫描电路 ............................................................................................................................... 5 2.5 行扫描电路 .............................................................................................................................. 6 2.6 LED显示屏电路 ..................................................................................................................... 7 2.7 总体硬件电路设计 ................................................................................................................. 8 第三章 系统软件部分设计........................................................................................................... 9
3.1系统主程序设计 ...................................................................................................................... 9 3.2显示驱动程序 .......................................................................................................................... 9 第4章 系统调试与测试结果分析 ............................................................................................. 12
4.1 系统调试 ................................................................................................................................ 12 4.2 测试结果 .............................................................................................................................. 12 参考文献 ........................................................................................................................................ 14 致 谢 ............................................................................................................................................ 15 附录一:系统总程序 .................................................................................................................... 16 附录二:系统总体原理图............................................................................................................. 23 附录三:汉字字摸提取软............................................................................................................. 24 附录四:实物图 ............................................................................................................................ 25
第一章 绪论
第一章 绪论
1.1 问题的提出及研究背景
八十年代以来出现了组合型LED点阵显示器,以发光二极管为像素,它用高亮度发光二极管芯阵列组合后,环氧树脂和塑模封装而成。具有高亮度、功耗低、引脚少、视角大、寿命长、耐湿、耐冷热、耐腐蚀等特点。点阵显示器有单色和双色两类,可显示红,黄,绿,橙等。LED点阵有4×4、4×8、5×7、5×8、8×8、16×16、24×24、40×40等多种;根据像素的数目分为双基色、三基色等,根据像素颜色的不同所显示的文字、图像等内容的颜色也不同,单基色点阵只能显示固定色彩如红、绿、黄等单色,双基色和三基色点阵显示内容的颜色由像素内不同颜色发光二极管点亮组合方式决定,如红绿都亮时可显示黄色,如果按照脉冲方式控制二极管的点亮时间,则可实现256或更高级灰度显示,即可实现真彩色显示。
LED点阵显示器单块使用时,既可代替数码管显示数字,也可显示各种中西文字及符号.如5 ×7点阵显示器用于显示西文字母.5×8点阵显示器用于显示中西文,8 × 8点阵用于显示中文文字,也可用于图形显示。用多块点阵显示器组合则可构成大屏幕显示器,一般这类实用点阵显示器常通过微机或单片机控制驱动。[1] 1.2 国内外研究现状及发展趋势
LED点阵显示屏是八十年代后期在全球迅速发展起来的新型信息显示媒体,它利用发光二极管构成的点阵模块或像素单元组成在面积显示屏幕,以可靠性高、使用寿命长、环境适应能力强、价格性能比高、使用成本低等特点,在短短的十来年中,迅速成长为平板显示的主流产品,在信息显示领域得到了广泛的应用。
LED点阵显示屏发展的简要回顾:
发光二极管(LED)是六十年代未发展起来的一种半导体显示器件,七十年代,随着半导体材料合成技术、单晶制造技术和P-N结形成技术的研究进展,发光二极管在发光颜色、亮度等性能得以提高并迅速进入批量化和实用化。进入八十年代后,LED在发光波长范围和性能方面大大提高,并开始形成平板显示产品即LED点阵显示屏。[2] LED点阵显示屏发展经历了三个阶段:
1)1990年以前LED点阵显示屏的成长形成时期。一方面,受LED材料器件的限制,LED点阵显示屏的应用领域没有广泛展开,另一方面,显示屏控制技术基本上是通讯控制方式,客观上影响了显示效果。这一时期的LED点阵显示屏在国外应用较广,国内很少,产品以红、绿双基色为主,控制方式为通讯控制,灰度等级为单点4级调灰,产品的成本比较高。
2)1990-1995年,这一阶段是LED点阵显示屏迅速发展的时期。进入九十年代,全球信息产业高速增长,信息技术各个领域不断突破,LED点阵显示屏在LED材料和控制技术方面也不断出现新的成果。蓝色LED晶片研制成功,全彩色LED点阵显示屏进入市场,电子计算机及微电子领域的技术发展,在显示屏控制技术领域出现了视频控制技术,显示屏灰度等级实现16级灰度和64级灰度调灰,显示屏的动态显示效果大大提高。这一阶段,LED点阵显示屏在我国发展速度非常迅速,从初期的几家企业、年产值几千万元发展到几十家企业、年
1
第一章 绪论
产值几亿元,产品应用领域涉及金融证券、体育、机场、铁路、车站、公路交通、商业广告、邮电电信等诸多领域,特别是1993年证券股票业的发展更引发了LED点阵显示屏市场的大幅增长。LED点阵显示屏在平板显示领域的主流产品局面基本形成,LED点阵显示屏产业成为新兴的高科技产业。
3)1995年以来,LED点阵显示屏的发展进入一个总体稳步提高产业格局调整完善的时期。1995年以来,LED点阵显示屏产业内部竞争加剧,形成了许多中小企业,产品价格大幅回落,应用领域更为广阔,产品在质量、标准化等方面出现了一系列新的问题,有关部门对LED点阵显示屏的发展予以重视并进行了适当的规范和引导,目前这方面的工作正在逐步深化。[3]
我国LED点阵显示屏的发展现状:
产业发展初期规模:我国的LED点阵显示屏产业经过几年的发展,基本形成了一批具有一定规模的骨干企业。据不完全统计,至1998年底,年度销售总额在1000万元以上的企业有20多家,其销售总额达6亿元左右,占行业市场总额的85%以上。全国从事LED点阵显示屏的各类企业有100余家,从业人员近6000人,行业年度销售总额近8亿元人民币,1996年、1997年的增长速度均保持40%左右,1998年略有回落。在国内市场上,国产LED点阵显示屏的市场占有率近100%,国外同类产品基本没有市场,四十三届世乒赛主会场天津体育中心、京九铁路、北京西客站、首都机场、浦东机场等,均由国内代表企业中标。
技术水平相对领先:我国LED点阵显示屏产业在规模发展的同时,产品技术推陈出新,一直保持比较先进的水平。90年代初即具备了成熟的16级灰度256色视频控制技术及无线遥控等国际先进水平技术,近年在全彩色LED点阵显示屏、256级灰度视频控制技术、集群无经线控制、多级群控技术等方面均有国内先进、达到国际水平的技术和产品出现;LED点阵显示屏控制专用大规模集成电路也已由国内企业开发生产并得到应用。[4] 1.3 本文所做的主要工作
本文要求设计一个由单片机驱动的16×16点阵LED图文显示屏,并且在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。根据任务要求,需做的工作如下:
1、查阅点阵的相关文献资料,学习最简单的点阵的使用方法;
2、将简单点阵进行扩展,设计成16×16LED点阵,使用PROTUES软件进行硬件的系统设计;
3、利用KEIL软件编写单片机程序,编译链接生成HEX文件,然后下载到PROTUES软件中进行硬件仿真;
4、仿真调试成功后制作PCB板实物电路,实现16×16点阵LED电子显示屏各项功能。 1.4 方案实现
从理论上说,不论显示图形还是文字,只要控制组成这些图形或文字的各个点所在的位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。16×16的点阵共有256个发光二极管,显然单片机没有这么多
2
第一章 绪论
的端口,如果我采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。因此在实际应用中的显示屏几乎都不采用这种设计,而采用另外一种称为动态扫描的显示方法。
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套驱动器。具体就16×16的点阵来说,把所有同1行的发光管的阳极连在一起,把所有同1列的发光管的阴极连在一起(共阳极的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定时间,然后熄灭;再送出第二行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;以此类推,第16行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。
采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,并列传输的方案是不可取的。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度。
解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,传送下一列数据。为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。经过上述分析,就可以归纳出列驱动器电路应具有的功能。对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。
3
第二章 系统硬件部分设计
第二章 系统硬件部分设计
系统硬件部分电路大致上可以分成电源电路、单片机最小系统电路及外围电路、列扫描电路、行扫描电路和LED显示屏电路五部分。 2.1整体模块设计
本设计行、列驱动电路,显示屏电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如下图2.1所示:
列驱动器 单 电源 片机行驱动器 16×16LED点阵显示屏 2.2 电源电路设计
三端稳压集成电源电路L7805C的功能是把9V直流电压转变为所需的、稳定的5V直流电压。它由9V直流电源接口、9V电源滤波电路、三端稳压集成电路、5V滤波电路和及电源接通提示四个部分组成。C4、C5为9V、5V电源的滤波电容,D2、D3分别为9V、5V接通提示电路,R3、R4为D2、D3的限流电阻,防止D2、D3烧坏。S2为5V电源接通和关断用的,由于电路非常简单,在此就不再赘述。电源电路原理图如下图2.2所示:
图2.1 系统结构设计总图
图2.2 电源电路
4
第二章 系统硬件部分设计
2.3单片机最小系统电路
AT89S52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8KB可反复擦写的Flash只读程序存储器和256 字节随机存取数据存储器。该器件采用ATMEL公司高密度、非易失性存储技术制造,兼容标准MCS-51指令系统,灵活应用于各种控制领域。 AT89S52单片机最小系统电路由复位电路、晶振电路两部分组成。 2.3.1 复位电路
AT89S52单片机在启动运行时或者出现死机时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。复位电路产生的复位信号(高电平有效)由RST引脚送入到内部的复位电路,对AT89S52单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使AT89S52单片机可靠复位。AT89S52单片机复位电路如下图2.3所示:
图2.3复位电路图 图2.4 晶振电路图
复位电路工作原理:
上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C3充电电流的减少,RST引脚的电位不断下降,其充电时间常数为T=R3*C3=100ms,此时间常数足以RST引脚在保持为高电平的时间内完成复位操作。
当单片机已在运行当中时,按下复位键S5后再松开,也能使RST引脚为一段时间的高电平,从而实现AT89S52单片机复位。 2.3.2 晶振电路
晶振电路如上图2.4所示:
XTAL1和XTAL2是片内振荡电路输入端,这两个端子用来外接石英晶体和微调电容,即用来连接AT89S52单片机片内OSC的定时反馈回路。晶振起振后要能在XTAL2端输出一个3V左右的正弦波,以便使片内OSC电路按晶振相同频率自激振荡。通常,OSC的输出时钟频率FOSC为6MHZ—16MHZ,典型值为12MHZ或11.0592MHZ。电容C1和C2帮助晶振起振,典型值为30pf,调节它们可以达到微调FOSC的目的。本系统中,晶振为12MHZ,C1=C2=20pf。 2.4 列扫描电路
列扫描电路由集成电路74HC595构成如图2.5所示,列的处理信号有三个,SER、SRCLK、RCLK,SER做为列移位寄存器的输入,SRCLK是移位时钟,RCLK做为锁存时钟当将16个
5
第二章 系统硬件部分设计
位数据在SRCLK的脉冲作用下移位寄存器后,就可以开启RCLK时钟,使寄存器的数据存入锁存器,因使能脚接0使能,数据直接输出Q端,Q端数据经330欧姆的限流电阻接入点阵列脚位,即一行的数据显示。[13]
图2.5 列扫描电路原理图
2.5 行控制电路
图2.6 行驱动电路原理图
6
行控制电路如下图2.6所示:
第二章 系统硬件部分设计
行的处理信号有AB和SCK,AB做为行移位寄存器的输入,SCK是移位时钟,AB的输入在SCK的时钟脉冲下移入寄存器,寄存器输出端Q经4.7K电阻接入三极管B极,控制三极管的导通和截止,从而控制点阵行脚位电量。每次移位的输出16个Q位只允许有一个是低电平,即是分时轮流的输出低电平是三极管导通,从而使扫描至上而下进行。本文行扫描采用的工作方式是:单片机的P2^3不断的向单片机一位一位的(即串行)发送数据,74HC164不断的接收数据并且存储起来,待到74HC164寄存器„集满‟16位数据的时候,再通过并行输出把数据传给点阵,发送给点阵的16位行信号与两片74HC595芯片发送的16位列信号„会合‟从而产生一个汉字或其他别的图形通过点阵显示出来。
排阻RP1和RP2为限流排阻,以免74HC164的输出电流过大烧坏三极管,本文将74HC164
输出的信号通过S8550三极管放大再传送给点阵行输入端,以加大扫描强度,提高点阵显示亮度。
2.6 LED显示屏电路
LED显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。本文就是使用4块8×8点阵组成1块16×16点阵,采用按列扫描按行控制控制方式,扫描顺序自上而下,以满足汉字显示的要求。16×16点阵LED结构如图2.7所示:
图2.7 16×16点阵电路图
要实现显示动画,只需考虑其显示方式,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。当采用按行扫描按列控制的驱动方式时,LED显示屏8行的同名列共用一套列驱动器。行驱动器一行的行线连接到电源的一端,列驱动器一列的列线连接到电源的另一端。应用时还应在各条行线或列线上接上限流电阻。扫描中控制电
7
第二章 系统硬件部分设计
路将行线的1到8轮流接通高电位,使连接到各该行的全部LED器件接通正电源,但具体那一个LED导通,还要看它的负电源是否接通,这就是列控制的任务了。当对应的某一列置0电平,则相应的二极管就亮;反之则不亮。行线上只管一行一行的轮流导通,列线上进行通断控制,实现了行扫描列控制的驱动方式。
以上就是16×16点阵显示屏系统硬件部分的各功能模块分述,经过合理的设计论证后和就可以整体结合在一起,再根据设计配备好各元器件实物,通过组装后等在单片机的程序存储器里放入编制好的程序即可成为一个完整的应用系统。 2.7 总体硬件电路设计
在整个电路设计中,用两片8位输出锁存移位寄存器74HC595作为列扫描,用两片74LS164芯片作为行扫描,用单片机AT89S52对74HC595和74HC164进行控制和驱动。
总电路原理图如附录二所示(更清楚的电路原理图有pdf格式的文档)。
8
第三章 系统软件部分设计
第三章 系统软件部分设计
本设计的软件的主要功能是向显示屏提供显示数据,并产生各种控制信号,使屏幕显示汉字的移动。根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据,并负责产生列扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。
从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示屏程序适宜采用C语言编写。 3.1系统主程序设计
系统主程序的总体结构如图3.1所示。系统的主程序开始以后,首先是对系统环境初始化,然后LED显示屏进入开机状态,转入正常的显示,每次显示一个汉字,连续实现汉字循环向左滚动效果。由于单片机没有停机指令,所以可以设置系统程序不断地循环执行上述显示效果。
3.2显示驱动程序
显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。图3.2为显示驱动程序(显示屏扫描函数)流程图。
void display()//显示 {
unsigned char i,ia,j,tmp; DATAOUT=0XFF; AB=0;
//定义变量
//置位高电平做准备 //将列数据位清0,准备移位
图3.1 系统主程序的流程图 开 始 系统初始化 显示左滚动汉字 for(i=0;i<16;i++) {
//循环输出16行数据
//为列移位做准备 //为行锁存做准备
SCK=0; SCLT=0;
9
第三章 系统软件部分设计
节
for(ia=2;ia>0;) {
//每行16个点,循环位移两个字
P2口置为高电平做准备 移出16列数据信号
ia--; //循环两次
tmp=~lhj[i*2+ia]; //读取点阵数据做
循环移出16个行信号 输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成,
//电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据
节,
准备
DATA=tmp&0x01;
SCLH=0;
//为列移位做
for(j=0;j<8;j++) {
//循环两次,每次移一个字
N 真移出了16个行信号吗? Y 显示一个汉字 //将数据低位做输出,由电路图可知,移位寄存
器的最后一位对应最后一列,因此先移最后一位
tmp>>=1;
//将数据
图3.2 显示驱动程序流程图 缓冲右移一位,为下次输出做准备
SCLH=1; //将DATA上的数据移入寄存器
}
}
//移入单字节结束 //移入两个字节结束
SCK=1; //SCK拉高,列数据移位,相应行拉低,三极管导通输出电量到相
应行点阵管阳极(共阳)
SCLT=1;
//SCLT拉高,将数据锁存输出到相应行的点阵发光管显示,显示
一行后将保持到下一行显示开始
AB=1;
//列数据位只在第一行时为0,其它时候都为1,当将这个0移入
寄存器后,从第一位开始一直移位最后一位,//移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱
} j=64; while(j--);
//每一行的显示,保持16个移位时间,因此,最后一行的显示,
也要加入保持时间,补尝显示的亮度
SCK=0; SCK=1;
//
//将最后一行数据移出
10
第三章 系统软件部分设计
}
3.3汉字字库的提取
3.3.1汉字的表示及编码原理
计算机用编码的方式来处理和使用字符,英文在计算机机内是用一个 ASCII码来表示, 而中文汉字则由两个 ASCII 码表示。1981 年我国正式发布国家标准-—《信息交换用汉字 编码字符集--基本集》[GB2312-80]。在这个标准中共收录简化汉字及符号、字母、日文假 名等共7445个图形字符,其中汉字占6763个。另外,GB2312规定“对任意一个图形字符 都采用两个字节表示,每个字节均采用七位编码表示” ,GB2312将汉字分为94 个区,每个区用一个区码表示; 每个区又对应有94个汉字, 用位码加以表示, 因此也称为区位码。 01-09区为符号、数字区,16-87区为汉字区,10-15区、88-94区是有待进一步标准化的空白区。GB2312还将收录的汉字分成两级:第一级是常用汉字计 3755 个,置于 16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列,故而GB2312最多能表示6763个汉字。
为了解决区位码与西文字符相混淆的问题,就规定汉字在计算机中用内码表示,内码为 两个字节,而且为了保证中西文兼容,即与 ASCII 码的使用不发生冲突,所以汉字的两个 字节的最高位均为1。所以汉字内码与区位码之间的关系公式为:机内码高位=区码+ A0H;机内码低位=位码+A0H。只要通过某个汉字的内码就可得到该汉字的区位码,也就 得到了该汉字的字模。在 软件设计中选用了UCDOS 5.0汉字系统中的16×16点阵字库Hzk16 作为提取汉字字模的标准字库,其中每个汉字占有 32 个字节的空间,汉字在字库中位置的 计算公式为:Location = [(机内码高位-&HA1)×94 + (机内码低位-&HA1)]×32。 3.2.2提取汉字的软件设计及实现
本系统的取字模软件主要是编辑LED显示屏显示的内容,在设计中采用C语言写了LED显示屏控制系统的内容下载软件。此软件的取字模方式为:当输入一个要取字模的汉字以后,按下Ctrl +Enter键后把汉字输入到软件点阵图腾区(先按Ctrl键再按Enter键),把汉字输入之后,接着就是修改汉字的方向,点击 后进入到修改图像菜单,我们可以看到此图像图标 ,我们只需要点击此按钮3次,接着进入 后点击C51格式取字模,依次完成‘ 南昌大学科学技术学院06自动化黄卫勇制作吴静进老师指导‟简体汉字的取模。汉字字摸提取软件界面如附录三所示。
11
第四章 系统调试与测试结果分析
第四章 系统调试与测试结果分析
4.1 系统调试
根据系统设计方案,本系统的调试共分为三大部分:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:LED驱动模块的调试,数据存储模块的调试,PC机通信模块的调试等,最后将各模块组合后进行整体测试。
1、硬件组装
在做好的PCB空板上把系统所用到的所有元器件插入到板上,进行焊接,确保无一处有虚焊、漏焊等。
2、硬件调试
首先把对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。 3、软件调试
按照程序流程图在KEIL C51软件中编写好程序,在此软件中检测编写好的程序是否有误语法错误。
4、硬件软件联调
将调试好的硬件和软件进行联调,主要调试系统的实现功能。 4.2 测试结果
此次系统设计结果较好,LED显示屏能很好的显示信息。LED显示屏由八块8×8的LED小模块组成,整个显示屏可以显示一个16×16的汉字,汉字从右到左移动显示,显示亮度也正好。
12
第四章 系统调试与测试结果分析
总结
本文设计的是一个用16×16的点阵LED图文显示屏,能够在目测条件下LED显示屏各点亮度均匀、充足,可显示文字且显示文字稳定、清晰无串扰。文字显示方式是从右往左循环滚动。本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点,并且节省单片机的I/O口,大大提高了单片机的利用率。
在做这次毕业设计过程中使我学到了很多,加深了对单片机、驱动芯片、LED点阵显示屏和C语言的理解,验证了所学理论知识,提高了基本的解决实际问题的能力,并增加了对电子设计方面的兴趣。希望这次的经历能让我在以后的工作和生活中不断成长与进步。 总结本文的研究工作,主要做了下面几点较突出的工作:
一、通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。
二、本文设计的LED显示屏能够实现在目测条件下LED显示屏各点亮度均匀、充足,可显示动态文字,显示文字稳定、清晰无串扰。文字显示方式是从右往左循环滚动。
三、文章给出了系统具体的硬件设计方案,硬件结构电路图,软件流程图和具体C语言程序设计与调试等方面。
四、在这次毕业设计的过程中学会了Altium Designer的基本使用,感到Altium Designer 对自动化专业的同学来说是一门很有用的课程。
五、通过这次毕业设计,重新复习并进一步学习了MCS-51,熟练掌握了WORD软件和Microsoft PowerPoint的使用。
六、存在缺陷:没有考虑抗干扰的问题。
13
参考文献
参考文献(References)
[1] 吴光,LED显示屏电路技术概况[M],现代显示,2001
[2] 储昌铃,LED显示屏系统原理局工程技术[M],电子科技大学出版社,2000 [3] 江清明,LED点阵显示牌的设计与动态显示控制[M],微计算机信息,2001 [4] 朱炬,多媒体视频LED显示技术[J],电子技术杂志,2000
[5] [美]Mark Nelson著.串行通信开发指南(第二版)[S].潇湘工作室译.出版日期:2000
年9月第1版.
[6] 李光飞等.单片机课程设计实例指导[M]. 北京;北京航空肮天大学出版社,2004. [7] 李东生等编著.Protel99SE电路设计技术入门与应用[M].2002年2月第1版 . [8] 清源计算机工作室编著.Protel99SE电路设计与仿真[M].2001年5月第1版 . [9] 刘瑞新.单片机原理及应用教程[M].北京:机械工业出版社,2006年. [10] [美]Joe Camp Bell编著。串行通信 C 程序员指南[S].2000年8月. [11] 康华光.电子技术基础数字部分(第五版) [M].北京:高等教育出版社,2006年
[12] Morris Macro. Digital Design (Third Education).Beijing: Higher Education Press,
2002.
[13] 王港元.电工电子实践指导(第二版) [M].江西:江西科学技术出版社,2005年.
14
致谢
致 谢
在论文制作完成之际,我的心情有抵达终点的欣喜,虽然有我的辛勤付出,但是,由于经验的匮乏,在课题设计的整个过程,以及毕业论文的写作、修改和定稿过程中,得到了老师和同学们的热心帮助。
首先我要衷心感谢吴静进老师老师对我整个毕业设计由始至终地悉心督促指导,使我从困惑迷茫的初期走向论文的顺利完成,在完成论文的同时也深受启发和教育,使我受益终生;然后还要感谢进大学以来所有的老师们,为我打下自动化专业知识的基础;同时还要感谢我的同学和朋友们,正是因为有了你们的热心帮助和鼓励,使我有一个愉快而又严肃认真的学习和生活环境,这段日子成为我一生中美好的回忆。
最后感谢我的母校四年来对我的大力栽培。 总之,在这里请接受我最诚挚的谢意。
15
附录一
附录一:系统总程序 #include #define DATAOUT P2//指定P2口做为输出 sbit DATA=DATAOUT^0;//行数据输出位 sbit SCLH=DATAOUT^1;//行扫描时钟位 sbit SCLT=DATAOUT^2;//行数据锁存位 sbit AB=DATAOUT^3;//列数据输出位 sbit SCK=DATAOUT^4;//列扫描时钟位 unsigned char lhj[32];//32字节RAM做为16*16点阵屏显示缓存 void display();//做为点阵扫描函数,将显示缓存的数据输出到点阵屏 void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer);//上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度 code unsigned char nan[32]={//南 0x00,0x04,0x00,0x04,0x7F,0xE4,0x04,0x24,0x05,0x24,0x05,0x64,0x05,0xB4,0x7F,0x2F, 0x05,0x24,0x05,0xA4,0x05,0x64,0x25,0x24,0x44,0x24,0x3F,0xE6,0x00,0x04,0x00,0x00 }; code unsigned char chang[32]={//昌 0x00,0x00,0x00,0x00,0x7F,0x00,0x25,0x7E,0x25,0x4A,0x25,0x4A,0x25,0x4A,0x25,0x4A, 0x25,0x4A,0x25,0x4A,0x25,0x4A,0x25,0x7E,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; code unsigned char da[32]={//大 0x00,0x20,0x80,0x20,0x40,0x20,0x20,0x20,0x10,0x20,0x0C,0x20,0x03,0xA0,0x00,0x7F, 0x01,0xA0,0x06,0x20,0x08,0x20,0x30,0x20,0x60,0x20,0xC0,0x20,0x40,0x20,0x00,0x00 }; code unsigned char xue1[32]={//学 0x00,0x40,0x02,0x30,0x02,0x10,0x02,0x12,0x02,0x5C,0x02,0x54,0x42,0x50,0x82,0x51, 0x7F,0x5E,0x02,0xD4,0x02,0x50,0x02,0x18,0x02,0x57,0x02,0x32,0x02,0x10,0x00,0x00 }; code unsigned char ke[32]={//科 0x04,0x10,0x02,0x12,0x01,0x92,0x00,0x72,0xFF,0xFE,0x00,0x51,0x04,0x91,0x04,0x00, 0x04,0x22,0x02,0xCC,0x02,0x00,0x02,0x00,0xFF,0xFF,0x01,0x00,0x01,0x00,0x00,0x00 }; code unsigned char xue2[32]={//学 0x00,0x40,0x02,0x30,0x02,0x10,0x02,0x12,0x02,0x5C,0x02,0x54,0x42,0x50,0x82,0x51, 0x7F,0x5E,0x02,0xD4,0x02,0x50,0x02,0x18,0x02,0x57,0x02,0x32,0x02,0x10,0x00,0x00 16 附录一 }; code unsigned char ji[32]={//技 0x01,0x08,0x41,0x08,0x80,0x88,0x7F,0xFF,0x00,0x48,0x40,0x28,0x40,0x00,0x20,0xC8, 0x13,0x48,0x0C,0x48,0x0C,0x7F,0x12,0x48,0x21,0xC8,0x60,0x48,0x20,0x08,0x00,0x00 }; code unsigned char shu[32]={//术 0x10,0x10,0x10,0x10,0x08,0x10,0x04,0x10,0x02,0x10,0x01,0x90,0x00,0x50,0x7F,0xFF, 0x00,0x50,0x00,0x90,0x01,0x12,0x06,0x14,0x0C,0x10,0x18,0x10,0x08,0x10,0x00,0x00 }; code unsigned char xue3[32]={//学 0x00,0x40,0x02,0x30,0x02,0x10,0x02,0x12,0x02,0x5C,0x02,0x54,0x42,0x50,0x82,0x51, 0x7F,0x5E,0x02,0xD4,0x02,0x50,0x02,0x18,0x02,0x57,0x02,0x32,0x02,0x10,0x00,0x00 }; code unsigned char yuan[32]={//院 0xFF,0xFE,0x00,0x02,0x02,0x32,0x04,0x4A,0x83,0x86,0x41,0x0C,0x31,0x24,0x0F,0x24, 0x01,0x25,0x01,0x26,0x7F,0x24,0x81,0x24,0x81,0x24,0x81,0x0C,0xF1,0x04,0x00,0x00 }; code unsigned char lin[32]={//0 0x00,0x00,0x0F,0xE0,0x10,0x10,0x20,0x08,0x20,0x08,0x10,0x10,0x0F,0xE0,0x00,0x00 }; code unsigned char liu[32]={//6 0x00,0x00,0x0F,0xE0,0x11,0x10,0x20,0x88,0x20,0x88,0x11,0x18,0x0E,0x00,0x00,0x00 }; code unsigned char jii[32]={//级 0x10,0x20,0x13,0x30,0x11,0xAC,0x49,0x63,0x29,0x20,0x91,0x18,0x8C,0x02,0x43,0x82, 0x40,0x7E,0x23,0x82,0x14,0x42,0x18,0x72,0x66,0x4E,0xC1,0xC0,0x40,0x40,0x00,0x00 }; code unsigned char zi[32]={//自 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,0x44,0x48,0x44,0x48,0x44,0x4C,0x44,0x4B, 0x44,0x4A,0x44,0x48,0x44,0x48,0x44,0x48,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00 }; code unsigned char dong[32]={//动 0x08,0x20,0x1C,0x24,0x0B,0x24,0x08,0xE4,0x0C,0x24,0x05,0x24,0x4E,0x24,0x24,0x20, 0x10,0x10,0x0C,0x10,0x03,0xFF,0x20,0x10,0x40,0x10,0x3F,0xF0,0x00,0x00,0x00,0x00 }; 17 附录一 code unsigned char hua[32]={//化 0x00,0x80,0x00,0x40,0x00,0x20,0x7F,0xF8,0x00,0x07,0x04,0x02,0x02,0x00,0x01,0x00, 0x3F,0xFF,0x40,0xC0,0x40,0x60,0x40,0x30,0x40,0x1C,0x78,0x08,0x00,0x00,0x00,0x00 }; code unsigned char huang[32]={//黄 0x00,0x20,0x80,0x24,0x80,0x24,0x5F,0xA4,0x32,0xA4,0x12,0xBF,0x12,0xA4,0x1F,0xE4, 0x12,0xA4,0x12,0xBF,0x32,0xA4,0x5F,0xA4,0xC0,0x24,0x00,0x24,0x00,0x20,0x00,0x00 }; code unsigned char wei[32]={//卫 0x00,0x00,0x40,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE, 0x40,0x02,0x40,0x02,0x42,0x02,0x46,0x02,0x43,0xFE,0x40,0x00,0x40,0x00,0x00,0x00 }; code unsigned char yong[32]={//勇 0x00,0x00,0x04,0x00,0x85,0xF9,0x44,0xA9,0x24,0xA9,0x14,0xA9,0x0E,0xAB,0x05,0xFD, 0x04,0xAD,0x04,0xAB,0x44,0xAB,0x84,0xA9,0x7D,0xF8,0x00,0x00,0x00,0x00,0x00,0x00 }; code unsigned char zhi1[32]={//制 0x00,0x00,0x00,0x50,0x3F,0x4F,0x01,0x4A,0x01,0x48,0xFF,0xFF,0x21,0x48,0x61,0x48, 0x3F,0x48,0x00,0x00,0x0F,0xFC,0x40,0x00,0x80,0x00,0x7F,0xFF,0x00,0x00,0x00,0x00 }; code unsigned char zuo[32]={//作 0x00,0x80,0x00,0x40,0x00,0x20,0xFF,0xF8,0x00,0x07,0x00,0x22,0x00,0x18,0x00,0x0C, 0xFF,0xFB,0x04,0x48,0x04,0x48,0x04,0x48,0x04,0x68,0x06,0x48,0x04,0x08,0x00,0x00 }; code unsigned char wu[32]={//吴 0x84,0x00,0x84,0x00,0x44,0x80,0x44,0xBE,0x24,0xA2,0x14,0xA2,0x0C,0xA2,0x07,0xA2, 0x0C,0xA2,0x14,0xA2,0x24,0xA2,0x64,0xBE,0xC4,0x80,0x44,0x00,0x04,0x00,0x00,0x00 }; code unsigned char jing[32]={//静 0x00,0x22,0xFF,0xAA,0x0A,0xAA,0x4A,0xBF,0x8A,0xAA,0x7F,0xAA,0x00,0x22,0x00,0x80, 0x42,0xA8,0x82,0xA7,0x7F,0xF4,0x02,0xAC,0x02,0xA4,0x03,0xE0,0x00,0x80,0x00,0x00 }; code unsigned char jin[32]={//进 0x00,0x80,0x40,0x82,0x20,0x9C,0x1F,0x88,0x20,0x00,0x50,0x88,0x4C,0x88,0x43,0xFF, 0x40,0x88,0x40,0x88,0x40,0x88,0x5F,0xFF,0x40,0x88,0x40,0x88,0x40,0x80,0x00,0x00 18 附录一 }; code unsigned char lao[32]={//老 0x08,0x40,0x08,0x44,0x04,0x44,0x04,0x44,0x02,0x44,0x3E,0x44,0x49,0x7F,0x48,0xC4, 0x44,0xC4,0x44,0x44,0x42,0x64,0x42,0x54,0x40,0x4E,0x70,0x44,0x00,0x40,0x00,0x00 }; code unsigned char shi[32]={//师 0x40,0x00,0x27,0xFC,0x10,0x00,0x0E,0x00,0x01,0xFF,0x00,0x00,0x0F,0xF2,0x00,0x12, 0x00,0x12,0x00,0x12,0xFF,0xFE,0x00,0x12,0x04,0x12,0x08,0x12,0x07,0xF2,0x00,0x00 }; code unsigned char zhi2[32]={//指 0x02,0x10,0x42,0x10,0x81,0x10,0x7F,0xFF,0x00,0x90,0x00,0x50,0x00,0x00,0x7F,0xBF, 0x44,0xA4,0x44,0xA4,0x44,0xA2,0x44,0xA2,0x44,0xA2,0x7F,0xB8,0x00,0x00,0x00,0x00 }; code unsigned char dao[32]={//导 0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x3E,0x06,0x4A,0x3A,0x4A,0x12,0x4A,0x02,0x4A, 0x42,0x4A,0x82,0x4A,0x7F,0xCA,0x02,0x4E,0x02,0x40,0x02,0x70,0x02,0x00,0x00,0x00 }; void main(void) //主入口函数 { } void display()//显示 { unsigned char i,ia,j,tmp;//定义变量 DATAOUT=0XFF;//置位高电平做准备 AB=0;//将列数据位清0,准备移位 for(i=0;i<16;i++) {//循环输出16行数据 SCK=0;//为列移位做准备 SCLT=0;//为行锁存做准备 for(ia=2;ia>0;) {//每行16个点,循环位移两个字节 ia--;//循环两次 tmp=~lhj[i*2+ia];//读取点阵数据做输出,这里用到ia目的是先读取点阵数据的 while(1){ 第二位字节,因一行16个点由两个字节组成, 19 附录一 //电路中的移位寄存器最后一位对应最后一列,所以要先输出一行 中的第二个字节数据 for(j=0;j<8;j++) {//循环两次,每次移一个字节, SCLH=0; //为列移位做准备 DATA=tmp&0x01;//将数据低位做输出,由电路图可知,移位寄存器的 最后一位对应最后一列,因此先移最后一位 tmp>>=1;//将数据缓冲右移一位,为下次输出做准备 SCLH=1;//将DATA上的数据移入寄存器 }//移入单字节结束 }//移入两个字节结束 SCK=1;//SCK拉高,列数据移位,相应行拉低,三极管导通输出电量到相应行点阵 管阳极(共阳) SCLT=1; //SCLT拉高,将数据锁存输出到相应行的点阵发光管显示,显示一行后将 保持到下一行显示开始 AB=1;//列数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从 第一位开始一直移位最后一位, //移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现, 否则显示出乱 } j=64; while(j--); //每一行的显示,保持16个移位时间,因此,最后一行的显示,也要加入 保持时间,补尝显示的亮度 } void displaymovetb(unsigned char din,unsigned char *lp,unsigned char timer) //上下移动内容,din:1为向下,0为向上,lp指向要移入的内容,timer为移动速度 { unsigned char i=0,j=0,ia=0; unsigned int tmp=0,timerc=0; if(din){//判断移动方向,向下 ia=32;//要移入第一个汉字的数组元素 i=16;//行索引 while(i--){//逐行处理 SCK=0; SCK=1;//将最后一行数据移出 20 附录一 j=30; while(j){ j--; lhj[j+2]=lhj[j];//将上一行的内容复制到下一行,每两行内容相隔四个字节,复制15行 } } else{//移动方向,向上 ia=0;//向上移动,移入汉字从低位开始 for(i=0;i<16;i++){//处理16行 for(j=0;j<30;j++)//将下一行的内容复制到上一行,每两行内容相隔四个字节,复} if(lp==0){//最后一行的处理,判断移入的内容是否为空,是用0移入 } else{//否则,取字数组处理 } timerc=timer;//处理完16行,调用显示函数更新点阵 while(timerc--) display(); //循环做为处理的速度,即移动的速度 ia--; lhj[0]=0; lhj[1]=0; lhj[1]=lp[ia]; ia--; lhj[0]=lp[ia]; 制15行 lhj[j]=lhj[j+2]; if(lp==0){//最后一行的处理,判断移入的内容是否为空,是用0移入 } else{//否则,取字数组处理 } lhj[30]=lp[ia]; lhj[31]=lp[ia+1]; ia+=2; lhj[30]=0; lhj[31]=0; 21 附录一 timerc=timer;//处理完16行,调用显示函数更新点阵 while(timerc--)//循环做为处理的速度,即移动的速度 display(); } } } 22 附录二 附录二:系统总体原理图 23 附录三 附录三:汉字字摸提取软 24 附录四 附录四:实物图 25 因篇幅问题不能全部显示,请点此查看更多更全内容