88LED点阵设计-毕业设计.doc
《88LED点阵设计-毕业设计.doc》由会员分享,可在线阅读,更多相关《88LED点阵设计-毕业设计.doc(33页珍藏版)》请在冰点文库上搜索。
8*8LED点阵设计
学生:
XX指导教师:
XX
内容摘要:
本设计就是实现利用AT89C51单片机控制一个8X8的LED点阵显示的方法。
每两个8X8的LED常规显示点阵构一列,每两个74HC138控制8个行扫描序列,这样数据并行进入到8X8的LED点阵模块,只有当74HC138译码器控制的行扫描序列有效时,相对应列的数据才能有效进入到点阵模块中进行显示。
本设计就是实现了通过Atmel公司的AT89C51单片机控制点阵显示的方法。
该方法就是在AT89C51内部设置一个带显示的字库,字库的内容是通过LED点阵显示取模软件获得的字符、图片等的字符编码,编码一数组的形式存储在单片机中。
再通过编程控制字库数据按要求输出,这样就可以实现LED的点阵显示。
为了进一步提升功能,本设计设计了输入按键,通过按键输入可以选择相应的点阵显示模式,从而实现可以对内容进行实时控制诸如固定显示、滚动显示等功能的LED点阵显示设计。
关键词:
8X8LED点阵显示字库AT89C51
DesignforSCMofLEDdotmatrixdisplaydesign
Abstract:
ThisdesignisrealizedusingAT89C51single-chipmicrocomputertocontrola8X8LEDdotmatrixdisplaymethod.Everytwo8X8LEDdisplaydotmatrixstructurealistofconventional,oneofthetwo74HC138control16scanningsequence,suchdataparallelto8X8intoofLEDdotmatrixmodules,onlywhenthe74HC138decoderofeffectivecontrolscanningsequence,correspondingtothelistofdatatobeeffectiveaccesstodotmatrixmodulesdisplayed.ThisdesignisrealizedthroughtheAtmelcompanyAT89C51single-chipmicrocomputercontroldotmatrixdisplaymethod.ThismethodissetupinsideainAT89C51withwordoftheshow,thecontentofthewordstockisthroughofLEDdotmatrixdisplaymodelforsoftwaretakecharacter,thepictureandsooncharacterencodings,codeforaarrayofstorageintheSCM.Againprogrammingcontrolwordstockdataasrequiredoutput,whichcanrealizeLEDdotmatrixdisplaying.Inordertoimprovefunction,thisdesignoftheinputbuttons,throughthekeystrokecanchoosecorrespondingdotmatrixdisplaymode,whichcanrealizereal-timecontrolthecontentsuchasfixeddisplay,rollingdisplayfunctionofLEDdotmatrixdisplaydesign.
Keywords:
8X8LEDdotmatrixdisplaywordstockAT89C51
.
目录
前言 1
18*8LED点阵相关知识 1
1.1LED阵列介绍及原理 1
1.1.18*8LED点阵外观 1
1.1.28*8LED点阵内部连线及引脚编号 2
1.1.3LED相关知识 3
2总设计 5
2.1设计目的 5
2.2设计要求 5
2.3设计任务和内容 5
3程序设计 5
3.1程序框图 5
3.2 系统框图 6
4硬件系统设计 6
4.1单片机最小系统 7
4.2设计论证 7
5软件设计 8
6显示驱动程序设计 8
7系统主程序设计 9
8结束语 9
附录1:
8*8点阵滚动显示 11
附录2:
LED流动显示电子钟汇编源程序 16
参考文献:
29
29
8*8LED点阵设计
前言
八十年代以来出现了组合型LED点阵显示器,以发光二极管为像素,它是高亮度发光二极管芯阵列组合后,环氧树脂和塑模封装而成。
具有高亮度、功耗低、引脚少、视角大、寿命长、耐湿、耐冷热、耐腐蚀、成本低廉等特点。
点阵显示器有单色和双色两类,可显示红,黄,绿,橙等。
LED点阵有4*4、4*8、5*7、5*8、8*8、16*16、24*24、40*40等多种;
目前LED点阵显示器应用已十分广泛,通过编程控制可以显示中英文字符、图形及视频动态图形。
广泛用于指示、广告、宣传等领域,在城市商业区随时可见。
例如,车站、机场的运行时刻报告牌;商店的广告牌;证劵、运动场馆的指示牌等等。
无论在室内还是室外,LED点阵都得到广泛的应用。
18*8LED点阵相关知识
1.1LED阵列介绍及原理
LED阵列有多种品种可以选择,以可显示的颜色数可分为单色、双色、三色等;以发光亮度分为普通亮度、高亮度、超高亮度等。
一块LED点阵块的LED数量有多种规格,前面以作介绍了;点阵中单个LED的直径常用的有1.9mm、3mm、3.7mm、4.8mm、5mm、7.62mm、10mm、20mm等。
1.1.18*8LED点阵外观
8*8LED点阵共有64个LED发光二极管排在一起。
通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效地控制各显示点的亮灭。
如需要更大规模的LED点阵,就只需要将多少个点阵块拼在一起即可。
8*8LED点阵外观如图1.1.1-1所示(每一个小方框代表一个LED):
图1.1.1-1WTD3088LED分布
1.1.28*8LED点阵内部连线及引脚编号
在LED点阵中,LED发光二极管按照行和列分别将阳极和阴极连接在一起,内部接线及引脚编号如图1.2.1-1所示,列输入引脚(DC1~DC8)接内部LED的阴极端,行输入引脚接至LED的阳极端,若阳极端输入为高电平,阴极端为低电平,则该LED点亮。
图1.2.1-1LED点阵内部接线及引脚编号
1.1.3LED相关知识
1.1.3.1LED显示系统中各模块的显示方式
有静态和动态显示两种。
静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的脉冲信号,反复循环以上操作,就可以显示各种图形或文字信息。
用多块点阵显示器组合则可构成大屏幕显示器,但这类实用装置常通过PC机或单片机控制驱动。
1.1.3.2LED模块及扫描电路
如图1.2.2.2-1所示
图1.2.2.2-1LED及扫描电路
点阵式LED汉字广告屏绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视觉暂留特性。
将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。
最典型的例子就是电影放映机。
在电子领域中,因为这种动态扫描显示方式极大的缩减了发光单元的信号线数量,因此在LED显示技术中被广泛使用。
8×8点阵模块的使用方法及控制过程如下。
图1.2.2.2-2中,水平线Y0、Y1……Y7叫做行线,接内部发光二极管的阳极,每一行8个LED的阳极都接在本行的行线上。
相邻两行线间绝缘。
同样,竖直线X0、X1……X7叫做列线,接内部每列8个LED的阴极,相邻两列线间绝缘。
在这种形式的LED点阵模块中,若在某行线上施加高电平(用“1”表示),在某列线上施加低电平(用“0”表示)。
则行线和列线的交叉点处的LED就会有电流流过而发光。
比如,Y7为1,X0为0,则右下角的LED点亮。
再如Y0为1,X0到X7均为0,则最上面一行8个LED全点亮。
图1.2.2.2-2(8*8)点阵LED显示模块原理及引脚图
2总设计
2.1设计目的
8*8LED点阵设计,通过在KeiluVision4编写程序,能够在8*8点阵显示出汉字和数字。
2.2设计要求
8*8点阵;滚动显示
2.3设计任务和内容
整个操作结构图如图2.3-1所示
图2.3-1操作结构示意图
3程序设计
3.1程序框图
图3.1-1程序框图
3.2系统框图
图3.2-1系统框图
4硬件系统设计
4.1单片机最小系统
图4.1-1单片机最小系统
4.2设计论证
图文显示一般有静态和动态显示两种方案,静态方案虽然设计简单,但其使用的管脚太多,如本设计中8x8的点阵共有64个发光二极管,显然单片机没有这么多的端口,如果我采用锁存器来扩展端口,按8位的锁存器来计算,8x8的点阵需要64/8=8个锁存器。
这个数字很庞大,因为我们仅仅是8*8的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。
因此在实际应用中的显示屏几乎都不采用这种设计,而采用另外一种称为动态扫描的显示方法。
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如8行)的同名列共用一套驱动器。
具体就8x8的点阵来说,把所有同1行的发光管的阳极连在一起,把所有同1列的发光管的阴极连在一起(共阳极的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定时间,然后熄灭;再送出第二行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;以此类推,第16行之后,又重新燃亮第1行,反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。
采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。
显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。
显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。
显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。
当列数很多时,并列传输的方案是不可取的。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。
对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度。
解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。
即在显示本行各列数据的同时,传送下一列数据。
为了达到重叠处理的目的,列数据的显示就需要具有所存功能。
经过上述分析,就可以归纳出列驱动器电路应具有的功能。
对于列数据准备来说,它应能实现串入并处的移位功能;对于列数据显示来说,应具有并行锁存的功能。
这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。
5软件设计
显示屏软件模块包括:
初始化程序、主程序、多字滚动、显示程序、扫描程序。
显示程序的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
软件设计中,显示屏的软件系统分为两层;第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动器程序由定时器T0中断程序实现。
系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。
6显示驱动程序设计
显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定。
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示
7系统主程序设计
本设计的系统软件能使系统LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
系统主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;然后以“卷帘出”效果显示图形,停留约几秒;接着向上滚动显示“--------”这个汉字,然后以“卷帘入”效果隐去图形。
由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。
单元显示屏可以接收来自控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示板可扩展至更多的显示单元,用于显示更多的显示内容。
如果想改变些事内容,先用字模产生字代码,将用这段代码覆盖原来的代码,即可显示你想要的内容。
8结束语
通过这次课程设计使我懂得了理论和实践结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识和实践结合起来,从理论中得出结论,才能真正的为社会服务,从而提高自己的动手能力和独立思考能力。
在设计的过程中遇到的问题,可以说的事困难重重,这毕竟是第一次做的,难免会遇倒过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前学过的只是理解得不够深刻,掌握的不够牢靠。
在设计中遇到了很多专业知识问题,最后在自己的不懈努力下终于解决。
我觉得自己做的速度很慢,而且有时候没有头绪,还有实物需要动手能力,自己在这方面很欠缺,对很多器件的型号还有规模之类的不是特别了解和熟练。
在选择方案和方案设计也遇到很多问题,自己对目录生成也不熟练,而且很依赖别人,对此,我表示以后会好好努力以及独立。
在这次课程设计,我知道我很多的不足,并且我看到很多同学值得我学习的地方,例如:
对计算机操作的熟练,对知识的概括能力,对计算机知识的具备,还有对事情的执着。
此次课程设计学到了很多课堂内学不到的东西,比如独立思考解决问题,出现异常的随即应变,都让我受益匪浅。
同时感谢XX老师的指导。
也感谢帮助过我的同学和学长!
附录1:
8*8点阵滚动显示
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
voidinit();
voiddelay(uintx);
uchartemp;
ucharcodetable[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,
0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x7e,
0x00,0x00,0x00,0x00,0x00,0x42,0x7e,0x7e,
0x00,0x00,0x00,0x00,0x42,0x7e,0x7e,0x42,
0x00,0x00,0x00,0x42,0x7e,0x7e,0x42,0x00,
0x00,0x00,0x42,0x7e,0x7e,0x42,0x00,0x00,
0x00,0x42,0x7e,0x7e,0x42,0x00,0x00,0x00,
0x42,0x7e,0x7e,0x42,0x00,0x00,0x00,0x7e,
0x7e,0x7e,0x42,0x00,0x00,0x00,0x7e,0x04,
0x7e,0x42,0x00,0x00,0x00,0x7e,0x04,0x08,
0x42,0x00,0x00,0x00,0x7e,0x04,0x08,0x08,
0x00,0x00,0x00,0x7e,0x04,0x08,0x08,0x04,
0x00,0x00,0x7e,0x04,0x08,0x08,0x04,0x7e,
0x00,0x7e,0x04,0x08,0x08,0x04,0x7e,0x00,
0x7e,0x04,0x08,0x08,0x04,0x7e,0x00,0x7a,
0x04,0x08,0x08,0x04,0x7e,0x00,0x7a,0x00,
0x08,0x08,0x04,0x7e,0x00,0x7a,0x00,0x2c,
0x08,0x04,0x7e,0x00,0x7a,0x00,0x2c,0x4a,
0x04,0x7e,0x00,0x7a,0x00,0x2c,0x4a,0x52,
0x7e,0x00,0x7a,0x00,0x2c,0x4a,0x52,0x34,
0x00,0x7a,0x00,0x2c,0x4a,0x52,0x34,0x00,
0x7a,0x00,0x2c,0x4a,0x52,0x34,0x00,0x2c,
0x00,0x2c,0x4a,0x52,0x34,0x00,0x2c,0x4a,
0x2c,0x4a,0x52,0x34,0x00,0x2c,0x4a,0x52,
0x4a,0x52,0x34,0x00,0x2c,0x4a,0x52,0x34,
0x52,0x34,0x00,0x2c,0x4a,0x52,0x34,0x00,
0x34,0x00,0x2c,0x4a,0x52,0x34,0x00,0x00,
0x00,0x2c,0x4a,0x52,0x34,0x00,0x00,0x00,
0x2c,0x4a,0x52,0x34,0x00,0x00,0x00,0x02,
0x4a,0x52,0x34,0x00,0x00,0x00,0x02,0x04,
0x52,0x34,0x00,0x00,0x00,0x02,0x04,0x78,
0x34,0x00,0x00,0x00,0x02,0x04,0x78,0x78,
0x00,0x00,0x00,0x02,0x04,0x78,0x78,0x04,
0x00,0x00,0x02,0x04,0x78,0x78,0x04,0x02,
0x00,0x02,0x04,0x78,0x78,0x04,0x02,0x3c,
0x02,0x04,0x78,0x78,0x04,0x02,0x3c,0x42,
0x04,0x78,0x78,0x04,0x02,0x3c,0x42,0x42,
0x78,0x78,0x04,0x02,0x3c,0x42,0x42,0x3c,
0x78,0x04,0x02,0x3c,0x42,0x42,0x3c,0x00,
0x04,0x02,0x3c,0x42,0x42,0x3c,0x00,0x3e,
0x02,0x3c,0x42,0x42,0x3c,0x00,0x3e,0x40,
0x3c,0x42,0x42,0x3c,0x00,0x3e,0x40,0x40,
0x42,0x42,0x3c,0x00,0x3e,0x40,0x40,0x3e,
0x42,0x3c,0x00,0x3e,0x40,0x40,0x3e,0x00,
0x3c,0x00,0x3e,0x40,0x40,0x3e,0x00,0x00,
0x00,0x3e,0x40,0x40,0x3e,0x00,0x00,0x00,
0x3e,0x40,0x40,0x3e,0x00,0x00,0x00,0x00,
0x40,0x40,0x3e,0x00,0x00,0x00,0x00,0x00,
0x40,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,
0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
voidmain()
{
init();
while
(1)
{
uinti,n;
ucharj;
for(j=0;j<5;j++)
{
for(i=n;i {
P0=table[i];
P2=temp;
temp=_crol_(temp,1);
delay(3);
}
}
n=n+8;
if(n==(66-15+1)*8)
{
n=0;
}
}
}
voiddelay(uintx)
{
uchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
voidinit()
{
// P0=0xff;//P0送数
// P2=0x00;//P2扫描
temp=0xfe;
}
8*8LED点阵屏显示数字:
//-----------------------------------------------------------------
//名称:
8×8LED点阵屏显示数字
//-----------------------------------------------------------------
//说明:
8×8LED点阵屏循环显示数字0-9,刷新过程由定时器中断完成
//
//-----------------------------------------------------------------
#defineF_CPU4000000UL
#include
#include
#include