单片机实验报告简易报警器.docx
- 文档编号:26706353
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:11
- 大小:79.62KB
单片机实验报告简易报警器.docx
《单片机实验报告简易报警器.docx》由会员分享,可在线阅读,更多相关《单片机实验报告简易报警器.docx(11页珍藏版)》请在冰豆网上搜索。
单片机实验报告简易报警器
简易报警器
一、本次根据单片机课程设计题目与要求,我选择的就是设计一个简易报警器。
二、课程设计要求:
自制一个单片机最小系统,包括串口下载、复位电路,采用两路外部中断输入门禁与红外探测两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号。
三、设计所需的硬件:
0、1uF的无极性电容五个;10uF的极性电容两个;发光二极管两个;三极管9013四个;4、7千欧的排阻一个;100,1k,10k的电阻若干;芯片插座若干;11、0592MHz的晶振一个;单片机STC89C54RD芯片一块;MAX232串口芯片一块;导线若干;
四、课程设计要求就是用按键红外探测与输入门禁。
但就是由于实验室设备的条件,我采用的就是红绿两个二极管代替红外探测的发光显示与输入门禁的报警装置。
五、总体设计思想
STC89C54RD+
复位电路
时钟电路
电源
LCD1602
发光二极管模拟红外探测与输入门禁
按键模块
六、晶振电路
振荡器就是数字钟的核心。
振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。
石英晶体振荡器的作用就是产生时间标准信号。
因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。
七、按键模块
鉴于使用中断电路会增加硬件电路的复杂度,本电路采用独立按键的方法,只需在程序中加入扫描程序即可。
其中P2、0接按键光标移位,P2、1接按键时间加数,P2、2接按键时间减数,P3、2接按键模拟红外探测,P3、3接按键模拟输入门禁,。
九、SPEAKER电路
报警器装置的原理就就是利用P3、7出来的高低电平交换使得扬声器发出声音。
但就是由于实验室的器材有限,所以我们改用了发光二极管来代替SPEAKER电路。
十、实验仿真程序如下:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
ucharcodetable_select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchartable_buffer[]={0,0};
ucharcount0,count1;
sbitLEDREDCON=P0^0;
sbitLEDGREENCON=P0^1;
sbitspe=P0^2;
sbitKint0=P3^2;
sbitKint1=P3^3;
sbitRS=P3^7;
sbitRW=P3^6;
sbitE=P3^5;
ucharFRQ=0x00;
voiddelay(uintms)
{
uchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
voidcheck_busy()//判断LCD忙,要不停的检测,所以需要有个大循环
{
while
(1)
{
E=0;//当RS=0与RW=1时,可以读忙信号。
delay(3);
RS=0;
delay(3);
RW=1;
delay(3);
E=1;
delay(3);
if((P1&0x80)==0)
{
break;
}
E=0;
}
}
voidwrite_command(uchartempdata)
{
E=0;//当RS=0与RW=0时,可以写入指令或者显示地址。
delay(3);
RS=0;
delay(3);
RW=0;
P1=tempdata;
delay(3);
E=1;//此处高电平就是将数据锁存起来
delay(3);
E=0;
check_busy();
}
voidinit_1602()//LCD1602的初始化子函数
{
write_command(0x38);//写指令
write_command(0x0c);//显示开与光标位置
write_command(0x01);//显示清屏
write_command(0x06);//显示光标移动设置
}
voidwrite_data(uintj)//向LCD1602液晶显示器写数据
{
E=0;//当RS=1与RW=0时,可以写入数据。
delay(3);
RS=1;
delay(3);
RW=0;
P1=j;
delay(3);
E=1;//此处高电平就是将数据锁存起来
delay(3);
E=0;
check_busy();
}
voidinit()//初始化子函数
{
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();
init_1602();
while
(1)
{
FRQ++;
delay(10);
}
}
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);
}
}
voidexternal_int1()interrupt2
{
write_command(0x01);
LEDREDCON=1;
count0++;
if(count0==1)
{
if(LEDGREENCON==1)
{
LEDGREENCON=0;
}
else
{
LEDGREENCON=1;
}
if(Kint1==0)//低电平有效
{
while(!
Kint1);
delay(5);
LEDGREENCON=0;
write_data('1');//显示数据
spe=1;
}
}
if(count0==2)
{
count0=0;
LEDGREENCON=1;
write_command(0x01);
}
}
voidtimer0()interrupt1
{
TH0=0xfe;
TL0=FRQ;
spe=~spe;
}
voidtimer1()interrupt3
{
TH0=-5000/256;
TL0=-5000%256;
LEDGREENCON=_crol_(LEDGREENCON,1);
LEDREDCON=_crol_(LEDREDCON,1);
}
十一、实验仿真图如下:
十二、硬件焊接及检测
在电脑上操作完成之后,我们开始硬件实现。
我按照设计好的电路图的将芯片槽口焊好,并用万能表进行检测。
电路的焊接就是否虚焊,就是否短路,地与电源分配。
在检查过程中,出现一个问题。
我就是将芯片插好后检测,结果万能表一直报错。
我将线路一个个的排查,最后才发现原来就是芯片内部出现短路。
这次的焊接,我明白了,在检测过程中如果采用分部份进行查找,检测错误的效率会大大提高。
十三、软件下载
将编好的实验程序烧到ATC89C54芯片中。
加上电源,出现实验要求的结果。
十四、课程设计的心得体会
本次实验就是在上学期的单片机课程学习后的一次实践。
单片机课程主要就是采用汇编语言进行编写程序,而这次我就是用c语言进行编写实验程序的。
为此我在课程设计过程中,对c语言在单片机应用上花了一些时间,搞清楚了如何使用c语言编写单片机程序。
在实验仿真过程中,需要知道相关芯片的功能,这使我对一些芯片有了初步的了解,并能很好的使用这些芯片实现相关的功能。
在此次焊接板子之前,我已有过几次的焊接经验了,但每次都有不同的收获。
就这次来说吧,我认为焊接可以将一个整体分为几个模块,在一个模块焊好后就开始检验线路。
这样可以在当整体焊好之后,检查更加有效,并减小出错的概率。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告 简易 报警器