自己做的樓梯照明燈,希望各位朋友捧捧場實驗目的:
實現(xiàn)樓道間照明燈的方便控制,一個照明燈,在樓上和樓下各有一個(閉合式)開關(guān)控制。開關(guān)的閉合并不直接決定燈的亮滅,而開關(guān)狀態(tài)的改變才是決定燈亮滅的關(guān)鍵。即不管兩個開關(guān)當前的狀態(tài)如何,只要有一個開關(guān)狀態(tài)發(fā)聲變化,都會使照明燈在打亮或者熄滅兩種狀態(tài)間切換。比如當有人要上樓,若之前燈是滅的,在按下樓下開關(guān)后(此后開關(guān)為閉合狀態(tài)),燈會打亮;當?shù)綐巧虾螅侔礃巧祥_關(guān),燈會熄滅。而當后來又有人上樓時,再按次樓下開關(guān)(此后開關(guān)為打開狀態(tài)),燈同樣會打亮;此試驗中,用P1口相連的第一個led來模擬照明燈,而用s2和s3來模擬兩個開關(guān)。注意,因為實際樓道中的開關(guān)為閉合式的,而HL-1的開關(guān)為反彈式的,所以實驗時,請用手一直按著按鍵演示開關(guān)的閉合。
程序:
#include <reg52.h>
sbit light=P1^0;
sbit s1=P3^4;
sbit s2=P3^5;
bit change,s1sta,s2sta;//s1sta,s2sta為開關(guān)s1和s2前一時刻的狀態(tài),用來和當前的s1與s2狀態(tài)進行對比,
//進而判決兩個開關(guān)的狀態(tài)有無發(fā)生變化。
bit keyscan()
{
if((s1^s1sta)||(s2^s2sta)) //^為異或,若兩者不同,則結(jié)果為1。即若兩開關(guān)中,任一開關(guān)的狀態(tài)發(fā)生變化,則此條件即為真。
change=1;
return change;
}
void main()
{
s1sta=s1;
s2sta=s2;
while(1)
{
keyscan(); //掃描按鍵狀態(tài)是否變化,即是否有人更改了按鍵狀態(tài)。
if(change)
{
change=0; //清零
light=~light; //一旦發(fā)現(xiàn)有開關(guān)狀態(tài)發(fā)生了變化,則燈的狀態(tài)就取反。(若以前亮,則熄滅;反之則打亮)
s1sta=s1; //同時,將s1和s2的當前狀態(tài)送給s1sta和s2sta,為以后的比較做準備。
s2sta=s2;
}
}
}
全部資料51hei下載地址:
【實驗14】樓梯照明燈.zip
(10.83 KB, 下載次數(shù): 25)
2018-4-20 08:00 上傳
點擊文件名下載附件
照明燈 下載積分: 黑幣 -5
|