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