一、概述
鍵盤在單片機應用系統中,實現輸入數據、傳送命令的功能,是人工干預的主要手段。鍵盤分兩大類:編碼鍵盤和非編碼鍵盤。
編碼鍵盤:由硬件邏輯電路完成必要的鍵識別工作與可靠性措施。每按一次鍵,鍵盤自動提供被按鍵的讀數,同時產生一選通脈沖通知微處理器,一般還具有反彈跳和同時按鍵保護功能。這種鍵盤易于使用,但硬件比較復雜,對于主機任務繁重之情況,采用8279可編程鍵盤管理接口芯片構成編碼式鍵盤系統是很實用的方案。
非編碼鍵盤:只簡單地提供鍵盤的行列與矩陣,其他操作如鍵的識別,決定按鍵的讀數等僅靠軟件完成,故硬件較為簡單,但占用CPU較多時間。有:獨立式按鍵結構、矩陣式按鍵結構。
二、鍵盤系統設計
首先,確定鍵盤編碼方案:采用編碼鍵盤或非編碼鍵盤。隨后,確定鍵盤工作方式:采用中斷或查詢方式輸入鍵操作信息。然后,設計硬件電路。非編碼鍵盤系統中,鍵閉合和鍵釋放的信息的獲取,鍵抖動的消除,鍵值查找及一些保護措施的實施等任務,均由軟件來完成。
(一)非編碼鍵盤的鍵輸入程序應完成的基本任務
1.監測有無鍵按下;鍵的閉合與否,反映在電壓上就是呈現出高電平或低電平,所以通過電平的高低狀態的檢測,便可確認按鍵按下與否。
2.判斷是哪個鍵按下。
3.完成鍵處理任務。
(二)從電路或軟件的角度應解決的問題
1.消除抖動影響。鍵盤按鍵所用開關為機械彈性開關,利用了機械觸點的合、斷作用。由于機械觸點的的彈性作用,一個按鍵開關在閉合和斷開的瞬間均有一連串的抖動,波形如下:
抖動時間的長短由按鍵的機械特性決定,一般為5~10ms,這是一個很重要的參數。抖動過程引起電平信號的波動,有可能令CPU誤解為多次按鍵操作,從而引起誤處理。
為了確保CPU對一次按鍵動作只確認一次按鍵,必須消除抖動的影響。按鍵的消抖,通常有軟件,硬件兩種消除方法。
這種方法只適用于鍵的數目較少的情況。
軟件消抖:如果按鍵較多,硬件消抖將無法勝任,常采用軟件消抖。通常采用軟件延時的方法:在第一次檢測到有鍵按下時,執行一段延時10ms的子程序后,再確認電平是否仍保持閉合狀態電平,如果保持閉合狀態電平,則確認真正有鍵按下,進行相應處理工作,消除了抖動的影響。(這種消除抖動影響的軟件措施是切實可行的。)
2.采取串鍵保護措施。串鍵:是指同時有一個以上的鍵按下,串鍵會引起CPU錯誤響應。
通常采取的策略:單鍵按下有效,多鍵同時按下無效。
3.處理連擊。連擊:是一次按鍵產生多次擊鍵的效果。要有對按鍵釋放的處理,為了消除連擊,使得一次按鍵只產生一次鍵功能的執行(不管一次按鍵持續的時間多長,僅采樣一個數據)。否則的話,鍵功能程序的執行次數將是不可預知,由按鍵時間決定。連擊是可以利用的。連擊對于用計數法設計的多功能鍵特別有效。
三、鍵盤工作方式
單片及應用系統中,鍵盤掃描只是CPU的工作內容之一。CPU忙于各項任務時,如何兼顧鍵盤的輸入,取決于鍵盤的工作方式。考慮儀表系統中CPU任務的份量,來確定鍵盤的工作方式。
鍵盤的工作方式選取的原則是:既要保證能及時響應按鍵的操作,又不過多的占用CPU的工作時間。
鍵盤的工作方式有:查詢方式(編程掃描,定時掃描方式)、中斷掃描方式。
四、鍵盤電路結構
(一)獨立式按鍵接口設計
獨立式按鍵就是各按鍵相互獨立,每個按鍵單獨占用一根I/O口線,每根I/O口線的按鍵工作狀態不會影響其他I/O口線上的工作狀態。因此,通過檢測輸入線的電平狀態可以很容易判斷哪個按鍵被按下了。
優點:電路配置靈活,軟件結構簡單。
缺點:每個按鍵需占用一根I/O口線,在按鍵數量較多時,I/O口浪費大,電路結構顯得復雜。
因此,此鍵盤是用于按鍵較少或操作速度較高的場合。
中斷方式 查詢方式
也可以用擴展I/O口搭接獨立式按鍵接口電路,可采用8255擴展I/O口,用三態緩沖器擴展。這兩種配接方式,都是把按鍵當作外部RAM某一工作單元的位來對待,通過讀片外RAM 的方法,識別按鍵的工作狀態。
上電路中獨立式按鍵電路,各按鍵開關均采用了上拉電阻,是為了保證在按鍵斷開時,各I/O有確定的高電平。如輸入口線內部已有上拉電阻,則外電路的上拉電阻可省去。
(二)矩陣式鍵盤接口設計
矩陣式鍵盤適用于按鍵數量較多的場合,由行線和列線組成,按鍵位于行列的交叉點上。節省I/O口。
矩陣鍵盤工作原理:行線通過上拉電阻接到+5V上。無按鍵,行線處于高電平狀態,有鍵按下,行線電平狀態將由與此行線相連的列線電平決定。列線電平為低,則行線電平為低;列線電平為高,則行線電平為高。
五、雙功能及多功能鍵設計
在單片機應用系統中,為簡化硬件線路,縮小整個系統的規模,總希望設置最少的按鍵,獲得最多的控制功能。
矩陣鍵盤與獨立式按鍵鍵盤相比,硬件電路大大節省。可通過軟件的方法讓一鍵具有多功能。方法:選擇一個RAM工作單元,對某一個按鍵進行按鍵計數,根據不同計數值,轉到子程序。這種計數多功能鍵最好與顯示器結合用,以便知道當前計數值,同時配合一個啟動鍵。
復合鍵是使用軟件實現一鍵多功能的另一個途徑。所謂復合鍵,就是兩個或兩個以上的鍵的聯合,當這些鍵同時按下時,才能執行相應的功能程序。實際情況做不到“同時按下”,他們的時間差別可以長到50ms,解決策略是:定義一個或兩個引導鍵,這些引導鍵按下時沒什么意義,執行空操作。引導鍵的例子:微機鍵盤上的CTRL、SHIFT、ALT。
缺點:一是操作變得復雜,二是操作時間變長。
多功能鍵的利用,應具體情況具體分析。要求速度的場合最好做一鍵一功能。如果系統功能很多,一鍵一功能不現實,可采取一鍵多功能。
六、功能開關及撥碼盤接口設計
設計原因:鍵盤輸入靈活性大,操縱方便。但某些重要功能或數據由鍵盤輸入,誤操作將產生一些不良后果。因此常設定靜態開關的方法來執行這些功能或輸入數據。靜態開關一經設定,將不再改變,一直維持設定的開關狀態。通常這些開關狀態是在單片機系統加電時由CPU讀入內存RAM的,以后CPU將不再關注這些開關的狀態,因此,即使加電后,這些開關的狀態發生變化,也不會影響CPU的正常工作,只有在下一次加電時,這些新狀態才能生效。
第一,功能開關:主要是根據開關的狀態執行一些重要的功能。
第二,撥碼盤:單片機應用系統中,有時要輸入一些控制參數,這些參數一經設定,將維持不變,除非給系統斷電后重新設定。這時使用數字撥碼盤既簡單直觀,又方便可靠。
七、按鍵介紹
常用的按鍵有三種:機械觸點式按鍵、導電橡膠式和柔性按鍵(又稱觸摸式鍵盤)。
機械觸點式按鍵是利用彈性使鍵復位,手感明顯,連線清晰,工藝簡單,適合單件制造。但是觸點處易侵入灰塵而導致接觸不良,體積相對較大。
導電橡膠按鍵是利用橡膠的彈性來復位,通過壓制的方法把面板上所有的按鍵制成一塊,體積小,裝配方便,適合批量生產。但是時間長了,橡膠老化而使彈力下降,同時易侵入灰塵。
柔性按鍵是近年來迅速發展的一種新型按鍵,可以分為凸球型和平面型兩種。凸球型動作幅度觸感明顯,富有立體感,但制造工藝相對復雜;平面型幅度微小,觸感較弱,但工藝簡單,壽命長。柔性按鍵最大特點是防塵、防潮、耐蝕,外形美觀,裝嵌方便。而且外形和面板的布局、色彩、鍵距可按照整機的要求來設計。
八、單片機系統鍵盤設計實例
本次設計中,鍵盤結構采用非編碼鍵盤系統中的獨立式按鍵結構。用三態緩沖器573擴展I/O口搭接獨立式按鍵接口電路,按鍵狀態由573鎖存。
鍵盤工作方式采用定時掃描方式。采用定時器T0定時,CPU每隔200ms掃描鍵盤一次,即通過讀取573的輸出數據,識別按鍵的工作狀態。
設計中對于重鍵和連擊的處理:對于重鍵(串鍵:指同時有一個以上的鍵按下),采用軟件提供保護,當判斷為一個以上的鍵按下,則不處理,返回重新進行監測。只有監測到一個鍵按下時,才判斷鍵值,執行相應鍵處理工作。
鍵盤對液晶顯示的控制是通過顯示畫面的頁碼作為接口參數來完成的。在每一頁中,鍵盤對數據的修改是通過對按鍵次數的計算作為接口參數來實現的。
具體例程如下:
void keyscan() /*鍵盤掃描*/
{ucher data newz ,temp,pat;
if(time_out)
{ACC=MJP; /*讀取573數據*/
temp=ACC&0x0f, /*取低四位*/
if(temp!=0x0f) /*有鍵按下*/
{msec(10); /*延時10MS*/
ACC=MJP; /*讀取573數據*/
temp=ACC&0x0f
if(temp=0x0f)
{newz=temp; /*讀取新鍵值*/
pat=newz^old; /*鍵值有無變化*/
if(pat)>0) /*有變化*/
{old=newz; /*原鍵值等于新鍵值*/
keymana(); /*調鍵散轉程序*/
}
(下轉第66頁)
(上接第64頁)
else;
}
else;
}
elsr;
old=temp; /*原鍵值不變*/
time_out=0 /*標志位置零*/
}
esel;
}
九、結語
鍵盤是單片機系統設計中一種主要的信息輸入接口,合理的設計,不僅可以節省系統的設計成本,更可使儀器設備的操作變得更為簡單、方便,很大程度上提高系統綜合性能。