|
state, deteok, beep1是用户设定的3个bit型标志位,标志位就是对运行结果的标明。比如说你要跑五千米,跑道一圈只有400米,那我们可以声明一个变量uchar flag,每当你跑一圈flag就++一次,那到时候如果想知道已经跑了几圈只需要看flag的值就可以了。我们也可以把它用作下一段程序执行的条件,比如说你跑到两千米要休息一下,那就 if (flag==5){休息一下};在这的话state, deteok, beep1是bit型,所以只有0和1。 分析程序能看出beep1的值是由dateOK和state决定的:当state=1,dateOK=1时beep1=1;dateok是当state=1,tes-t --到0时为1;state是当第一次按下key2时为1,再按取反为0,如此往复。也能看出有且只有state=0时date beep1才置0。 所以定时器0的中断就是:第一次开机,TIME=3,state, deteok, beep1都为0,中断内部一直ms++,k++,ms=0,不执行其他,主程序中一直数码管显示,检测key,关beep、led,置0 dateOK、beep1。当按下key1时,TIME(即tes-t)的值改变,其他不变。 按下key2时,state=1,此时tes-t开始每隔1秒减减,当tes-t=0时dateOK=1,紧接着beep1=1,然后蜂鸣器以300ms的周期开始响,直到beep1=0,也就是dateok=0,也就是state=0,即再次按下key2.以后就是如此重复,不过TIME的值是你上次的值不变。 外部中断不用说了吧,当state=1时,初始化tes-t和ms。 |