闪烁LED小灯的设计.docx
- 文档编号:5927552
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:17
- 大小:248.54KB
闪烁LED小灯的设计.docx
《闪烁LED小灯的设计.docx》由会员分享,可在线阅读,更多相关《闪烁LED小灯的设计.docx(17页珍藏版)》请在冰豆网上搜索。
闪烁LED小灯的设计
单片机开发与设计工程师考试文档
学校:
湖南人文科技学院
设计题目:
闪烁LED小灯
学生姓名:
刘杰
起止日期:
2010年6月17日~2010年6月27日
摘要
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
以单片机为基础的LED流水灯广泛应用于城市景观、风景名胜、道路桥梁、建筑轮廓、娱乐场所、户外广告、室内装饰等美化、亮化工程。
本设计以STC89C52单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。
本系统具有体积小、硬件少、电路结构简单及容易操作等优点。
能够通过按键控制8个LED小灯轮流点亮、逐点点亮、间隔点亮。
关键词:
单片机;LED流水灯;芯片STC89C52;芯片8255
目录
设计要求1
1、方案论证与对比1
1.1方案一1
1.2方案二2
1.3方案对比与选择2
2、各模块电路的设计2
2.1复位电路设计2
2.2晶振电路设计3
2.3键盘扫描电路设计3
2.4STC89C52芯片介绍4
2.58255芯片介绍4
2.6闪烁LED小灯原理图5
3、系统设计的流程图6
4、系统软件初始化设计6
4.18255芯片初始化6
4.2定时器T0的初始化7
4.3中断程序的初始化7
5、系统功能测试与调试8
6、详细仪器清单8
参考文献9
附录:
10
附录1:
键盘扫描函数程序10
附录2:
闪烁LED小灯总程序12
闪烁LED小灯的设计
设计要求
功能:
本设计的闪烁小灯控制器,可使小灯轮流点亮、逐点点亮、间隔点亮。
通过按键来进行切换。
主要额外器件:
无
1、方案论证与对比
1.1方案一
所设计的流水灯的方案是利用STC89C52单片机的P1口、PC口等的功能来完成的功能来完成信号的输入和转换,是最终的显示结果通过发光LED显示出来,另外加了三个开关来控制输出LED变换的类型。
图1方案一方框图
硬件方面利用STC89C52的P1口直接驱动发光二极管,用PC口作为开关控制。
流水灯的变换通过软件编写延时以及变换不同的类型,用20ms作为开关转换过渡。
采用的主、子程序方式,循环结构,另外加了开关扫描程序。
1.2方案二
利用STC89C52单片机的P1口、PC口等的功能来完成的功能来完成信号的输入和转换,通过发光二极管显示出来,另外加了三个开关来控制输出的转换。
图2方案二方框图
利用STC89C52的P1口直接驱动发光二极管,用PC口作为开关控制。
流水灯的转换通过软件编写和使用定时器变换不同的类型,添加了开关扫描程序用20ms作为开关转换过渡。
采用的主、子程序方式循环结构。
1.3方案对比与选择
两种方案实施都比较简单,而且都容易操作。
通过两种方案可以看出,方案二比方案一多了一个定时器,利用中断来实现该功能更加精准,效果也会更加明显。
因此,选择方案二相对更加合理。
2、各模块电路的设计
2.1复位电路设计
RST:
复位输入。
晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
看门狗计时完成后,RST脚输出96个晶振周期的高电平。
特殊寄存器AUXR上的DISRT0位可以使此功能无效。
DISRT0默认状态下,复位高电平有效。
复位电路图如图所示:
图3复位电路图
2.2晶振电路设计
本系统采用的是12MHZ的晶振XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
晶振电路图如图所示:
图4晶振电路图
2.3键盘扫描电路设计
在单片机系统中键盘中按钮数量较多时,为了减少I/O口的占用,常常将按钮排列成矩阵形式。
而在本设计中为了通过键盘来转换LED灯的点亮模式,按下键盘分别实现LED灯的轮流点亮、逐个点亮、间隔点亮。
判断键盘中有无键盘按下的方法:
先将PA0拉高,然后扫描PC各行的电平状态,若哪一行出现高电平,即可知道该行的按键被按下。
从而很容易地实现了LED灯的点亮模式转换。
图5键盘电路图
2.4STC89C52芯片介绍
STC89C52是低功耗、高性能的CMOS8位微控制器。
8字节的flash,256字节的RAM,32位的I/O口线,看门狗定时器,2个数据指针,3个16位定时器/计数器。
全双工串行口,片内晶振及时钟电路,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,内容被保存,振荡器被冻结。
图6STC89C52芯片图
2.58255芯片介绍
8255芯片是一种典型的课编程通用并行接口芯片,用来扩展单片机的端口,它具有3个8位的并行口,有三位工作方式,可作为单片与各种外部设备连接的接口电路。
CS:
片选信号线,当该引脚为低电平时,8255被选中,允许8255与CPU通讯。
RESET:
复位输入线,当该引脚为高电平时,内部寄存器被清除,所有I/O口均被置成输入方式。
A0、A1:
地址输入线。
当A0A1=00时,PA口被选中;
当A0A1=01时,PB口被选中;
当A0A1=10时,PC口被选中;
当A0A1=11时,控制寄存器被选中。
图78255芯片图
2.6闪烁LED小灯原理图
图8闪烁LED小灯的原理图
3、系统设计的流程图
图9系统流程图
4、系统软件初始化设计
4.18255芯片初始化
随着大规模集成电路的发展,接口电路也被集成在单一的芯片上,许多芯片可以通过编程方法设定工作方式,这种接口芯片被称为可编程I/O接口芯片,8255芯片是最常用的一种。
使用8255芯片前,必须对其各个端口地址进行设置,不然无法进行与CPU进行通信。
由于本设计中需要通过8255的PA、PB、PC口分别来控制数码管的位选信号、段选信号、键盘的输入,同时还需要对其方式控制字进行设置。
具体如下:
#definea8255_PAXBYTE[0xD1FF]/*PA口地址*/
#definea8255_PBXBYTE[0xD2FF]/*PB口地址*/
#definea8255_PCXBYTE[0xD5FF]/*PC口地址*/
#definea8255_CONXBYTE[0xD7FF]/*控制字地址*/
4.2定时器T0的初始化
源于该设计的时间显示要非常精确,可以使系统的时序是用定时单位来描述的,在此选用定时器0,而单片机内部的时钟频率为12MHZ,那么它的一个时钟周期为1/12us,而一个机器周期是一个时钟周期的12倍,即一个机器周期的时间为1us.
根据设计要求,我们选用定时器T0,对其的初始化过程如下:
⑴选择工作方式1:
16位定时器/计数器方式,最多可以计到2的16次方,即65536.
⑵工作方式寄存器TMOD的设置:
TMOD=0X01.
⑶50ms的精确定时:
TH0=(65536-50000)/256,TL0=(65536-50000)%256.
定时器0初始化子函数程序如下:
voidinit()
{
TMOD=0X01;
CON=0x89;
TR0=1;
ET0=1;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
}
4.3中断程序的初始化
根据设计的要求,要求实现LED小灯点亮模式的转换,为此我们将按键是否有效地判断放在外部中断0内,当外部中断0响应时,扫描按键,通过按键去改变点亮模式,中断返回后,按照设定的点亮模式进行点亮。
定时器0的中断服务程序如下:
voidISR_timer()interrupt1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
n++;
if(n==20)
{
n=0;
flag=1;
}
}
5、系统功能测试与调试
整体调试的程序见附录2,下载后系统按初始化的程序在执行,一旦有中断响应,通过扫描键盘上按键的按下来调整LED小灯点亮模式,使得LED小灯按预设的三种点亮模式进行转换。
当按下键1时,程序执行功能程序0即轮流点亮模式,LED小灯会轮流被点亮。
当按下键2时,程序执行功能程序1即逐个点亮模式,LED小灯会逐个被点亮。
当按下键3时,程序执行功能程序2即间隔点亮模式,LED小灯会间隔被点亮。
若复位键按下,则系统按初始化的程序运行。
6、详细仪器清单
表1仪器清单
名称
数量
STC89C52芯片
1
8255芯片
1
名称
数量
12MHz晶振
1
电容0.47uf
1
电容30pf
2
开关
2
矩形按键
4
1K电阻
8
发光二级管
8
参考文献
[1]朱定华,戴汝平.单片微机原理与应用.(M)北京:
清华大学出版社,2003
[2]楼然苗,李光飞编著.单片机课程设计指导.北京航空航天大学出版社,2007
[2]张鑫主编.单片机原理及应用.电子工业出版社,2005
[3]蔡明文,冯先成单片机课程设计华中科技大学出版社,2007
[4]于凤鸣主编.单片机原理及接口技术.北京:
中国轻工业出版社.1998
[5]何立民编著.单片机应用技术选编.北京:
北京航空航天大学出版社.1998
附录:
附录1:
键盘扫描函数程序
voidscan_keyboard()
{
ucharkdata;
PA=0x01;
kdata=PC;
if(kdata==0x01)
{
delay(5);
kdata=PC;
if(kdata==0x01)
{
while(PC);
temp=0xfe;
flag2=0;
flag3=0;
flag1=1;
}
}
if(kdata==0x02)
{
delay(5);
kdata=PC;
if(kdata==0x02)
{
while(PC);
temp=0xfe;
flag1=0;
flag3=0;
flag2=1;
}
}
if(kdata==0x04)
{
delay(5);
kdata=PC;
if(kdata==0x04)
{
while(PC);
temp=0xfe;
flag1=0;
flag2=0;
flag3=1;
}
}
}
附录2:
闪烁LED小灯总程序
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#definePAXBYTE[0xD1FF]/*PA口地址*/
#definePBXBYTE[0xD3FF]/*PB口地址*/
#definePCXBYTE[0xD5FF]/*PC口地址*/
#defineCONXBYTE[0xD7FF]/*控制字地址*/
voiddelay(ucharz);
voidscan_keyboard();
voidinit();
voidFUN0();
voidFUN1();
voidFUN2();
ucharn,i,temp,flag,flag1,flag2,flag3;
voidmain()
{
init();//初始化
temp=0xfe;
while
(1)
{
PB=0xFF;
if(flag1==1&&flag==1)
{
flag=0;
FUN0();
}
if(flag2==1&&flag==1)
{
flag=0;
FUN1();
}
if(flag3==1&&flag==1)
{
flag=0;
FUN2();
}
scan_keyboard();
}
}
voidFUN0()//轮流点亮子函数
{
P1=temp;
temp=temp<<1;
i++;
if(i==8)
{
i=0;
temp=0xfe;
}
}
voidFUN1()//逐个点亮子函数
{
P1=temp;
temp=_crol_(temp,1);
}
voidFUN2()//间隔点亮子函数
{
P1=temp;
temp=_crol_(temp,2);
}
voidinit()//定时器0初始化子函数
{
TMOD=0X01;
CON=0x89;
TR0=1;
ET0=1;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
}
voiddelay(ucharz)//延时子函数
{
ucharx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidISR_timer()interrupt1//定时器0的中断服务程序
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
n++;
if(n==20)
{
n=0;
flag=1;
}
}
voidscan_keyboard()//键盘子函数
{
ucharkdata;
PA=0x01;
kdata=PC;
if(kdata==0x01)
{
delay(5);
kdata=PC;
if(kdata==0x01)
{
while(PC);
temp=0xfe;
flag2=0;
flag3=0;
flag1=1;
}
}
f(kdata==0x02)
{
delay(5);
kdata=PC;
if(kdata==0x02)
{
while(PC);
temp=0xfe;
flag1=0;
flag3=0;
flag2=1;
}
}
if(kdata==0x04)
{
delay(5);
kdata=PC;
if(kdata==0x04)
{
while(PC);
temp=0xfe;
flag1=0;
flag2=0;
flag3=1;
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 闪烁 LED 设计