基于51单片机的166显示屏Word文档下载推荐.docx
- 文档编号:18714598
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:19
- 大小:284.85KB
基于51单片机的166显示屏Word文档下载推荐.docx
《基于51单片机的166显示屏Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机的166显示屏Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。
在显示本行各列数据的同时,传送下一列数据。
为了达到重叠处理的目的。
经过上述分析,就可以归纳出列驱动器电路应具有的功能。
对于列数据准备来说,它应能实现串入并处的移位功能;
对于列数据显示来说,应具有并行锁存的功能。
这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。
图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~7行为第一片74LS138控制
1
2
3
4
5
6
7
8
8~15行为第一74LS138控制
9
10
11
12
13
14
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;
扫描代码送高八位锁存器
MOV0F0H,#02H;
MULAB
ADDA,#01H;
调正结果加1送数据指针DPTR
MOVR7,A
CLRA
ADDCA,0F0H
MOV82H,R7
MOV83H,A
====================
PUSHDPH;
扫描代码送低八位锁存器
PUSHDPL
MOVDPTR,#0FFE0H
MOVX@DPTR,A
MOVA,#01H;
代码扫描从第一行开始
MOVR6,#00H
MOVR0,0EH;
取与当前代码扫描对应的列值
INCR0;
列指针加1
SJMPX083
X07E:
CLRC;
当前代码扫描对应行的查找
RLCA;
行高八位左移一位
XCHA,R6
行低八位带进位左移一位
X083:
DJNZR0,X07E;
不为当前代码扫描对应行返上继续调正
MOVDPTR,#0FFE2H;
当前行码送高八位锁存器
MOVDPTR,#0FFE1H;
当前行码送低八位锁存器
MOVA,R6
MOVR6,#80H;
当前行锁定显示250u秒
DJNZR6,$
关闭显示
MOVDPTR,#0FFE1H
MOVX@DPTR,A;
行高八位锁存器清零
INCDPTR
行低八位锁存器清零
POPDPL
POPDPH
INC0EH;
AJMPX023;
继续下1行
X097:
X0A0:
清扫描个数寄存器
MOVR5,A;
从第一个开始扫描
X0A2:
MOVA,R5;
取当前扫描个数
=========确定要显示的汉字个数===========;
用户可自定义汉字个数
SUBBA,#19H;
共扫描83个汉字
JNCX0A0;
扫描个数满83个返回从第一个开始
MOVA,R5
=========确定显示为循环方式============;
用户可自定义为移位循环方式
MOVDPTR,#STLS;
指向汉字表首址
MOV0F0H,#20H;
设定以完整的一个汉字为最小循环单位
ADDA,dpl
MOV0ah,A
MOVA,dph
MOV09H,A
MOVR4,A
X0BD:
MOVA,R4
SUBBA,#64H;
每个汉字扫描64次
JNCX0CF;
当前汉字扫描次数满64次转
MOVR2,09H
MOVR1,0AH
ACALLX01A
INCR4;
扫描次数加1
SJMPX0BD
X0CF:
INCR5;
扫描个数加1指向下一个汉字
SJMPX0A2
====================================================================
XB13:
MOVR0,#7FH
XB16:
MOV@R0,A
DJNZR0,XB16
MOV81H,#20H
JMPX097
============查找与当前列对应的汉字代码子程序====================
XB1F:
MOVA,82H;
本次扫描首址与当前列值相加
ADDA,R1;
低八位相加
送DPL
MOVA,83H;
高八位相加
ADDCA,R2;
再加低八位进位位CY
MOV83H,A;
送DPH
MOVCA,@A+DPTR;
取汉字代码
返回
XB4E:
PUSHDPH
MOVDPTR,#0FFE3H
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;
东
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;
华
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,;
理
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 显示屏