曹旻罡
(北京農(nóng)業(yè)職業(yè)學(xué)院 北京 102442)
淺析51單片機(jī)控制系統(tǒng)的按鍵設(shè)計(jì)
曹旻罡
(北京農(nóng)業(yè)職業(yè)學(xué)院 北京 102442)
本文重點(diǎn)設(shè)計(jì)51單片機(jī)控制系統(tǒng)的按鍵子系統(tǒng),以4×4矩陣鍵盤電路為例,以矩陣鍵盤電路基本原理為核心設(shè)計(jì)0~F的16進(jìn)制按鍵的ASCII碼值輸出的設(shè)計(jì)流程,從而為按鍵與PC機(jī)連接奠定基礎(chǔ)。
51單片機(jī);矩陣鍵盤;P1端口
以單片機(jī)為核心的嵌入式控制系統(tǒng)使得人們生產(chǎn)生活自動(dòng)化成為可能,通過單片機(jī)的程序化控制流程、智能化識別和人性化的人機(jī)交互,從而按照人們的意愿來實(shí)現(xiàn)地對生活、生產(chǎn)中的各個(gè)方面的自動(dòng)化控制。其中,51的單片機(jī)作為最簡單的控制系統(tǒng)核心,在自動(dòng)化實(shí)現(xiàn)方面起到非常重要的作用,其按鍵子系統(tǒng)實(shí)現(xiàn)的人機(jī)交互功能在各個(gè)控制系統(tǒng)中起到非常重要的作用。
在51單片機(jī)的控制系統(tǒng)中,其中矩陣鍵盤電路是常見的人機(jī)交互的輸入設(shè)備,如圖1所示,為常見的4×4矩陣鍵盤的硬件電路示意圖。
圖1 4×4矩陣鍵盤硬件電路示意圖
4×4矩陣鍵盤在默認(rèn)情況下,都是未被按下的狀態(tài),即按照上述電路中所示,P10~P13與P14~P17之間都是呈短路狀態(tài),如果有按鍵按下,連接該案件的兩條線路就會(huì)聯(lián)通,對應(yīng)的兩個(gè)端口則會(huì)呈現(xiàn)出相同的電壓值,對于單片機(jī)而言,為0或者1的數(shù)據(jù)值。由于4×4矩陣鍵盤電路沒有外部電源提供電源控制,所以,在實(shí)現(xiàn)連接4×4矩陣鍵盤接口數(shù)據(jù)識別時(shí),可以通過單片機(jī)的P10~P13某個(gè)端口作為輸出狀態(tài),同時(shí)將其置于高電壓或低電壓的值,而后檢測P14~P17四個(gè)端口,如果相應(yīng)某個(gè)端口出現(xiàn)同樣的電壓值,則說明有對應(yīng)的鍵按下,依次類推即可實(shí)現(xiàn)四個(gè)端口的16個(gè)按鍵的檢測,從而在51單片機(jī)內(nèi)通過程序控制來識別相應(yīng)按鍵在當(dāng)前控制系統(tǒng)的實(shí)際功能,而后進(jìn)行相應(yīng)的操作。
為了適應(yīng)51單片機(jī)的自身特性,此處設(shè)計(jì)采用輸出電壓為低電壓,即0值,作為采樣判斷的指標(biāo)。在單片機(jī)系統(tǒng)啟動(dòng)后,調(diào)用配置信息初始化之后,即可對P10~P13某個(gè)端口輸出低電壓,假設(shè)P11為低電壓,另外三個(gè)端口為高電壓,而后檢測P1口數(shù)據(jù),如果此時(shí)P14~P17四端口均為高電壓,則無按鍵按下,如果S7被按下,則P17呈現(xiàn)低電壓,如果此時(shí)單片機(jī)讀取P1口數(shù)據(jù),則會(huì)得到01111101,如果S5被按下,單片機(jī)讀取P1口數(shù)據(jù),則會(huì)得到11011101的數(shù)據(jù),依次可推斷出其他按鍵對應(yīng)的二進(jìn)制數(shù)值。
在實(shí)際的51單片機(jī)控制系統(tǒng)中,由于人為的鍵盤操作,如按下鍵盤按鍵或松開鍵盤按鍵,實(shí)際上是實(shí)現(xiàn)兩條線路的連接,實(shí)現(xiàn)按鍵兩段的電壓值相同的聯(lián)通。但是由于人們操作會(huì)有一定的延遲或者抖動(dòng),對于單片機(jī)來說,產(chǎn)生的一種前期波動(dòng)比較大的并非理想的矩形數(shù)據(jù)信號,所以需要相應(yīng)的算法來將其進(jìn)行處理,方便單片機(jī)對其進(jìn)行識別,這部分代碼被稱為延時(shí)防抖動(dòng)程序。同時(shí)為了滿足我們的特殊需求,在識別到按鍵后通過串口輸出對應(yīng)的ASCII碼值,所以在程序設(shè)計(jì)時(shí),自需要在判斷到對應(yīng)按鍵按下即可調(diào)用串口,串行輸出對應(yīng)ASCII碼值即可。
在程序流程設(shè)計(jì)之前,首先設(shè)計(jì)對應(yīng)二進(jìn)制與ASCII碼值的映射表,假設(shè)4×4矩陣鍵盤為16進(jìn)制的外部輸入設(shè)備,S0~S15按鍵分別代表0~F的16進(jìn)制數(shù)值,所以在判斷對應(yīng)按鍵的二進(jìn)制數(shù)值時(shí),可以設(shè)計(jì)出相應(yīng)的映射表,這這里實(shí)現(xiàn),可以通過三個(gè)數(shù)組來實(shí)現(xiàn)。
第一個(gè)數(shù)組為二進(jìn)制數(shù)組,存儲了每個(gè)按鍵對應(yīng)的二進(jìn)制,如S0鍵對應(yīng)的二進(jìn)制值為11101110,依次可得到其他按鍵對應(yīng)二進(jìn)制值。
第二個(gè)數(shù)組為按鍵實(shí)際含義數(shù)組,存儲每個(gè)按鍵的實(shí)際含義,如S0按鍵對應(yīng)的為0鍵,依次可得到其他按鍵對應(yīng)的實(shí)際含義。
第三個(gè)數(shù)字為ASCII碼值數(shù)組,存儲0~F的實(shí)際的ASCII碼值,如0的ASCII碼16進(jìn)制值為30。
程序設(shè)計(jì)流程如下:
(1)單片機(jī)初始化。
(2)P1口初始化(設(shè)定為輸出狀態(tài))。
(3)向P1口輸出初P10~P14口的判斷數(shù)據(jù),順序?yàn)?1111110,11111 101,11111011,11110111,而后不斷循環(huán)循環(huán)。
(4)改變P1口配置狀態(tài),讀取P1口數(shù)據(jù)。
(5)判斷是否P14~P17是否有低電平。
(6)如果沒有,則跳轉(zhuǎn)到步驟(3)。如果有則讀取延時(shí)防抖動(dòng)程度,并獲取相應(yīng)二進(jìn)制值。
(7)根據(jù)系統(tǒng)預(yù)定義二進(jìn)制與按鍵定義的映射表來判斷鍵盤按鍵的實(shí)際含義,查詢對應(yīng)的ASCII碼值。
(8)設(shè)定串口通訊的配置數(shù)據(jù)。
(9)將ASCII碼值放置到串口通信數(shù)據(jù)區(qū)域,進(jìn)行串口通信。
51單片機(jī)的按鍵子系統(tǒng)設(shè)計(jì),實(shí)際上是利用51的單片機(jī)自身的數(shù)據(jù)I/O端口,通過改變I/O端口的功能屬性,結(jié)合對應(yīng)硬件電路,設(shè)計(jì)相應(yīng)的流程即可實(shí)現(xiàn)對外部輸入的判斷,從而輸出對應(yīng)ASCII碼值,做出相應(yīng)的操作。
[1]羅國.基于單片機(jī)的溫度控制系統(tǒng)[J].中山大學(xué)研究生學(xué)刊(自然科學(xué).醫(yī)學(xué)版),2015(04).
[2]黃軍輝,林樹琪.基于89C52單片機(jī)的智能家居多功能飲水機(jī)的設(shè)計(jì)與實(shí)現(xiàn)[J].廣東輕工職業(yè)技術(shù)學(xué)院學(xué)報(bào),2015(04).
TP274
A
1004-7344(2016)29-0259-01
2016-9-28