基于单片机的LED点阵屏毕业设计 - 图文

更新时间:2024-05-03 12:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

电子系统项目设计总结报告

题 目:基于LED点阵显示屏的广告墙设计 学 院:物理与电子工程学院 专 业:电子信息工程 组员姓名:孟昭阳 马金龙 任柄坤 董君瑀 班 级:2011级电子二班 指导教师:梁西银 宋海声

目 录

第一章 摘要 ................................................................................................................................... 1 第二章 系统方案论证 ................................................................................................................... 2

2.1 需要实现的功能 ........................................................................................................... 2 2.2 LED显示特点 .............................................................................................................. 2 2.3 设计方案论证 ............................................................................................................... 3

2.3.1 显示模式方案 ................................................................................................. 3 2.3.2 数据传输方案 ................................................................................................. 4

第三章 关键电路设计 ................................................................................................................... 5

3.1 电源设计 ....................................................................................................................... 5 3.2 单片机系统及外围电路 ............................................................................................... 6

3.2.1 单片机的选择 ................................................................................................. 6 3.2.2 AT89C51芯片介绍 ........................................................................................ 6 3.2.3 单片机系统外围电路 ..................................................................................... 9 3.3 列驱动电路 ................................................................................................................. 10 3.4 行驱动电路 ................................................................................................................. 12

3.4.1 行驱动芯片74HC154 介绍 ........................................................................ 12 3.4.2 行驱动电路 ................................................................................................... 14 3.5 LED显示屏电路 ........................................................................................................ 15 第四章 软件流程 ......................................................................................................................... 18

4.1 系统主程序 ................................................................................................................. 18 4.2 显示驱动程序 ............................................................................................................. 19 第五章 系统测试及结果分析 ..................................................................................................... 21

5.1 软件调试 ..................................................................................................................... 21 5.2 硬件调试 ..................................................................................................................... 25 5.3 性能分析 ..................................................................................................................... 25 第六章 理论分析计算 ................................................................................................................. 26 第七章 系统功能及使用方法 ..................................................................................................... 27 结束语 ............................................................................................................................................ 28 附录一 实物照片、电路图、PCB图、元器件清单 ................................................................ 29 附录二 系统程序源代码 ............................................................................................................. 33 附录三 用户使用手册 ................................................................................................................. 39 参考文献......................................................................................................................................... 40

第一章 摘要

本设计是一16×16点阵LED电子显示屏的设计。

整机以美国ATMEL 公司生产的40脚单片机AT89C51为核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。通过该芯片控制一个行驱动器 74HC154和两个列驱动器74HC595来驱动显示屏显示。该电子显示屏可以显示各种文字或单色图像,全屏能显示1个汉字,采用16*16点阵LED显示模块来组成16×16点阵显示模式。显示采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。文中详细介绍了LED点阵显示的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计,以及使用说明等。

单片机控制系统程序采用C语言进行编辑,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库中提取。

LED显示以其组构方式灵活、显示稳定、功耗低、寿命长、技术成熟、成本低廉等特点在车站、证券所、运动场馆、交通干道及各种室内/外显示场合的信息发布,公益宣传,环境参数实时,重大活动倒计时等等得到广泛的应用。

经实践证明,该系统显示误差小,性能稳定,结构合理,扩展能力强。

关键词:AT89C51单片机; LED; 点阵显示; 动态显示; 汇编语言。

1

第二章 系统方案论证

2.1 需要实现的功能

设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。

2.2 LED显示特点

LED发光灯可以分为单色发光灯、双色发光灯、三色发光灯、面发光灯、闪烁发光灯、电压型发光灯等多种类型。按照发光灯强度又可以分为普通亮度发光灯、高亮度发光灯、超高亮度发光灯等。这种单个的发光灯适宜用做指示灯,如电源指示、电路状态指示灯,进而对能够转变成电信号的各种物理量进行指示。也可以用多个LED发光灯组成固定的字符或图形进行显示,如大型剧场会堂的出入口及洗手间的显示。和很多应用术语一样,LED图文显示屏并没有一个公认的严格的定义,一般把显示图形和/或文字的LED显示屏称为图文屏。这里所说的图形,是指由单一亮度线条组成的任意图形,以便于不同亮度(灰度)点阵组成的图像相区别。图文显示屏的主要特征是只控制LED点阵中各发光器件的通断(发光或熄灭),而不控制LED的发光强弱。LED图文显示屏的外观可以做成条形,叫做条形图文显示屏(简称条屏),也可以按一定高度比例做成矩形的平面图文显示屏。其实条屏只不过是其宽度远大于高度的平面显示屏,在显示与控制的原理上并无区别。

从理论上说,不论显示图形还是文字,都是控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光。通常事先把需要显示的图形文字转换成点阵图形,再按照显示控制的要求以一定的格式形成显示数据。对于只控制通断的图文显示屏来说,每个LED发光器件占据数据中的1位(1bit),在需要该LED器件发光的数据中相应的位填1,否则填0。当然,根据控制电路的安排,相反的定义同样是可行的。这样依照所需显示的图形文字,按显示屏的各行各列逐点填写显示数据,就可以构成一个显示数据文件。显示图形的数据文件,其格式相对自由,只要能够满足显示控制的要求即可。文字的点阵格式比较规范,可以采用现行计算机通用的字库字模。组成一个字的点阵,其大小也可以有16×16、24×24、32×32、48×48等不同规格。汉字的点阵结构相应的显示数据是用16进制格式以字节为单位表示的。 用点阵方式构成图形或文字,是非常灵活的,可以根据需要任意组合和变化,只要设计好合适的数据文件,就可以得到满意的显示效果。因而采用点阵式图文显示屏显示经常需要变化的信息,是非常有效的。

