理论教育 按下S1时,低4位亮,抬起后高4位亮

按下S1时,低4位亮,抬起后高4位亮

时间:2023-10-19 理论教育 版权反馈
【摘要】:按下S1时,只有低4位亮,抬起后只有高4位亮。题意分析要求用switch语句实现判断,就是用switch语句来代替if语句。S1有两种状态,即1和0,所以需要两个case分支。设计过程1)在例4-14的基础上修改main.c程序。导致当用户按住S1后,LED状态会不停变化。

按下S1时,低4位亮,抬起后高4位亮

除了利用if语句进行分支判断外,C语言还提供了另一种用于多分支选择的switch语句,其一般形式为

978-7-111-33274-9-Chapter04-90.jpg

其语义是,计算表达式的值,并逐个与其后面的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,不再进行判断,继续执行后面所有case后面的语句。如果表达式的值与所有case后面的常量表达式均不相同时,则执行default后面的语句。下面举例说明switch语句用法。

【例4-15】硬件电路如图4-10所示。编程实现通过按键S1来控制8个LED的状态。按下S1时,只有低4位亮,抬起后只有高4位亮。要求用switch语句实现判断。

题意分析

要求用switch语句实现判断,就是用switch语句来代替if语句。S1有两种状态,即1和0,所以需要两个case分支。

设计过程(www.daowen.com)

1)在例4-14的基础上修改main.c程序。把main.c改为如下所示。

978-7-111-33274-9-Chapter04-91.jpg

2)在MPLAB中,使用Proteus VSM调试工具,打开本例电路图。将以上代码编译后用Proteus VSM运行一下,观察按与不按S1的情况下,LED的状态如何变化。

运行效果分析

本程序的重点是每条case语句和default语句后都要加入break关键字。break关键字这里用做跳出switch语句向下执行,若不加则会造成程序功能出错。例如,本程序第一个break如果不加的话,当用户按住S1后,LED状态会不停变化,这是因为当执行“case0”分支时先执行“PORTC=0x0F;”使LED低4位亮高4位灭,然后由于没有break语句,程序继续向下执行,就执行了“PORTC=0xF0;”,这使LED低4位灭高4位亮,然后执行break跳出switch语句。由于外重是死循环,程序还会重复执行以上过程。导致当用户按住S1后,LED状态会不停变化。请读者把第一条break语句注释后自行验证。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