您好,欢迎来到九壹网。
搜索
您的当前位置:首页单片机报警器课程实验报告

单片机报警器课程实验报告

来源:九壹网


单片机课程设计 报警器

学院:湖南工业大学 班级:电气1101 姓名:桂衡林 学号: 指导老师:何静

单片机课程设计

——简易安防声光报警器

一 实验要求

自制一个单片机最小系统,包括串口下载、复位电路,采用两路外部中断输入门禁和红外探测 两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号。 二 实验步骤

1)查找相关资料,用protus将本课程设计电路图画出来

2)理清思路,写好程序,并用keil软件将程序编译出来,生成hex文件.

3)将hex文件加载到单片机中,模拟运行,(加载方法:双击51单片机,选择先前所生成的hex文件,然后运行),若没有达到实验要求,则反复的修改程序,调试,知道出现实验结果.

4)按照自己的仿真实验图,结合老师所给的最小系统图以及其中的引脚,将板子焊好

5)把之前写好的程序(适当的注意单片机的输出口是否一一对应)烧到51单片机,然后进行测试,不断的调试,知道出现该有的实验现象和实验结果。

三.程序流程图

四 实验程序

#include #include

#define uchar unsigned char #define uint unsigned int sbit LEDREDCON=P0^0; sbit LEDGREENCON=P0^1; sbit spe=P2^0; sbit Kint0=P3^2; sbit Kint1=P3^3; uchar FRQ=0x00;

进入中断0 绿灯灭,关闭显示 否 判断中断0键是否按下 是 数码管显示为0,红灯闪 蜂鸣器出现报警声 否 中断1是否出现 是 结束 中断0程序流程图

void delay(uint ms) {

uchar i; while(ms--) {

for(i=0;i<9;i++); } }

void init() //初始化子函数 {

P1 = 0x00; TMOD = 0x11; TH0 = 0x00; TL0 = 0xff; IT0 = 1; IT1 = 1;

IE = 0x8f;//EA=1;ET1=1;EX1=0;ET0=1;EX0=1; IP = 0x05; TR0 = 0; TR1 = 0; }

void main() {

init(); while(1) {

FRQ++; delay(1); } }

void external_int0() interrupt 0 //中断0 {

LEDGREENCON==1; //绿灯灭 P1=0x00; //关闭显示屏 if(LEDREDCON==1) { LEDREDCON=0; } else {

LEDREDCON=1; }

while(!Kint0); //中断0键按下的时候 delay(15); P1=0x3f; //输出显示为0 while(Kint1!=0) //中断1不出现的时候 { delay(15); spe=~spe; //扬声器发声 LEDREDCON=0; //红灯亮 delay(10); LEDREDCON=1; //红灯灭 delay(10); } }

void external_int1() interrupt 2 {

LEDREDCON=1; P1=0x00;

if(LEDGREENCON==1) { LEDGREENCON=0; } else { LEDGREENCON=1; } if(Kint1==0) { while(!Kint1); //中断1键按下时 delay(10); P1=0x06; // 数码管显示为1 while(Kint0!=0) //当中断0键不按下的时候 { LEDGREENCON=0; //绿灯亮 delay(15); LEDGREENCON=1; //绿灯灭 delay(15); spe=~spe; //电平取反 扬声器出现报警声 delay(10); }

} }

五 仿真实验图

六 实验中所遇到到得问题以及解决方法

问题一 程序出现问题,导致当按下中断0键时,间隔出现显示数据和亮灯,并且红灯一直不闪

问题中断程序如下

void external_int0() interrupt 0 {

write_command(0x01); LEDGREENCON=1; count1++; if(count1==1) { if(LEDREDCON==1) { LEDREDCON=0;

} else

{LEDREDCON=1; } if(Kint0==0) { while(!Kint0); delay(5); LEDREDCON=0; write_data('0'); spe=1; } }

if(count1==2) { count1=0;

LEDREDCON=1; write_command(0x01); }

}

void timer0() interrupt 1

{

TH0=0xfe; TL0=FRQ; spe=~spe; }

计数出现错误。将采用定时器直接废除,直接启用延时程序改出的程序如下

void external_int0() interrupt 0 //中断0

{

LEDGREENCON==1; //绿灯灭 P1=0x00; //关闭显示屏 if(LEDREDCON==1) { LEDREDCON=0; } else { LEDREDCON=1; }

while(!Kint0); //中断0键按下的时候

delay(15);

P1=0x3f; //输出显示为0 while(Kint1!=0) //中断1不出现的时候 { delay(15); spe=~spe; //扬声器发声 LEDREDCON=0; //红灯亮 delay(10);

LEDREDCON=1; //红灯灭 delay(10); }

}

问题二 扬声器一直没有声音,出现声音之后也一直为噪声 扬声器没有声音,一个原因是因为输出口设错了,另外一个就是没有持续的变化高低电平,将spe=1改为spe=~spe,另外声音不好听,改变延时来改变声音的音质。

问题三 在焊完电路后,复位键无效,数码管无任何显示

检查复位电路之后,发现按键没有焊好,数码管没有接电源,所以无任何显示。

问题四 在软件仿真中,发光二极管有明显的闪烁现象,但是在实体中无任何现象

修改程序,将延时延长,因为软件中的延时比硬件中的要快,硬件反应要慢一些,所以延时需要加长

问题五 当中断0和1出现的时候显示出现错误

按照数码管显示推出显示0和1的设置确实为0x3f和0x06, 检

查各个引脚之后,复位之后,发现其中一段数码管坏掉。改选另一位好的数码管 五,实验心得

在此次单片机课程设计中,从编程到用protus画电路图,到焊板子,遇到很多问题,同时体会遇到问题的无助和解决问题的快乐。

由于以前学单片机用的是汇编,对于单片机用c语言写代码,用的不是很多,通过这一次的课程设计对将c语言应用于单片机编程有一个理性的认识,对整体的结构有一个很好的了解,也加强了对c语言的应用能力。

在实验过程中,很多知识我们并不是很清楚,在碰到这种问题的情况下,最好一般先去百度,查资料,不要不经过大脑思考就去问同学,这样是很不明智的,先去百度,这样既可节省对方的时间,也可以提高自己的学习力。

另外一个很大的收获就是在学习使用软件方面,对keil和protus的使用,在刚开始使用protus的时候,选器件都要花很长的时间,经过向同学的请教,慢慢的解决了这些问题。

在此次单片机课程设计中,我深深的体会了学习态度对一个人的影响,对于我自己来说,以前很多实验都不认真,学习中遇到问题也不积极解决问题,所以收获进步很小,在本次课程设计当中,受到老师的鼓励和同学的影响,遇到很多问题的我并没有气馁,而是不断的思考和请教,学习效果颇好。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务