点阵显示方式适应信息变化的优点,是以点阵显示器的价格和其复杂的控制电路为代价的。点阵显示器在整个显示单元的所有位置上都布置了LED器件,而像数码管一类的显示器件只在需要发光的七段位置上布置LED器件,其它位置是空白的。

2

因此,点阵显示器在相同面积情况下,价格要贵些。但是,数码管可显示的信息有限,只有0~9或单个的英文字符,由于组合形成的字符不多,所以其显示数据和控制电路都比较简单。点阵显示器则不然,它要对点阵上全部LED进行控制,并能生成所有可能显示的图形文字,其显示数据和控制电路自然要复杂得多。因此,根据不同的场合,不同的显示特点和格式可以分别采用数码管器件或点阵显示方式,有的情况可以采用两者搭配的混合屏显示方式。

图文显示屏的颜色,有单色、双色、和多色几种。最常用的是单色图文屏。单色屏多使用红色、橘红色或橙色LED点阵单元。双色图文屏和多色图文屏,在LED点阵的每一个“点”上布置有两个或多个不同颜色的LED发光器件。换句话说,对应于每种颜色都有自己的显示矩阵。显示的时候,各颜色的显示点阵是分开控制的。事先设计好各种颜色的显示数据,显示时分别送到各自的显示点阵,即可实现预期效果。每一种颜色的控制方法和单色的完全相同,因此掌握了单色图文显示屏的原理,双色屏和多色屏就不难理解了。

2.3 设计方案论证

2.3.1 显示模式方案

为了吸引观众增强显示效果,可以有多种显示模式,最简单的显示模式是静态显示。这里所说的“静态显示模式”不同于静态驱动方式。与静态显示模式相对应,就有各种动态显示模式,它们所显示的图文都是能够动的。按照图文运动的特点又可以分为闪烁、平移、旋转、缩放等多种显示模式。产生不同显示模式的方法,并不意味着一定要重新编写显示数据,可以通过一定的算法从原来的显示数据直接生成。例如,按顺序调整行号,可以使显示图文产生上下平移;而顺序调整列显示数据的位置,就可以达到左右平移的目的;同时调整行列顺序,就能得到对角线平移的效果。其它模式的数据刷新,也可找到相应的算法。不过当算法太复杂,太浪费时间的话,也可以考虑预先生成刷新数据,存储备用。刷新的时间控制,要考虑运动图形文字的显示效果。刷新太慢,动感不显著;刷新太快了,中间过程看不清。一般刷新周期可控制在几十毫秒范围之内。

同时控制LED显示屏的各个发光点亮灭的方法称为静态驱动显示方式。16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。而且静态显示功耗大,显示一个16×16的字的功耗为:16×16×10×5=12800mW=12.8W!普通电池根本无法驱动,要是组成大显示屏那功耗将更惊人。因此虽然静态显示效果好,但是在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器,每行有一个行驱动器,具体就16×16的点阵来说,把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),由行译码器给出的行选通信号,从第一行开始,按顺序

3

依次对各行进行扫描(把该行与电源的一端接通)。另一方面,根据各列锁存的数据,确定相应的列驱动器是否将该列与电源的另一端接通。接通的列,就在该行该列燃亮相应的LED;未接通的列所对应的LED熄灭。当一行的扫描持续时间结束后,该行燃亮的LED也就熄灭;下一行又以同样的方法进行显示。全部各行都扫过一遍之后(一个扫描周期),又从第一行开始下一个周期的扫描。只要一个扫描轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就不容易感觉出闪烁现象,就能看到显示屏上稳定的图形了。而且动态扫描方式功耗低,硬件成本低,每个LED都不是连续工作,因而还有利于延长LED的使用寿命。

2.3.2 数据传输方案

采用扫描方式进行显示时,显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输方式的问题。从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。当列数很多时,并行传输的方案是不可取的。

采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据要经过并行到串行和串行到并行两次变换。首先,单片机从存储器中读出的8位并行数据要通过并串变换,按顺序一位一位地输出给列驱动器。与此同时,列驱动器中每一列都把当前数据传向后一列,并从前一列接收新数据,一直到全部列数据都传输完为止。只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解列数据准备(传输)和列数据显示两个部分。对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响到LED的亮度。

解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行各列数据的同时,准备下一行的列数据。为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。

经过上述分析,可以归纳出列驱动器电路应具备的主要功能。对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。图2-1为显示屏电路实现的结构框图。

列驱动器 单片机 电源 行驱动器 LED显示点阵 4 图2-1 显示屏电路框图

第三章 关键电路设计

由于图文屏的控制电路采用单片机方案,控制功能的实现应在硬件和软件两方

面进行折中。单片机及相应软件,主要负责存储(或生成)显示数据、安排控制信号的定时与顺序等。但是单片机的接口数量少,驱动能力不强,必须扩展一定的硬件电路,才能满足显示屏的需要。系统硬件部分电路大致上可以分成稳压电源、单片机系统及外围电路、列驱动器电路、行驱动器电路和LED显示屏电路五部分。

3.1 电源设计

稳压电源的功能是把来自电网的220V交流电压转变为所需的、稳定的直流电压。它由电源变压器、整流电路、滤波电路和稳压电路四个部分组成,如图3-1所示:

+ 电 源 + 整 流 + 滤 波 + 稳 压 + u1 u2 u3 uI U0 _ 变压器 _ 电 路 _ 电 路 _ 电 路 _

(a)稳压电源的组成框图

u1 u2 u3 uI U0 0 t 0 t 0 t 0 t 0 t

