|
|
发表于 2012-8-30 18:51:17
|
显示全部楼层
华琳 发表于 2012-8-30 18:27 
还有,那 “old_val=val” 是为什么
old_val的意思是上次的数据,而val是当前的数据,每次执行程序后会把当前的数据给old_val。程序具体流程是这样的:当按键按下,引脚接高电平,就是说val值为HIGH,而old_val的值默认为LOW,这样当按键按下之后会执行第一条if语句,并且state会变为1,然后跳出if语句,执行old_val=val,就是把old_val变为HIGH,然后再执行下面的if语句,因为state为1,所以执行LED为HIGH,这时候回到最上面的if语句,会发现old_val已经为HIGH,不满足if语句的执行条件,故state的值不会改变,LED的状态也不会改变,继续往下又会执行old_val=val,此时按键还没松开,因为单片机的速度很快。就这样一遍又一遍的循环执行,虽然按键不放开,但是灯的状态不会改变。当按键松开后,第一条if语句肯定不成立了,因为val的值变为LOW了,然后执行old_val=val,此时al的为LOW,所以old_val也为LOW,但是state的值无变化所以LED仍然为HIGH.让按键重新按下的时候第一条if语句执行,state的状态变为0,继续执行old_val=val,然后下面的if语句,由于state的状态为0,所以执行的是下面的else语句,所以LED灭掉。所以程序的最后执行效果就是按下按键灯的状态取反一下。 |
|