|
#include <reg52.h>
sbit light=P1^0;
sbit s2=P3^0;
sbit s3=P3^1;
bit change,s2sta,s3sta;//s2sta,s3sta為開(kāi)關(guān)s2和s3前一時(shí)刻的狀態(tài),用來(lái)和當(dāng)前的s1與s2狀態(tài)進(jìn)行對(duì)比,
//進(jìn)而判決兩個(gè)開(kāi)關(guān)的狀態(tài)有無(wú)發(fā)生變化。
bit keyscan()
{
if((s2^s2sta)||(s3^s3sta)) //^為異或,若兩者不同,則結(jié)果為1。即若兩開(kāi)關(guān)中,任一開(kāi)關(guān)的狀態(tài)發(fā)生變化,則此條件即為真。
change=1;
return change;
}
void main()
{
s2sta=s2;
s3sta=s3;
while(1)
{
keyscan(); //掃描按鍵狀態(tài)是否變化,即是否有人更改了按鍵狀態(tài)。
if(change)
{
change=0; //清零
light=~light; //一旦發(fā)現(xiàn)有開(kāi)關(guān)狀態(tài)發(fā)生了變化,則燈的狀態(tài)就取反。(若以前亮,則熄滅;反之則打亮)
s2sta=s2; //同時(shí),將s2和s3的當(dāng)前狀態(tài)送給s2sta和s3sta,為以后的比較做準(zhǔn)備。
s3sta=s3;
}
}
}
|
評(píng)分
-
查看全部評(píng)分
|