(b)整流与稳压过程 图3-1 稳压电源的组成框图及整流与稳压过程 根据要求所确定的稳压电源的电路形式如图3-2所示。图中变压器T将来自电网的220V交流电压变换为整流电路所需要的7.5V交流电压,再经整流电桥(4个二极管)D1将交流电压变换成脉动的直流电压,随后电解电容器C1将脉动直流电压中的大部分纹波加以滤除,以得到较为平滑的直流电压。为了得到改善的纹波电压,再将直流电压通过电容C2,然后经集成稳压器IC1稳压,在输出端得到稳定的5V直流电压。这时,在输出端接上电容C3,用以滤除输出端的高频信号,改善负

5

载的瞬态响应,最后即可得到所需的、稳定的直流电压。电路最后接入的发光二极管用做电源指示灯。

IC178051VCCVout31GND2VinS+_SW R1100ΩT4D12C11000uC2104C3104220V~7.5VBRIDGED23LED 图3-2 电源电路图 3.2 单片机系统及外围电路

3.2.1 单片机的选择

单片机采用89C51或其兼容系列的芯片进行控制,它负责控制整个电路以及相

应的程序的运行、以及给屏体电路部分发送命令。这里我们选择了内含4K字节Flash的AT89C51,因为我们只需要显示特定的图形和文字,无需庞大的字库,因此4K Flash已经可以满足字库储存的需求,不需要扩展外存储器。

3.2.2 AT89C51芯片介绍

AT89C51

AT89C51是美国ATMEL公司生产的8位Flash ROM单片机。其最突出的优点是片内ROM为Flash ROM,可擦写1000次以上,应用并不复杂的通用ROM写入器就能方便的擦写,读取也很方便,价格低廉,具有在片程序ROM二级保密系统。因此可灵活应用于各种控制领域。AT89C51包含以下一些功能部件:

(1)一个8位CPU ;

(2)一个片内振荡器和时钟电路; (3)4KB Flash ROM ; (4)128B 内RAM;

(5)可寻址64KB的外ROM和外RAM控制电路; (6)两个16位定时/计数器; (7)21个特殊功能寄存器 ; (8)4个8位并行I/O口;

(9)一个可编程全双工串行口 ;

(10)5个中断源,可设置成2个优先级。

6

AT89C51单片机一般采用双列直插DIP封装,共40个引脚,图3-3为其引脚排列图。40个引脚大致可分为4类:电源、时钟、控制各I/O引脚。

一. 电源

Vcc——芯片电源,接+5V;GND——接地端。 二. 时钟

XTAL1、XTAL2——晶体振荡电路反相输入端和输出端。

U1

140P1.0VCC 239P1.1P0.0 338P1.2P0.1437 P1.3P0.2536P1.4P0.3 635P1.5P0.4734 P1.6P0.5833AT89C51P0.6P1.7 932RST/VPDP0.71031 P3.0/RxDEA/Vpp1130P3.1/TxDALE/PROG 1229P3.2/INT0PSEN1328 P3.3/INT1P2.71427P3.4/T0P2.6 1526P3.5/T1P2.51625 P3.6/WRP2.41724P3.7/RDP2.3 1823XTAL2P2.21922 XTAL1P2.12021GNDP2.0

图3-3 AT89C51引脚图

三. 控制线

控制线共有4根,其中3根是复用线。所谓复用线是指具有两种功能,正常使用时是一种功能,在某种条件下是另一种功能。

1.ALE/PROG——地址锁存允许/片内EPROM编程脉冲。

(1)ALE功能:用来锁存P0口送出的低八位地址。

AT89C51在并行扩展外存储器时,P0口用于分时传送低8位地址和数据信号,且均为二进制数。当ALE信号有效时,P0口传送的是低8位地址信号;ALE信号无效时,P0口传送的是低8位地址信号。在ALE信号的下降沿,锁定P0口传送的内容,即低8位地址信号。

需要指出的是,当CPU不执行访问外RAM指令,ALE以时钟振荡频率1/6的固定频率输出,因此ALE信号也可作为外部芯片CLK时钟或其他需要。但是,当CPU执行MOVX指令时,ALE将跳过一个ALE脉冲。

(2)PROG功能:片内EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

2.PSEN ——外ROM读选通信号。

7

PSEN可作为外ROM89C51读外ROM时,每个机器周期内PSEN两次有效输出。

芯片输出允许OE的选通信号。在读内ROM或读外RAM时,PSEN无效。 3.RST/VPD——复位/备用电源。

(1)正常工作时,RST端为复位信号输入端,只要在该引脚上连续保持两个机器周期以上高电平,AT89C51芯片即实现复位操作,复位后一切从头开始,CPU从0000H开始执行指令。

(2)VPD功能:在VCC掉电情况下,该引脚可接上备用电源,由VPD向片内RAM供电,以保持片内RAM中的数据不丢失。

4.EA/VPP——内外ROM选择/片内EPROM编程电源。

(1)EA功能:正常工作时,EA为内外ROM选择端。AT89C51单片机ROM寻址范围为64KB,其中4KB在片内,60KB在片外。当EA保持高电平时,先访问内ROM,但当PC值超过4KB时,将自动转向执行外ROM中的程序。当EA保持低电平时,则只访问外ROM,不管芯片内有否内ROM。

(2)VPP功能:片内有EPROM的芯片,在EPROM编程期间,此引脚用于施加编程电源。

四. I/O引脚

AT89C51有P0、P1、P2、P3 4个8位并行I/O端口,共32个引脚。

P0口是一组8位漏级开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能以吸收电流的方式驱动8个TTL逻辑门电路,对端口写1时,又可作高阻抗输入端用。在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。在Flash编程时,P0端口接收指令字节;而在验证程序时,则输出指令字节。验证时,要求外接上拉电阻。

