基于单片机的5×7LED字幕显示的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1 方案选择及总体设计 (1)
1.1 方案确定 (1)
1.1.1 功能要求 (1)
1.2.2 方案确定 (1)
1.2 器件选择 (1)
2 控制系统设计 (2)
2.1 控制系统硬件设计 (2)
2.1.1整体模块设计 (2)
2.2 晶振电路设计 (2)
2.3 复位电路设计 (3)
2.4 驱动电路设计 (4)
2.5 LED点阵显示设计 (5)
3 控制系统软件设计 (6)
3.1 软件设计思想 (6)
3.2 主程序流程图 (6)
4 系统仿真及性能分析 (8)
4.1 系统仿真 (8)
4.2调试结果 (8)
4.3 性能分析 (9)
总结 (10)
参考文献 (11)
附录 (12)
附录A 硬件结构图 (12)
附录B 主程序清单 (12)
1 方案选择及总体设计
1.1 方案确定
1.1.1 功能要求
1、采用STC-52单片机作为微处理器。
2、设计一个5×7点阵LED数码字符显示器。
3、在目测条件下LED显示屏各点亮度均匀、充足、稳定、清晰无串扰。
4、动态显示“A——C”几个字符。
1.2.2 方案确定
采用ST89C52单片机作为微处理器,将共阳极二极管用共阴型接法连接成5×7点阵LED数码字符阵列,通过程序控制,采用动态显示,建立字符库“0——9”。
1.2 器件选择
微处理器采用ST89C52系列单片机,ST89C52单片机是这几年在我国非常流行的单片机,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能单片机,可擦除只读存储器可以反复擦除100次,具有低功耗、高性能的特点。
2 控制系统设计
2.1 控制系统硬件设计
2.1.1整体模块设计
本设计行、列驱动电路,显示器电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如图2.1所示。
图2.1 硬件系统框图
此次需要实现的功能是利用一个ST89C52,一个5×7LED点阵,动态显示“A——C”10个字,采用PC上位机驱动显示电路。
ST89C52单片机最小系统电路由复位电路、晶振电路两部分组成。
2.2 晶振电路设计
ST89C52单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。
系统采用的定时元件为石英晶体和电容组成的并联谐振回路。
晶振频率采用12MHZ,C1、C2的电容值取30pF,电容的大小起频率微调的作用。
晶振电路图如图所示。
XTAL1
XTAL2
图2.2 晶振电路图 2.3 复位电路设计
ST89C52单片机在启动运行时或者出现死机时需要复位,使CPU 以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。
单片机有多种复位方式,常用的复位操作有上电复位和手动复位方式。
本设计采用最简单的上电复位方式,电路如图3所示。
上电复位是通过外部复位电路的电容充电来实现的,复位电路产生的复位信号(高电平有效)由RST 引脚送入到内部的复位电路,对ST89C52单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使ST89C52单片机可靠复位。
当上电时,C1相当于短路,有时碰到干扰时会造成错误复位,可在复位端加个去耦电容,可以取得很好的效果。
ST89C52单片机复位电路如下图所示:
R9
4.7K
VCC VCC
RST
VSS C5
10MF/25V
AT89C51
图2.3 上电复位电路图 图2.4 按键电平复位电路图
复位电路工作原理:
上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C5充电电流的减少,RST引脚的电位不断下降,可以保持RST引脚在为高电平的时间内完成复位操作。
当单片机已在运行当中时,按下复位键S5后再松开,也能使RST引脚为一段时间的高电平,从而实现ST89C52单片机复位。
2.4 驱动电路设计
正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。
而不管是ST89C52的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。
因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阴型高态扫描信号驱动电路。
共阴型LED阵列驱动电路采用高态扫描,也就是任何时间只有一个高态信号,其它则为低态。
一行扫描完成后,再把高态信号转化到近邻的其他行,扫描信号接用一个反向驱动器,ST89C52本身内置一个反向驱动器,本设计将ST89C52作为点矩阵显示控制系统的控制核心,通过点矩阵实时显示并移动字符。
单片机的串口与行驱动器相连,用来发送显示数据信息。
P0口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。
输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,7个LED同时点亮,需要210mA,完全满足LED点亮的基本条件。
图2.5 驱动电路图
所要显示的信号送入74HC573芯片,然后连接到LED阵列的列阵脚。
对于高态的显示信号,将可提供其所连接LED的驱动电流,而这个驱动电流经过LED 到输出端,形成正向回路,即可点亮该LED。
其中每个晶体管任何时间只需负责
驱动一个LED,所以选择30mA射极电流的晶体管。
驱动电路如图5所示。
2.5 LED点阵显示设计
本设计采用ATMEL公司的AT89C51作矩阵显示控制系统控制核心,12MHZ晶振,5 7点阵共阳LED显示器。
其中,P1口作为字符数据输出口,P3口为字符显示扫描输出口,第31脚(EA)接电源,改变电阻(270*8)的大小可改变显示字符的亮度,驱动用74HC573芯片。
本设计LED矩阵显示器电路选用5×7点阵模块,系统由单片机控制。
LED 显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。
本文就是使用1块5×7点阵,采用按列扫描按行控制控制方式,扫描顺序自左向右,以满足汉字显示的要求。
图2.8 5×7点阵LED等效电路
一个5×7点阵是由35个发光二极管按规律组成的,如图2.8所示。
图中,行接低电平,列接高电平,发光二极管导通发光。
3 控制系统软件设计
3.1 软件设计思想
主程序先进行设置中断,并启动,再进行键盘扫描载入“0——9”字型,然后判断一组字型是否扫描完,按不同情况进行循环调用子程序。
进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的方式显示子程序。
设计过程中,能很好得提高按键响应速度。
如图3.1所示为软件系统框图。
图3.1 软件系统框图
字符编码:5×7点阵可以看成是从上至下8个字节,每个字节8位,因为该点阵为共阴型点阵,因此若该灯亮,则该位为“1”;该灯不亮,则该位为“0”。
3.2 主程序流程图
主程序首先设置并启动T0中断,然后调用初始化程序,为后面程序要用到的数据调入,并清零一些用到的数据单元,然后载入“A——C”字型,进行扫描。
图3.2为主程序流程图,详细主程序清单及子程序设计见附录B。
图3.2 主程序流程图
4 系统仿真及性能分析
4.1 系统仿真
本设计是以wave 与Proteus.ISIS 相结合方式来实现本LED 点矩阵显示器的仿真实现过程。
电路的核心是单片机ST89C52。
单片机的P0口八个引脚通过总线连接到LED 矩阵显示器的段选码和位选码(a 、b 、c 、d 、e 、f 、g 和1、2、3、4、5、6、7、8)的引脚上,来作为控制信号的来源。
如图11、12所示。
4.2调试结果
经软件调试-仿真器proteus 调试通过,得到所要求的设计结果
图 4.1 动态显示程序调试结果
图 4.2 延时程序调试结果
图4.3 调试结果
4.3 性能分析
此次系统设计结果较好,LED显示屏能很好的显示信息。
LED显示屏由1块8×8的LED 小模块组成,整个显示屏可以动态显示8×8的“0——9”字型。
这个方案设计的8x8的点阵LED图文显示屏,电路简单,成本较低,且较易扩展;显示屏各点亮度均匀、充足;显示图形或文字稳定、清晰无串扰。
总结
本次课程设计到现在有一个多星期,回顾这些天我感到学到了很多东西,在写这个心得的时候,我想就这些天的收获,说一说自己内心的想法。
本设计是一个8x8的点阵LED数码显示器,能够在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
总结本文的研究工作,主要做了下面几点工作:
一、通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。
并且通过对单片机资料的查阅和应用,更进一步增加了对单片机知识的理解和运用能力。
并证实了自己的思路:“查资料→思考总结→运用→找出差错,再查资料和向别人询问→再次运用”的正确性。
二,本文设计的LED显示屏能够实现在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
三,本文列出了系统具体的硬件设计方案,硬件结构电路图,软件流程图和具体汇编语言程序设计与调试等方面。
四,在这次课程设计的过程中学会了 PROTEUS 的基本使用,感到PROTEUS 对电子专业的同学来说是一个很有用的软件。
在运用PROTEUS时可以运用一些快捷的标号,总线的方法画图,这样既能使电路图清晰,简单,更能大大提高画图速度
五,通过这次课程设计,重新复习并进一步增强了动手的能力,学以致用,把只是运用到实际生活中才是根本目的。
总体来说这次的科研实践很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。
有点缺憾是时间有限,不能进一步深入和扩散学习和研究。
希望有时间可以对程序和电路图作更进一步的改进,譬如实现点阵的上下移动,对角线移动,多色显示等。
参考文献
[1] 张靖武,周灵彬《单片机系统的PROTEUS设计与仿真》北京电子工业出版社
[2] 吴金戌,沈庆阳,郭庭吉《8051单片机实践与应用》北京清华大学出版社
[3] 李群芳,肖看《单片机原理、接口及应用》北京清华大学出版社
[4] 张毅刚,彭喜元等《新编MCS-51单片机应用设计》黑龙江哈尔滨工业大学出版社
[5] 张义和,陈敌北编著《例说8051》北京人民邮电出版社
附录附录A 硬件结构图
附录B 主程序清单
ORG 0000H
LJMP START
ORG 0003H
LJMP INTERUPT
ORG 0100H
START: /*初始化寄存器*/
SETB EA
CLR IT0
SETB EX0
MOV A,#00H
MOV R0,#20H
MOV R1,#6EH ;调入数据到内存的数据长度(TAB数据量决定)MOV R2,#00H
MOV R3,#20H ;A显示时长
MOV R4,#20H ;B显示时长
MOV R5,#20H ;C显示时长
MOV DPTR,#TAB
ACALL INIT
LJMP MAIN
INIT: MOV A,R2 ;将数据调入内存(使用R0数据储存器储存数据)MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R2
DJNZ R1,INIT
RET
ORG 0200H
INTERUPT:/*中断函数:移位操作*/ ;由于寄存器使用数量较大,用循环地址加5需加寄存器数据储存读取
CLR EA ;已无法达到简化效果,故使用固定地址
MOV R5,#02H
WORK_1: MOV R0,#2FH ;移位循环 1
LCALL BOOT_IN
MOV R0,#34H
LCALL BOOT_IN
MOV R0,#39H
LCALL BOOT_IN
MOV R0,#3EH
LCALL BOOT_IN
MOV R0,#43H
LCALL BOOT_IN
DJNZ R5,WORK_1
MOV R5,#02H
WORK_2: MOV R0,#48H ;移位循环 2 右移 ;
LCALL BOOT_IN
MOV R0,#4DH
LCALL BOOT_IN
MOV R0,#52H
LCALL BOOT_IN
MOV R0,#57H
LCALL BOOT_IN
MOV R0,#5CH
LCALL BOOT_IN
DJNZ R5,WORK_2
MOV R5,#02H
WORK_3: MOV R0,#61H ;移位循环 3 右移 LCALL BOOT_IN
MOV R0,#66H
LCALL BOOT_IN
MOV R0,#6BH
LCALL BOOT_IN
MOV R0,#70H
LCALL BOOT_IN
MOV R0,#75H
LCALL BOOT_IN
DJNZ R5,WORK_3
WORK_2: MOV R0,#48H ;移位循环 2 上移LCALL BOOT_IN
MOV R0,#4DH
LCALL BOOT_IN
MOV R0,#52H
LCALL BOOT_IN
MOV R0,#57H
LCALL BOOT_IN
MOV R0,#5CH
LCALL BOOT_IN
MOV R0,#61H
LCALL BOOT_IN
MOV R0,#66H
LCALL BOOT_IN
DJNZ R5,WORK_2
MOV R5,#02H
WORK_3: MOV R0,#6BH ;移位循环 3 下移LCALL BOOT_IN
MOV R0,#70H
LCALL BOOT_IN
MOV R0,#75H
LCALL BOOT_IN
MOV R0,#7AH
LCALL BOOT_IN
MOV R0,#7FH
LCALL BOOT_IN
MOV R0,#84H
LCALL BOOT_IN
MOV R0,#89H
LCALL BOOT_IN
DJNZ R5,WORK_3
MOV R3,#20H ;中断返回重新初始化
MOV R4,#20H
MOV R5,#20H
SETB EA
RETI
BOOT_IN:MOV A,R0 ;显示输出初始化
MOV R3,A
MOV R4,#10H
LOOP_IN:MOV A,R3 ;输出循环使字符“稳定”
MOV R0,A
MOV R1,#01H
MOV R2,#05H
PIO_IN: MOV A,@R0 ;输出一个完整字符MOV P0,A
MOV A,R1
MOV P2,A
LCALL DELAY
MOV P0,#0FFH ;P0口清零消除显示误差
RL A
MOV R1,A
CLR A
INC R0
DJNZ R2,PIO_IN
DJNZ R4,LOOP_IN
RET
ORG 0300H
MAIN: /*A,B,C循环显示*/
LED_A: MOV R0,#20H ;R0地址为20H~24H时R0内储存的数据为A的显示数据AJMP BOOT
LED_B: MOV R0,#25H ;R0地址为25H~29H时R0内储存的数据为B的显示数据AJMP BOOT
LED_C: MOV R0,#2AH ;R0地址为2AH~2EH时R0内储存的数据为C的显示数据BOOT: MOV R1,#01H ;显示输出初始化
MOV R2,#05H ;输出循环使字符“稳定”
PIO: MOV A,@R0 ;输出一个完整字符
MOV P0,A
MOV A,R1
MOV P2,A
LCALL DELAY
MOV P0,#0FFH ;P0口清零消除显示误差
RL A
MOV R1,A
CLR A
INC R0
DJNZ R2,PIO
AJMP WORK
WORK: DJNZ R3,LED_A ;显示数据切换函数
MOV R3,#01H
DJNZ R4,LED_B
MOV R4,#01H
DJNZ R5,LED_C
MOV R3,#20H
MOV R4,#20H
MOV R5,#20H
LJMP LED_A
DELAY: MOV R7,#01FH
DEL: MOV R6,#05AH
DJNZ R6,$
DJNZ R7,DEL
RET
TAB: DB 03H, 61H, 64H, 61H, 03H ;A DB 00H, 36H, 36H, 36H, 49H ;B
DB 41H, 3EH, 3EH, 3EH, 5DH ;C
DB 0FFH, 5DH, 40H, 5FH, 0FFH ;1 右移
DB 0FFH, 0FFH, 5DH, 40H, 5FH
DB 5FH, 0FFH, 0FFH, 5DH, 40H
DB 40H, 5FH, 0FFH, 0FFH, 5DH
DB 5DH, 40H, 5FH, 0FFH, 0FFH
DB 0FFH, 59H, 4EH, 56H, 59H ;2 右移
DB 59H, 0FFH, 59H, 4EH, 56H
DB 56H, 59H, 0FFH, 59H, 4EH
DB 4EH, 56H, 59H, 0FFH, 59H
DB 59H, 4EH, 56H, 59H, 0FFH
DB 0FFH, 59H, 4EH, 56H, 59H ;2 上移
DB 0FFH, 6CH, 27H, 2BH, 6CH
DB 0FFH, 36H, 53H, 55H, 36H
DB 0FFH, 1BH, 69H, 6AH, 1BH
DB 0FFH, 4DH, 74H, 35H, 4DH
DB 0FFH, 66H, 3AH, 5AH, 66H
DB 0FFH, 33H, 1DH, 2DH, 33H
DB 0FFH, 36H, 36H, 36H, 49H ;3 右移 DB 49H, 0FFH, 36H, 36H, 36H
DB 36H, 49H, 0FFH, 36H, 36H
DB 36H, 36H, 49H, 0FFH, 36H
DB 36H, 36H, 36H, 49H, 0FFH
DB 0FFH, 36H, 36H, 36H, 49H ;2 下移DB 0FFH, 6CH, 6CH, 6CH, 13H
DB 0FFH, 59H, 59H, 59H, 26H
DB 0FFH, 33H, 33H, 33H, 4CH
DB 0FFH, 66H, 66H, 66H, 19H
DB 0FFH, 4DH, 4DH, 4DH, 32H
DB 0FFH, 1BH, 1BH, 1BH, 64H
END。