- 單片機(jī)原理及應(yīng)用
- 趙旭輝 楊靈主編
- 1759字
- 2021-09-27 12:50:20
3.4 使用并行接口驅(qū)動(dòng)鍵盤
鍵盤是常用的輸入設(shè)備,通過鍵盤可以輸入各種控制信息。按鍵時(shí)接口電路把表示鍵位的編碼送入計(jì)算機(jī),從而實(shí)現(xiàn)操作者的命令意圖。按獲取編碼的方式不同,可以將鍵盤分為編碼鍵盤和非編碼鍵盤兩大類。
課件 使用并行口驅(qū)動(dòng)鍵盤

視頻 使用并行口驅(qū)動(dòng)鍵盤

編碼鍵盤由較多的按鍵和專用的驅(qū)動(dòng)芯片構(gòu)成,采用硬件編碼電路來實(shí)現(xiàn)鍵盤的編碼,每按一個(gè)鍵,就會(huì)自動(dòng)產(chǎn)生與之對應(yīng)的編碼。編碼鍵盤響應(yīng)速度快,可自動(dòng)處理按鍵抖動(dòng)、連擊等問題。當(dāng)系統(tǒng)功能復(fù)雜、按鍵數(shù)量較多時(shí),采用編碼鍵盤可以簡化軟件的設(shè)計(jì)工作。非編碼鍵盤利用按鍵直接與單片機(jī)相連,只需要判斷按鍵是否按下,然后由軟件來識(shí)別進(jìn)行后續(xù)操作。和編碼鍵盤相比,非編碼鍵盤硬件極其簡單,每個(gè)鍵位通過軟件編程都可以重新定義,具有很大的靈活性,但其響應(yīng)速度遠(yuǎn)不如編碼鍵盤。非編碼鍵盤主要有獨(dú)立式鍵盤(線性鍵盤)和矩陣式鍵盤兩種。因?yàn)閱纹瑱C(jī)不需要進(jìn)行復(fù)雜的輸入,所以通常使用非編碼鍵盤進(jìn)行信息輸入。下面先介紹獨(dú)立式鍵盤與按鍵去抖的內(nèi)容。
所謂獨(dú)立式鍵盤,就是一個(gè)按鍵對應(yīng)一條口線,有多少個(gè)按鍵,就需要多少條口線,但各個(gè)按鍵之間彼此獨(dú)立沒有相互聯(lián)系,如圖3-14所示。

圖3-14 獨(dú)立式鍵盤示意圖
其工作原理是利用單片機(jī)的I/O口既可以作輸入也可以作輸出的特性來實(shí)現(xiàn)的。當(dāng)檢測按鍵時(shí),使用的是輸入功能,按鍵的連接方法是一端接地,另一端與某個(gè)I/O口線相連。開始檢測時(shí)先給該I/O口賦高電平,然后讓單片機(jī)不斷地檢測該I/O口的電平,當(dāng)按下該鍵位時(shí),相當(dāng)于該I/O口接地,此時(shí)為低電平。一旦系統(tǒng)檢測到這個(gè)低電平,即意味著用戶按下了該鍵位,然后就可以去執(zhí)行相關(guān)的后續(xù)操作了。
單片機(jī)系統(tǒng)中通常使用的按鍵是彈性按鍵開關(guān)、自鎖式按鍵開關(guān)還有貼片式按鍵開關(guān),如圖3-15所示。

圖3-15 常用的按鍵開關(guān)
彈性按鍵開關(guān)按下時(shí),開關(guān)閉合;松開時(shí),開關(guān)斷開。自鎖式按鍵開關(guān)按下時(shí),開關(guān)閉合并能自動(dòng)鎖住狀態(tài);當(dāng)再次按下時(shí),才重新彈起斷開。貼片式按鍵開關(guān)與彈性按鍵開關(guān)相同,只是焊接方式不同。
彈性按鍵開關(guān)利用的是機(jī)械觸點(diǎn)的閉合與斷開來實(shí)現(xiàn)信號輸入的。由于機(jī)械觸點(diǎn)的彈性作用,在按鍵閉合與斷開的瞬間并不會(huì)立即實(shí)現(xiàn)閉合或斷開,而是有一小段時(shí)間的“震顫”,這個(gè)現(xiàn)象稱為按鍵的抖動(dòng),如圖3-16所示。其時(shí)間長短與開關(guān)的機(jī)械特性有關(guān),一般為5~10ms。這個(gè)抖動(dòng)的時(shí)間雖然短暫但在CPU看來卻是足夠長的,因此會(huì)對CPU的按鍵檢測產(chǎn)生不小的影響,所以必須“去抖”。常用的去抖方法有兩種:一種是使用RS觸發(fā)器去抖電路的硬件方式;另一種是使用延時(shí)函數(shù)的軟件去抖方式。硬件方式需要增加硬件,增加成本,且設(shè)計(jì)上也很復(fù)雜。其原理如圖3-17所示。因此一般采用軟件去抖方式。