P1 口是带内部上拉电阻的双向I/O口,向P1口写入1时P1口被内部上拉为高电平,可用作输入口。当作为输入脚时被外部信号拉低的P1口会因为内部上拉而输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。

P2 口是带内部上拉电阻的双向I/O口,向P2口写入1时P2口被内部上拉为高电平可用作输入口,当作为输入脚时被外部拉低的P2口会因为内部上拉而输出电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX @DPTR指令)时,P2口送出高8位地址数据,当使用8位寻址方式(MOVX@RI)访问外部数据存储器时,P2口发送P2特殊功能寄存器的内容,在整个访问期间不改变。Flash编程和程序校验时,P2也接收高位地址和一些控制信号。

P3 口是带内部上拉电阻的双向I/O口,向P3口写入1时P3口被内部上拉为高电平可用作输入口,当作为输入脚时被外部拉低的P3口会因为内部上拉而输出电流。P3口除了作为一般的I/O口线外,更重要的是它的第二功能,如表3.1所示:

8

端口引脚 表3.1 P3各端口第二功能 第二功能 串行口输入端 串行口输出端 外部中断0请求输入端 外部中断1请求输入端 定时/计数器0外部信号输入端 定时/计数器1外部信号输入端 外RAM写选通信号输出端 外RAM读选通信号输出端 P3.0——RXD P3.1——TXD P3.2——INT0 P3.3——INT1 P3.4——T0 P3.5——T1 P3.6——WR P3.7——RD 3.2.3 单片机系统外围电路

单片机系统外围电路形式如图3-4所示。单片机振荡器反相放大器的输入端(XTAL1)和输出端(XTAL2)之间接上12MHz或更高频率的晶振,以获得较高的刷新频率,使显示更稳定。电容C4、C5是晶振的负载电容,主要起频率微调和稳定的作用。单片机的串行口工作在方式0下,作为同步移位寄存器使用,端口RXD(P3.0)作为数据移位的输入/输出端,而由TXD(P3.1)端输出移位时钟脉冲。移位数据的发送和接收均以8位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。89C51的通用I/O口P1作为显示数据和二进制行号的公用输出口。两种数据的输出在时间上是错开的。P1口的低4位与行驱动器相连,送出二进制的行选信号;P1.5~P1.7口则用来发送控制信号。P0和P2口空着,在有必要的时候可以扩展系统的ROM和RAM。

C4

GNDU133pFY112MHzGNDC52019181716151413121110987654321GNDP2.0XTAL1P2.1XTAL2P2.2P3.7/RDP2.3P3.6/WRP2.4P3.5/T1P2.5P3.4/T0P2.6P3.3/INT1P2.7P3.2/INT0PSENP3.1/TxDALE/PROGP3.0/RxDEA/VppRST/VPDP0.7P1.7P0.6P1.6P0.5P1.5P0.4P1.4P0.3P1.3P0.2P1.2P0.1P1.1P0.0P1.0VCCAT89C51212223242526272829303132333435363738394033pFTXD-SCKRXD-SIG1RCKSCLRDCBAC6VCC+10uR28.2 kΩ

GND9 VCC

3.3 列驱动电路

图3-4 单片机系统外围电路

列驱动电路由集成电路74HC595构成,它具有一个8位串行输入/输出或者并行输出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。

74HC595的管脚及内部结构形式如图3-5所示。它的输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。引脚SER是串行数据的输入端。引脚SRCLK输入移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SER的下一个数据打入最低位。移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。RCLK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入到输出锁存器。引脚OE是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高阻态。SRCLR信号是移位寄存器的清零输入端,当其为低时移位寄存器的输出全部为0,由于SRCLK和RCLK错误!未指定书签。两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。芯片的输出端为QA~QH,最高位QH可作为多片74HC595级连应用时,向上一级的级连输出。但因QH受输出锁存器打入控制,所以还从输出锁存器前引出了QH′,作为与移位寄存器完全同步的级连输出。移位寄存和输出锁存的时序波形如图3-6所示:

图3-5 74HC595的管脚及内部结构逻辑图

10

图3-6 移位寄存和输出锁存的时序波形图

由74HC595组成的列驱动器示于图3-7中。该图由两片74HC595组成16列的

驱动,由16个行驱动器驱动16行。第一片列驱动器的SER端连接单片机输出的串行列显示数据,其 QH′端连接第二片的SER端,采用这样的方法组成两片的级连。两片相应的SRCLK、SRCLR、RCLK端分别并联,作为统一的串行数据移位信号、串行数据清除信号和输出锁存器打入信号。这样的结构,使得各片串行移位能把16列的显示数据依次输入到相应的移位寄存器输出端。移位过程结束之后,控制器输出RCLK打入信号,16列显示数据一起打入相应的输出锁存器。然后选通相应的行,该行的各列就按照显示数据的要求进行显示。

图3-7 显示驱动电路

11

3.4 行驱动电路

3.4.1 行驱动芯片74HC154 介绍

译码器是一个多输入、多输出的组合逻辑电路。其功能是将给定的输入码组进行“翻译”,变换成对应的输入信号,对每一种可能的输入组合,使输出通道中相应的一路有信号输出,一个且仅一个输出信号为有效电位。74HC154为变量译码器,也称二进制译码器,它是一种四线—十六线译码器, 译码的输入端有4个,输出端有24=16个,并有两个选通端(使能端),它的管脚形式如图3-8所示,当选通端E1、

E2均为低电平时,译码器处于工作状态,可将地址输入端(A0~A3)的二进制编

