Page Title

第十四课 扩展应用---单按键控制灯开关


2022-12-19 10:15:38


我们在上节课的案例中已经学会了如何使用LED灯。当然我们也可以使用按键来控制灯的开与关,就如生活中开关控制台灯、控制卧室灯客厅灯一样。本节课先使用板载的AB按键分别作为控制LED灯的开与关,然后再尝试外接一个按键模块来控制LED灯的亮灭。


一、学习目标


l了解按键模块

l掌握按键模块按下与弹起两种状态的返回值

l程序编写与调试完成按键控制灯的开与关


二、硬件学习


这个模块可以作为开关使用。按键有按下弹起两种状态。默认状态是弹起;当用手指按住按键帽往下按、并且保持不动的时候,就处于按下状态;松开手指,按键又会重回弹起状态。

单按键模块.png


三、硬件连接


首先将23P连接线分别连入1个按键模块和1LED模块的接口中;然后将按键模块连入P0端口、LED模块插连入P1端口。好搭掌控开机,用Type-C线把主控板和计算机连接起来。

图片3.png


四、指令学习


4.1“读取引脚数字值“指令

1.png

这条指令在基础功能类别指令中,指令默认引脚是 P0”。通过单击下拉列表,可以选择P0P1P15P16;用于读取引脚的数字值,一般返回的数字值为01


4.2“板载按键A被按下“指令

2.png

这条指令在板载功能传感器类别指令中,指令默认引脚是A“,通过单击下拉列表,可以选择BA+B


五、程序实现


5.1板载AB按键控制LED灯亮与灭

当好搭掌控的板载按键A被按下的时候,LED灯点亮;当B被按下时,LED灯熄灭。程序如下图所示。

3.png


5.2外接按键模块状态测试

外接按键有2种状态,分别是按下和弹起。通过程序来测试两种状态下的返回值为什么。使用OLED显示屏来显示返回值。程序如下图所示:

4.png


注意:OLED屏显示指令中现实的内容是文本,读取引脚数字值返回的是数字,所以需要为文本指令将数字值转为文本的数字。

测试得到如下所示:

表1.png


5.3外接按键控制LED灯亮灭

通过上面的测试可以得到,当按键按下时,返回值为1,弹起返回值为0。这样我们就可以设置当按下按键的时候LED灯打开,松开也就是按键弹起时LED灯熄灭。程序如下图所示:

5.png


5.4结合变量控制LED灯的亮与灭

上面程序实现的效果是按钮一直按着时LED灯点亮,松开后LED灯熄灭,不符合日常生活中的控制灯的效果。接下来实现以下效果,按键按下松开一次,LED亮;再按下松开一次,LED灭;如此往复。需要结合变量来实现这一效果。


5.4.1记录按键按下松开的次数,并显示到OLED屏上

按下按键一次,不论按下多长时间,只要不松开,OLED上的数字只增加1

设置一个num变量 ,记录按下松开的次数。

6.png


这个程序的运行结果是按下一次,OLED屏显示的数字增加的非常快。即使手速再快,每按一次,显示的数值都会至少增加几十。

这是因为:按键被按下的时间里,程序运行了很多次,变量num自增了很多次。

所以,问题的关键在于按键被按下时,如何让计数程序只运行一次。

这需要新建一个变量flag,用于记录按键的松开和按下状态,工程上这样的变量被称为“标志位”。

图片4.png


5.4.2点控LED 亮与灭

按键按下松开一次,LED亮;再按下松开一次,LED灭;如此往复。使用重复程序块和使用延时程序块一样,会阻断程序的运行。接下来介绍的才是真正正确的方法。

使用2个变量,变量flag用于按键状态标志位,变量mode用于控制LED灯的亮与灭。

当按下松开后mode变为1;再按下松开,mode变为0;如此往复,程序如下图所示:

7.png


按键按下松开一次,LED亮;再按下松开一次,LED灭;如此往复,修改程序如下图所示:

图片5.png


六、拓展与思考


在灯光打开和关闭时,让你的点阵屏也显示一定的效果,如何创意实现?想一想,编写程序,让你的开关灯更加有趣,试试吧!