聶麗文
(深圳職業(yè)技術學院 計算機工程學院,廣東 深圳 518055)
一種單片機鍵盤的實現(xiàn)方法
聶麗文
(深圳職業(yè)技術學院 計算機工程學院,廣東 深圳 518055)
介紹了一種單片機應用系統(tǒng)中鍵盤的實現(xiàn)方法,該方法使用的單片機資源為一路A/D轉換和一個外部中斷,硬件主要包括一個串聯(lián)的電阻網絡、一個施密特觸發(fā)器;軟件采用中斷方式處理按鍵.該方法的原理是利用每個按鍵對應的不同電阻對VCC進行分壓,再經A/D轉換為其對應的不同的數(shù)字量,且當有鍵被按下時使施密特觸發(fā)器產生下降沿,引起單片機外部中斷,單片機通過中斷方式進行鍵盤處理.
單片機;鍵盤;A/D轉換;施密特觸發(fā)器.
在單片機應用系統(tǒng)中經常需要連接一些外部設備,其中鍵盤是構成人機對話的一種基本方式,具有向單片機輸入數(shù)據、命令等功能,通常實現(xiàn)單片機鍵盤的方法有:獨立式鍵盤法、矩陣鍵盤法、專用鍵盤控制芯片法[1].
1)獨立鍵盤法.也稱為直接連接法,是將按鍵開關直接連接到單片機的I/O線上,一個按鍵連接一根I/O線.此方法硬件和軟件都較簡單.當按鍵個數(shù)很少時,可以采用這種方法,有幾個按鍵就需要占用幾根I/O線,這種方法鍵盤占用單片機的I/O資源較多.
2)矩陣鍵盤法.一般地,當按鍵個數(shù)大于8時,多采用此法,將按鍵排列成矩陣形式,將矩陣的行線和列線分別連接到單片機的I/O線,所占用單片機的I/O線數(shù)為該矩陣的行數(shù)與列數(shù)之和.可見,矩陣法雖然比獨立按鍵法占用的單片機I/O資源少,但當按鍵較多時,仍然需要占用較多的單片機I/O資源.
3)專用鍵盤控制芯片法.有時受到單片機的I/O口數(shù)量的限制,不能采用上述方式實現(xiàn)鍵盤,則可以采用外圍專用鍵盤控制芯片(如具有I2C接口的鍵盤控制芯片ZLG7290)來實現(xiàn)單片機鍵盤.該方法可以實現(xiàn)多至64個按鍵組成的鍵盤,只需要占用3根單片機的I/O線.此法,硬件上添加了專用芯片,軟件上通過控制該芯片實現(xiàn)鍵盤功能.
文獻[2-3] 給出單片機A/D端口擴展鍵盤的方法,本文介紹另一種實現(xiàn)單片機鍵盤的方法,即通過A/D轉換法實現(xiàn)鍵盤輸入.
A/D轉換方法通過一個串聯(lián)電阻網絡、一個施密特觸發(fā)器、一路空閑的A/D,以中斷的方式實現(xiàn)單片機系統(tǒng)的鍵盤輸入,如圖1所示.占用單片機的資源僅為一路A/D和一個外部中斷.
2.1 工作原理
如圖1所示,該鍵盤電路由電阻R1至R8、按鍵K1至K8(不限于8個按鍵,可以多至幾十個)、公共電阻R、電容C、一個施密特觸發(fā)器、一路A/D組成.當無按鍵被按下時,A/D的輸入電壓Vin為低,施密特觸發(fā)器輸出為高電平,中斷信號無效;當有按鍵被按下時,Vin產生一定的電壓值,施密特觸發(fā)器的輸入端產生由零電壓向正電壓的變化,使施密特觸發(fā)器觸發(fā).這樣,施密特觸發(fā)器的輸出端就會產生一個下降沿,從而引起單片機中斷.
圖1 A/D轉換法實現(xiàn)鍵盤的原理圖
可以根據所選的施密特觸發(fā)器的不同,通過調整R1-R8以及R的值,使Vin的變化能夠引起施密特觸發(fā)器觸發(fā).也就是說,選擇各按鍵對應的電阻值時要注意,按鍵對應的電阻(R1至R8)值之和與公共電阻R對VCC的分壓產生的Vin應高于施密特觸發(fā)器的觸發(fā)電壓,這樣才能保證每個按鍵按下時,都會使施密特觸發(fā)器觸發(fā),在其輸出端產生一個下降沿,從而引起單片機中斷.中斷程序流程圖如圖2所示.進入中斷服務程序后,啟動A/D,并置位按鍵標志位.主程序流程圖如圖3所示.鍵盤處理模塊流程圖如圖4所示.在鍵盤處理模塊中,首先判斷按鍵標志是否被置位,若是,則說明有按鍵被按下,則需讀取A/D轉換的結果.由于不同按鍵被按下時Vin不同,則A/D轉換結果值不同,對所讀取的A/D轉換的結果進行處理后即可據此判斷出被按下的是哪個鍵,獲取相應鍵值,最后將按鍵標志清除.
電容C和施密特觸發(fā)器,都保證了鍵盤在沒有按鍵被按下或按鍵抖動時,不會引起單片機中斷.只有當按鍵被按下時,單片機中斷才會被觸發(fā).電容C的取值參考設計實例.
2.2 設計實例
圖2 中斷程序流程
圖3 主程序流程
圖4 鍵盤處理模塊流程
圖5 設計實例
如圖5所示,單片機使用STM32F103,它內含12位線性A/D,VCC為3.6V,參考電壓VREF為3.6V,按鍵使用硅膠碳膜按鍵,施密特觸發(fā)器采用的是74HC14.
首先是公共電阻R和電容C的選擇.公共電阻R的阻值應遠大于按鍵的接觸電阻,硅膠碳膜按鍵的接觸電阻小于100 Ω,此處電阻R選擇1 MΩ,電容C選用0.1μf.電容C宜選的小些,它影響到從按鍵按下至電容C充電至施密特觸發(fā)器被觸發(fā)引起單片機中斷的時間,也決定了按鍵的響應時間.
其次是電阻R1~R8(本例以8個按鍵為例)的選擇.R1~R8都要選擇常用電阻序列中的值.方法是,先根據按鍵個數(shù)和VCC以及施密特觸發(fā)器的觸發(fā)電壓值假定各按鍵對應的Vin值,計算出各按鍵對應的電阻值,在常用電阻序列表中找出各電阻值的接近值.然后,再根據確定的R1~R8反過來計算出各按鍵對應的Vin值即可.
在該實例中,選擇電阻R1~R8的步驟如下:
1)先預設各按鍵對應的Vin的差值, 12位線性A/D,參考電壓VREF為3.6V,則A/D轉換的分辨率為0.879 mV,20倍的分辨率對應的是17.6 mV,采用按鍵對應的Vin的差值大于等于17.6mV即可.但在該例中,按鍵個數(shù)只有8個,我們可以選擇按鍵對應的Vin的差值大些,如選擇按鍵對應的Vin差值為0.1V,這樣我們預設8個按鍵K1~K8對應的Vin1~Vin8的值分別為:3.5、3.4、3.3、3.2、3.1、3.0、2.9、2.8V.說明:當鍵盤的按鍵個數(shù)增多時,可以減小按鍵對應的Vin的電壓差(這里只要大于17.6mV即可),可見該例中可以擴充按鍵的個數(shù).考慮到采用的施密特觸發(fā)器74HC14,使其輸出產生下降沿翻轉的輸入電壓為2.17V(據74HC14的DC參數(shù)表可知,當其VCC為3.6V時,使其輸出產生下降沿跳變的輸入電壓為3.6V*60%=2.17V),所以要保證各按鍵對應的Vin都必須大于2.17V, 這樣的話,理論上按鍵的個數(shù)擴展至幾十個沒有問題.
2)根據上述預設的各按鍵對應的Vin值,計算出各按鍵對應的電阻值R1~R8,然后再在常用電阻序列表中找出阻值接近的電阻(注意電阻值要遠大于按鍵的接觸電阻).
據預估的Vin值求R1~R8的公式如下:(該例中VCC=3.6V, R=1 MΩ)
當K1鍵按下時: [VCC/(R+R1)]*R=Vin1,可以求出R1;
當K2鍵按下時:[VCC/(R+R1+R2)]*R=Vin2, 可以求出R2;
……
當Ki鍵按下時: [VCC/(R+∑Ri)]*R=Vini(∑Ri=R1+R2+…+Ri),可以求出Ri.
例如,求R1時(由于單片機中A/D的輸入電阻很大,與R并聯(lián)時可以不考慮),K1接通,其它按鍵無論是斷開或接通,都有公式:[3.6V/(1 MΩ+R1)]*1 MΩ=3.5V,求得:R1≈28 KΩ,查常用電阻系列,選其中的接近值R1=27 KΩ(在“精度位5%的碳膜電阻的標稱值系列”表中查找),最后確定了R1取值為27 KΩ.同理,得到其他的電阻值如圖5所示.
可見,當有2個及以上的按鍵同時按下時,只有最低的一個按鍵有效.此方法不能識別2個及以上的按鍵同時按下.
由R1再反過來計算K1按下時,對應的Vin值:
Vin1=3.6V*[1M Ω/(R1+1MΩ)]=3.505V,
則軟件處理時設置K1鍵的電壓有效值為:3.505V±(0.1V*20%),允許誤差為按鍵對應的Vin的差值的20%. 則對應于K1鍵,A/D輸出的取值范圍為:
上限:(3.505+0.02)/3.6*4096≈4011,
下限:(3.505-0.02)/3.6*4096≈3965.
則當A/D連續(xù)采樣4個值都在3965~4011范圍內,就可以認為是此鍵K1被按下了.同理,可以計算出K1~K8鍵對應的電壓為3.505~2.799V;得到K2~K8對應的A/D輸出取值范圍.
綜上所述,此例中施密特觸發(fā)器采用74HC14,據其DC參數(shù)表可知,當VCC為3.6V時,使其輸出產生下降沿翻轉的輸入電壓值約為2.17V,而上述各鍵被按下時對應的電壓值遠高于該值.軟件處理中當采樣值低于2V時均認為是抖動,舍棄.當連續(xù)采樣4個電壓差值在按鍵對應的電壓差值的20%(如此例中為0.1V*20%)內時,才確定該按鍵被按下.
本文所述單片機鍵盤的實現(xiàn)方法已經在多個單片機相關項目中應用,能可靠地實現(xiàn)鍵盤的功能.在實際中若使用的單片機含有A/D且有一路空閑,且單片機的I/O資源較緊張時,采用此方法實現(xiàn)單片機鍵盤是個不錯的選擇.該方法不能處理多個按鍵同時按下的情況,當多個按鍵同時被按下時,只有編號較低的按鍵有效.根據單片機的VCC以及所使用的施密特觸發(fā)器的不同,此法所能連接按鍵的個數(shù)有所不同,一般可連接十幾個到幾十個按鍵.
[1] 張毅剛.單片機原理及接口技術[M].北京:人民郵電出版社,2011.
[2] 常波.利用單片機A/D端口擴展鍵盤的方法[J].單片機與嵌入式系統(tǒng)應用,2001(8):77.
[3] 尹授遠.通過單片機A/D方式實現(xiàn)鍵盤輸入的方法[J].儀器儀表用戶,2001(3):38-39.
A Method for Realizing MCU Keyboard
NlE Liwen
(School of Computer Engineering, Shenzhen Polytechnic, Shenzhen, Guangdong 518055, China)
This paper introduces a method to realize the keyboard in the application system of MCU, in which only one A/D channel and an external interrupt of MCU’s resources are used. In hardware, a resistance network and a Schmitt trigger are used. In software, MCU process keyboard by Interrupt mode. The principle of this method is to use the different resistance of each key to divide voltage of VCC, so MCU will get the different results of A/D. When a key is pressed, the Schmitt trigger will get a falling edge output, thus causing an external interrupt of MCU.
MCU; keyboard; A/D; Schmitt trigger
TP272
A
1672-0318(2016)01-0015-04
10.13899/j.cnki.szptxb.2016.01.003
2015-09-02
聶麗文(1966-),女,江蘇鎮(zhèn)江人,副教授,工學碩士,研究方向:計算機應用.