码在一个对应的输出端以低电平译出。否则,译码器被禁止,所有的输出端被封锁在高电平。Y0~Y15为译码输出端,输出是低电平有效,即在选通时,每输入一个二进制代码将使对应的一个输出端为低电平,而其它输出端均为高电平的无效信号,也可以说对应的输出端被“译中”。74HC154译码器的真值表如表3.2所示:

图3-8 74HC154管脚图

12

3.2 74HC154译码器的真值表

从真值表可知,每组4个变量输入,在16个输出中只有一个引脚为“0”(且正好与输入代码是一一对应),其余15个全为“1”,这种译码输出称为低电平有效;四线—十六线译码器逻辑形式为:

Y3?A3A2A1A0, Y0?A3A2A1A0,Y1?A3A2A1A0,Y2?A3A2A1A0,Y4?A3A2A1A0,

Y5?A3A2A1A0,Y6?A3A2A1A0,Y7?A3A2A1A0,Y8?A3A2A1A0,Y9?A3A2A1A0,Y10?A3A2A1A0,Y11?A3A2A1A0,Y12?A3A2A1A0,Y13?A3A2A1A0,Y14?A3A2A1A0,Y15?A3A2A1A0。

13

3.4.2 行驱动电路

行驱动电路相对简单。行选通信号来源于单片机按照时序要求所给出的二进制信号,每次更新行号(开始扫描新的一行)时,由单片机输出4位二进制行号,行号经4/16线译码器译码后,生成16条行选通信号线,再经过驱动器驱动对应的行线。采用译码器的方案,还可以保证同一时刻只选通一条行线,从而达到显示的稳

定性。行驱动电路原理如图3-9所示:

51D6

1LEQ 4

1D51LEQ

31D41

LEQ 21

D31LEQ

11D21

LEQ 01

D11LEQ

9ED0L1

Q8

EDL9Q

7EDL8Q

6ED

L7Q5

EDL6Q

4ED

L5Q3

EDL4Q

2EDL3

Q1

EDL2Q1234567811111111

0RRRRRRRREDL105

Q5个8个6611

×0Ω×550

8020

34567891RΩ0RRRRRRR0C2

CV

01345671234567891111111

TTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUOOOOOOOOOOOOOOOO 0123456789012345

111111451

12C2ABCDGGHU47321089222211D

14 NG01237.....11111PPPPP 图理原路电动驱行 9-3图

行选通信号从74HC154的Y0~Y15端输出,某一端输出低电平即为有效,而其它端输出均为高电平的信号无效。如Y0端输出低电平,此信号传至相应的PNP型三极管Q1,此时,三极管的基极为低电平,因此,发射结正向偏置,集电结反向偏置,三极管导通,其集电极再将高电平加于LED阵列的对应的行上,即将此行选通;而同时74HC154的其它端输出高电平而致使该行对应的三极管截止,从而所对应LED行线不被选通。行选通按顺序从Y0~Y15,全部各行都选通一遍之后又重新开始,这就是行驱动电路的逐行扫描过程。行信号A、B、C、D的顺序变化范围从0000、0001、0010、至l111,来一个选通信号,行信号顺序就变化一次,其频率由扫描电路决定。 由于行驱动电路一条行线上要带动16列的LED进行显示,按每一LED器件20mA电流计算,16个LED同时发光时,就需要16×20=320mA的驱动电流,选用三极管8550作为驱动管可以在逻辑功能和驱动能力上符合LED的驱动要求。

3.5 LED显示屏电路

LED显示屏是将发光二极管按行按列布置的,驱动时也就按行按列驱动。在扫描驱动方式下可以按行扫描按列控制,当然也可以按列扫描按行控制。LED显示屏现多采用一块16×16点阵显示,以满足汉字显示的要求。16×16 LED点阵是基本的点阵显示模块,理解了16×16 LED点阵的工作原理就可以基本掌握LED点阵显示技术。16×16点阵LED结构如图3-10所示:

15

图3-10 16×16点阵LED引脚图

16

图3-11 16×16点阵LED引脚定义图

从图中(本图的LED阵列采用共阳的接法)可以看出,16×16点阵共需要256个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上。要实现显示图形或字体,只需考虑其显示方式,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。当采用按行扫描按列控制的驱动方式时,LED显示屏8行的同名列共用一套列驱动器。行驱动器一行的行线连接到电源的一端,列驱动器一列的列线连接到电源的另一端。应用时还应在各条行线或列线上接上限流电阻。扫描中控制电路将行线的1到 8轮流接通高电位,使连接到各该行的全部LED器件接通正电源,但具体那一个LED导通,还要看它的负电源是否接通,这就是列控制的任务了。当对应的某一列置0电平,则相应的二极管就亮;反之则不亮。例如:如果想使屏幕左上角LED点亮,左下角LED熄灭的话,在扫描到第一行时,第一列的电位就应该为低,而扫描到第八行时第一列的电位就应该为高。这样行线上只管一行一行的轮流导通,列线上进行通断控制,实现了行扫描列控制的驱动方式。

17

第四章 软件流程

在单片机系统中,硬件是系统的基础,软件则是在硬件的基础上对其合理的调配和使用,从而完成应用系统所要完成的任务。软件的设计是设计控制系统的应用程序。其任务是在总体设计和硬件设计的基础上,确定程序结构,分配内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整的应用程序。

在进行系统总体设计时,曾经规划过软件结构,但由于硬件系统尚未仔细确定,软件结构框图十分粗糙,当硬件设计接口扩展及各功能模块与CPU连接关系确定后,就能够具体明确对软件设计的要求。本设计的LED显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。显示驱动程序由定时器T0中断程序实现。系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。

