基于单片机的报警器与旋转灯设计Word格式文档下载.docx
《基于单片机的报警器与旋转灯设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的报警器与旋转灯设计Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
采用40脚,片内带8kBFlashROM的STC89C52单片机作为控制核心,开关模块和报警器模块接P3口,旋转灯模块接P2口,按以上系统构架设计,单片机端口资源刚好满足要求。
设计框图如图2-1所示。
图2-1报警器与旋转灯系统结构图
2.2系统硬件设计
基于单片机的报警器与旋转灯系统的电路原理图如图2-2所示。
系统由旋转灯模块、复位模块、开关报警器模块、最小系统LED模块和电源模块五部分组成。
2.2.1控制模块
控制模块原理图如图2-3所示。
主控制器采用STC89C52。
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能CMOS8位的微处理器。
在本设计中,P3口用于对报警器和旋转灯的控制,连接开关和蜂鸣器。
P2口用于对旋转灯的控制。
P0口接一发光二极管,验证最小系统。
在控制模块里面,包含了时钟电路以及复位电路两部分。
图2-2基于单片机的报警器与旋转灯系统电路原理图
图2-3控制模块原理图
A.时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
时钟可以由内部方式产生或外部方式产生。
内部方式的时钟电路如图2-4(a)所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡器就产生自激振荡。
定时元件通常采用石英晶体和电容组成的并联谐振回路。
晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。
外部方式的时钟电路如图2-4(b)所示,XTAL2接地,XTAL1接外部振荡器。
对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。
(a)内部方式时钟电路(b)外部方式时钟电路
图2-4时钟电路
B复位及复位电路
a.复位操作
复位是单片机的初始化操作。
其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
b.复位信号及其产生
RST引脚是复位信号的输入端。
复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。
若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
整个复位电路包括芯片内、外两部分。
外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号。
复位操作有上电自动复位相按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。
这样,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。
按键手动复位有电平方式和脉冲方式两种。
其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的;
而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的。
2.2.2开关报警器模块
开关控制电路的运行,报警器是运行中所显示的一种状态。
如图2-5所示。
图2-5开关报警器模块
在没有按键按下时,P3.7口输出的是高电平。
当某一层有键按下时,相应的端口引脚变为低电平。
PNP型的蜂鸣器驱动电路,从图上我们可以看出:
三极管基极连1KΩ的电阻接P3.7口,发射极接地,集电极接蜂鸣器短脚,长脚接+5V电压。
2.2.3旋转灯模块
旋转灯电路由8个LED发光二极管和8个0.3KΩ的电阻构成。
该电路设计比较简单,但是要注意节点的电气连接。
如图2-6所示。
2.2.4硬件电路中器件选择
A.STC89C52单片机
STC89系列单片机是MCS-51系列单片机的派生产品。
它们在指令系统、硬件结构和片内资源上与标准8052单片机完全兼容,DIP40封装系列与8051为pin-to-pin兼容。
STC89系列单片机高速(最高时钟频率90MHz),低功耗,在系统/在应用可编程(ISP,IAP),不占用户资源。
本设计采用STC89C52,它提供的功能标准如表2-1。
表2-1STC89C52功能标准
兼容MCS51指令系统
8K可反复擦写FlashROM
32个双向I/O口
256x8bit内部RAM
3个16位可编程定时/计数器中断
时钟频率0-24MHz
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗空闲和掉电模式
软件设置睡眠和唤醒功能
STC89C52引脚图如图2-7所示。
图2-6旋转灯模块
a.主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源
GND(Pin20):
接地线
b.外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端
XTAL2(Pin20):
片内振荡电路的输出端
c.控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号
PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
d.可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
P0口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
图2-7STC89C52
2.3软件设计
2.3.1主程序模块
系统主程序主要用于变量及其他部件的初始化,如系统的初始化,以便能够准确的进行相应的操作。
同时进行相应的功能键判断,从而实现特殊功能。
其相应的流程图2-8所示。
图2-8报警器与旋转灯系统主程序流程图
2.3.2中断程序
在相应的外部中断和定时器中断程序中,首先响应外部中断,再响应两个定时器中断,读取键值,旋转灯旋转,报警器响,在定时器重置初始值以后,再次外部中断返回。
中断程序的相应流程图如2-9所示。
图2-9中断程序流程图
3系统调试
3.1硬件调试
3.1.1静态检查
根据硬件电路图核对了元器件的型号、极性,安装是否正确,检查硬件电路连线是否与电路原理图一致,检查电路元器件是否都已经连接好,用万用表一一测试。
3.1.2通电检查
先调试电源部分,整个电路只需要+5V的电压,用USB线从电脑USB口取电。
再用示波器检测单片机的复位和晶振电路是否有复位信号和振荡信号。
3.2软件调试及软硬件联调
对软件先用仿真器进行了调试。
用仿真器运行正常后,再用烧写器将程序烧到STC89C52单片机中,进行了脱机调试。
3.2.1proteus软件仿真
使用proteus原理及仿真电路如图3-1所示。
图3-1proteus原理及仿真图
3.2.2脱机调试
用Proteus仿真成功后,将设计程序烧写到STC89C52中去,通电后发现开关无法准确控制报警器和旋转灯工作。
我在给蜂鸣器加驱动电路时有不理解的地方。
因为三极管是pnp型的,所以在采用上图的驱动方式进行驱动蜂鸣器时,必然对原程序进行修改,并确定在P3.7口输出低地平时驱动电路才会使蜂鸣器响。
3.2.3实验结果
图3-2、图3-3实验板正反面实物图
图3-4最小系统验证
图3-5设计系统验证
结束语
在大学期间,从接触单片机的课程开始,单片机就给我留下了神秘感。
不论是对课程的学习,还是心中对课程的看法,直到自己独自完成布置的单片机课程,自己的对单片机才有了实质性的了解。
实验任务分配下来后,一开始确实很迷茫。
因为完全没有头绪,无从下手。
看这网页中搜索的浩瀚的资料,真是一个头两个大,也第一次体会到了长时间对这电脑屏幕痛苦的感觉。
之后我静下心来,仔细挖掘这次实验的问题所在。
我所作的课题关键在于利用3个中断对LED灯的显示和按键触发的处理。
想通这些后我开始查阅相关资料,从芯片组成到C语言程序,开始深入的学习。
从查阅彭伟的《单片机C语言程序设计实训100例》开始,到《最小系统的焊接要点》、《如何利用protel软件绘制原理图和pcb图》,我一步步去尝试,一次次和同学讨论解决自己存在的问题,最终将单片机课程完成。
但在使用STC下载软件将程序加载到AT89C52中去后,出现蜂鸣器一直在响。
检查后发现我是将三极管按照NPN的驱动电路接线方式进行接线的,事实上我们发的三极管是PNP型的,所以我将程序改为在P3.7口高电平时蜂鸣器停止,低电平时蜂鸣器响。
进行调式后效果挺好。
通过这次实验,我认为学习的不仅仅是知识,更重要的是解决问题时坚毅不拔的精神,人不会被打败,只有被摧毁。
在求知的道路上我们不能轻易放弃,不能放纵退缩。
只有迎难而上,方能摘取胜利的果实!
参考文献
[1]彭伟单片机C语言程序设计实训100例—基于8051+Proteus仿真[M]北京:
电子工业出版社2010.6
[2]郭天祥新概念51单片机C语言教程—入门、提高、开发拓展全攻略[M]北京:
电子工业出版社2010
[3]陈益飞单片机原理及应用技术[M]北京:
国防工业出版社2011
附录
附录1:
基于单片机的报警器与旋转灯设计的原理图
附录2:
基于单片机的报警器与旋转灯设计的PCB图
附录3:
proteus仿真图
附录4:
基于单片机的报警器与旋转灯设计的c语言程序清单
附录5:
基于单片机的报警器与旋转灯设计的元件清单
附录
附录1:
基于单片机的报警器与旋转灯设计的原理图
附录2:
基于单片机的报警器与旋转灯设计的PCB图
附录3:
附录4:
#include<
reg52.h>
#include<
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitSPK=P3^7;
sbitled=P1^0;
ucharFRQ=0x00;
voidDelayms(uintms)//延时
{
uchari,j;
while(ms--)
for(i=0;
i<
120;
i++)
for(j=110;
j>
0;
j--);
}
voidmain()
led=0;
//开最小系统灯亮
P2=0x00;
//关闭所有LED
SPK=1;
//关闭蜂鸣器
TMOD=0x11;
//两个定时器均工作在模式1
TH0=0x00;
TL0=0xff;
IT0=1;
IE=0x8b;
//开启0,1,3号中断
IP=0x01;
//INT0设置为高优先级
TR0=0;
TR1=0;
while
(1)//循环过程中递增频率,溢出后再次递增
FRQ++;
Delayms(10);
}
voidEX0_INT()interrupt0
TR0=!
TR0;
//开启或停止两个定时器,分别控制报警器声音和LED旋转
TR1=!
TR1;
if(P2==0x00&
&
SPK==1)
P2=0xe0;
//11100000,开三个灯旋转
else
voidT0_INT()interrupt1
TH0=0xfe;
TL0=FRQ;
SPK=~SPK;
voidT1_INT()interrupt3
TH0=-45000/256;
TL0=-45000%256;
P2=_crol_(P2,1);
附录5:
基于单片机的报警器与旋转灯设计的元件清单
元件型号
元件数量
STC89C52
1片
30uF普通电容
2个
270Ω电阻
9个
11.0592晶振
1个
1KΩ电阻
有源5V蜂鸣器
2KΩ电阻
5mm发光二极管
16个
10KΩ电阻
S92012PNP
10uF电解电容
四脚轻触开关