基于某单片机地流水灯系统Word格式文档下载.docx
《基于某单片机地流水灯系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于某单片机地流水灯系统Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
例如在建筑物的棱角上装上流水灯,可起到变换闪烁美不胜收的效果。
一般情况下单片机的流水灯由若干个LED发光二极管组成,在单片机系统运行时,可以在不同的状态下让流水灯显示不同的组合,作为单片机运行正常的指示,当单片机系统出现故障时,可以利用流水灯显示当前的故障码,对故障做出诊断。
本设计采用一块单片机(AT89C52.BUS)作为流水灯系统的控制核心,通过编程来实现单片机I/O口对LED的控制,使流水灯显示上下流动、停止流动、闪灯等功能,并由按键控制流水灯的不同亮法,LED的工作方式通过键盘的扫描实现。
其中的LED采取共阳极接法,通过依次向连接的LED的I/O口送出低电平来实现LED的点亮。
【关键词】:
流水灯按键控制单片机
1、方案:
1.1设计要求:
以单片机为核心,设计一个节日彩灯控制器:
P1.2—开始,按此键则灯开始流动(由上而下)。
P1.3—停止,按此键则停止流动,所有灯为暗。
P1.4—上,按此键则灯由上向下流动。
P1.5—下,按此键则灯由下向上流动。
1.2方案选择:
根据题目的要求,控制模块需要选择单片机作为核心控件,可以选择的单片机有AT89C51、AT89C52还有各自的总线型号的,而对于按键,可以选择BUTTON,当然用SWITCH来代替也是可以实现的;
显示模块的LED发光二极管也有很多颜色可以供选择如红色、蓝色、绿色等。
考虑到题目的要求与电路图布线的问题,经过仔细的分析和论证,最终的方案如下:
单片机:
AT89C52.BUS、按键:
BUTTON
发光二极管:
LED-RED。
系统的基本框图1.2.1所示,单片机主要用于对流水灯模块(发光二极管)的控制,实现流水灯从上往下流、停止、由下往上流、闪烁的功能,而按键模块控制单片机I/O口的输出电平,间接地控制流水灯模块。
单片机
AT89C52
按键模块
流水灯模块(发光二极管)
图1.2.1系统基本框图
工作过程:
系统开始工作后,按下按键1(由上往下),流水灯模块上循环的显示由上往下流动,放开按键,停止流动;
按下按键2,流水灯模块循环的显示由下往上流动,放开按键,流动停止;
按下按键3,流水灯模块循环的显示交错闪烁,放开按键,闪烁停止;
按下按键4,流水灯模块循环的由上往下全部点亮,全部点亮时,一下子全灭,再由下往上全部点亮;
无论按下哪个键,只要再按下按键5,循环停止直到松开按键5为止。
2、系统的硬件设计与实现
2.1芯片介绍
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等AT89C52单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的部资源:
8kB闪存、256BRAM、32根I/O口线、3个16位定时/计数器、6个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作围和0~24MHz工作频率,使用AT89C52单片机时无须外扩存储器因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机.
从图2.1.1中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;
相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;
同理,接在P1.1~P1.7口和P2.0~P2.7口的其他15个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED16依次点亮、熄灭,16只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
图2.1.1硬件电路图
2.2电源
VCC-芯片电源,接+5V。
VSS-接地端。
用万用表测试单片机引脚电流一般为0v或者5v,这是标准的TTL电平,但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这之是万用表反映没这么快而已,在某一个瞬间单片机引脚电流还是保持在0v或者5v的。
2.3时钟
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
2.4I/O线
89C52共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总)。
2.5晶振电路
对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。
这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。
这一现象在上电复位时并不特别明显,原因时上电时电路有足够的扰动,很容易建立振荡。
在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。
在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。
晶体的选择至少必须考虑:
谐振频点,负载电容,激励功率,温度特性,长期稳定性。
89C52单片机的时钟信号通常用凉种电路形式得到:
部振荡和外部振荡方式。
基于晶振的振荡器通常提供非常高的初始精度和较低的温度系数。
相对RC振荡器能快速启动,但提供的初始精度和温度系数会较差。
图2所示的电路能产生可靠的时钟信号,但其性能受环境条件和电路元件选择以及振荡器布局的影响。
使用时,元件必须根据特定的逻辑系列进行优化。
引脚XTAL1与XTAL2外接晶体振荡器或瓷谐振起,构成部振荡方。
单片机部有一个高增益的反相放大器,XTAL1为部反相放大器的输入端,XTAL2为部反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。
部振荡方式第外部电路如图2所示。
在实际应用常还需要在晶振的两端和地之间各并上一个小电容
图2.2.5中,C1,C2起振荡频率、快速起振的作用。
起值在5-30PF。
晶振频率的典型值是12MHZ,部振荡方式所得时钟信号比较稳定,实用电路中使用较多。
外部振荡方式是吧外部已有的时钟信号引入单片机着适用单片机的时钟与外部信号同步。
图2.2.5部震荡方式的外部电路图
2.6、LED电路
LED是一种能够将电能转化为可见光的半导体,它改变了白炽灯钨丝发光与节能灯三基色粉发光的原理,而采用电场发光。
如图2.1.1LED串联一个220欧姆的电阻后接在5V的电压上。
LED灯电路接在单片机P1口上。
LED灯阳极接电源,阴极接单片机的I/O口,低电平驱动,只要在单片机相应引脚给出低电平,LED就会发亮
2.7、按键电路
如图2.1.1单片机的3.[0..4]口分别连接一个按键,按键的另一端共地,当按下按键时,对应的端口输入为0,此时可以驱动对应的亮灯功能。
3、软件设计及仿真
3.1程序流程图
3.2程序设计
单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。
软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。
以下是本设计的程序代码:
#include<
REG52.H>
stdio.h>
INTRINS.H>
#defineLED_PORT1P1
#defineLED_PORT2P2
sbitaSwitch=P3^0;
sbitbSwitch=P3^1;
sbitcSwitch=P3^2;
sbitdSwitch=P3^3;
sbiteSwitch=P3^4;
intb;
intc;
intd;
voidtime(unsignedintucMs);
/*延时单位:
ms*/
voidmain(void)
{
unsignedcharucTimes;
unsignedchartemp;
#defineDELAY_TIME200//延时200ms
inta;
a=DELAY_TIME;
while
(1)//进入死循环
{LED_PORT1=0x00;
//亮起所有的灯
LED_PORT2=0x00;
while(!
aSwitch)//按键a控制子程序
{temp=0xfe;
d=0x01;
c=0x00;
for(ucTimes=0;
ucTimes<
8;
ucTimes++)
{
LED_PORT2=temp;
b=c+d;
LED_PORT1=b;
time(DELAY_TIME);
temp<
<
=1;
c=b;
d<
}
temp=0xfe;
9;
LED_PORT1=temp;
LED_PORT2=b;
eSwitch)
{LED_PORT1=0xff;
LED_PORT2=0xff;
}
}
while(!
bSwitch)//按键b控制子程序
temp=0x7f;
d=0x80;
temp>
>
d>
eSwitch)//按键c控制子程序
}
cSwitch)
{
LED_PORT1=0x55;
LED_PORT2=0x55;
time(a);
LED_PORT1=0xaa;
LED_PORT2=0xaa;
dSwitch)//按键d控制子程序
LED_PORT1=0xff;
temp=0xfe;
for(ucTimes=9;
ucTimes>
0;
ucTimes--)
{temp>
{temp>
eSwitch)//按键e控制子程序
voiddelay_5us(void)//延时5us
_nop_();
voiddelay_50us(void)//延时50us
unsignedchari;
for(i=0;
i<
4;
i++)
delay_5us();
voiddelay_100us(void)//延时100us
delay_50us();
voidtime(unsignedintucMs)//延时单位:
us
unsignedcharj;
while(ucMs>
0)
for(j=0;
j<
10;
j++)delay_100us();
ucMs--;
3.3仿真电路图
3.3.1、设计初始化的值的显示效果如图3.3.1所示。
图3.3.1仿真图
3.3.2、仿真结果(设计实现的功能)
P3.0—开始(上),按此键则灯开始由上往下流动。
P3.1—下,按此键则灯开始由下往上流动。
P3.2—闪烁,按此键则灯交错闪烁。
P3.3—来回流,按此键则灯先由上往下点亮,全亮后再全灭,然后由下往上点亮。
P3.4—停止,按此键则停止流动,所有灯为暗。
3.3.3、结论
经过对本设计的电路图仿真及测试,本设计基本达到设计制作要求,还拓展了一些额外的功能,如灯的闪烁和来回流动。
4设计心得体会
课程设计心得
流水灯在日常生活中可起到变换闪烁美不胜收的效果,在装饰方面的应用相当普及。
它是若干个灯泡有规律依次点亮或者依次熄灭做成的。
在设计之前,我只是学过流水灯的工作原理的相关理论知识,而没有真正的实际去设计过流水灯,但是通过单片机的培训课程和单片机设计的实践设计以及操作,加上自己这短时间的努力,我觉得我不仅仅了解流水灯的相关知识,完成了这次基于单片机的流水灯系统的设计。
更重要的是,我对单片机的使用和基于单片机的设计加深了理解,掌握了不少的单片机知识,加强了自己的实际操作能力,还巩固了C语言和软件使用等知识,对基于单片机的设计也产生了浓厚的兴趣。
可以说,在这次的电子设计培训课程的设计里,我收获了很多。
在大学二年级《单片机原理与应用系统设计技术》理论课程的学习的时间里,感觉上我学习到的单片机知识不太多,更别说实际的操作与设计了。
所以这个单片机技能与认证培训的课程给了我再次学习单片机的机会,而且这次的培训课更注重的是实际的操作,这是我更加认真去学习自己操作以及自己利用单片机来设计。
在开始进行设计的时候,我们从网上和书上查阅了很多有关流水灯的原理以及相关的设计思路和方案方面的资料,也学校图书馆借相关书籍,经过不断思考与构思,最终很高兴的编制成这个流水灯系统的程序代码,还制作出了流水灯系统的电路原理图,从中,我发现自己动手还是蛮多乐趣的。
最终,这个流水灯系统设计顺利的完成了,当然在设计的时候也遇到过很多大大小小的问题,我很自豪自己一直没有放弃,解决了所有遇到的问题。
在这次设计的过程中,我觉得真正的将理论很好地应用到实际当中去,而且我还学会了耐心地对待每一件事情,积极思考问题,并且坚持不懈,不轻易言弃,任何的问题和困难最终都会迎刃而解。
设计过程,遇到问题、错误是必然的,但是也是在一次次的解决问题和改正错误后,设计才会最终的完成,不见风雨,哪见彩虹。
五、参考文献
1、《单片机应用系统设计技术》齐朱宁西编著
2、《单片机原理与应用系统设计》齐编著