从有利于实现语言的直观,易于记忆和检查,可读性较好和使语言程序占用较少的单片机存储空间,实时处理系统可以快速的执行指令的角度考虑,本设计中显示屏程序采用C语言编写。

4.1 系统主程序

系统主程序的总体结构如图4-1所示。系统的主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;然后LED显示屏进入开机状态,转入正常的显示。首先是向上滚动显示“单片机是工业中最基本的应用方式”15个汉字,每个字停留时间约1.6s;接着再向上滚动显示“我爱单片机”这5个汉字。由于单片机没有停机指令,所以可以设置系统程序不断地循环执行上述显示效果。

系统程序结构属中断方式,绝大多数功能在中断服务子程序中完成。根据总体结构,可将程序划分为几个功能化模块:串行口中断服务程序、多字滚动显示子程序、单字显示子程序、扫描程序。各个模块可进行独立设计、调试和查错,最终再连接成一个整体。这样可方便程序调用,程序整体层次清晰,结构一目了然,方便阅读。

18

开 始 进入中断 系统初始化 定时器赋初值 读取行号并增1 “上滚屏”显示效果 送新行显示数据 循环扫描显示 消 隐 图4-1 系统主程序的总体结构

切换显示数据 送新行号、打开显示

退出中断 图4-2 显示驱动程序流程图

4.2 显示驱动程序

图4-2为显示驱动程序(显示屏扫描函数)流程图。根据流程图可以编写出相应的显示程序。显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷

新率的稳定,1/16扫描显示屏的刷新率(帧 频)计算公式如下:

1刷新率(帧频)=×T0溢出率

16 =

fosc1× 1612(65536?t0)其中fosc为晶振频率,t0为定时器T0初值(工作在16位定时器模式)。 T0初值=2N-

定时时间

机周时间 19

其中N与工作方式有关,本设计定时/计数器工作于方式1,如图4-3所示,方式1构成一个16位定时计数器,即N=16。

方式1最大计数值为216=65536 ,若fosc=12MHz,则定时时间范围为1~65536μs。

机周时间与主振频率有关,机器周期是时钟周期的12倍,因此,机周时间=12/ fosc。当fosc=12MHz时,1机周=1μs。

图4-3 定时/计数器T0工作方式1逻辑电路结构图

然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。显示程序给出了各控制信号和显示数据,其作用及相互配合关系均已在硬件部分作过介绍,相应的程序部分在清单的注释区内分别进行了说明,在此不再一一详述。系统程序清单见附录二。

20

第五章 系统测试及结果分析

一个单片机系统经过总体设计,完成了硬件和软件设计开发。元器件安装后,在系统的程序存储器中写入编制好的应用程序,系统即可运行。但编制好的程序或焊接好的线路不能按预计的那样正常工作是常见的事,多少会出现一些硬件、软件上的错误。这就需要通过调试来发现错误并加以改正。调试可分为硬件调试和软件调试。在允许的条件下,根据本设计系统的需求性首先采用在PC机上用模拟开发软件进行检测和调试,然后进行硬件的组装与调试。

5.1 软件调试

软件调试采用脱机调试的方法,即完全用仿真器软件在PC机上对目标电路原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘和鼠标设定,运行状态、各寄存器状态、端口状态等都可以在CRT指定的窗口区域显示出来,以确定程序运行有无错误。调试可按下列步骤进行:

一. 目标程序纠错

该阶段工作通常在目标程序编辑时就完成。一般来说,仿真器软件能给用户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢出等错误。

二. 子程序功能调试

程序设计通常采用模块程序设计,调试时可对一个个子程序分别进行调试,设置好入口条件,然后采用单步运行或断点运行方式,检查系统CPU现场、RAM和I/O口状态,看程序执行结果是否符合设计要求。

三. 整体程序综合调试

即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢出,输入输出状态是否正常等。

用软件模拟器调试不需任何在线仿真器,也不需要用户样机,直接就可以在PC机上开发和调试。调试和修改完毕后,对于实时性要求不高的应用系统可以直接使用编程器将软件固化在目标系统ROM中,然后独立投入运行。

21

软件调试结果仿真截图:

22

23

24

5.2 硬件调试

单片机应用系统的硬件调试和软件调试是分不开的,许多硬件故障在软件调试时才能发现,但通常要先排除系统中明显的硬件故障。调试工作可以分为四步:

一. 目测检查

根据硬件逻辑设计图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,必要时可用万用表检测线路通断情况。

二. 电源调试

样机的第一次通电测试很重要,若样机中存在电源故障,则加电后将造成器件损坏。调试的方法有两种:一种是断开样机稳压电源的输出端检查空载时电源工作情况;另一种是拔下样机上的主要集成芯片,检查电源的负载能力(用假负载)。确保电源无故障并性能符合设计要求。

三. 通电检查

在确保电源良好前提下,接通电源。最好在电源与其余电路之间串接一个电流表。若接通后电流很大,必须立即切断电源。电源大得超出正常范围,说明电路中有短路或故障。通电检查的主要目的是看系统是否存在短路或由元器件损坏、装配错误引起的电流异常。

四. 检查相应芯片的逻辑关系

加电后检查各芯片插座上相关引脚的电位,仔细测量相应的输入输出电平是否正常。单片机系统大都是数字逻辑电路,使用电平检查法可首先查出逻辑设计是否正确,选用器件和连接关系是否符合要求等。

5.3 性能分析

系统通过调试组装后一般即可正常工作。LED显示屏的刷新频率及显示显示效果是主要的性能指标。显示屏刷新率由定时器T0的溢出率和单片机的晶振频率决定,表5-1给出了显示屏采用的频率及其对应的定时器T0初值。

