摘 要:詳細(xì)介紹了利用AD轉(zhuǎn)換器擴(kuò)展單片機(jī)鍵盤的2種方法,并對(duì)這兩種方法進(jìn)行了分析和比較。這種方法實(shí)現(xiàn)簡(jiǎn)單,節(jié)省單片機(jī)資源,在智能儀表應(yīng)用中具有實(shí)際意義。<!--摘要CH(結(jié)束)←-->
<!--→關(guān)鍵CH(開始)--> 關(guān)鍵詞:AD轉(zhuǎn)換器;單片機(jī);鍵盤;智能儀表<!--關(guān)鍵CH(結(jié)束)←-->
<!--關(guān)鍵EN(結(jié)束)←-->
在單片機(jī)系統(tǒng)中,鍵盤是常用的一種人機(jī)接口。一般來說,鍵盤的擴(kuò)展分為2種,獨(dú)立式和矩陣式,前者適用于按鍵數(shù)量少(一般小于4個(gè))或規(guī)模小的系統(tǒng),后者適合在按鍵數(shù)量較多的系統(tǒng),但一般需要擴(kuò)展接口芯片。因?yàn)閱纹瑱C(jī)的I/O口有限,我們總是希望擴(kuò)展鍵盤時(shí)占用盡量少的I/O口線。其實(shí),A/D轉(zhuǎn)換器也可以用來擴(kuò)展鍵盤,而且不多占用I/O口線,按鍵的數(shù)量可多達(dá)幾十個(gè)。
使用AD轉(zhuǎn)換器的鍵盤電路主要由一個(gè)電阻分壓隊(duì)列和一系列按鍵組成,如圖1所示,圖中電阻阻值相同,不同的按鍵按下時(shí),VO端有不同的電壓值輸出給A/D轉(zhuǎn)換器轉(zhuǎn)換成不同的數(shù)字量,單片機(jī)據(jù)此進(jìn)行按鍵識(shí)別。
1 第一種電路
最容易想到的是圖1(a)的連接方式,n個(gè)電阻組成的分壓電路,每個(gè)分壓點(diǎn)引出一個(gè)按鈕,事實(shí)證明這種接法是可以可靠工作的。第i個(gè)鍵按下時(shí):
以常用的8位ADC為例,其分辨率是1/256,理論上可以擴(kuò)展256個(gè)按鍵,考慮到誤差的因素以及工作可靠性取8/256,尚可擴(kuò)展32個(gè)按鍵。
這個(gè)電路存在一個(gè)顯著的缺點(diǎn),如果有2個(gè)鍵同時(shí)按下,當(dāng)其中一個(gè)鍵是A1時(shí),結(jié)果是A1有效,另一個(gè)無效;當(dāng)這兩個(gè)鍵都不是A1時(shí),就會(huì)發(fā)生錯(cuò)誤。最極端的情況是A2和An同時(shí)按下,此時(shí)VO是2.5 V,既不是A2的值,也不是An的值,其他的情況也和這種情況相似。所以這個(gè)電路對(duì)多鍵操作沒有保護(hù),多鍵操作會(huì)產(chǎn)生錯(cuò)誤結(jié)果。
如果在輸出側(cè)加二極管,如圖中虛線,理論上是可以工作的。但仔細(xì)分析,發(fā)現(xiàn)由于二極管存在開啟電壓,實(shí)際上只能擴(kuò)展很少幾個(gè)按鍵。假設(shè)普通硅二極管,開啟電壓取0.7 V,第n個(gè)鍵的輸出應(yīng)滿足:5/n>0.7n,n最大只能取2,顯然不實(shí)用。
2 第二種電路
對(duì)第一種電路稍加改進(jìn),就可以實(shí)現(xiàn)多鍵保護(hù)操作。 把最下面的電阻移一個(gè)位置,換到輸出側(cè),如圖1(b)所示。這個(gè)電路中,多個(gè)鍵同時(shí)按下時(shí),只有最上面的那個(gè)鍵有效,其余都無效。這個(gè)電路還有一個(gè)優(yōu)點(diǎn),就是當(dāng)沒有鍵盤操作時(shí),電路完全斷開,不消耗能量,更適合低功耗設(shè)計(jì)的原則。
圖1(b)電路中,第i個(gè)鍵按下時(shí)輸出電壓是:
從圖中分析各個(gè)按鍵的輸出情況,可以發(fā)現(xiàn)最后一個(gè)電阻Rx對(duì)所有按鍵的輸出都有影響,如果把最后一個(gè)電阻的阻值適當(dāng)增大,按鍵輸出值下降的速度會(huì)減慢。假設(shè)
取Rx為xR,此時(shí),第i個(gè)鍵按下時(shí)輸出電壓是: 依照上述條件和方法,對(duì)按鍵個(gè)數(shù)再做一次估算,取x=5,n最大為9。
n的極值實(shí)際是由最后2個(gè)按鍵的最小電壓差(鍵值 分辨率)決定的,設(shè)此值為1/A,則: 可以得到,當(dāng)
時(shí),n有極大值。所以x也不是越大越好,他與最后2個(gè)按鍵的最小電壓差有關(guān),n的極值也與此有關(guān)。取
此時(shí)n有極大值。當(dāng)鍵值分辨率提高,即A增大時(shí),n的極大值增大,擴(kuò)展按鍵數(shù)量增加,相應(yīng)的Rx的阻值也要增大。3 按鍵去抖動(dòng)
機(jī)械按鍵按下和彈起的瞬間,由于觸點(diǎn)的彈性會(huì)產(chǎn)生一連串的抖動(dòng),一般的抖動(dòng)時(shí)間是5~10 ms,普通按鍵動(dòng)作的穩(wěn)定時(shí)間是零點(diǎn)幾秒。為了取得正確的鍵值,必須設(shè)法消除抖動(dòng)的影響。對(duì)按鍵的去抖動(dòng),可以使用軟件延時(shí),多次采樣的辦法,圖2是軟件流程。當(dāng)CPU檢測(cè)到A/D轉(zhuǎn)換值發(fā)生變化時(shí),認(rèn)為有按鍵動(dòng)作,首先進(jìn)行10 ms延時(shí),然后再讀取鍵值,為了可靠,一般要讀取多次,進(jìn)行比較(本例中是讀取2次)。多次讀取的鍵值,不可能是完全相同的,在誤差允許范圍內(nèi),就認(rèn)為是相同的,為此,將鍵值的低2位忽略。
4 應(yīng)用實(shí)例
智能化是儀器儀表的發(fā)展方向,與普通儀表相比,智能儀表的主要特點(diǎn)是完全數(shù)字化、數(shù)據(jù)處理能力強(qiáng)、自制 性強(qiáng)、具有通信功能等。同時(shí)要求儀表更加小巧簡(jiǎn)潔、功耗更低。筆者在定量?jī)x的升級(jí)改造中使用了A/D通道擴(kuò)展按鍵的方法。
定量?jī)x是在線測(cè)量紙葉厚度的儀表。原來的定量?jī)x有10個(gè)數(shù)字鍵、7個(gè)功能鍵、還有小數(shù)點(diǎn)、符號(hào)各1個(gè)鍵、確認(rèn)鍵和復(fù)位鍵共21個(gè)按鍵,其中復(fù)位鍵單獨(dú)接,不在討論之列。改造時(shí),首先采用單鍵復(fù)用、雙鍵組合減少按鍵的數(shù)量:數(shù)字鍵、小數(shù)點(diǎn)和符號(hào)合用一個(gè)按鍵,功能鍵只用2個(gè),保留確認(rèn)返回鍵。
定量?jī)x的處理器是8031,其ADC使用的是ICL7135。ICL7135是4位半BCD碼輸出的高精度AD轉(zhuǎn)換器。定量?jī)x要采集的模擬信號(hào)有3路,原來的電路中用一個(gè)8路電子開關(guān)做通道選擇,循環(huán)采樣,F(xiàn)在只要把鍵盤電路接入第4路,其余都不用改變,鍵盤電路采用上述第二種接法。
當(dāng)然,硬件上精簡(jiǎn)了,軟件上就要復(fù)雜一些,按鍵的判斷、鍵盤處理子程序都要改變。
5 結(jié) 語
有些單片機(jī)內(nèi)置A/D轉(zhuǎn)換器,如80C552等,這種方法在這些單片機(jī)上使用最為簡(jiǎn)單,只要把VO連接A/D轉(zhuǎn)換器的輸入端即可,但前提是單片機(jī)的A/D轉(zhuǎn)換通道要有空閑。對(duì)不帶ADC的單片機(jī),如常用的89C51,當(dāng)系統(tǒng)有A/D轉(zhuǎn)換電路時(shí),若正好有空余通道,如上述定量?jī)x的鍵盤電路,這種方法也是不錯(cuò)的選擇。
第一種電路擴(kuò)展的按鍵數(shù)量多,但沒有多鍵保護(hù);第二種電路有多鍵保護(hù)功能,但擴(kuò)展的按鍵數(shù)量少,兩者都可正常工作。
<!--→參考文獻(xiàn)CH(開始)-->
[2]丁茹.利用單片機(jī)A/D端口擴(kuò)展鍵盤的一點(diǎn)改進(jìn) [J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003,(1):77.
[3]WDT-3β定量?jī)x使用說明[S].江門化工儀表廠,1992.










