山东大学单片机原理与应用实验 4.1 按键声光报警实验
目錄
一、實(shí)驗(yàn)題目
二、實(shí)驗(yàn)要求
三、實(shí)驗(yàn)過(guò)程及結(jié)果
四、實(shí)驗(yàn)流程圖
五、實(shí)驗(yàn)源代碼
一、實(shí)驗(yàn)題目
4.4按鍵聲光報(bào)警實(shí)驗(yàn)
二、實(shí)驗(yàn)要求
1、畫(huà)出實(shí)驗(yàn)的流程圖
2、編寫(xiě)源程序并進(jìn)行注釋
3、記錄實(shí)驗(yàn)過(guò)程
4、記錄程序運(yùn)行結(jié)果截圖
三、實(shí)驗(yàn)過(guò)程及結(jié)果
本實(shí)驗(yàn)聯(lián)系靜態(tài)按鍵識(shí)別,發(fā)光二極管驅(qū)動(dòng),以及外部中斷的使用方法,實(shí)驗(yàn)原理圖如下圖1所示(注:圖中元件編號(hào)中括號(hào)里面的內(nèi)容表示該元件所在的板子名稱(chēng),如CPU 表示該元器件位于CPU 板,以下類(lèi)同)。
圖1:實(shí)驗(yàn)原理圖
要求利用外部硬件中斷,按鍵按下一次產(chǎn)生一次外部中斷,在中斷服務(wù)程序中計(jì)數(shù)器加1,同時(shí),通過(guò)發(fā)光二極管的閃爍和蜂鳴器響的次數(shù),指示計(jì)數(shù)器的當(dāng)前值。當(dāng)計(jì)數(shù)到10時(shí),再次按鍵將重新從1開(kāi)始計(jì)。
1. 在實(shí)驗(yàn)前先采用軟件仿真的方式驗(yàn)證代碼。
?? 1)使用Proteus軟件搭建實(shí)驗(yàn)電路如下所示:
圖2:實(shí)驗(yàn)電路圖
?2)使用keil軟件新建工程與文件,將代碼寫(xiě)入,并且build,將hex文件導(dǎo)入
?3)觀察實(shí)驗(yàn)結(jié)果如下圖所示,可知程序運(yùn)行符合題意:
圖3:仿真實(shí)驗(yàn)結(jié)果
2. 硬件實(shí)驗(yàn)運(yùn)行
1)關(guān)掉實(shí)驗(yàn)箱電源。將 MCU 板插接在母板上,按照前面連接關(guān)系表將硬件連接好。
2)在仿真器斷電情況下將仿真器的仿真頭插在 MCU 板的MCU 插座上。將仿真器與開(kāi)發(fā)PC 機(jī)的通信口連接好,打開(kāi)實(shí)驗(yàn)箱及仿真器的電源。
3)運(yùn)行 Keil uVision2 開(kāi)發(fā)環(huán)境,建立工程int0_c.uV2,MCU 為AT89S51,包含啟動(dòng)文件STARTUP.A51。
4)按照實(shí)驗(yàn)功能要求創(chuàng)建源程序 int0.c 并加入到工程int0_c.uV2,并設(shè)置工程
int0_c.uV2 屬性,將其晶振頻率設(shè)置為11.0592MHz,選擇輸出可執(zhí)行文件,DEBUG方式選擇硬件DEBUG,并選擇其中的“WAVE V series MCS51 Driver”仿真器。
5)構(gòu)造(Build)工程 int0_c.uV2。如果編程有誤進(jìn)行修改,直至構(gòu)造正確為止。
6)運(yùn)行程序,按下 MCU 板上的KEY0 按鍵,觀察每次按鍵按下時(shí)主板上的發(fā)光二極管的閃爍和蜂鳴器響的次數(shù),是否符合程序要求,若不符合要求,分析出錯(cuò)原因,繼續(xù)重復(fù)第4、5 步的步驟,直至結(jié)果正確。
通過(guò)硬件實(shí)驗(yàn)可知,按下按鍵即可看到燈閃一次,蜂鳴器響一次;再次按下,就是閃兩次,響兩次。一直到最后閃10次,響十次;再次按下時(shí),跳回1重新開(kāi)始。
四、實(shí)驗(yàn)流程圖
圖4:實(shí)驗(yàn)流程圖
五、實(shí)驗(yàn)源代碼
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit led=P3^0; //定義led燈控制端口 sbit bell=P3^1; //定義蜂鳴器控制端口 sbit key=P3^2; //定義報(bào)警控制端口 uchar count,i; //定義計(jì)數(shù)器 void delay(uchar count) // 定義延時(shí)函數(shù) {uint x,y;for(x=count;x>0;x--) //循環(huán)嵌套for(y=110;y>0;y--); //1ms延時(shí)函數(shù) }//總延時(shí)為count*1 ms void show(uchar count) // 定義蜂鳴器報(bào)警并且燈光閃爍 { i=count; //循環(huán)變量for(;i!=0;i--) //函數(shù)循環(huán)次數(shù){led=0; //置低電平則LED燈亮bell=0; // 置低電平則蜂鳴器響delay(500); //調(diào)用延時(shí)函數(shù)led=1; //置高電平則LED燈滅bell=1; //置高電平蜂鳴器不響delay(500); //調(diào)用延時(shí)函數(shù)} } void s_timer0() interrupt 0 using 0 // 定義中斷程序 { EA=0; //屏蔽中斷請(qǐng)求if(count!=10)count=count+1; //count自增show(count); delay(50);//延時(shí)if(count==10) // 緊接著就要判斷是否是10,否則,再響十次之后,下一次不會(huì)是響一次。count=0; //若count為10則結(jié)束,重新賦值為0EA=1; //允許中斷 } void main() // 主程序 { EA=1; //允許中斷EX0=1; //允許外部中斷0中斷IT0=0; //設(shè)置外中斷0為電平觸發(fā)方式while(1); //循環(huán) }初學(xué)單片機(jī),可能存在錯(cuò)誤之處,還請(qǐng)各位不吝賜教。
總結(jié)
以上是生活随笔為你收集整理的山东大学单片机原理与应用实验 4.1 按键声光报警实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电机与运动控制笔记整理(一)——直流电机
- 下一篇: luoguP4168: [Violet]