用單片機I/0口做按鍵輸入實(shí)驗
典型單片機的I/0口都是準雙向口,既可以當輸出口也可以當輸入口。具體操作時(shí),我們將數據寫(xiě)出I/0口就是將它當作輸出口使用;如果在程序中直接調用當前I/0口的狀態(tài),給我們定義的變量賦值或用于邏輯判斷、分支控制等操作,就是將它當作輸入口使用。
下圖是使用P2.0口讀取按鍵控制的電路。
從下圖中可見(jiàn),在該電路中P2.0口是輸入應用。當按鍵沒(méi)有按下時(shí)+5V通過(guò)上拉電阻R1接到P2.0,這時(shí)P2.0口的電壓是+5V,即邏輯“1”:如果按鍵被按下,P2.0通過(guò)按鍵接到電源地,這時(shí)P2.0口的電壓是OV,即邏輯“0”。
綜上所述,不按鍵時(shí)P2.0的狀態(tài)是“1”;按鍵時(shí)P2.0的狀態(tài)是“0”。
如果沒(méi)有電阻R1,當按鍵接下時(shí)+5V電源會(huì )通過(guò)按鍵被短路到地,嚴重時(shí)會(huì )損壞電源,這是絕對不允許的。
假設單片機同時(shí)連接上圖和下圖的電路,用P2.0做輸入口,讀取按鍵:用P3.4控制蜂鳴器。寫(xiě)一個(gè)程序,當按鍵按下時(shí)蜂鳴器鳴響,按鍵沒(méi)有按下時(shí)蜂鳴器停止鳴響,程序如下:
#include
sbitBuzzer=P3^4;sbitKey=P2^0;//【注1】
//主程序voiDMAin(void){for(;;){if(Key==0){//【注2】
Buzzer=0;//按鍵被按下,蜂鳴器鳴響}
else{Buzzer=1;//按鍵沒(méi)有按下,蜂鳴器停止鳴響}
}
【注1】:將位變量Key定義為單片機P2.0口,以后對變量Key的操作就是對P2.0口的操作;
【注2】:條件語(yǔ)句,直接用Key的狀態(tài)(即P2.0口的狀態(tài)】來(lái)控制程序的運行。如果按鍵被按下P2.0的狀態(tài)為0,Key=0為真,程序執行Buzzer=0,這時(shí)蜂鳴器鳴響;如果按鍵沒(méi)有按下,P2.0的狀態(tài)為1,Key=0為假,程序執行Buzzer=1,蜂鳴器停止鳴響。
評論