#include <reg52.h>
sbit light=P1^0;
sbit s2=P3^0;
sbit s3=P3^1;
bit change,s2sta,s3sta;//s2sta,s3sta為開關s2和s3前一時刻的狀態,用來和當前的s1與s2狀態進行對比,
//進而判決兩個開關的狀態有無發生變化。
bit keyscan()
{
if((s2^s2sta)||(s3^s3sta)) //^為異或,若兩者不同,則結果為1。即若兩開關中,任一開關的狀態發生變化,則此條件即為真。
change=1;
return change;
}
void main()
{
s2sta=s2;
s3sta=s3;
while(1)
{
keyscan(); //掃描按鍵狀態是否變化,即是否有人更改了按鍵狀態。
if(change)
{
change=0; //清零
light=~light; //一旦發現有開關狀態發生了變化,則燈的狀態就取反。(若以前亮,則熄滅;反之則打亮)
s2sta=s2; //同時,將s2和s3的當前狀態送給s2sta和s3sta,為以后的比較做準備。
s3sta=s3;
}
}
}
|