安防声光报警器-2009551504王颖
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计
总
结
报
告
设计选题:简易安防声光报警器
指导老师:张东波
班级:2009级建筑设施智能技术一班
姓名:王颖
学号: 2009551504
目录
第一章:前言 (3)
第二章:设计要求 (3)
第三章:课题分析与整体构思 (3)
第四章:程序设计 (4)
第五章:硬件电路设计 (8)
第六章:Proteus仿真 (12)
第七章:硬件制作及调试 (12)
第八章:心得体会 (14)
第一章前言
经过一个学期对单片机的学习,掌握了最基本的单片机知识,如MCS-51单片机的结构与工作方式、指令系统、中断系统、并行I/O接口以及简单汇编语言程序设计等。这些都仅限于狭隘的课本知识不能真正从根本了解单片机的工作方式以及实际的应用,虽说有几次小型实验,学到了一定的汇编编程及调试技巧,但是对于单片机依旧没有很清晰的认识,幸而这次单片机课程设计给我们提供了一个很好的平台与机会,让我亲身经历从选题到编程、硬件电路设计及调试到最后的硬件实物制作调试的过程,真正从全方位将所学联系起来,最终促成了这次难忘的学习体验。
第二章设计要求
一、设计题目:简易安防声光报警器
二、设计任务及要求:
自制一个单片机最小系统,包括串口下载、复位电路,采用两路外部中断输入门禁和红外探测两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号。
第三章课题分析与整体构思
一. 课题分析
(1)警情探测:在该设计中,需采用两路外部中断输入门禁报警和红外报警,分别采用两个小按键模拟。其中一个按键模拟门禁报警,对应外部中断0;另一个按键模拟红外报警,对应外部中断1。
(2)报警设计:正常状态下,数码管不显示,当发生门禁报警时,系统发出声光报警信息并在数码管显示1;,当发生红外报警时系统发出声光报警信息并在数码管显示0。只有由主人按下报警接触按钮或系统复位后,才能解除声光报警并将数码管不显示。
二.整体构思:
(1)程序构思:在该设计中,需采用两路外部中断输入门禁报警和红外报警,采用单片机C 语言编写程序比较易读且相对汇编思路清晰简单。以下几个子函数必不可少:LCD 的初始化子函数、LCD 忙检测子函数、写指令子函数、LCD 显示子函数、中断计数器初始化子函数、两个外部中断子函数以及主函数。
(2)硬件构思:正常状态下, 数码管不显示,当发生门禁报警(即按下小按键)时,系统发出声光报警信息(第一个发光二级管亮,蜂鸣器鸣叫)并在四位一体数码管上显示0;,当发生红外报警时系统发出声光报警信息(第二个发光二级管亮,蜂鸣器鸣叫)并在数码管显示1。只有按下报警接触按钮或系统复位键后,才能解除声光报警并将数码管熄灭。
第四章 程序设计
一、流程图:
首先单片机上电复位,并进行初始化包括寄存器和数码管,当发生报警事件时,单片机驱动声光报警装置并且在数码管上显示相应的报警信息,退出中断时,单片机检测报警解除按钮,当报警解除按钮被按下时单片机关闭声光报警并清除数码管上的报警信息,具体的程序流程如下。
图1 主程序流程图
上电复位
EA=0
数码管初始化
INT0、INT1 均设为下降沿触发
EA = 1
P3.4 是否
为0?
检测P3.4
解除报警信
是 否
终止
中断入口
显示报警信息
声光报警
退出中断
图2 中断函数流程图二、程序清单:
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xbf,0xbf,0xbf,0xbf};
uchar code table1[]={0x86,0x86,0x86,0x86};
uchar code table2[]={0xfe,0xfd,0xfb,0xf7};
uint a,b,c,flag,temp,aa,bb,i=1;uint z=0;
sbit red=P1^5;
sbit spe=P1^6;
sbit yellow=P1^7; //位定义各个变量与单片机引脚
void delay(uint z) //延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=40;y>0;y--);
}
void init()
{
EA=1;
EX0=1;//开外部中断0
EX1=1;
TCON=0x55;
TMOD=0x15;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
ET0=1;
ET1=1;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
void main()
{
while(1)
{
P2=0x0f;init();yellow=1;red=1;
while(flag==1)
{
if(aa==1){aa=0;flag=0;}
for(a=0;a<4;a++)
{
yellow=0;
spe=~spe;
P2=table2[a];
P0=table[a];
delay(1);
if(a==4)a=0;
while(bb>=10)
{
yellow=1;spe=0;P2=0x0f;
while(bb==20)bb=0;
}
}
}
while(temp==1)
{
if(aa==1){aa=0;temp=0;}
for(a=0;a<4;a++)
{
red=0;