单片机课程设计报告.docx
《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(11页珍藏版)》请在冰点文库上搜索。
![单片机课程设计报告.docx](https://file1.bingdoc.com/fileroot1/2023-8/5/fbda92d9-a1b4-45c6-a322-1cff5a3c05dc/fbda92d9-a1b4-45c6-a322-1cff5a3c05dc1.gif)
单片机课程设计报告
《简易安防声光报警器》
课程设计报告
班级
姓名学号:
指导教师:
设计时间:
2011年10月29日
目录
一实验要求…………………………………………………2
二实验步骤…………………………………………………2
三设计原理…………………………………………………2
四程序流程图………………………………………………4
五实验程序…………………………………………………5
六仿真实验…………………………………………………8
七实验中所遇到到得问题以及解决方法…………………8
八实验心得…………………………………………………9
单片机课程设计
——简易安防声光报警器
一实验要求
自制一个单片机最小系统,包括串口下载、复位电路,采用两路外部中断输入门禁和红外探测两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号。
二实验步骤
1)查找相关资料,用protues将本课程设计电路图画出来
2)理清思路,写好程序,并用keil软件将程序编译出来,生成hex文件.
3)将hex文件加载到单片机中,模拟运行,(加载方法:
双击51单片机,选择先前所生成的hex文件,然后运行),若没有达到实验要求,则反复的修改程序,调试,知道出现实验结果.
4)按照自己的仿真实验图,结合老师所给的最小系统图以及其中的引脚,将板子焊好
5)把之前写好的程序(适当的注意单片机的输出口是否一一对应)下到51单片机,然后进行测试,不断的调试,直到出现该有的实验现象和实验结果。
三设计原理
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
·定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
·并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
·全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
·中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
四程序流程图
中断0程序流程图
五实验程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLED=P1^5;
sbitspe=P1^0;
sbitKint0=P3^2;
sbitKint1=P3^3;
voiddelay(uintms)//延时子函数
{
uchari;
while(ms--)
{
for(i=0;i<114;i++);
}
}
voidinit()//初始化子函数
{
P1=0x00;
IT0=0;
IT1=0;
IE=0x85;//EA=1;ET1=0;EX1=1;ET0=0;EX0=1;
IP=0x03;
del();
}
voidmain()
{
init();
while
(1)
{
display();
}
}
voidexternal_int0()interrupt0//中断0
{
uinta;
delay(10);
for(a=0;a<4;a++)
{
huantab[a]=a;
};//输出显示为0
display();
while(!
Kint0)//中断1不出现的时候
{
LED=~LED;//绿灯灭
spe=~spe;//电平取反扬声器出现报警声
delay(15);
display();
}
}
voidexternal_int1()interrupt2
{
uinta;
delay(10);
for(a=0;a<4;a++)
{
huantab[a]=a+2;
};//数码管显示为1
while(!
Kint1)//当中断0键不按下的时候
{
LED=~LED;//绿灯灭
spe=~spe;//电平取反扬声器出现报警声
delay(15);
display();
}
}
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharhuantab[]={0,0,0,0};
ucharcodedistab[4]={0xfe,0xfd,0xfb,0xf7};
ucharcodekeytab[10]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
voiddel(void)
{
uinta;
for(a=0;a<4;a++)
{
huantab[a]=0;
}
}
voiddisplay()//显示程序//
{
uchari,j,k;
for(i=0;i<4;i++)
{
P0=keytab[huantab[i]];
P2=distab[i];
for(j=10;j>0;j--)
for(k=500;k>0;k--);
P0=0x00;
}
}
六仿真实验
七实验中所遇到到得问题以及解决方法
问题一:
仿真是扬声器一直没有声音,出现声音之后也一直为噪声
扬声器没有声音,一个原因是因为输出口设错了,另外一个就是没有持续的变化高低电平,将spe=1改为spe=~spe,另外声音不好听,改变延时来改变声音的音质。
问题二:
在焊完电路后,复位键无效,数码管无任何显示
检查复位电路之后,发现按键没有焊好,数码管没有接电源,所以无任何显示。
此实验是利用高低电平,低电平相当于于接地,所以原因还是电路焊接问题或者程序存在问题。
问题三:
在软件仿真中,发光二极管有明显的闪烁现象,但是在实体中只有一直按着开关的时候有闪烁,当松开时就一直亮着
修改程序,将延时延长,因为软件中的延时比硬件中的要快,硬件反应要慢一些,所以延时需要加长。
问题四:
当中断0和1出现的时候显示出现错误
按照数码管显示推出显示0和1的设置确实为0x3f和0x06,检查各个引脚之后,复位之后,发现其中一段数码管坏掉。
改选另一位好的数码管。
问题五:
电路硬件焊接不够好
焊接完硬件之后,你自己觉得很好了,也是用了万用表测量了可以用地,但是在加入程序之后不能用了,这个过程是你的焊接不够好,用万用表测量时,间断性的发出声音。
问题六:
单片机和数码管的质量严重有问题
我在晚上在实验室测量一切很好之后就回到了房间,第二天去交结果的时候就没反应了,重新换了数码管和单片机就恢复了,期间我也不知道哪里出问题了,我觉得我一直保存还是蛮好的,我觉得单片机和数码管的质量还是有点瑕疵的。
八实验心得
通过这次,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的思维,去灵活设计东西,更加锻炼我的动手能力,让我可以单独面对和处理问题,对自己的动手能力有了一个实质性的提高。
从而不断地战胜自己,超越自己。
这个设计过程中,我们通过在原有的计数器系统进行了改进,使之增添了暂停、计数、清零等的三个控制功能,使之成为一个更加适用,功能更加完备的属于自己的一个系统。
这次课程设计相对来说还是比较简单,但是出现的问题还是很多。
从编程到系统仿真到焊接,感触很多,收获也很多。
整个硬件的焊接我大概只用了2个小时,但是调试出结果花费我一个下午加晚上。
这个过程中,先是检查焊接有点问题,再到程序有点小问题,最后是焊接还有点问题,一直到交成品的时候,又出现了单片机和数码管的问题,真的是一个纠结又很漫长的过程,在这个过程中我收获了很多,不管事自己可以处理的事情还是要别人帮忙处理的事情,我都学到了很多。
其实总言之,遇到的问题基本是属于焊接造成的问题和硬件本身的质量问题。
解决问题确是各方面的,自己要全面的检查,一遍又一遍,所以在这个过程中我学到了更多。
最终总结问题,感觉都是那么简单,但是在实际的过程中我们为什么又不能避免了,我想以后这是我该重点解决的方向。