基于51单片机的166显示屏.docx
- 文档编号:5727535
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:19
- 大小:284.85KB
基于51单片机的166显示屏.docx
《基于51单片机的166显示屏.docx》由会员分享,可在线阅读,更多相关《基于51单片机的166显示屏.docx(19页珍藏版)》请在冰豆网上搜索。
基于51单片机的166显示屏
摘要
单片机是为各类专用控制器而设计的通用或专用的微型计算机系统,高密度集成了普通计算机微处理系统,一定容量的RAM和ROM以及输入/输出接口,定时器等电路于一块芯片上构成的。
在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形来显示汉字、数字,汉字显示屏也广泛应用到汽车报站器,广告屏等。
LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成.。
LED点阵显示屏可以显示数字、文字或符号,通常用来显示时间、速度、系统状态等。
用点阵方式构成图形或文字非常灵活,可以根据需要任意组成和变化,只要设计好合适的数据文件,就可以得到满意的显示效果,因而采用点阵式图文显示屏显示经常需要变化的信息是非常有效的。
本次课程设计实现LED点阵屏核心功能即汉字的多样化显示。
加深对单片机课程的全面认识和掌握,对单片机课程的应用进一步的了解。
将单片机软硬件结合起来对程序进行编辑,校验,锻炼实践能力和理论联系实际的能力。
关键词:
AT89C51单片机LED点阵显示动态显示
第一章功能要求及方案论证
1.1、设计目的
《单片机原理与应用》是一门实践性和应用性非常强的课程,学习的目的在于应用。
本课程设计主要了解16*16矩阵式点阵LED的工作原理,掌握单片机扩展16*16点阵LED显示汉字的编程方法。
它能起到巩固课堂和书本上所学知识,加强综合能力,提高系统设计水平,启发创新思想的效果。
1.2、功能要求
本方案设计一个电子显示屏,具体要求满足以下条件:
1.要求采用51单片机作为微控制器;
2.通过四个8x8的点阵LED组成16x16点阵进行文字显示;
3.在目测条件下LED显示屏各点亮度均匀、充足、稳定、清晰无串扰。
4.文字显示具有每排字有静止、左移。
右移等显示方式。
系统大致可以分成单片机系统及外围电路模块、列驱动电路模块、行驱动电路模块和显示模块四部分。
1.3、单片机最小系统方案
单片机采用MSC-51或其兼容系列芯片,本设计采用ATC89C51单片机。
AT89C51的时钟产生方式有两种:
内部时钟电方式和外部时钟方式。
由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
最常用的是在XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,其中晶振可选用振荡频率为12MHz的石英晶体,电容器一般选择30P采用24MHZ或更高频率晶振,以获得较高的刷新频率,时期显示更稳定。
单片机的串口与列驱动器相连,用来显示数据,P2口与行驱动器相连,送出行选信号。
1.4、显示模块方案
本设计采用两片译码器74LS138和两片74HC595扩展了一片16*16(4片8*8点阵组成)的共阴极LED显示器,U2和U3用于控制行,U4和U5用于控制列,每次扫描一行,数据分两次送入,共扫描16次在本设计中给出了几个汉字显示的点阵图,要求在LED显示器上显示“东华理工欢迎你!
”字。
1.5数据传输方案
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。
在显示本行各列数据的同时,传送下一列数据。
为了达到重叠处理的目的。
经过上述分析,就可以归纳出列驱动器电路应具有的功能。
对于列数据准备来说,它应能实现串入并处的移位功能;对于列数据显示来说,应具有并行锁存的功能。
这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。
图1、系统总方案图
第二章系统模块设计
2.1、单片机最小系统及外围电路
单片机采用ATC89C51系列芯片,选用内部时钟方式,XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,其中晶振可选用振荡频率为12MHz的石英晶体,电容器一般选择30P采用12MHZ或更高频率晶振,以获得较高的刷新频率,时期显示更稳定。
单片机的串口与列驱动器相连,用来显示数据。
P2口P2.0、P2.1、P2.2与行驱动器74LS138的A、B、C相连送出行选信号;P2.3与驱动器74LS138的使能相连,控制两片74LS138的选择;P3.0接第一片74HC595的SI端,P3.1接所有74HC595的SCK端(作为移位时钟信号),P3.2接所有74HC595的RCK端(作为数据锁存信号,上升沿锁存)。
P0口和P1口空着,在有必要的时候可以扩展系统的ROM和RAM。
图2、ATC89C51单片机最小系统
2.2、行驱动器模块
由于4片8×8点阵显示器有16行,为充分利用单片机的接口,根据设计要求,使用二片3-8线译码器74LS138实现16行的动态扫描,其输入是一个16进制码,解码输出为低态扫描信号,它的结构如图3所示。
图374ls138引脚图
74ls138是电子电路中常用的译码芯片,主要由输入端、控制端、输出端组成。
输入端为A,B,C,控制端为G1,G2A、G2B,其中G1为高电平有效,G2A、(G2B)为低电平有效,只要控制端为有效电平,译码器才能对输入端进行译码输出,输出端为Y0~Y7,如表1所列。
表1、3线-8线译码器74LS138的功能表
行线由单片机的P2.0、P2.1、P2.2控制,P2.3控制使能端,当P2.3=0时,U2译码器有效,选择1~7行;当P2.3=1时,U3有效,选择8~15行,如表2所示。
行线选中后,通过74HC595串并转换输出显示码,如果显示码中是零的位对应的LED点亮。
P2.3(控制片选)
P2.2
P2.1
P2.0
选中行号
74LS138
0
0
0
0
0
0~7行为第一片74LS138控制
0
0
0
1
1
0
0
1
0
2
0
0
1
1
3
0
1
0
0
4
0
1
0
1
5
0
1
1
0
6
0
1
1
1
7
P2.3(控制片选)
P2.2
P2.1
P2.0
选中行号
74LS138
1
0
0
0
8
8~15行为第一74LS138控制
1
0
0
1
9
1
0
1
0
10
1
0
1
1
11
1
1
0
0
12
1
1
0
1
13
1
1
1
0
14
1
1
1
1
15
表2、行号选择
2.3、列驱动器模块
列驱动电路由集成电路74HC595构成。
它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行列数据的同时,传送下一行的列数据,既达到重叠处理的目的。
图4、74HC595结构图
74HC595的外形及内部结构如图4所示。
它的输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。
引脚SI是串行数据的输入端。
引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。
符号
描述
QA~QH
并行数据输出
GND
地
QH’
串行数据输出
CLR
主复位(低电平)
SCK
移位寄存时钟输入
RCK
存储寄存时钟输入
OE
输出有效(低电平)
SI
串行数据输入
VCC
电源
表3、74HC595引脚说明
移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。
RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。
引脚OE是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高组态。
SCLR信号是移位寄存器清零输入端,当其为低时移位寄存器的输出全部为零。
由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。
芯片的输出端为QA~QH,最高位QH’可作为多片74HC595级联应用时,向上一级的级联输出。
但因为QH’受输出锁存器的打入控制,所以还从输出锁存器前引出QH,作为与移位寄存器完全同步的级联输出。
将2片74HC595进行级连,可共用一个移位时钟SCK及数据锁存信号RCK。
这样,当第一行需要显示的数据经过8x8=64个SCK时钟后便可将其全部移入74HC595中,此时还将产生一个数据锁存信号RCK将数据锁存在74HC595中,并在使能信号OE的作用下,使串入数据并行输出.显然,第一行LED管的亮灭就取决于74HC595中的锁存信号;此外,在第一行LED管点亮的同时,再在74HC595中移入第二行需要显示的数据,随后将其锁存,同时由行扫描控制电路将第一行扫描管关闭而接通第二行,使第二行LED管点亮,以此类推,当第十六行扫描过后再回到第一行,这样,只要扫描速度足够高,就可形成一幅完整的文字或图像。
2.4、LED点阵显示模块
2.4.1、8×8LED点阵的原理
16×16LED点阵显示屏电路由四个8*8LED点阵组成的,共由256个LED构成。
图5、8X8点阵LED结构图
从图5中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,如果LED的阳极与行相连,而阴极与列相连,那么只要给该LED对应的行以高电平,列以低电平,那么对应的LED就发光。
如下图6所示,假设显示数字“0”
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
图6,数字“0”列码00003E4141413E00
因此,形成的列代码为 00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。
送显示代码过程:
送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,如此下去,直到送完最后一列代码,又从头开始送。
2.4.2、16×16点阵的原理
16*16点阵共需要256个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:
一根竖柱:
对应的列置1,而行则采用扫描的方法来实现。
一根横柱:
对应的行置0,而列则采用扫描的方法来实现。
点阵LED一般采用扫描式显示,实际运用分为点阵三种方式:
(1)点扫描;
(2)行扫描;(3)列扫描。
若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。
若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。
此外一次驱动一列或一行(16颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。
图7、16×16点阵显示屏硬件原理图
第三章系统程序的设计
显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
根据软件分层次设计的原理,可以把显示屏的软件系统分为两层;第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动器程序由定时器T0中断程序实现。
系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。
3.1显示驱动程序
显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:
刷频率(帧频)=
×
溢出率=
×
(4-1)
其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式)。
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示
3.2系统主程序
本文设计的系统软件能使系统在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;然后以“卷帘出”效果显示图形,停留约3s;接着向上滚动显示“东华理工欢迎您”这7个汉字及一个图形,然后以“卷帘入”效果隐去图形。
由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。
图8、显示驱动程序流程图图9、系统主程序流程图
3.3、16×16点阵显示程序清单如下:
ORG0000H
LJMPXB13
;==========点阵扫描子程序====================
X01A:
CLRA;清列值
MOV0EH,A;指向零列
X023:
MOVA,0EH;取列值
CLRC
SUBBA,#10H;减16(十进制数)
JCX0D2;末满16列继续扫描下一列
RET;本次扫描完毕返回主程序
X0D2:
MOV0F0H,#02H
MOVA,0EH
MULAB;当前列值与“2”进行十进制调正
MOV82H,A;调正结果送数据指针DPTR
MOV83H,0F0H
LCALLXB1F;取与当前列对应的扫描代码
MOV20H,A
;=====================
LCALLXB4E;扫描代码送高八位锁存器
;=====================
MOVA,0EH;取列值
MOV0F0H,#02H;当前列值与“2”进行十进制调正
MULAB
ADDA,#01H;调正结果加1送数据指针DPTR
MOVR7,A
CLRA
ADDCA,0F0H
MOV82H,R7
MOV83H,A
LCALLXB1F;取与当前列对应的扫描代码
;====================
PUSHDPH;扫描代码送低八位锁存器
PUSHDPL
MOVDPTR,#0FFE0H
MOVX@DPTR,A
;====================
MOVA,#01H;代码扫描从第一行开始
MOVR6,#00H
MOVR0,0EH;取与当前代码扫描对应的列值
INCR0;列指针加1
SJMPX083
X07E:
CLRC;当前代码扫描对应行的查找
RLCA;行高八位左移一位
XCHA,R6
RLCA;行低八位带进位左移一位
XCHA,R6
X083:
DJNZR0,X07E;不为当前代码扫描对应行返上继续调正
;====================
MOVDPTR,#0FFE2H;当前行码送高八位锁存器
MOVX@DPTR,A
MOVDPTR,#0FFE1H;当前行码送低八位锁存器
MOVA,R6
MOVX@DPTR,A
MOVR6,#80H;当前行锁定显示250u秒
DJNZR6,$
;====================
CLRA;关闭显示
MOVDPTR,#0FFE1H
MOVX@DPTR,A;行高八位锁存器清零
INCDPTR
MOVX@DPTR,A;行低八位锁存器清零
POPDPL
POPDPH
;====================
INC0EH;列指针加1
AJMPX023;继续下1行
;====================
X097:
CLRA
MOVDPTR,#0FFE1H
MOVX@DPTR,A
INCDPTR
MOVX@DPTR,A
;====================
X0A0:
CLRA;清扫描个数寄存器
MOVR5,A;从第一个开始扫描
X0A2:
MOVA,R5;取当前扫描个数
CLRC
;=========确定要显示的汉字个数===========;用户可自定义汉字个数
SUBBA,#19H;共扫描83个汉字
JNCX0A0;扫描个数满83个返回从第一个开始
MOVA,R5
;=========确定显示为循环方式============;用户可自定义为移位循环方式
MOVDPTR,#STLS;指向汉字表首址
MOV0F0H,#20H;设定以完整的一个汉字为最小循环单位
MULAB
ADDA,dpl
MOV0ah,A
MOVA,dph
ADDCA,0F0H
MOV09H,A
CLRA
MOVR4,A
X0BD:
MOVA,R4
CLRC
SUBBA,#64H;每个汉字扫描64次
JNCX0CF;当前汉字扫描次数满64次转
MOVR2,09H
MOVR1,0AH
ACALLX01A
INCR4;扫描次数加1
SJMPX0BD
X0CF:
INCR5;扫描个数加1指向下一个汉字
SJMPX0A2
;====================================================================
XB13:
MOVR0,#7FH
CLRA
XB16:
MOV@R0,A
DJNZR0,XB16
MOV81H,#20H
JMPX097
;============查找与当前列对应的汉字代码子程序====================
XB1F:
MOVA,82H;本次扫描首址与当前列值相加
ADDA,R1;低八位相加
MOV82H,A;送DPL
MOVA,83H;高八位相加
ADDCA,R2;再加低八位进位位CY
MOV83H,A;送DPH
CLRA
MOVCA,@A+DPTR;取汉字代码
RET;返回
;=====================
XB4E:
PUSHDPH
PUSHDPL
MOVDPTR,#0FFE3H
MOVX@DPTR,A
POPDPL
POPDPH
RET
;============汉字代码表======================================
DB
00H,00H,20H,00H,20H,04H,23H,18H,2DH,70H,31H,20H,0E1H,04H,21H,02H
2FH,0FFH,21H,00H,21H,40H,21H,20H,21H,18H,20H,0CH,00H,00H,00H,00H;东
DB
04H,00H,08H,20H,10H,20H,3FH,0A0H,0C0H,20H,40H,20H,08H,20H,08H,0FFH
0FEH,20H,11H,20H,11H,20H,21H,20H,61H,20H,27H,20H,00H,02H,00H,00H;华
DB
22H,08H,22H,08H,3FH,0F0H,22H,10H,22H,12H,00H,02H,7FH,0A2H,49H,22H
49H,22H,7FH,0FEH,49H,22H,49H,22H,49H,22H,7FH,0A2H,00H,02H,00H,00H,;理
DB
00H,80H,78H,40H,4FH,0FEH,54H,02H,58H,14H,63H,0F8H,50H,00H,48H,08H,4FH,0FCH,48H,0A0H,68H,0A0H,50H,0A0H,41H,22H,41H,22H,42H,1EH,4CH,00H
;欢
DB00H,80H,00H,80H,0FCH,80H,04H,0FCH,45H,04H,46H,48H,28H,40H,28H,40H,10H,40H,28H,40H,24H,0A0H,44H,0A0H,81H,10H,01H,08H,02H,0EH,0CH,04H
;迎
DB00H,00H,41H,84H,26H,7EH,14H,44H,04H,44H,04H,44H,0F4H,44H,14H,0C4H,15H,44H,16H,54H,14H,48H,10H,40H,10H,40H,28H,46H,47H,0FCH,00H,00H
;你
DB
11H,00H,11H,00H,11H,00H,23H,0FCH,22H,04H,64H,08H,0A8H,40H,20H,40H,21H,50H,21H,48H,22H,4CH,24H,44H,20H,40H,20H,40H,21H,40H,20H,80H
;!
END
第四章总结
本文设计的一个16x16的点阵LED图文显示屏,能够在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、左移和右出等显示方式。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
总结本次设计的工作过程,主要做了下面几点较突出的工作:
一、拿到课题后由于知识点比较疏散不知道从何下手,通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,清楚地了解了LED显示屏与其它显示屏相比较有那优点,明确了研究目标,结合系统的特点按模块化设计各个模块的相关电路结构。
二,本文设计的16×16LED点阵显示屏能够实现在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、左移和右出等显示方式。
三,文章给出了系统具体的硬件设计方案,硬件结构电路图,各模块的详细介绍,软件流程图和具体汇编语言程序设计。
四,在这次毕业设计的过程中学会了ProtelAltiumDesigner6.X的基本使用,感到ProtelAltiumDesigner6.X对自动化专业的同学来说是一门很有用的课程。
五.本次设计的相关知识主要包括:
电路分析基础、数字电路基础、单片机原理与应用知识、电子CAD、LED点阵显示有关知识。
参考文献
[1]朱兆优,陈坚,王海涛,邓文娟编著.《单片机原理与应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 166 显示屏