基于单片机的Led点阵广告牌设计.docx
《基于单片机的Led点阵广告牌设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的Led点阵广告牌设计.docx(14页珍藏版)》请在冰豆网上搜索。
基于单片机的Led点阵广告牌设计
基于单片机的LED广告牌设计
班级电子2班姓名秦地学号0902214075成绩
一、设计背景
LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
它具有发光效率高、使用寿命长、组态灵活、色彩丰富以及对室外环境适应能力强等优点。
并广泛的应用于公交汽车,码头,商店,学校和银行等公共场合的信息发布和广告宣传。
LED显示屏经历了从单色,双色图文显示屏到现在的全彩色视频显示屏的发展过程,自20世纪八十年代开始,LED显示屏的应用领域已经遍布交通、电信、教育、证券、广告宣传等各方面。
二、任务要求
设计一个简易的LED广告牌,用于显示自己的名字或其它个性信息。
显示的字符用LED发光二极管排列成固定形状,在控制电路驱动下各字符轮流循环点亮。
或者用LED点阵显示,显示容可更新。
汉字一般是以点阵式方式存储的,如16×16,24×24点阵。
汉字的字模其实是汉字字形的图形化。
所谓16点阵字模,就是把汉字写在一个16×16的网格,汉字的笔划通过某网格时该网格就对应1,否则该网格对应0,这样,每一网格均对应1或0,把对应1的网格连起来看,就是这个汉字。
汉字就是这样通过字节表示其点阵存储在字形中的。
为了方便查找所需要汉字的点阵,每个汉字都与一个双字节的码相对应。
通过汉字的码可以计算出它的点阵起始字节。
三、整体设计方案
如图所示,本设计通过单片机来控制行列驱动器使LED显示屏显示出汉字,单片机选用AT89C52芯片,行驱动器采用74HC154的P0口,列驱动器选用74HC595芯片。
该系统主要由AT89C52芯片、电源、行驱动器、列驱动器、16×64LED点阵5部分组成。
图3-1系统电路框图
四、硬件设计
4.1系统硬件概述
整个电路由单片机89C51,8个74LS373,1个74HC154,1个74LS138,4个16×16的LED。
该电路所设计的电子屏可显示多个汉字,需要4个16×16LED点阵模块,可组成16×64的条形点阵。
AT89C51是一种带4KB可编程可擦除只读存储器的低电压,高性能微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51引脚即外观如图3.1所示。
图4.1AT89C51的管脚图
译码器是组合逻辑电路的一个重要的器件,74LS138的输出是低电平有效,故实现逻辑功能时,输出端不可接或门及或非门,74LS138与前面不同,其有使能端,故使能端必须加以处理,否则无法实现需要的逻辑功能。
发光二极管点亮只须使其正向导通即可,根据LED的公共极是阳极还是阴极分为两类译码器,即针对共阳极的低电平有效的译码器;针对共阴极LED的高电平输出有效的译码器。
74LS373是低功耗肖特基TTL8D锁存器,有8个相同的D型(三态同相)锁存器,由两个控制端(11脚G或EN;1脚OUT、CONT、OE)控制。
当OE接地时,若G为高电平,74LS373接收由PPU输出的地址信号;如果G为低电平,则将地址信号锁存。
工作原理:
74LS373的输出端O0—O7可直接与总线相连。
当三态允许控制端OE为低电平时,O0—O7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,O0—O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器部的逻辑操作不受影响。
当锁存允许端LE为高电平时,O随数据D而变。
当LE为低电平时,O被锁存在已建立的数据电平。
74LS373引脚即外观如图3.2所示
图4.274LS373引脚图
74HC154为4线-12线译码器,当选通端(G1、G2)均为低电平时,可将地址端(ABCD)的二进制编码在一个对应的输出端,以低电平译出。
若将G1和G2中的一个作为数据输入端,由ABCD对输出寻址,还可作1线-16线数据分配器。
工作环境温度为0~70℃,对社会的要求非常适合。
所以LED的抗震性能好该电路的显示采用逐行扫描方式。
工作时,由单片机取出第一行需要显示的容经延时一段时间后再进行下一行点阵数据的显示。
需要注意的是,每次只能选通一行数据,即要通过不断的逐行扫描来实现汉字或字符的显示。
4.216×16LED点阵显示制作
4.2.116×16LED点阵的部结构及工作原理
以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。
即标准汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素围的任何图形。
这里我们以”高”字说明,如图3.3所示。
图3.316*16LED汉字显示
用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。
一般把它拆分为上部和下部,上部由8×16点阵组成,下部也由8×16点阵组成。
在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00—p07口。
方向为p00到p07,显示汉字”高”时,p02点亮,由上往下排列,为p0.0灭,p0.1灭,p0.2亮,p0.3灭,p0.4灭,p0.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,00h,1Fh,0F0h,10h,10h,10h,10h,1Fh,0F0h,00h,04h,7Fh,0FEh,40h,04h,4Fh,0E4h,48h,24h,48h,24h,4Fh,0E4h,40h,0Ch。
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。
不过现在有很多现成的汉字字模生成软件,就不必自己去画表格算代码了。
4.2.2用8×8LED点阵构成16×16LED点阵
Proteus中只有5×7和8×8等LED点阵,并没有16×16LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要16×16点阵。
下面我们就首先介绍使用8×8点阵构建16×16点阵的方法,并构建一块16×16LED点阵。
首先,从Proteus7.1的元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。
右边8个引脚是其列线(当然,如果你是将右转,则右边8个引脚是行线)。
然后将四个元器件对应的行线和列线分别进行连接,引脚接一行16个LED,列线也相同。
并注意要将行线和列线引出一定长度的引脚,以便下面我们使用。
连接好的16×16点阵如图3.4所示。
如上图的16×16点阵只是第一步,这样分开的数块并不能达到好的显示效果,下面我们要将其进一步组合。
组合实际上很简单,首先选中如上图中右侧的两块8×8点阵,然后拖动并使其与左侧的两块相并拢,如图3.5所示。
图4.5与左侧的两块相并拢
可以看到原来的连线已经自动隐藏了,至于线上的交点,我们不要去动。
然后,我们再来最后一步,选中下侧的两块点阵,并拖动使其与上侧的两块并拢,最后的效果如图3.6所示。
看到,原来杂乱的连线现在已经几乎全部隐藏了,一块16×16的LED点阵做成了。
需要注意,做成的LED点阵的行线为左侧的16个引脚,下侧的16个引脚为其列线,而且其行线为高电平有效,列线为低电平有效。
然后,我们将其保存,以便以后使用。
图4.6最后的效果图
4.3主控单片机的接口说明
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复制用口,作为输入口时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写入“1可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期激活部上拉电阻。
在Flash编程时,PO口接收指令节,而在程序校检时,输出指令字节,校检时,要求外接上拉电阻。
P1口:
P1口是一个带部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。
Flash编程和程序校检期间,P1接收低8位地址。
P2口:
P2口是一个带部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口时,因为部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。
在访问外部数据存储器或16位地址的外部数据存储(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口线上的容(也即特殊功能寄存器(SFR)区中R2寄存器的容),在整个访问期间不改变。
Flash编程和校检时,P2亦接收高位地址和其他控制信号。
P3口:
P3口是一个带部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被部上拉电阻拉高并可作输入端口,作输入端时,被外部拉低的P3口将用上拉电阻,输出电流I。
P3口还接收一些用于Flash闪速存储器编程和程序校检的控制信号。
RST:
复位输入,当震荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于所存地址的低8位字节。
即使不访问外部存储器,ALE乃以时钟振动频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
4.4LED显示驱动电路
LED显示驱动电路如图4.7所示。
图4.7显示驱动电路图
5软件设计
5.1程序设计总体思路和结构
5.1.1程序设计总体思路
用简短的汇编程序设计,实现LED点阵显示容,并使显示的容在屏幕上从左到右的滚动显示。
系统采用模块化结构,包括主程序、延时程序、显示子程序和串行口中断程序。
用AT89C51、74LS373、74LS138、74HC154芯片和4个16×16LED点阵显示器构成一个完整的16位点阵LED显示系统。
5.1.2程序流程图
程序主要由开始、初始化、主程序、字库组成。
其中主程序和子程序的流程
图5.1单片机汉字显示程序流程图
图如图5.1所示。
5.2各模块程序设计
5.2.1系统初始化
ORG0000H
AJMPSTART
ORG000BH
LJMPTIME0
ORG0030H
START:
MOVR1,#00H
MOVR2,#00H
MOVR3,#00H
MOVR4,#00H
MOVR5,#00H
5.2.2LED动态显示
显示要求汉字在显示屏上按从左到右的顺序一个个的出现。
设计时可采用如下方法:
首先将LED显示屏对应的显示缓冲区全部清零,即LED显示空白,然后每间隔一个“软定时器”设定的动态显示时间,显示缓冲区依次加入一个汉字点阵数据并进行扫描显示,这样就可达到动态显示的效果。
实现LED从左向右移动显示程序:
TIME0:
INCR5
CJNER5,#3,NEXT
MOVR5,#0
INCDPTR
INCDPTRINCR1
CJNER1,#144,NEXT
MOVR1,#0
MOVDPTR,#TAB
NEXT:
MOVTH0,#3CH
MOVTL0,#0B0H
RETI
5.2.3汉字显示的原理
我们以中文宋体字库为例,每一个字由16行16列的点阵组成显示。
即国标汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素围的任何图形。
LED点阵汉字显示程序:
MAIN:
MOVP1,R2
MOVA,R3
MOVCA,@A+DPTR
MOVP2,A
INCR3
MOVA,R3
MOVCA,@A+DPTR
MOVP0,A
INCR3
MOVP3,R4
LCALLDELAY1MS
INCR2
CJNER2,#16,MAIN
MOVR2,#0
INCR4
CJNER4,#3,MAIN
MOVR3,#0
MOVR4,#0
LJMPMAIN
6系统功能测试
6.1单元模块电路测试
在proteus仿真软件中运行测试AT89C51、74LS373、74LS138、74HC154等芯片和LED显示器均能正常运行并完整的显示出了我所要的效果。
所以各个模块功能正常。
6.2系统整体功能测试
在仿真软件proteus中运行测试系统整体功能,一切正常。
实现了汉字的左移滚动显示,完整的显示出了浮动汉字。
图6.1单片机汉字显示系统测试图
总结
在本设计中我用简短的汇编程序在LED显示屏实现了汉字的左移滚动显示。
在设计中采用的芯片有AT89C51、74LS373、74LS138、74HC154和4个16×16LED点阵显示器。
其特点:
1.容能从右向左浮动显示。
2.硬件结构简单,应用广泛。
3.LED数码管动态扫描显示,工作效率高,价格低廉等。
通过本次(64×16位点阵LED)的设计,理论知识学习和实际设计的结合锻炼了我的综合运用所学的专业基础知识解决实际工程问题的能力,同时也提高我查阅文献资料、设计手册、设计规以及电脑制图等其他专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富。
为后继的学习和工作奠定的基础。
在完成此设计过程中,我曾多次去找我的指导老师,封小钰老师,每次在遇到实验中遇到困难或者程序看不懂的时候,封老师每次都不厌其烦,不辞辛苦的给我细心讲解指导,我才能在实验室完成实验,在写论文过封中老师也给了我很大帮助,在此,我由衷的对封老师对我的指导和教育。
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVIE,#82H
SETBTR0
MOVDPTR,#TAB
;================
MAIN:
MOVP1,R2;单片机输出
MOVA,R3
MOVCA,@A+DPTR
MOVP2,A
INCR3
MOVA,R3
MOVCA,@A+DPTR
MOVP0,A
INCR3
MOVP3,R4
LCALLDELAY1MS
INCR2
CJNER2,#16,MAIN
MOVR2,#0
INCR4
CJNER4,#4,MAIN
MOVR3,#0
MOVR4,#0
LJMPMAIN
;===============
TIME0:
INCR5;移动显示
CJNER5,#3,NEXT
MOVR5,#0
INCDPTR
INCDPTR
INCR1
CJNER1,#144,NEXT
MOVR1,#0
MOVDPTR,#TAB
NEXT:
MOVTH0,#3CH
MOVTL0,#0B0H
RETI
;================
DELAY1MS:
MOVR7,#2;延时
DEL:
MOVR6,#250
DJNZR6,$
DJNZR7,DEL
RET
;================
TAB:
;DB000H,000H,01FH,0FCH,010H,000H,025H,000H,03BH,004H,000H,048H,00AH,050H,009H,060H;
;DB07FH,0C0H,010H,0A0H,012H,090H,014H,088H,000H,08CH,000H,004H,000H,004H,000H,000H
DB00H,00H,7FH,0FFH,44H,20H,5AH,10H,61H,0E1H,10H,82H,14H,84H,12H,88H
DB10H,0B0H,0FFH,0C0H,10H,0B0H,12H,88H,34H,86H,11H,83H,00H,82H,00H,00H
DB000H,000H,003H,000H,002H,0F8H,022H,010H,022H,050H,03FH,090H,022H,010H,022H,010H
DB07FH,090H,044H,090H,044H,090H,004H,00CH,004H,030H,007H,0C0H,000H,000H,000H,000H
DB000H,010H,011H,010H,011H,020H,01FH,0E0H,022H,048H,000H,048H,038H,008H,027H,048H
DB025H,048H,03FH,0F0H,04AH,090H,042H,090H,07EH,010H,000H,010H,000H,000H,000H,000H
DB000H,000H,000H,010H,000H,010H,000H,010H,008H,010H,008H,010H,008H,010H,00FH,0E0H
DB010H,020H,010H,020H,010H,020H,000H,020H,000H,020H,000H,020H,000H,000H,000H,000H
DB000H,000H,003H,020H,00EH,020H,044H,020H,024H,020H,005H,020H,04AH,024H,02AH,0C2H
DB00BH,07CH,01AH,040H,0E8H,040H,008H,040H,00CH,040H,008H,000H,000H,000H,000H,000H
DB000H,000H,03FH,0FCH,022H,000H,02DH,004H,033H,008H,004H,010H,018H,0A0H,00AH,0C0H
DB052H,080H,035H,0F8H,015H,004H,011H,004H,018H,004H,000H,038H,000H,000H,000H,000H
DB02H,00H,02H,00H,42H,00H,33H,0FEH,00H,04H,02H,08H,02H,10H,02H,00H
DB02H,00H,0FFH,0FFH,02H,00H,02H,00H,02H,00H,06H,00H,02H,00H,00H,00H
DB10H,10H,20H,10H,0C0H,11H,5FH,0D2H,75H,7CH,55H,50H,55H,50H,35H,50H
DB0D5H,50H,55H,50H,75H,7FH,5FH,0D0H,40H,10H,40H,30H,00H,10H,00H,00H
DB08H,20H,08H,0C0H,0BH,00H,0FFH,0FFH,09H,01H,08H,82H,00H,04H,3FH,0F8H
DB20H,00H,20H,00H,20H,00H,7FH,0FCH,20H,02H,00H,02H,00H,0EH,00H,00H
DB24H,08H,24H,10H,24H,60H,25H,80H,7FH,0FFH,0C5H,00H,44H,80H,00H,40H
DB24H,40H,12H,40H,00H,40H,0FFH,0FFH,00H,80H,01H,80H,00H,80H,00H,00H
DB01H,40H,02H,40H,0EH,40H,0F3H,0FEH,12H,44H,12H,48H,09H,00H,11H,28H
DB0F2H,0A8H,2AH,0A8H,25H,0FFH,2AH,0A8H,32H,0A8H,23H,28H,02H,00H,00H,00H
END