表5.1 显示屏刷新率(帧率)与T0初值关系表 25 50 62.5 75 85 100 120 刷新率/Hz T0初值 OxEC78 OxF63C OxF830 OxF97E OxFA42 OxFB1E OxFBEE

从理论上来说,24Hz以上的刷新率就能看到连续稳定的显示,刷新率越高,显示越稳定,同时刷新率越高,显示驱动程序占用的CPU时间也越多。实验证明,在目测条件下刷新率40Hz以下的画面看起来闪烁较严重,刷新率50Hz以上的已基本觉察不出画面闪烁,刷新率达到85Hz以上时再增加画面闪烁没有明显改善。

显示效果处理的内容和方法非常广泛,根据需求可做变动,在这里不做具体讨

25

论。

根据实践证明,这个方案设计的16×16点阵LED图文显示屏,结构合理,成本较低,且较容易扩展成更大的显示屏;显示屏各点亮度均匀、充足;显示图形或文字稳定、清晰无串扰;可用静止、移入移出等多种显示方式显示图形或文字。

第六章 理论分析计算

一.电路中为什么要用到三极管8550

因为16个行选通信号是其中一个低电平的为有效,其余为高电平的信号无效,8550是PNP型三极管,低电平信号传送至三极管的基极,则发射结正向偏置,集电结反向偏置,三极管导通,其集电极再将高电平加于LED阵列的对应的行上,即将此行选通;而同时其它高电平端所对应三极管截止,从而所对应LED行线不被选通。由于行驱动电路一条行线上要带动16列的LED进行显示,按每一LED器件20mA电流计算,16个LED同时发光时,就需要16×20=320mA的驱动电流,由于三极管有电流放大作用,选用三极管8550作为驱动管可以在逻辑功能和驱动能力上符合LED的驱动要求。

二.芯片74HC595的端口SRCLR起什么作用

端口SRCLR是74HC595芯片中移位寄存器的清零信号输入端,当其为低时移位寄存器的输出全部为0,也就没有数据打入到输出锁存器,即74HC595没有列选信号输出。

26

第七章 系统功能及使用方法

一、系统功能

通过AT89C51芯片控制一个行驱动器 74HC154和两个列驱动器74HC595来驱动一块16*16点阵LED显示屏显示。该电子显示屏可以显示各种文字或单色图像,全屏能显示1个汉字,采用16*16点阵LED显示模块来组成16×16点阵显示模式。显示采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。

二、使用方法

在proteus里双击单片机,出现一个对话框,program file ,点文件夹标志,选取要加入的HEX文件,点击确定,执行仿真。

HEX文件在Keil软件里生成,通过Keil编译源程序改变文字或移动方式,从而控制仿真。

USB连接电脑,用Keil软件编译、调试无错误后,就可以让单片机执行源程序,我们焊接的东西就会按我们的源程序工作了。

27

结束语

以上仅对LED显示屏的结构和驱动、显示电路原理作一详细介绍和分析。LED点阵的应用很广,对于不同的应用环境和应用要求,可以有各种各样的应用方式,在这里就不做详尽叙述。由于自己知识水平的局限和时间的仓促,设计中或还存在着一些不足,我们真诚的接受老师们的批评和指正.。

经过了一学期的努力学习和工作,我们终于完成了论文。从课题选择、方案论证到具体设计,每一步对我们来说无疑是巨大的尝试和挑战,我们不断地给自己提出新的问题,然后去论证、推翻,不懂就请教老师或同学,再接着提出新的问题,在这个往复的过程中,我们这篇设计日趋完善。每一次改进我们都收获良多,虽然我们设计的作品不是很成熟,而且借鉴了前人的一些资料,但我们仍然心里有一种莫大的幸福感,因为我们实实在在地走过了一个完整的设计所应该走的每一个过程,并且享受了每一个过程,更重要的是这个设计中我们加入了自己鲜活的思想。

在做这次电子设计过程中使我们学到了很多,加深了对数子电路的理解,验证了所学理论知识,提高了基本的解决实际问题的能力,并增加了对电子设计方面的兴趣。更重要的是使我们体会到不论做什么事都要真真正正用心去做,才会使自己更好的成长。没有学习就不可能有实践的能力,实践才是最终的目的,没有实践就不会有自己的突破和创新,希望这次的经历能让我们在以后的工作和生活中不断成长与进步。

28

0xB3,0xFF,0xB6,0x03,0xB6,0xFB,0xB6,0xFB,0x86,0xFB,0xB6,0xFB,0xFE,0x03,0xFE,0xFB}, //;-- 阳 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xFF,0xFF,0x83,0xFF,0xBA,0x03,0xB6,0xFB,0xB6,0xFB,0xAE,0xFB,0xB6,0xFB,0xB6,0xFB,

0xBA,0x03,0xBA,0xFB,0xBA,0xFB,0x96,0xFB,0xAE,0xFB,0xBE,0xFB,0xBE,0x03,0xBE,0xFB},

//;-- 董 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xF7,0xDF,0x00,0x01,0xF7,0xDF,0xE0,0x0F,0xFE,0xFF,0x80,0x03,0xFE,0xFF,0xE0,0x0F, 0xEE,0xEF,0xE0,0x0F,0xEE,0xEF,0xE0,0x0F,0xFE,0xFF,0xC0,0x07,0xFE,0xFF,0x00,0x01}, //;-- 君 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xFF,0xFF,0xC0,0x07,0xFB,0xF7,0xFB,0xF7,0x00,0x01,0xFB,0xF7,0xFB,0xF7,0xC0,0x07, 0xF7,0xFF,0xF7,0xFF,0xE0,0x07,0xE7,0xF7,0xD7,0xF7,0xB7,0xF7,0x70,0x07,0xF7,0xF7}, //;-- 瑀 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xFF,0xFB,0xFF,0xE1,0x04,0x1F,0xDF,0xDF,0xDE,0x03,0xDE,0xDB,0xDE,0xDB,0x06,0x03,

