第一節(jié) 按鍵的基本知識(shí)
按鍵按照結(jié)構(gòu)原理可分為兩類,一類是觸點(diǎn)式開關(guān)按鍵,如機(jī)械式開關(guān)、導(dǎo)電橡膠式開關(guān)燈;另一類是無觸點(diǎn)式開關(guān)按鍵,如電氣式按鍵,磁感應(yīng)按鍵等。前者造價(jià)低,后者壽命長(zhǎng)。目前,微機(jī)系統(tǒng)中最常見的是觸點(diǎn)式開關(guān)按鍵。
在單片機(jī)應(yīng)用系統(tǒng)中,除了復(fù)位按鍵有專門的復(fù)位電路及專一的復(fù)位功能外,其他按鍵都是以開關(guān)狀態(tài)來設(shè)置控制功能或輸入數(shù)據(jù)的。當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下時(shí),計(jì)算機(jī)應(yīng)用系統(tǒng)應(yīng)完成該按鍵所設(shè)定的功能,按鍵信息輸入時(shí)與軟件結(jié)構(gòu)密切相關(guān)的過程。
對(duì)于一組按鍵或一個(gè)鍵盤,總有一個(gè)接口電路與MCU相連。MCU可以采用查詢或中斷方式了解有無將按鍵輸入,并檢查是哪一個(gè)按鍵按下,將該鍵號(hào)送入程序,然后通過指令轉(zhuǎn)入執(zhí)行該鍵的功能程序,執(zhí)行完成后再返回主程序。
按鍵通常使用機(jī)械觸點(diǎn)式按鍵開關(guān),其主要功能式把機(jī)械上的通斷轉(zhuǎn)換為電氣上的邏輯關(guān)系。也就是說,它能提供標(biāo)準(zhǔn)的TTL邏輯電平,以便于通用數(shù)字系統(tǒng)的邏輯電平相容。機(jī)械式按鍵再按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定的時(shí)間觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來。
抖動(dòng)時(shí)間的長(zhǎng)短與開關(guān)的機(jī)械特性有關(guān),一般為5~10ms。在觸點(diǎn)抖動(dòng)期間檢測(cè)按鍵的通與斷,可能導(dǎo)致判斷出錯(cuò),即按鍵一次按下或釋放錯(cuò)誤的被認(rèn)為是多次操作,這種情況是不允許出現(xiàn)的。為了克服按鍵觸點(diǎn)機(jī)械抖動(dòng)所致的檢測(cè)誤判,必須采取消抖措施。硬件的消抖方案有很多種:在按鍵引腳與微控制器之間添加外部電路元件,如電容、電阻或Schmitt觸發(fā)器等,這些電路元件可以濾除按鍵的電氣噪音,提供更穩(wěn)定的電平信號(hào)。
單片機(jī)控制系統(tǒng)中,如果只需要幾個(gè)功能鍵,此時(shí),可采用獨(dú)立式按鍵結(jié)構(gòu)。獨(dú)立按鍵式直接用I/O口構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)式每個(gè)按鍵單獨(dú)占用一根I/O口,每個(gè)按鍵的工作不會(huì)影響其他I/O口的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一個(gè)I/O口,因此,在按鍵較多時(shí),I/O口浪費(fèi)較大,不宜采用。
獨(dú)立按鍵的軟件常采用查詢式結(jié)構(gòu)。先逐位查詢與I/O口的輸入狀態(tài),如某一根I/O口輸入為低電平,則可確認(rèn)該I/O口所對(duì)應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。
單片機(jī)按鍵一般通過配備上拉電阻來實(shí)現(xiàn)輸入端高低電平的切換。
4條輸入線接到單片機(jī)的IO口上,當(dāng)按鍵K1按下時(shí),+5V通過電阻R1然后再通過按鍵K1最終進(jìn)入GND形成一條通路,那么這條線路的全部電壓都加到了R1這個(gè)電阻上,KeyIn1這個(gè)引腳就是個(gè)低電平。當(dāng)松開按鍵后,線路斷開,就不會(huì)有電流通過,那么KeyIn1和+5V就應(yīng)該是等電位,是一個(gè)高電平。我們就可以通過KeyIn1這個(gè)IO口的高低電平來判斷是否有按鍵按下。
第二節(jié) 硬件解讀
從圖中我們可以看出,藍(lán)橋杯物聯(lián)網(wǎng)開發(fā)板上面有2個(gè)可編程按鍵,分別連接到PA8和PB8。如果PA8是高電平,就證明按鍵沒有被按下,反之則被按下。
第三節(jié) CubeMX配置
第一步:配置PA8和PB8為輸入模式,如下:
第二步:配置GPIO為上拉,并配置用戶標(biāo)簽,如下圖,
其中:具體配置信息如下:
GPIO mode:表示輸入模式,固定可為輸入模式(Input mode);
GPIO Pull-up/Pull-down:表示是否上下拉,可配置為上拉(Pull-up)或者下拉(Pull-down)或不上拉也不下拉(No Pull-up and no Pull-down);
User Label:表示用戶標(biāo)簽,可修改IO口名稱,比如可寫入KEY,把IO口名稱變?yōu)镵EY;
第四節(jié) MDK代碼
結(jié)合上圖,可以看出需要20ms的消抖時(shí)間。所以按鍵的模板代碼如下:
不要忘記在.h文件中聲明哦:
最后我們?cè)趙hile中讀取按鍵,就可以啦:
第五節(jié) 實(shí)驗(yàn)現(xiàn)象
注意:
2,請(qǐng)選擇A開發(fā)板。
現(xiàn)象:
1,按下按鍵ASW1,AL1翻轉(zhuǎn)一次。
2,按下按鍵ASW2,AL2翻轉(zhuǎn)一次。
來源:撞上電子微信公眾號(hào)
版權(quán):東莞市東城墨竹公子電子工作室
日期:2024.11.03
第六節(jié) 課后作業(yè)
按下按鍵ASW1,AL3翻轉(zhuǎn)。
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44621瀏覽量
638495 -
GPIO
+關(guān)注
關(guān)注
16文章
1216瀏覽量
52377 -
藍(lán)橋杯
+關(guān)注
關(guān)注
1文章
129瀏覽量
10195
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論