资源描述
毕业设计(论文)
题 目
基于单片机的LED流星雨设计
部(系)
机电工程系
专 业
机电一体化
班 级
机电
学 号
学生姓名
指导教师
摘要
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文用AT89C51单片机自制了一款简易的流星雨灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。
定时器应用非常广泛,自行研究和设计定时器不仅可以巩固旧知识,而且有助于增强学习电路的兴趣,达到学以致用的目的。本文根据人们的生活节奏,设计了一种4段定时器。该定时器以易学易用的MCS-51单片机为核心电路,加上少量的模拟元件组成,简单实用。
首先,本文第一章介绍了LED灯对人们影响,并针对人们对生活的需求,提出了解决的方案要求,并通过简单分析阐述了这种新型定时器给人们带来的易用和方便性。其次,第二章在总体设计框图的基础上,介绍了MCS-51单片机性能特点,并叙述了其在微控系统的重要角色,给出了设计的详细原理图,并对该定时器做了简单的工作分析。最后,在总结了前面设计过程中出现的问题及提高改进的地方,通过运行分析论证,得出设计达到要求。
关键词:单片机 LED灯 流星雨 定时器
目 录
第一章 设计概述…………………………………………………………………1
1.1 设计任务………………………………………………………………………1
1.2 设备器材………………………………………………………………………1
第二章 硬件设计方案……………………………………………………………2
2.1 设计思想………………………………………………………………………2
2.2 硬件选择………………………………………………………………2
2.3 AT89C52单片机介绍…………………………………………………………2
2.4 硬件逻辑图……………………………………………………………5
2.5 设计连线………………………………………………………………………6
2.6 仿真电路图……………………………………………………………………6
第三章 软件设计方案……………………………………………………………7
3.1 软件设计思想…………………………………………………………………7
3.2 程序流程图……………………………………………………………………8
第四章 调试及运行结果…………………………………………………………9
第五章 设计心得与体会……………………………………………………… 10 附录一 参考资料 11
附录二 源程序清单…………………………………………………………………………11
、
第一章 简介
1.1 概述
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。存储器由许多存储单元(最小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了唯一一个房间号一样,每一个存储单元也必须被分配到唯一的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC赋以程序中第一条指令所在的地址,然后取得每一条要执行的命令,PC在中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。
利用单片机,实现8个单色LED灯的左、右循环显示,并实现循环的速度可调。
选用芯片: 8255 等
注:由于实验室的没有提供8255芯片,所以改用单片机完成此实验,并且添加了调节灯明暗的功能,以实现明暗可调。
1.2 主要内容要求
基于W79E2051单片机和LED恒流专用驱动芯片MBI5026设计了一款模拟流星雨LED控制电路,LED使用高亮白色,可根据需要接上36,48,64颗LED,通上电源,一字型排开的LED,会产生从上到下,从最亮的到渐暗的流星雨效果,效果逼真,可作为屋外,广场装饰灯.
在本设计中,所用到的设备器材如下所示:
(1)计算机一台;
(2)唐都仪器实验箱一台;
(3) AT89C52单片机一片;
(4)导线若干。
第二章 硬件设计方案
2.1 设计思路
本课题需要用按钮开关实现LED流星雨灯的左右循环显示、调速、控制亮度的功能。可以选用五个开关来实现这些操作。单片机正在软件运行下通过不断扫描开关状态,来将相关操作对应量送入单片机的输入端口,然后判断属于哪一类操作。五个开关分别为K1,K2,K3,K4,K5,分别控制流水灯的调向、加速、减速、变亮、变暗。
在设计过程中,接开关的端口要全部保持高电平,当按下一个开关时,输入一个低电平,即为状态改变信号。不能同时有两个端口同为高电平。
在设计中我主要负责了用云脉冲宽度调制(PWM)波控制LED灯的亮度环节,开始对PWM并不是很了解,通过请教同学和查阅相关资料,渐渐明白了其中的原理。在主程序运行时通过中断方式调整其输出电压的占空比,从而改变灯泡的亮度。原理是这样的,主程序的始终频率和中断的始终频率并不相同,大约是中断的一千倍,LED灯在移动时如果响应了中断,则在执行中断程序时,LED灯近似看做没有移动,此时在中断程序中设计一个初值和一个上限,当计数到初值时置灯泡灭掉,在计数到上限之前小灯泡都是熄灭的,到达上限后回0,并置灯泡为亮,继续计数,在到设定的初值时置小灯泡为灭掉。这样在主程序的一个周期内,中断程序将小灯泡置明置暗了近一千次,通过改变设定的初值可以改变小灯泡的亮度。
2.2 硬件选择
本实验选用AT89C52单片机、五个按键开关和8个发光二极管。其中AT89C52为控制核心,当5个开关的状态改变时,单片机检测到开关信号后就通过软件输出控制发光二极管。
2.3 AT89C52单片机介绍
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线。
AT89C52的内部结构图如下:
引脚图如下:
图2-2
引脚功能说明:
P0 口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。 访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口,P1 的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),
参见表1。
Flash 编程和程序校验期间,P1 接收低8 位地址。
表.P1.0和P1.1的第二功能
引脚号
功能特性
P1.0
T2,时钟输出
P1.1
T2EX(定时/计数器2)
图2-3
P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX @RI 指令)时,P2 口输出P2 锁存器的内容。
Flash 编程或校验时,P2亦接收高位地址和一些控制信号。
P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能 。
P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。
对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。
PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H—FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。
Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。
XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:振荡器反相放大器的输出端。
2.4硬件连接框图
单片机从开关上提取不同输入信号,进行相应的软件操作,反映输出在发光二极管上。
开关
输入
AT89C52
单片机
流星雨灯
图2-4
2.5设计连线
本实验的连线为:开关使用唐都试验箱上的5个开关,分别接到单片机的P2.0—P2.4口,然后发光二极管分别接到单片机的P1.0—P1.7口。
2.6实验仿真电路图
第三章 软件设计方案
3.1 软件设计思想
一个完整的系统仅有硬件是不够的,还要有软件的配合。软件和硬件对一个系统来说都是不可或缺的。本实验采用C语言编程,在具体设计中,通过GetKey()函数来不停的扫描开关的状态,通过KeyProcess()来确定输入的信号,即按键的位置,从而执行不同的子程序内容,实现LED灯的控制。
3.2/* 程序名:可控流星雨灯 */
/* 功能:实现流水灯的方向、速度、亮度控制 */
/* 硬件:P2接开关,P1接LED */
/************************************************************/
#include<reg52.h>
#include <intrins.h>
sbit K1=P2^0; //方向
sbit K2=P2^1; //加速
sbit K3=P2^2; //减速
sbit K4=P2^3; //加亮
sbit K5=P2^4; //变暗
unsigned char Speed,LED;
unsigned int tCount=0;
unsigned char Idx; //速度取值索引
bit Dirtect=1; //滚动方向
char duty=10; //占空比
unsigned int code sTable[]={0,1,3,7,9,15,30,50,100,200,230,280,300,350}; //调速表
void InitTimer0_Timer1(void);
void delay(unsigned int x)
{
unsigned char i;
while(x--) for(i=0;i<20;i++);
}
unsigned char GetKey(void)
{
unsigned char K;
if(P2==0xFF) return 0;
delay(10);
switch(P2)
{
case 0xFE:K=1;break;
case 0xFD:K=2;break;
case 0xFB:K=3;break;
case 0xF7:K=4;break;
case 0xEF:K=5;break;
default: K=0;break;
}
while(P2!=0xFF); //等待释放按键
return K;
}
void KeyProcess(unsigned char Key)
{
switch(Key)
{
case 1:Dirtect=~Dirtect;break; //方向
case 2:if(Idx>1) Speed=sTable[--Idx];break;//加速
case 3:if(Idx<15) Speed=sTable[++Idx];break;//减速
case 4:duty++;if(duty>=20) duty=20;break; //加亮
case 5:duty--;if(duty<=0) duty=1; break; //变暗
}
}
void main(void)
{
unsigned char Key;
P1=P2=0xFF;
Idx=4;
Speed=sTable[Idx];
IP=0x02; //中断优先级
InitTimer0_Timer1();
LED = 0xfe;
P1 = LED;
while(1)
{
Key=GetKey();
if(Key!=0) KeyProcess(Key);
}
}
/******************************************************************/
/* 定时器0和定时器1初始化 */
/******************************************************************/
void InitTimer0_Timer1(void)
{
TMOD = 0x20;
TH1 = 0x06;
TL1 = 0x06;
EA = 1;
ET0 = 1;
TR0 = 1;
ET1 = 1;
TR1 = 1;
}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
void timer0(void) interrupt 1
{
if(++tCount<Speed) return;
tCount=0;
if(Dirtect==1) LED = _cror_(LED,1); //循环右移1位,点亮下一个LED
else LED=_crol_(LED,1);
P1=LED;
}
void Timer1(void) interrupt 3 //调节占空比
{
static char t=0;
t++;
if(t==20)
{
t=0;
P1=(0x00|LED);
}
if(duty==t) P1=0xFF;
}
程序流程图
第四章 调试及运行结果
当上述程序之一编写好以后,我们需要使用编译软件对其编译,得到单片机所能识别的二进制代码,然后再用编程器将二进制代码烧写到AT89C51单片机中,最后连接好电路通电,我们就看到LED1~LED8的“流水”效果了。本文所给程序实现的功能比较简单,旨在抛砖引玉,用户可以自己在此基础上扩展更复杂的流水灯控制,比如键盘控制流水花样、控制流水灯显示数字或图案等等。
通过设计和编写程序代码,讲程序通过Keil软件编译后生成的hex文件写进AT89C52中,便可操作。为当拨动相应的开关时,看LED灯的变化。
调试过程中问题很多,主要原因是对单片机结构的不熟悉,其次就是程序中的一些问题。但通过努力,都被一一解决。实际接线前我们先用protues仿真了一下实验结果,确认无误后接线,这样提高了调试的时间。
第五章 心得体会
经过四次的上机课程设计,在我和**同学的共同努力下,顺利的完成了任务,并在其中体现了自己的独创部分。同时我感觉自己学到了很多。首先是要把理论和实际相结合起来,从理论中得出结论,然后再实践,从而提高自己的实际动手能力和独立思考问题的能力。在设计的过程中遇到了很多的问题,也发现了自己的不足之处。首先是之前对单片机并不十分了解,通过借阅书籍,找同学咨询慢慢的开始对其有了初步的认识。其次是一些相关软件的用法,这个通过自己慢慢的摸索也逐渐熟悉了起来。特别是protues的使用,它给了我们很大的帮助,帮助我们解决了很多调试过程中的问题。在者是对PWM波的使用,这个问题很是伤到筋,因为之前对其并不了解,从熟悉到使用我们查阅了很多资料,请教了同学,最后终于掌握了。同时也是设计更完善。
此毕业设计让我加深理解了所学的理论知识,并进一步建立了计算机应用系统的整体概念,初步掌握了单片机软、硬件开发方法,为以后进行实际的单片机软、硬件应用开发奠定了良好的基础。这对下学期单片机的学习会有很大的帮助,也使我对单片机产生了兴趣。
这次课程设计的顺利完成,离不开学长,同学和知道老师的帮助,特别是PWM波的运用,也是学长给我们提出的建议。在此感谢老师和学长的无私帮.
附录
附录一 参考文献
[1]《单片机原理及其接口技术》 胡汉才 编著 北京:清华大学出版社
[2]《MCS-51单片机原理及应用》张毅刚 编著 哈尔滨:哈尔滨工业大学出版社
[3]《51单片机C语言应用程序设计 实例精讲》(第二版) 戴佳 刘博文 编著 电子工业出版社
[4] 李响初.数字电路基础与应用.北京:机械工业出版社,2008
[5] 吴丙申.模拟电路基础.北京:北京理工大学出版社,2007
目 录
第一章 总 论 1
1.1项目概况 1
1.2研究依据及范围 3
1.3主要技术经济指标 4
1.4研究结论及建议 4
第二章 项目建设的背景和必要性 6
2.1项目建设的背景 6
2.2项目建设的必要性 8
第三章 项目服务需求分析 11
第四章 项目选址与建设条件 13
4.1选址原则 13
4.2项目选址 13
4.3建设条件 14
4.4项目建设优势条件分析 15
第五章 建设方案 18
5.1建设规模与内容 18
5.2总体规划设计 19
5.3建筑方案 24
5.4结构方案 26
5.5给水工程 27
5.6排水工程 29
5.7电气设计 31
5.8暖通设计 34
5.9项目实施进度 35
第六章 节能措施 37
6.1 设计依据 37
6.2节能措施 37
第七章 环境影响分析 39
7.1 环境影响分析 39
7.2 环境保护措施及治理效果 40
第八章 消防与安全卫生 42
8.1 消防 42
8.2 劳动安全 43
8.3 卫生防护 44
第九章 组织机构与运作方式 45
9.1 组织机构 45
9.2组织管理 46
9.3劳动定员 46
第十章 投资估算 47
10.1编制依据 47
10.2 投资估算 47
10.3资金筹措 48
第十一章 经济效益评价 49
11.1 成本核算 49
11.2 利润估算 51
11.3经济风险分析 52
11.4财务评价结论 54
第十二章 结 论 55
21
展开阅读全文