单片机C语言按键控制LED灯

为什么上面的写法和下面被注释掉的写法都能实现按下灯亮,松手灯灭呢?
这两种写法有什么区别?哪个比较规范?

其实是一样的,也没什么哪个规范这一说,这个看个人习惯了

首先if(SW13==0)是判断此引脚是否为0 (按键按下)
然后一个delay用于按键防抖动

没被注释的那部分是靠if在次判断是否为0按下按下后执行LED_ON函数使LED亮
然后通过while判断按键是否松开,如果松开的话就继续执行LED_OFF将LED关闭

而注释掉的那段是依靠while函数直接判断按键是否处于按下状态
是的话就循环执行LED_ON函数直至判断按键松开(SW13=1)后在继续执行到LED_OFF函数使LED 关闭

不过这两种写法的有个共同缺点就是按键判断是while死循环,如果你这个按键按下后,单片机就只是在判断这个条件成立与否,期间不在进行其他工作追问

你的意思是,按键按下之后,别的都不可以中断了,是这个意思吗?

追答

如果开了中断的话是可以打断的,但没有内外部中断的话,他就只执行这个程序了呵呵

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-09
两种写法区别不大 ,都是在条件语句中加了循环结构
两种写法主要区别就在于while(!sw13) while(sw13==0)的循环条件的形式不同
!sw13求反 sw13==0关系判断 但实质都一样 即SW13为低电平就循环 因此
都能实现按下灯亮,松手灯灭。二者功能是一样的。

比较:
最后一段的程序代码比较规范和简练(只是用了一条条件语句)

呵呵 满意 就选满意回答哦
第2个回答  2014-01-09
第一种更好。
第一种: 判断SW按键按下==》LED打开==》反复判断SW是否松开,如果没有执行空操作。==》按键松开后while判断为假,于是关闭LED。

第二种:while一直判断SW状态,如果按下则不断执行LED打开(而方法一while执行的是空操作)
第3个回答  2014-01-09
上面的好一点:按下的时候程序一直在执行while(!sw13);
下面的程序在键按下的时候执行的是LED_ON;
相似回答