
2023年单片机实验报告简易报警器.doc
15页简易报警器一、本次根据单片机课程设计题目与规定,我选择的是设计一个简易报警器二、课程设计规定:自制一个单片机最小系统,涉及串口下载、复位电路,采用两路外部中断输入门禁和红外探测两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号三、设计所需的硬件: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
delay(3); RS=0; delay(3); RW=1; delay(3); E=1; delay(3); if((P1&0x80)==0) { break; } E=0; }}void write_command(uchar tempdata){ 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(); }void init_1602() //LCD1602的初始化子函数{ write_command(0x38);//写指令 write_command(0x0c);//显示开和光标位置 write_command(0x01);//显示清屏 write_command(0x06);//显示光标移动设立}void write_data(uint j) //向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();}void init() //初始化子函数{ 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(); init_1602(); while(1) { FRQ++; delay(10); }}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 external_int1() interrupt 2{ 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); }}void timer0() interrupt 1{ TH0=0xfe; TL0=FRQ; spe=~spe;}void timer1() interrupt 3{ TH0=-5000/256; TL0=-5000%256; LEDGREENCON =_crol_(LEDGREENCON,1); LEDREDCON =_crol_(LEDREDCON,1);}十一、实验仿真图如下:十二、硬件焊接及检测 在电脑上操作完毕之后,我们开始硬件实现。
我按照设计好的电路图的将芯片槽口焊好,并用万能表进行检测电路的焊接是否虚焊,是否短路,地和电源分派在检查过程中,出现一个问题我是将芯片插好后检测,结果万能表一直报错我将线路一个个的排查,最后才发现本来是芯片内部出现短路这次的焊接,我明白了,在检测过程中假如采用分部份进行查找,检测错误的效率会大大提高十三、软件下载将编好的实验程序烧到ATC89C54芯片中加上电源,出现实验规定的结果十四、课程设计的心得体会本次实验是在上学期的单片机课程学习后的一次实践单片机课程重要是采用汇编语言进行编写程序,而这次我是用c语言进行编写实验程序的为此我在课程设计过程中,对c语言在单片机应用上花了一些时间,搞清楚了如何使用c语言编写单片机程序在实验仿真过程中,需要知道相关芯片的功能,这使我对一些芯片有了初步的了解,并能很好的使用这些芯片实现相关的功能在本次焊接板子之前,我已有过几次的焊接经验了,但每次都有不同的收获就这次来说吧,我认为焊接可以将一个整体分为几个模块,在一个模块焊好后就开始检查线路这样可以在当整体焊好之后,检查更加有效,并减小犯错的概率。
