LED图像显示系统Word下载.docx
《LED图像显示系统Word下载.docx》由会员分享,可在线阅读,更多相关《LED图像显示系统Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
硬件电路大致可分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。
2总体设计
如图1所示,本产品采用AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、电源、行驱动器、列驱动器、16X16LED点阵5部分组成。
图1LED图形显示系统电路框图
从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在的位置相对应的的LED期间发光,就可以得到我们想要的显示结果,这种同时控制各个点亮灭的方法称为静态驱动显示方式。
16X16的点阵共有256个发光二极管,显然对单片机没有这么多的端口,按8位的锁存器来计算,16X16的点阵需要256/8=32个锁存器。
这样在锁存器上花的成本将是一个很庞大的数字。
因此在实际应用中的显示屏几乎都不采用这种设计,而是采用另外一种称为动态扫描的显示方法。
动态扫描的意思简单来说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套驱动器。
具体就16X16的点阵来说,把所有同一行的发光二极管的样机连在一起,把所有同一列的阴极连在一起(共阳极的接法),再送出对应第一行发光二极管亮灭的数据并锁存,然后选通第一行使其燃亮一定时间,然后熄灭;
在送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;
以此类推,第十六行之后,又重新燃亮第一行,反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。
采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。
显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。
显示时要把一行中的各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到驱动器数据传输可以采用并列方式或串行方式。
显然,采用并列方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。
当列数很多时,并列传输的方案是不可取的。
3单片机系统及外围电路
单片机采用MSC-51或其兼容系列芯片,采用24MHZ或更高频率晶振,已获得较高的刷新频率,时期显示更稳定。
单片机的串口与列驱动器相连,用来显示数据。
P1口低4位与行驱动器相连,送出行选信号;
P1.5~P1.7口则用来发送控制信号。
P0口和P2口空着,再有必要时可以扩展系统ROM和RAM。
4列驱动电路
列驱动电路由集成电路74HC595构成。
它具有一个8位串入并出的移位寄存器和一个8位输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行列数据的同时,传送下一个列数据,既达到重叠处理的目的。
74HC595的外形及内部结构如图2所示。
它的输入侧有8个串行移位寄存器每个移位寄存器输出都连一个输出锁存器。
引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。
移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。
RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。
引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则为高组态。
SCLR信号是移位寄存器清零输入端,当其为低电平移位寄存器的输出全部为零。
由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。
芯片的输出端端口为QA~QH,最高QH可作为多片74HC595级联应用时,向上一级的级联输出。
但因为QH受输出锁存器的打入控制,所以还从输出锁存器前引出QH,作为与唯一寄存器完全同步的级联输出。
图274HC595外形及引脚
五行驱动器
单片机P1口低4位输出的行号经4/16线译码器74HC154译码后生成16条选通信号线,在经过驱动器驱动对应的行线。
一条行线上要带动16列的LED进行显示,按每一LED器件20mA电流计算,16个LED同时发光时,需要320mA电流,选通三极管8550作为驱动管可满足要求。
四、系统硬件选择
由图1可知此次设计的硬件选择如下:
AT89C51芯片、LED灯、74HC154、74HC595、LED的驱动三极管、电阻等一些单片机外围应用电路组成。
元器件清单如表1:
表1元件清单表
元件序号
型号
主要参数
数量
备注
1
AT89C51
主要器件
2
LED
256
显示器件
3
74HC154
4
74HC595
5
4.7K
16
16X16点阵显示电路原理如图3所示:
图316X16点阵显示原理图
五、软件部分
1系统程序设计
显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
根据软件分层次设计的原理,可以把显示屏的软件系统分为两层:
第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作显示效果处理等工作,由主程序来实现。
从有利于实现较复杂的算法和有利于程序结构化考虑,显示屏程序宜采用C语言编写。
2显示驱动程序
显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:
刷频率(帧频)=1/16×
T0溢出率
=1/16×
f/12(65536-t)
其中f为晶振频率,t为定时器T0的初值(工作16位定时器模式)。
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出寄存器并锁存,然后在输出新的行号,重新打开显示。
图4为显示驱动程序(显示屏扫描函数)流程图。
图4显示驱动程序流程如图
3系统主程序
本文设计的系统软件能使系统在目测条件下LED显示屏个亮点均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
系统主程序开始后,首先是对系统环境初始化,包括设置串口、定时器、中断和端口;
然后以“卷帘出”效果显示图形,停留约3s;
接着向上滚动显示“哈尔滨学院”这5个汉字,然后以“卷帘入”效果隐去图形。
由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。
单元显示屏可以接收来自控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示板可扩展至更多的显示单元,用于显示更多的显示内容。
图5是系统主程序流程图。
图5系统主程序流程图
六、调试与分析
性能分析
LED显示屏硬件电路只要硬件质量可靠,引脚焊接正确,一般无需调试即可正常工作。
软件部分需要调试的主要有显示屏刷新频率及显示效果两部分。
显示屏刷新率由定时器T0的溢出率和单片机的晶振频率决定。
从理论上来说,24Hz以上的刷新频率就能看到稳定的连续的显示,刷新频率越高,显示越稳定,同时刷新频率越高,显示驱动程序占用的CPU时间越多。
试验证明,在目测条件下刷新频率40Hz一下的画面看起来闪烁较严重,刷新频率50Hz以上的已基本察觉不出画面的闪烁,刷新频率达到85Hz以上时再增加画面闪烁没有明显的改善。
仿真中的截图如图6所示:
图6演示效果图
这个方案设计16x16的点阵LED图文显示屏,电路简单,成本较低,且较容易扩展成更大的显示屏;
显示屏各点亮度均匀、充足;
显示图形或文字稳定、清晰无串扰;
可用静止、移入移出等多种显示方式显示图形或文字。
七、总结与心得
本设计作品不但可以运用到车站、医院等行业,而且可以通过拓展,发展出更多的用途.本作品单片机部分P0和P2空闲,必要时,可以扩展系统的ROM和RAM。
可以做为下位机辅助调试模块,实现例如照明,温度测量,时钟报警、计时,霓虹灯等功能。
利用发光二极管的控制电压很低和控制方法简单的优点,将它装在室内天棚中或做成大型灯饰,通过电脑输出信号直接驱动三极管后控制它的开关状态。
由于使用了电脑,再多的的LED数量也能方便自如地控制,得到时暗可变颜色可变绚丽多彩的照明效果,并且已有成功的案例。
通过这次独立的课程设计,我学到了很多书本上学不到的东西,尤其是在改正错误的时候。
通过这一次一次的亲身体验,我仿佛经过了一次洗礼,有了一个质的飞跃。
希望以后能多多进行这样的实习,让自己的能力越来越高。
把课本上的知识运动到社会实践当中去,才是我们学习专业理论知识的最终目的。
我们的课程设计也符合这一目标。
本次的课程设计,培养了我综合应用所学课程的理论知识和理论联系实际,在设计的过程中还培养出了我们的团队精神,同学们共同协作,解决了许多个人无法解决的问题;
在今后的学习过程中我们会更加努力。
参考文献
[1]李全利.《单片机原理及应用》.清华大学出版社,2006
[2]何立民.《MCS-51系列单片机应用系统设计与接口技术》.北京航空航天大学出版社,1990
[3]任涛等.《闪速存储器数据及应用简明速查手册》.电子工业出版社,1997
[4]张毅刚.《MCS-51单片机应用设计》.哈尔滨工业电子出版社,1996
[5]诸昌钤.《LED显示屏系统原理及工程技术》.电子科技大学出版社,2000
附录主要汇编程序清单
#include<
AT89X52.H>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineBLKN2/*列存贮器数,表示8*8led组合的行数*/
sbitE1=P3^4;
//74HC154(18)-E1为0开列(col)输出显示允许控制信号端口
sbitST_CP=P3^2;
//74HC595(12)-ST_CP上升沿--移位寄存器的数据进入数据存储寄存器输出锁存器的时钟信号端口
sbitMR=P3^3;
//74HC595(10)-MR为0将移位寄存器的数据清0
voiddelay(unsignedint);
//延时函数
uchardatadispram[32];
//显示缓存
ucharcodebmp[][32]={//字模表
//{
//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"
"
//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//},
{
0x40,0x00,0x40,0x00,0xA0,0x08,0xA0,0x7C,0x10,0x49,0x08,0x49,0x0E,0x4A,0xF4,0x4D,
0x00,0x48,0x08,0x48,0xFC,0x4B,0x08,0x7A,0x08,0x4A,0x08,0x02,0xF8,0x03,0x08,0x02,/*"
哈"
2*/
},{
0x00,0x08,0x00,0x0C,0x08,0x08,0xFC,0x1F,0x08,0x20,0x10,0x41,0x00,0x81,0x00,0x01,
0x40,0x09,0x20,0x09,0x10,0x11,0x18,0x11,0x08,0x21,0x00,0x01,0x00,0x05,0x00,0x02,/*"
尔"
3*/
0x80,0x00,0x40,0x40,0xFE,0x2F,0x02,0x28,0x64,0x10,0x80,0x83,0x10,0x52,0xF8,0x13,
0x20,0x12,0x20,0x22,0x24,0xE2,0xFE,0x3F,0x00,0x20,0x20,0x23,0x18,0x22,0x08,0x24,/*"
滨"
4*/
0x08,0x22,0x08,0x11,0x10,0x11,0x20,0x00,0xFE,0x7F,0x02,0x40,0x04,0x80,0xE0,0x1F,
0x40,0x00,0x84,0x01,0xFE,0xFF,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,/*"
学"
5*/
0x80,0x00,0x40,0x78,0xFE,0x4F,0x02,0x54,0x14,0x58,0xF8,0x63,0x00,0x50,0x08,0x48,
0xFC,0x4F,0xA0,0x48,0xA0,0x68,0xA0,0x50,0x22,0x41,0x22,0x41,0x1E,0x42,0x00,0x4C,/*"
院"
6*/}}
voidmain()
ucharnum,cur,tmp,nums=sizeof(bmp)/32;
//num:
当前显示的文字块指针
//cur:
当前文字块的断码指针(bmp)
//tmp:
临时变量
//nums:
总文字块数
SCON=0x00;
//串口工作模式0;
移位寄存器方式
TMOD=0x01;
//定时器T0工作方式1:
16位方式
TR0=1;
//T1
P1=0x3f;
//
IE=0x82;
//中断允许设置
while
(1)
{
delay(1000);
//2种效果之间的停顿
//for(tmp=0;
tmp<
1;
tmp++)//让卷动效果只显示一次
//delay(2000);
//延时2s一条标语滚动一次前的延时时间
delay(100);
for(num=0;
num<
nums;
num++)
for(cur=0;
cur<
32;
cur++)//显示效果:
卷帘出
dispram[cur]=bmp[num][cur];
if((cur%2)==1)
}
for(cur=31;
0xff;
cur--)//显示效果:
卷帘入当cur为0时,再循环一次就为0xff
if((cur%2)==0)
}
///////延时函数
voiddelay(uintdt)
ucharbt;
for(;
dt;
dt--)
for(bt=0;
bt<
255;
bt++);
//////////显示屏扫描(定时器T0中断)函数
voidleddisplay(void)interrupt1using1
staticucharcol=0;
TH0=0xF8;
//设定显示屏刷新率62.5帧/S
TL0=0x30;
MR=0;
//清理行输出,将移位寄存器的数据清0
MR=1;
SBUF=dispram[col*2];
//送显示数据
while(TI==0);
//等待发送完毕
T1=0;
SBUF=dispram[col*2+1];
E1=1;
//消隐(关闭显示)
P1=0xF0;
//行号端口清0多余2行,但是去掉后不行
//行号端口清0
E1=0;
//打开显示
ST_CP=1;
//显示数据打入输出锁存器
ST_CP=0;
//锁存显示数据
P1=col;
//写入行号
col=(col+1)%16;
电气信息工程系单片机课程设计成绩评定表
专业:
电子信息工程班级:
08-1学号:
08042130姓名:
赵龙
课题名称
设计任务与要求
1.基本要求
(1)在16X16点阵LED上显示汉字和图形
(2)汉字点阵为16X16
(3)汉字显示可以实现滚屏
(4)通过按键可以调整滚屏方向和启停
2.设计步骤
(1)设计查找能实现的方案
(2)单元电路设计(硬件、软件)
(3)调试、分析和仿真
(4)心得体会
指导教师评语
成绩:
指导教师:
时间: