点阵式LED“0-9”数字显示技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第一章绪论 (2)
第二章方案设计 (3)
2.1 方案确定 (3)
2.1.1 功能要求 (3)
2.2.2 方案确定 (3)
2.2 器件选择 (3)
第三章硬件电路设计 (4)
3.1 整体模块设计 (4)
3.2 单片机最小系统设计 (4)
3.2.1 晶振电路设计 (4)
3.2.2 复位电路设计 (5)
3.3 驱动电路设计 (6)
3.4 LED点阵显示设计 (7)
第四章软件电路设计 (10)
4.1 软件设计思想 (10)
4.2 主程序流程图 (13)
第五章系统仿真与调试 (14)
5.1 系统仿真 (14)
5.2 性能分析 (14)
结束语 (14)
参考文献 (15)
致谢 (15)
附录 (16)
第一章绪论
LED是发光二极管LIGHT EMINTTING DIODE的英文缩写,是一种直接能将电能转化为可见光的半导体。
LED点阵是由发光二极管排列组成的显示器件,在日常生活中随处可见,其发光类型属于冷光源,效率及发热量是普通发光器件难以比拟的。
它采用低电压扫描驱动,具有耗电少、使用寿命长、成本低、亮度高、故障少、视角大、可视距离远、可靠耐用、应用灵活、安全、响应时间短、绿色环保、控制灵活等特点。
随着社会经济的不断进步,人们对LED显示器的认识不断加深,其应用领域越来越广。
本设计是基于AT89C5151的8×8点阵LED数码字符显示器的设计,LED点阵显示屏作为一种新兴的显示器件,是由多个独立的LED发光二极管封装而成. LED点阵显示屏可以显示数字或符号, 通常用来显示时间、速度、系统状态等。
本文讲述了基于AT89C51单片机8×8 LED数码字符显示器的基本原理、硬件组成与设计,Proteus软件仿真,程序设计等基本环节与相关技术。
LED电子显示屏具有所显内容信息量大,外形美观大方,操作使用方便灵活。
适用于火车,汽车站,码头,金融证券市场,文化中心,信息中心体育设施等公共场所。
该项目广泛涉及了计算机及电子技术中的电源技术,单片机技术,数据通讯技术,显示技术,存储技术,系统软件技术,接口及驱动等技术。
本设计是8×8点阵LED数码字符显示器的设计。
整机以美国ATMEL公司生产的40脚单片机AT89C51为核心,介绍了以它为控制系统的LED点阵电子显示屏的动态设计和开发过程。
通过该芯片控制一个驱动器来驱动显示屏显示,该电子屏可以各种文字或单色图像,采用动态显示,使得图形或文字能够实现静止、移入移出等多种显示方式。
第二章方案设计
2.1 方案确定
2.1.1 功能要求
1、采用MCS-51单片机作为微处理器。
2、设计一个8×8点阵LED数码字符显示器。
3、在目测条件下LED显示屏各点亮度均匀、充足、稳定、清晰无串扰。
4、动态显示“0-9”几个字符。
2.2.2 方案确定
采用AT89C51单片机作为微处理器,将共阳极二极管用共阴型接法连接成8×8点阵LED数码字符阵列,通过程序控制,采用动态显示,建立字符库“0-9”。
2.2 器件选择
微处理器采用AT89C51系列单片机,AT89C51单片机是这几年在我国非常流行的单片机,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能单片机,可擦除只读存储器可以反复擦除100次,具有低功耗、高性能的特点,并且可与工业标准的MCS—51指令集和输出管脚相兼容,对于本设计需要实现的功能,完全可胜任。
第三章硬件电路设计
3.1 整体模块设计
本设计行、列驱动电路,显示器电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如图1所示。
图1 硬件系统框图
此次需要实现的功能是利用一个AT89C51,一个8×8LED点阵,动态显示“0-9”10个字,采用PC上位机驱动显示电路。
3.2 单片机最小系统设计
AT89C51单片机最小系统电路由复位电路、晶振电路两部分组成。
3.2.1 晶振电路设计
AT89C51单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。
系统采用的定时元件为石英晶体和电容组成的并联谐振回路。
晶振频率fosc采用12MHZ,C1、C2的电容值取30pF,电容的大小起频率微调的作用。
晶振电路图如图所示。
XTAL1
XTAL2
图2 晶振电路图
3.2.2 复位电路设计
AT89C51单片机在启动运行时或者出现死机时需要复位,使CPU 以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。
单片机有多种复位方式,常用的复位操作有上电复位和手动复位方式。
本设计采用最简单的上电复位方式,电路如图3所示。
上电复位是通过外部复位电路的电容充电来实现的,复位电路产生的复位信号(高电平有效)由RST 引脚送入到内部的复位电路,对AT89C51单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使AT89C51单片机可靠复位。
当上电时,C1相当于短路,有时碰到干扰时会造成错误复位,可在复位端加个去耦电容,可以取得很好的效果。
AT89C51单片机复位电路如下图所示:
R94.7K
VCC
VCC
RST
VSS
C510MF/25V
AT89C51
图3 上电复位电路图 图4 按键电平复位电路图
复位电路工作原理:
上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C5充电电流的减少,RST引脚的电位不断下降,可以保持RST引脚在为高电平的时间内完成复位操作。
当单片机已在运行当中时,按下复位键S5后再松开,也能使RST引脚为一段时间的高电平,从而实现AT89C51单片机复位。
3.3 驱动电路设计
正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。
而不管是AT89C51的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。
因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阴型高态扫描信号驱动电路。
共阴型LED阵列驱动电路采用高态扫描,也就是任何时间只有一个高态信号,其它则为低态。
一行扫描完成后,再把高态信号转化到近邻的其他行,扫描信号接用一个反向驱动器,AT89C51本身内置一个反向驱动器,本设计将AT89C51作为点矩阵显示控制系统的控制核心,通过点矩阵实时显示并移动字符。
单片机的串口与行驱动器相连,用来发送显示数据信息。
P0口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。
输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,7个LED同时点亮,需要210mA,完全满足LED点亮的基本条件。
动电流经过LED到输出端,形成正向回路,即可点亮该LED。
其中每个晶体管任何时间只需负责驱动一个LED,所以选择30mA射极电流的晶体管。
驱动电路如图5所示。
3.4 LED点阵显示设计
本设计采用ATMEL公司的AT89C51作矩阵显示控制系统控制核心,12MHZ 晶振,8 8点阵共阳LED显示器。
其中,P0口作为字符数据输出口,P3口为字符显示扫描输出口,第31脚(EA)接电源。
本设计LED矩阵显示器电路选用8×8点阵模块,系统由单片机控制。
LED 显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。
本文就是使用1块8×8点阵,采用按列扫描按行控制控制方式,扫描顺序自左向右,以满足汉字显示的要求。
8×8点阵LED 结构如图6所示。
图6 LED 数码显示管
8×8 点阵LED 的工作原理。
图
7为8×8点阵LED 外观及引脚图,其等效电路如图8所示,只要其对应的X 、Y 轴顺向偏压,即可使LED 发亮。
例如如果想使左上角LED 点亮,则Y0=1,X0=0即可。
应用时限流电阻可以放在X 轴或Y 轴。
图7 8×8点阵LED 外观及引脚图
图8 8×8点阵LED等效电路
一个8×8点阵是由64个发光二极管按规律组成的,如图8所示。
图中,
行接低电平,列接高电平,发光二极管导通发光。
第四章软件电路设计
4.1 软件设计思想
利用数组将各数字字符的编码存放在寄存器中,在执行显示过程中从寄存器中将对应数字或字符编码的数组一一轮流调出即可实现动态。
(1).数字0-9点阵显示代码的形成如下图所示,假设显示数字“0”
1 2 3 4 5 6 7 8
●●●
●●
●●
●●
●●
●●
●●●
00 00 3E 41 41 41 3E 00
因此,形成的列代码为00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。
送显示代码过程如下所示
送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,如此下去,直到送完最后一列代码,又从头开始送。
数字“1”代码建立如下图所示
12 3 45 6 7 8
●
●●
●
●
●
●
●●●
其显示代码为00H,00H,00H,00H,21H,7FH,01H,00H
数字“2”代码建立如下图所示
●●●
●●
●
●
●●●●
●
●●●●●
00H,00H,27H,45H,45H,45H,39H,00H 数字“3”代码建立如下图所示
12 3 45 6 7 8
●●●
●●
●
●●●
●
●●
●●●
00H,00H,22H,49H,49H,49H,36H,00H 数字“4”代码建立如下图所示
12 3 45 6 7 8
●
●●
●●
●●
●●●●●
●
●
00H,00H,0CH,14H,24H,7FH,04H,00H 数字“5”代码建立如下图所示
12 3 45 6 7 8
●●●●●
●
●●●●
●
●
●●
●●●
00H,00H,72H,51H,51H,51H,4EH,00H 数字“6”代码建立如下图所示
●●●
●●
●
●●●●
●●
●●
●●●
00H,00H,3EH,49H,49H,49H,26H,00H 数字“7”代码建立如下图所示
12 3 45 6 7 8
●●●●●
●
●
●
●
●
●
00H,00H,40H,40H,40H,4FH,70H,00H 数字“8”代码建立如下图所示
12 3 45 6 7 8
●●●
●●
●●
●●●
●●
●●
●●●
00H,00H,36H,49H,49H,49H,36H,00H 数字“9”代码建立如下图所示
12 3 45 6 7 8
●●●
●●
●●
●●●●
●
●●
●●●
00H,00H,32H,49H,49H,49H,3EH,00H
4.2 主程序流程图
图10 主程序流程图
第五章系统仿真与调试
5.1 系统仿真
5.2 性能分析
此次系统设计结果较好,LED显示屏能很好的显示信息。
LED显示屏由4块8×8的LED小模块组成,整个显示屏可以显示“0-9”字型。
这个方案设计的8x8的点阵LED图文显示屏,电路简单,成本较低,且较易扩展;显示屏各点亮度均匀、充足;显示图形或文字稳定、清晰无串扰。
结束语
本次课程设计到现在有一个多星期,回顾这些天我感到学到了很多东西,在写这个心得的时候,我想就这些天的收获,说一说自己内心的想法。
本设计是一个8x8的点阵LED数码显示器,能够在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。
通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际。
参考文献
[1] 张靖武,周灵彬《单片机系统的PROTEUS设计与仿真》电子工业出版社
[2] 吴金戌,沈庆阳,郭庭吉《8051单片机实践与应用》清华大学出版社
[3] 李群芳,肖看《单片机原理、接口及应用》清华大学出版社
[4] 张毅刚,彭喜元等《新编MCS-51单片机应用设计》哈尔滨工业大学出版社
[5] 张义和,陈敌北编著《例说8051》人民邮电出版社
致谢
感谢我的任课老师许老师,他严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。
感谢我的指导老师彭老师,这篇论文的每个细节和每个数据,都离不开你的细心指导。
而你开朗的个性和宽容的态度,让我对专业课更感兴趣。
在此,我还要感谢在一起研究的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。
附录
unsigned char code digittab[10][8]={
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0 {0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1 {0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2 {0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3 {0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4 {0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5 {0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6 {0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7 {0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8 {0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00} //9
}; unsigned int timecount;
unsigned char cnta;
unsigned char cntb;
void main(void)
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{;
}
}
void t0(void) interrupt 1 using 0
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
P3=tab[cnta];
P1=digittab[cntb][cnta];
cnta++;
if(cnta==8)
{
cnta=0;
}
timecount++;
if(timecount==333)
{
timecount=0;
cntb++;
if(cntb==10)
{
cntb=0;
}
} }。