0xDF,0xDF,0xDC,0x01,0xDD,0xDD,0xC5,0xD5,0x1D,0x05,0xBD,0xFD,0xFD,0xF5,0xFD,0xFB},

//;-- 任 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xF7,0xEF,0xF7,0x87,0xF4,0x3F,0xEF,0xBF,0xEF,0xBF,0xCF,0xBF,0xCF,0xBF,0xA0,0x01, 0x6F,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xE8,0x03,0xEF,0xFF}, //;-- 柄 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xEF,0xFF,0xEC,0x01,0xEF,0xDF,0xEF,0xDF,0x03,0xDF,0xEC,0x01,0xCD,0xDD,0xC5,0xDD,

34

0xA9,0xAD,0xAD,0xB5,0x6D,0x75,0xEC,0xFD,0xED,0xFD,0xED,0xFD,0xED,0xF5,0xED,0xFB},

//;-- 坤 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,0xEE,0x03,0xEE,0xDB,0x02,0xDB,0xEE,0xDB,0xEE,0x03,

0xEE,0xDB,0xEE,0xDB,0xEE,0xDB,0xE2,0x03,0x1E,0xDB,0xBF,0xDF,0xFF,0xDF,0xFF,0xDF},

//;-- 马 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xFF,0xFF,0x80,0x1F,0xFF,0xDF,0xFF,0xDF,0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,0xE0,0x03, 0xFF,0xFB,0xFF,0xFB,0xFF,0xFB,0x00,0x1B,0xFF,0xFB,0xFF,0xFB,0xFF,0xD7,0xFF,0xEF}, //;-- 金 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xFE,0xFF,0xFE,0xFF,0xFD,0x7F,0xFB,0xBF,0xF7,0xDF,0xEF,0xEF,0xD0,0x17,0x3E,0xF9, 0xFE,0xFF,0xC0,0x07,0xFE,0xFF,0xEE,0xEF,0xF6,0xEF,0xF6,0xDF,0x00,0x01,0xFF,0xFF}, //;-- 龙 -- ** 宋体, 12 **

//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16 {0xFB,0xDF,0xFB,0xEF,0xFB,0xEF,0xFB,0xFF,0x00,0x01,0xFB,0x7F,0xFB,0x77,0xFB,0x77, 0xFB,0x6F,0xF7,0x5F,0xF7,0x3F,0xEF,0x7D,0xEE,0x7D,0xDD,0x7D,0xBB,0x81,0x7F,0xFF} };

register unsigned char i,j,k,l;

SCON = 0x00; //串口工作模式0:移位寄存器方式 TMOD = 0x01; //定时器T0工作方式1:16位方式 TR0 = 1; //启动定时器T0

P1 = 0x3f; //P1端口初值:允许接收、锁存、显示

35

IE = 0x82; //允许定时器T0中断 while (1) {

delay(2000); //延时1秒

for (i=0;i<32;i++) //显示效果:卷帘出┓ {

dispram[i] = Bmp[11][i]; if (i%2) delay(100);

} //━━━━━━━━┛ delay(1000);

for (i=0; i<12; i++) //显示效果:左跑马┓ {

for (j=0; j<2; j++) for (k=1; k<9; k++) {

for (l=0; l<16; l++) {

dispram[l*BLKN] = dispram[l*BLKN]<<1 | dispram[l*BLKN+1]>>7; dispram[l*BLKN+1] = dispram[l*BLKN+1]<<1 | Bmp[i][l*BLKN+j]>>(8-k); } delay(100);

}//end (k=0; k<16; k++)

}//end for (i=0; i<; i++)//━━━━━━━┛

delay(2000);

for (i=0; i<12; i++) //显示效果:上滚屏┓ {

36

for (j=0; j<16; j++) {

for (k=0; k<15; k++) {

dispram[k*BLKN] = dispram[(k+1)*BLKN]; dispram[k*BLKN+1] = dispram[(k+1)*BLKN+1]; }

dispram[30] = Bmp[i][j*BLKN]; dispram[31] = Bmp[i][j*BLKN+1]; delay(100); }

} //━━━━━━━━┛

delay(3000);

for (i=0;i<32;i++) //显示效果:卷帘入┓ {

dispram[i] = 0x00; if (i%2) delay(100);

} //━━━━━━━━┛ }//end while (1) }

/*延时函数*/

void delay(unsigned int dt) {

register unsigned char bt;

37

for (; dt; dt--)

for (bt=0; bt<255; bt++); }

/*显示屏扫描(定时器T0中断)函数*/ void leddisplay(void) interrupt 1 using 1 {

register unsigned char i, j=BLKN;

TH0 = 0xF8; //设定显示屏刷新率每秒62.5帧 TL0 = 0x30;

i = P1; //读取当前显示的行号 i = ++i & 0x0f; //行号加1,屏蔽高4位 do { j--;

SBUF = dispram[i*BLKN + j]; //送显示数据 while (!TI); TI = 0;

}while (j); //完成一行数据的发送 G = 1; //消隐(关闭显示) P1 &= 0xf0; //行号端口清○

RCLK = 1; //显示数据打入输出锁存器 P1 |= i; //写入行号 RCLK = 0; //锁存显示数据 G = 0; //打开显示 }

38

本文来源:https://www.bwwdw.com/article/w1jg.html

Top