|
|
state, deteok, beep1是用戶設(shè)定的3個(gè)bit型標(biāo)志位,標(biāo)志位就是對(duì)運(yùn)行結(jié)果的標(biāo)明。比如說你要跑五千米,跑道一圈只有400米,那我們可以聲明一個(gè)變量uchar flag,每當(dāng)你跑一圈flag就++一次,那到時(shí)候如果想知道已經(jīng)跑了幾圈只需要看flag的值就可以了。我們也可以把它用作下一段程序執(zhí)行的條件,比如說你跑到兩千米要休息一下,那就 if (flag==5){休息一下};在這的話state, deteok, beep1是bit型,所以只有0和1。
分析程序能看出beep1的值是由dateOK和state決定的:當(dāng)state=1,dateOK=1時(shí)beep1=1;dateok是當(dāng)state=1,tes-t --到0時(shí)為1;state是當(dāng)?shù)谝淮伟聪耴ey2時(shí)為1,再按取反為0,如此往復(fù)。也能看出有且只有state=0時(shí)date beep1才置0。
所以定時(shí)器0的中斷就是:第一次開機(jī),TIME=3,state, deteok, beep1都為0,中斷內(nèi)部一直ms++,k++,ms=0,不執(zhí)行其他,主程序中一直數(shù)碼管顯示,檢測key,關(guān)beep、led,置0 dateOK、beep1。當(dāng)按下key1時(shí),TIME(即tes-t)的值改變,其他不變。 按下key2時(shí),state=1,此時(shí)tes-t開始每隔1秒減減,當(dāng)tes-t=0時(shí)dateOK=1,緊接著beep1=1,然后蜂鳴器以300ms的周期開始響,直到beep1=0,也就是dateok=0,也就是state=0,即再次按下key2.以后就是如此重復(fù),不過TIME的值是你上次的值不變。
外部中斷不用說了吧,當(dāng)state=1時(shí),初始化tes-t和ms。 |
|