基于单片机的霓虹灯控制系统设计.docx
《基于单片机的霓虹灯控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的霓虹灯控制系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于单片机的霓虹灯控制系统设计
目录
0.前言1
1.总体方案设计1
2.硬件电路的设计2
2.1单片机系统2
2.2LED概述3
2.3外部时钟方式电路4
2.4手动复位电路4
2.5霓虹灯控制电路5
3软件设计5
3.1中断服务流程5
3.2霓虹灯控制电路流程6
4.联合调试6
5.课设小结及进一步设想7
参考文献8
附录I元件清单9
附录II整体电路图10
附录III源程序清单11
基于单片机的霓虹灯控制系统设计
摘要:
本文主要设计一个基于单片机的霓虹灯控制系统。
以AT89C51单片机为控制核心电路,应用片内定时器实现对霓虹灯的控制。
该系统由单片机的控制部分和显示部分组成,运用中断定时器控制发光二极管(或LED),使其产生有规律的闪烁和移动。
关键字:
单片机;发光二极管;定时中断
0.前言
随着时代的进步,人们对物质生活的迫切追求,使周边环境发生翻天覆地的变化。
从钻木取火走到今天灯火阑珊,各种繁华夜景层出不穷,让人叹为观止。
这些辉煌景象都离不开电子技术。
事实证明电子技术对社会的发展产生了深远的影响。
随着电子技术和计算机技术的发展,特别是单片机的发展,使传统的测量仪器在原理、功能、精度及自动化水平等方面发生了巨大的变化,形成了一种完全突破传统概念的新一代测试仪器——智能仪器。
智能仪器是以微处理器为核心的电子仪器,它不仅要求设计者熟悉电子仪器的工作原理,而且还要求其掌握微型计算机硬件和软件的原理。
目前,有很多的传统电子仪器已有相应的替代产品,而且还出现不少全新的仪器类型和测试系统体系。
在科学技术高速发展的今天,如何用简单便宜、性能良好的元器件制造出对人类生活有用的产品,已经成为人们研究的主要趋势。
在自动化技术中,无论是过程控制技术还是数据采集技术还是测控技术,都离不开单片机,在工业自动化的领域中,机电一体化技术发挥越来越重要的作用。
1.总体方案设计
在本次设计中,硬件部分由单片机系统、LED发光二极管组成。
原理图如图1所示。
单片机选用的是AT89C51单片机,利用其中的一个定时器设定灯光闪烁的时间,时钟电路选用的是11.0592M的晶振。
复位电路部分采用的是上电复位和手动复位两种复位方式。
由于考虑到单片机I/O端口的带载能力,LED发光二极管采用共阳极的接法,用470Ω的电阻分压。
软件部分,由于采用的是11.0592M晶振的时钟电路,单片机定时器的最大定时时间为65.536ms,不能达到要求的闪烁频率。
所以采用定时50ms,10个定时中断灯光进行一次亮灭的跳变。
并在每一次跳变时记录下灯闪烁的次数,通过对闪烁次数的判断,来进行对不同LED灯的亮灭的整体时序循环控制。
图1单片机的霓虹灯控制电路原理图
2.硬件电路的设计
2.1单片机系统
标准型89系列单片机是与MCS-51系列单片机兼容的。
在内部含有4KB或8KB可重复编程的Flash存储器,可进行1000次擦写操作。
全静态工作为0~33MHz,有3级程序存储器加密锁定,内含有128~256字节的RAM、32条可编程的I/O端口、2~3个16位定时器/计数器,6~8级中断,此外有通用串行接口、低电压空闲模式及掉电模式。
AT89C51相当于将8051中的4KBROM换成相应数量的Flash存储器,其余结构、供电电压、引脚数量及封装均相同,使用时可直接替换。
AT89C51在内部采用40条引脚的双列直插式封装,引脚排列如图2所示,内部结构原理图如图3所示。
图2AT89C51芯片引脚
图3AT89C51内部结构原理图
本设计中AT89C51使用11.0592MHz晶振。
XTAL1(19脚)和XTAL2(18脚):
外接晶体引脚,XTAL1和XTAL2分别接外部晶振一端。
RST:
即为RESET,该引脚为单片机的上电复位或掉电保护端。
在此设计中接正常模式按扭。
P1.0、P1.1、P1.2:
用来控制LED显示器的显示控制。
2.2LED概述
LED(LightEmittingDiode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。
LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。
半导体晶片由三部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子,中间通常是1至5个周期的量子阱。
当电流通过导线作用于这个晶片的时候,电子和空穴就会被推向量子阱,在量子阱内电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。
而光的波长也就是光的颜色,是由形成P-N结的材料决定的。
它是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。
由于具有容易控制、低压直流驱动、组合后色彩表现丰富、使用寿命长等优点,广泛应用于城市各工程中、大屏幕显示系统。
LED可以作为显示屏,在计算机控制下,显示色彩变化万千的视频和图片。
LED是一种能够将电能转化为可见光的半导体。
近十几年来,为了开发蓝色高亮度发光二极管,世界各地相关研究的人员无不全力投入。
而商业化的产品如蓝光及绿光发光二级管LED及激光二级管LD的应用无不说明了III-V族元素所蕴藏的潜能。
在目前商品化LED之材料及其外延技术中,红色及绿色发光二极管之外延技术大多为液相外延成长法为主,而黄色、橙色发光二极管目前仍以气相外延成长法成长磷砷化镓GaAsP材料为主。
LED的具体结构如图4所示:
图4LED的结构图
2.3外部时钟方式电路
外部时钟电路如图5所示,它在单片机的外部通过XTAL1、XTAL2这两个引脚跨接晶体振荡器和微调电容,构成稳定的自激振荡器。
本系统采用的为11.0592MHz的晶振,一个机器周期为1us,C1、C2为22PF。
图5外部时钟方式电路图
2.4手动复位电路
复位电路分为上电自动复位和按键手动复位,RST引脚是复位信号的输入端,复位信号是高电平有效。
上电自动复位通过电容C3和电阻R2来实现,按键手动复位是图6中复位键来实现的。
图6手动复位电路
2.5霓虹灯控制电路
霓虹灯控制电路用红色、绿色、黄色LED发光二极管,分别与三个470Ω的分压电阻相串联,分别与单片机的P1.0,P1.1,P1.2口相连,如图7所示:
图7霓虹灯控制电路
3软件设计
3.1中断服务流程
调用中断子程序,设定中断返回地址,中断响应时,执行中断服务程序;手动复位后,返回主程序。
图8中断服务程序流程图
3.2霓虹灯控制电路流程
Redled=flicker
Redled=flicker
图9霓虹灯控制电路主程序流程图
4.联合调试
在protues上进行仿真实验。
首先使用KeiluVsion2将编写完成的程序编译生成HEX文件,将HEX文件烧录到单片机中,进行仿真实验,结果如图10所示,可以看到,LED已经选择性的闪烁。
图10仿真图
5.课设小结及进一步设想
通过这次紧张的课程设计,我收获颇多,每天面对着电脑,翻阅各种相关资料,也亲自动手焊接硬件,体会颇深。
在这次课设中,加深了单片机相关知识的理解,也接触了烧录器。
在课设开始的前期,也遇到了麻烦,比如说,LED闪烁时间不符合要求,C语言编程不太熟练,很感谢徐涛老师的耐心教导,他的幽默让我们觉得亲切,他的认真负责让我们折服。
在繁忙的一个学期即将结束之时,我的思想成熟了,这次的课设让我找到了方向,让我懂得了很多,有知识方面的,但大部分还是人格方面的。
我相信,只要不放弃,只要努力,就一定可以!
由于时间紧促,自身水平有限,本论文还有许多部分未能详细分析,在此仅作简单了解和认识。
参考文献
[1]赵茂泰.智能仪器原理及应用.北京:
电子工业出版社,2004.7
[2]张毅刚,刘杰.MCS—51单片机原理及应用.哈尔滨:
哈尔滨工业大学出版社,2004.6
[3]何立民.单片机应用技术选编.北京:
北京航天航空大学出版,2002.5
[4]张军,梅丽凤.单片机原理接口技术.北京交通大学出版社,2006.5
[5]张婧武,周灵彬.单片机系统的PROTEUS设计与仿真.北京:
电工出版社,2007.4
[6]周佩玲,彭虎.微机原理与接口技术.北京:
电子工业出版社,2005.4
[7]李群芳,张士军.单片微型计算机与接口技术.北京:
电子工业出版社,2008.5
附录
元件清单
元件名称
型号
数量
单片机
AT89C51
1
LED
ArkSM470501K
3
极性电容
10uF
1
电容
22pf
2
电阻
470Ω
3
电阻
1K
2
排线
2
按键
1
晶振
11.0592MHz
1
附录
整体电路图
附录
源程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitRED_LED=P1^0;//端口定义。
sbitGREEN_LED=P1^1;
sbitYELLOW_LED=P1^2;
uintflicker,i,n;
voidint0()
{
TMOD=0x01;
TH0=0x3C;
TL0=0xAF;
TR0=1;//启动定时器。
ET0=1;//开定时器中断。
EA=1;//开总中断
}
voidmain()//主函数。
{
n=0;
i=0;
GREEN_LED=1;
YELLOW_LED=1;
flicker=0;
int0();
while
(1)
{
if(0<=n&&n<20)
{
YELLOW_LED=1;
GREEN_LED=1;
RED_LED=flicker;
}
if(20<=n&&n<40)
{
RED_LED=1;
YELLOW_LED=1;
GREEN_LED=flicker;
}
if(40<=n&&n<60)
{
RED_LED=1;
GREEN_LED=1;
YELLOW_LED=flicker;
if(n==59)
n=0;
}
}
}
voidTime0()interrupt1
{
TR0=0;
i++;
if(i==10)
{
flicker=~flicker;
i=0;
n++;
}
TH0=0x3C;
TL0=0xAF;
TR0=1;
}