单片机报警器课程实验报告.docx
- 文档编号:6638641
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:9
- 大小:50.27KB
单片机报警器课程实验报告.docx
《单片机报警器课程实验报告.docx》由会员分享,可在线阅读,更多相关《单片机报警器课程实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
单片机报警器课程实验报告
单片机课程设计
报警器
学院:
兴湘
班级:
08通信
姓名:
谢洒
学号:
2008964044
指导老师:
胡洪波
日期:
2011.4.1
单片机课程设计
——简易安防声光报警器
一实验要求
自制一个单片机最小系统,包括串口下载、复位电路,采用两路外部中断输入门禁和红外探测两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号。
二实验步骤
1)查找相关资料,用protus将本课程设计电路图画出来
2)理清思路,写好程序,并用keil软件将程序编译出来,生成hex文件.
3)将hex文件加载到单片机中,模拟运行,(加载方法:
双击51单片机,选择先前所生成的hex文件,然后运行),若没有达到实验要求,则反复的修改程序,调试,知道出现实验结果.
4)按照自己的仿真实验图,结合老师所给的最小系统图以及其中的引脚,将板子焊好
5)把之前写好的程序(适当的注意单片机的输出口是否一一对应)烧到51单片机,然后进行测试,不断的调试,知道出现该有的实验现象和实验结果。
三.
程序流程图
中断0程序流程图
四实验程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLEDREDCON=P0^0;
sbitLEDGREENCON=P0^1;
sbitspe=P2^0;
sbitKint0=P3^2;
sbitKint1=P3^3;
ucharFRQ=0x00;
voiddelay(uintms)
{
uchari;
while(ms--)
{
for(i=0;i<9;i++);
}
}
voidinit()//初始化子函数
{
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;
}
voidmain()
{
init();
while
(1)
{
FRQ++;
delay
(1);
}
}
voidexternal_int0()interrupt0//中断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);
}
}
voidexternal_int1()interrupt2
{
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键时,间隔出现显示数据和亮灯,并且红灯一直不闪
问题中断程序如下
voidexternal_int0()interrupt0
{
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);
}
}
voidtimer0()interrupt1
{
TH0=0xfe;
TL0=FRQ;
spe=~spe;
}
计数出现错误。
将采用定时器直接废除,直接启用延时程序
改出的程序如下
voidexternal_int0()interrupt0//中断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语言的应用能力。
在实验过程中,很多知识我们并不是很清楚,在碰到这种问题的情况下,最好一般先去XX,查资料,不要不经过大脑思考就去问同学,这样是很不明智的,先去XX,这样既可节省对方的时间,也可以提高自己的学习力。
另外一个很大的收获就是在学习使用软件方面,对keil和protus的使用,在刚开始使用protus的时候,选器件都要花很长的时间,经过向同学的请教,慢慢的解决了这些问题。
在此次单片机课程设计中,我深深的体会了学习态度对一个人的影响,对于我自己来说,以前很多实验都不认真,学习中遇到问题也不积极解决问题,所以收获进步很小,在本次课程设计当中,受到老师的鼓励和同学的影响,遇到很多问题的我并没有气馁,而是不断的思考和请教,学习效果颇好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 报警器 课程 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)