圖3-16 按鍵的抖動(dòng)

圖3-17 使用觸發(fā)器去抖
軟件去抖的實(shí)質(zhì)是在檢測到按鍵后,先執(zhí)行一段延時(shí)函數(shù),避開抖動(dòng)的時(shí)間,接著再去進(jìn)行按鍵檢測,以此來達(dá)到去除按鍵抖動(dòng)的目的。具體的應(yīng)用延時(shí)函數(shù)去抖的按鍵檢測程序框架如圖3-18所示。

圖3-18 應(yīng)用延時(shí)去抖的按鍵檢測程序框架
應(yīng)用該程序框架只需要將連接按鍵的引腳位置確定,并將框架中的省略號替換為具體操作命令即可使用。通過這個(gè)框架也清晰地看到了使用延時(shí)函數(shù)實(shí)現(xiàn)按鍵去抖的工作過程。使用這種方法去抖,節(jié)省硬件,處理比較靈活。但是也要看到這種方式的不足,就是大量的延時(shí)程序會(huì)浪費(fèi)CPU時(shí)間,不利于提高CPU的使用效率。
【課堂練習(xí)】使用單片機(jī)設(shè)計(jì)一個(gè)控制電路,該電路里有8個(gè)LED,當(dāng)按下S1鍵時(shí),第1、3、5、7號LED點(diǎn)亮,松手時(shí)熄滅;當(dāng)按下S2鍵時(shí),第2、4、6、8號LED點(diǎn)亮,松手時(shí)熄滅;當(dāng)按下S3時(shí)全亮,松手時(shí)全滅。其連接電路如圖3-19所示。

圖3-19 按鍵控制LED點(diǎn)亮的電路原理圖
【分析】LED均接在P1口上,根據(jù)LED點(diǎn)亮的原理,要使第1、3、5、7號LED點(diǎn)亮,則P1的值為AAH;使2、4、6、8號LED點(diǎn)亮,則P1的值為55H;要使全部LED點(diǎn)亮,則P1的值為00H;全部熄滅,則P1的值為FFH。
3個(gè)按鍵分別接在P3口的P3.2、P3.3和P3.4上,程序工作時(shí),只需要檢測對應(yīng)的P3.2、P3.3和P3.4引腳的值是否為低電平,就能知道是否按下了該按鍵。為了保證效果,要在檢測到為低電平時(shí),進(jìn)行“去抖”操作,即檢測到低電平后,先延遲10ms,接著再檢測該按鍵是否還是低電平,若還是低電平,則表示確實(shí)按下了該按鍵,然后修改P1口的值,使對應(yīng)的LED點(diǎn)亮即可。
參考程序如下:


獨(dú)立式鍵盤使用起來簡單靈活,檢測方便,其主要缺點(diǎn)是占用口線太多,不利于多按鍵鍵盤掃描。
- Istio入門與實(shí)戰(zhàn)
- 電腦維護(hù)與故障排除傻瓜書(Windows 10適用)
- Intel FPGA/CPLD設(shè)計(jì)(高級篇)
- 電腦維護(hù)365問
- Svelte 3 Up and Running
- 單片機(jī)原理及應(yīng)用:基于C51+Proteus仿真
- FL Studio Cookbook
- Intel FPGA權(quán)威設(shè)計(jì)指南:基于Quartus Prime Pro 19集成開發(fā)環(huán)境
- 微服務(wù)實(shí)戰(zhàn)(Dubbox +Spring Boot+Docker)
- 單片機(jī)原理及應(yīng)用
- Mastering Quantum Computing with IBM QX
- Angular 6 by Example
- The Reinforcement Learning Workshop
- 數(shù)據(jù)恢復(fù)與硬盤修理
- PLC技術(shù)實(shí)用教程