基于单片机的LED点阵屏的设计.docx
《基于单片机的LED点阵屏的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的LED点阵屏的设计.docx(13页珍藏版)》请在冰点文库上搜索。
基于单片机的LED点阵屏的设计
摘要
本设计介绍了一个以单片机AT89C51为控制器的点阵LED显示屏的软件及硬件设计。
这个显示屏可以通过动态扫描的方式来显示四个16*16点阵的汉字。
设计采用51内核的单片机作为控制核心,74hc145来控制列码扫描,并使用74hc595将单片机输出的并行数据转换并行输出。
通过修改代码可以改变显示的内容,也可以使文字滚动显示,而且滚动速度可以根据需要来调整,也可以使文字静止显示。
这种显示屏有结构简单,节省硬件和便于后续开发等优势。
关键词:
单片机,点阵屏,AT89C51
1.设计背景
1.1设计目的
随着LED技术的不断发展以及LED在低功耗、长寿命、环保等方面的优势,LED应用领域逐渐增多。
目前,LED的应用已经从最初的指示灯应用转向更具发展潜力的显示屏,景观照明、背光源、汽车车灯、交通灯、照明等领域,LED应用正呈现出多样化发展趋势。
LED器件技术和性能不断提高,电子技术发展日新月异,这也为LED显示屏产品的技术深化和提高带来良好的基础。
同时LED显示在社会生活的各个领域得到了广泛的应用。
因此,LED显示市场发展前景乐观。
而研究LED显示的原理,并且实现用微控制器对其进行显示编码,以及如何稳定可靠的显示将是我们研究的重点。
因此,这里重点从点阵的显示原理,以及如何节省硬件等方面做了研究与设计,为以后更深层次的开发提供基本方案。
1.2相关介绍
1.2.18051系列的单片机
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图片见下图:
图1-189C51管脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
P3口也可作为AT89C51的一些特殊功能口。
RST:
复位输入。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址。
/PSEN:
外部程序存储器的选通信号。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出
1.2.2单片机AT89C51最小系统
单片机采用12M晶振作为时钟源,复位采用上电复位和按键复位两种方式
仿真原理图如下:
图1-2最小系统
2.设计内容
2.1硬件设计
根据设计的目标,易实现性,精确性,成本以及控制系统的速度,我们选用单片机(SCM)作为控制模块。
根据课题的实际情况,单片机的模型选择主要从以下两方面考虑:
第一,单片机具有强抗干扰能力;第二,单片机成本效益高。
由于MCS-51在中国广泛使用,已具有更多的相关资料,并且可以兼容 更多外围芯片。
因此我们选择AT89C51单片机作为控制模块。
该设计的整体电路是由单片机最小系统,列扫描驱动电路、线驱动电路和4个16×16LED点阵组成。
具体结构框图如下:
电源
图2-1系统结构框图
2.2软件设计
软件设计主要是通过外部中断来控制切换显示的内容,使用定时器中断来实现列码扫描以及行码传送的定时。
点阵显示的子程序主要是在定时器中断函数中来实现的。
程序流程图如图所示。
图2-2程序流程图
3.
电路原理图
图3-1电路原理图
4.仿真结果
图4-1仿真结果1
图4-2仿真结果2
5.总结
LED点阵的设计显示控制系统完成了多个汉字的显示功能,并且能够稳定的显示,达到了设计的基本要求。
设计中包含了LED显示屏的基础原则,电路连接以及设计源程序。
只要单片机I/O接口被扩大了,同时增加不同的LED点阵和相关芯片,可以设计一个更大的面积和更多LED的显示屏。
本文提供了一些理论和实践的参考价值。
在后续的设计与开发中,我们还可以通过RS-232来实现单片机与PC机的通信,通过PC机来传送点阵屏需要显示的文字与内容。
参考文献:
[l]胡汉才.单片机原理及接口技术[M].北京:
清华大学出版社,2005.
[2]赵亮,侯国锐.单片机C语言编程与实例[M].北京:
人民邮电出版社,2003.
[3]宋戈.51单片机应用开发范例大全[M].北京:
人民邮电出版社,2003.
[4]何立民.单片机应用技术选编(8),北京:
北京航空航天大学出版社,2000.
[5]康华光.电子技术基础(第五版).北京:
高等教育出版社,2008.
附录:
单片机源程序:
#include"reg51.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitsh1=P2^0;
sbitds1=P2^1;
sbitst1=P2^2;
sbitsh2=P2^3;
sbitds2=P2^4;
sbitst2=P2^5;
uchartemp1,temp2;
//段码
//低8位
ucharcodeD1[2][64]={
{0x00,0x00,0x01,0x09,0x09,0x09,0x3F,0x0B,0x0D,0x09,0x11,0x01,0x00,0x00,0x00,0x00,//“老”
0x00,0x00,0x03,0x00,0x00,0x1F,0x00,0x01,0x12,0x12,0x1F,0x12,0x12,0x01,0x00,0x00,//“师”
0x00,0x00,0x04,0x08,0x1F,0x20,0x09,0x12,0x30,0x1F,0x10,0x12,0x19,0x00,0x00,0x00,//“您”
0x00,0x05,0x06,0x0C,0x14,0x03,0x00,0x11,0x21,0x21,0x23,0x25,0x19,0x00,0x00,0x00},//“好"
{0x00,0x14,0x0C,0x07,0x00,0x08,0x1F,0x35,0x55,0x0F,0x00,0x02,0x02,0x1F,0x02,0x00,//“谢”
0x00,0x14,0x0C,0x07,0x00,0x08,0x1F,0x35,0x55,0x0F,0x00,0x02,0x02,0x1F,0x02,0x00,//“谢”
0x00,0x00,0x04,0x04,0x3F,0x04,0x04,0x00,0x3C,0x0A,0x0A,0x12,0x04,0x00,0x00,0x00,//“指”
0x00,0x00,0x00,0x5E,0x4A,0x4A,0x4A,0x4A,0x4B,0x4A,0x32,0x04,0x00,0x00,0x00,0x00},//“导”
};
//高8位
ucharcodeD2[2][64]={
{0x00,0x00,0x10,0x20,0x40,0x80,0xF8,0x0C,0x14,0x24,0x44,0x04,0x08,0x00,0x00,0x00,
0x00,0x00,0xC0,0x04,0x08,0xF0,0x00,0xC0,0x00,0x00,0xFC,0x00,0x20,0xE0,0x00,0x00,
0x00,0x00,0x04,0x28,0x90,0x08,0x04,0x24,0x94,0x84,0x04,0x38,0x00,0x10,0x08,0x00,
0x00,0x80,0x48,0x30,0x50,0x88,0x00,0x00,0x08,0x04,0x84,0x78,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0xFC,0x04,0x40,0xC8,0x52,0x62,0xFC,0x40,0x88,0x44,0xFC,0x00,0x00,
0x00,0x00,0x00,0xFC,0x04,0x40,0xC8,0x52,0x62,0xFC,0x40,0x88,0x44,0xFC,0x00,0x00,
0x00,0x00,0x24,0x22,0xFE,0x40,0x80,0x00,0x7C,0x92,0x92,0x92,0x7E,0x00,0x00,0x00,
0x00,0x00,0x40,0x40,0x44,0x42,0x52,0x4A,0xFE,0x40,0x40,0x40,0x40,0x40,0x00,0x00},
};
uchari,j,k;
//串行输入
voidIn_595_1()
{
uchari;
for(i=0;i<8;i++)
{
temp1<<=1;ds1=CY;
sh1=1;
_nop_();_nop_();
sh1=0;
}
}
voidIn_595_2()
{
uchari;
for(i=0;i<8;i++)
{
temp2<<=1;ds2=CY;
sh2=1;
_nop_();_nop_();
sh2=0;
}
}
//并行输出
voidOut_595_1()
{
st1=0;
_nop_();
st1=1;
_nop_();
st1=0;
}
voidOut_595_2()
{
st2=0;
_nop_();
st2=1;
_nop_();
st2=0;
}
//主程序
voidmain()
{
P0=0xff;
P1=0xff;
P2=0xff;
TMOD=0x01;
TH0=(65536-1550)/256;
TL0=(65536-1550)%256;
IT0=1;
IE=0x83;
i=0xff;
while
(1)
;
}
//INT0中断
voidkeydown()interrupt0
{
P0=0xff;
P1=0x80;
P2=0xff;
j=0;
i=(i+1)%2;
TR0=1;
}
//T0中断
voidshow1()interrupt1
{
TH0=(65536-1550)/256;
TL0=(65536-1550)%256;
P0=j;
P1=k;
temp1=D2[i][j];
In_595_1();
temp1=D1[i][j];
In_595_1();
Out_595_1();
j=(j+1)%32;
temp2=D2[i][k+32];
In_595_2();
temp2=D1[i][k+32];
In_595_2();
Out_595_2();
k=(k+1)%32;
}