![](http://img.inpai.com.cn/2023/0410/20230410091623448.jpg)
(資料圖片)
在上面介紹了使用I/O口點(diǎn)了LED,實(shí)際也可以用I/O口做按鍵檢測(cè)。這里采用的是P1.0口外接按鍵到GND。P1.1口外接LED到GND。
P1.0--->按鍵--->GND。
P1.1--->LED--->GND。
實(shí)驗(yàn)程序如下:
#include "stc15.h"void main(){ P11 = 0; // 初始設(shè)置P1.1為0 熄滅LED while (1) { if(P10 == 0) // P1.0口檢測(cè)到按鍵按下 { P11 = !P11; // P1.1口輸出取反 } }}
按鈕按下的時(shí)候的波形圖:
這里發(fā)現(xiàn),按鈕按下的時(shí)候并沒(méi)有機(jī)械抖動(dòng),而是波形直接被拉低了,松開之后也沒(méi)有抖動(dòng),波形也直接恢復(fù)了。這里我使用的是這種按鈕。
那么在之前的文章《8.樹莓派3B+按鈕操作)》中介紹的抖動(dòng)是有問(wèn)題了。當(dāng)時(shí)在這篇文章中的抖動(dòng)圖:
這個(gè)圖怎么說(shuō)呢,在我十年前接觸單片機(jī)的時(shí)候就是這么說(shuō)的,現(xiàn)在自己有示波器了,實(shí)際測(cè)試是沒(méi)有的。那么實(shí)際有沒(méi)有抖動(dòng)大家還是要以自己的測(cè)試為準(zhǔn)。按鈕檢測(cè)代碼也要以自己的實(shí)際電路和程序?yàn)闇?zhǔn)。之前我就是按照接觸的別人的知識(shí)處理的,在按鈕按下的時(shí)候等待20ms左右再次判斷電平。
if (rpio.read(button_pin) == rpio.LOW) { // 檢測(cè)到 低電平 rpio.msleep(20); // 按鍵消抖if (rpio.read(button_pin) == rpio.LOW) { rpio.write(led_pin, rpio.HIGH); // 點(diǎn)亮LED }}
在去年弄樹莓派的時(shí)候就一直對(duì)這個(gè)抖動(dòng)抱有懷疑,現(xiàn)在自己有示波器了,也就證實(shí)了之前的懷疑。還是實(shí)踐出真理。
標(biāo)簽: