单片机实验报告简易报警器文档格式.docx
《单片机实验报告简易报警器文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实验报告简易报警器文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
四、课程设计要求是用按键红外探测和输入门禁。
但是由于实验室设备的条件,我采用的是红绿两个二极管代替红外探测的发光显示和输入门禁的报警装置。
五、总体设计思想
发光二极管模拟红外探测与输入门禁
振荡器是数字钟的核心。
振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。
石英晶体振荡器的作用是产生时间标准信号。
因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。
七、按键模块
LOo—
鉴于使用中断电路会增加硬件电路的复杂度,本电路采用独立按
键的方法,只需在程序中加入扫描程序即可。
其中P2.0接按键光标
移位,P2.1接按键时间加数,P2.2接按键时间减数,P3.2接按键模拟红外探测,P3.3接按键模拟输入门禁,。
九、SPEAKE电路
P3.5/T1
P3.6WR
P37/RD
17
"
16
扬声器<|
n/
—
10k
□―E
\
>
报警器装置的原理就是利用P3.7出来的高低电平交换使得扬声
器发出声音。
但是由于实验室的器材有限,所以我们改用了发光二极
管来代替SPEAKE电路。
十、实验仿真程序如下:
#inelude<
reg52.h>
#includevintrins.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcode
table_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
table_select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchartable_buffer[]={0,0};
ucharcount0,count1;
sbitLEDREDCON二P09
sbitLEDGREENCON=P0A1;
sbitspe=P0A2;
sbitKintO二卩3八2;
sbitKint1=卩3八3;
sbitRS二卩3八7;
sbitRW=P3A6;
sbitE=P3A5;
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=O;
RW=1;
E=1;
if((P1&
0x80)==0)
break;
voidwrite_command(uchartempdata)
〃当RS=0和RW=0时,可以写
入指令或者显示地址。
RS=0;
RW=O;
P1二tempdata;
delay(3);
check_busy();
voidinit_1602()
write_command(0x38);
〃
write_command(OxOc);
//
write_command(0x01);
write_command(0x06);
〃}
〃此处高电平是将数据锁存起来
//LCD1602的初始化子函数
写指令
显示开和光标位置
显示清屏
显示光标移动设置
voidwrite_data(uintj)
〃向LCD1602液晶显示器写数据
//当RS=1禾口RW=0时,可以写
入数据。
RS=1;
RW=0;
P1=j;
〃此处高电平是将数据锁存起来
check_busy();
IE=0x8f;
//EA=1;
ET1=1;
EX1=0;
ET0=1;
EX0=1;
TRO=0;
TR1=0;
voidmain()
init();
init_1602();
FRQ++;
delay(10);
voidexternal_int0()interrupt0{
LEDGREENCON=1;
count1++;
if(count1==1)
if(LEDREDC0N==1){
LEDREDCON=0;
else
LEDREDCON=1;
if(KintO==O)
while(!
KintO);
delay(5);
write_data('
0'
);
spe=1;
if(count1==2)
count1=0;
voidexternal」nt1()interrupt2
count0++;
if(countO==1)
if(LEDGREENCON==1)
LEDGREENCON=0;
if(Kint1==0)//低电平有效
Kint1);
delay(5);
write_data('
1'
〃显示数据spe=1;
if(count0==2)
count0=0;
write_command(0x01);
voidtimerO()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语言编写单片机程序。
在实验仿真过程中,需要知道相关芯片的功能,这使我对一些芯片有了初步的了解,并能很好的使用这些芯片实现相关的功能。
在此次焊接板子之前,我已有过几次的焊接经验了,但每次都有不同的收获。
就这次来说吧,我认为焊接可以将一个整体分为几个模块,在一个模块焊好后就开始检验线路。
这样可以在当整体焊好之后,检查更加有效,并减小出错的概率。