鄔法磊,李曉陽,塵 源
(青島理工大學,山東 青島266033)
專用鍵盤常用作單片機系統中的輸入設備,因為要單獨設計,不免存在設計制作成本高,通用性差,可靠性不高等諸多不足。在一些按鍵要求較多的應用系統中使用專用鍵盤顯得更不合時宜。由于PS/2鍵盤應用較為廣泛,且滿足多系統要求,所以本文考慮將PS/2標準鍵盤應用到單片機系統中,既節約了制造成本,又可以滿足按鍵要求多的諸多場合,具有一定的實際意義。
與單片機相連的是CLOCK和DATA引腳,單片機通過這兩個引腳實現了與PS/2鍵盤的通信,接口物理特性見圖1。

圖1 接口物理特性
ps/2通訊協議是一種雙向同步串行通訊協議。通訊的兩端通過CLOCK同步,時鐘信號總是由鍵盤發出,并通過DATA交換數據。鍵盤向主機發送數據時,首先檢查CLOCK是否為高電平。如果不是,那么主機抑制了通訊。具體時序如圖2所示,其中主機一直為高電平。
每一幀數據中開始位總是為0,數據校驗采用奇校驗方式,停止位始終為1。從設備到主設備通信時,從設備總是在時鐘線為高時改變數據線狀態,主設備在時鐘下降沿讀入數據線狀態。

圖2 單片機接收時序
目前,PC機使用的PS/2鍵盤都默認采用第二套掃描碼。掃描碼有兩種不同的類型:“通碼(make code)”和“斷碼(break code)”。當一個鍵被按下或持續按住時,鍵盤會將該鍵的通碼發送給主機。而當一個鍵被釋放時,鍵盤會將該鍵的斷碼發送給主機。例如,按下A鍵,通碼為0x1c,松開按鍵時,斷碼為0xF0 0x1c.
根據鍵盤按鍵掃描碼的不同,可將按鍵分為3類:
第1類按鍵通碼為一個字節,斷碼為0xF0+通碼形式。如A鍵,其通碼為0x1C;斷碼為0xF0 0x1C。
第2類按鍵通碼為兩字節0xE0+0xXX形式,斷碼為0xE0+0xF0+0xXX形式。如Right Ctrl鍵,其通碼為0xE0 0x14;斷碼為0xE0 0xF0 0x14。
第3類特殊按鍵有兩個,Print Screen鍵,其通碼為0xE0 0x12 0xE0 0x7C;斷碼為0xE0 0xF0 0x7C0xE0 0xF0 0x12.Pause鍵,其通碼為0xE1 0x14 0x77 0xE1 0xF0 0xl4 0xF0 0x77;斷碼為空。
組合按鍵掃描碼的發送是按照按鍵發生的次序,如按下面順序按左Shift+A鍵:按下左Shift鍵;按下A鍵;釋放A鍵;釋放左Shift鍵,那么計算機上接收到的一串數據為0×12 0×1C0×F0 0×1C0×F0 0×12.在文中的驅動程序設計中,就是根據按鍵的分類對其分別進行處理。
PS/2鍵盤與單片機的連接方式如圖3所示。P3.0接 PS/2數據線;P3.2(INT0)接 PS/2時鐘線。因為單片機的P3口內部是帶上拉電阻的,所以PS/2的時鐘線和數據線可以直接與單片機的P3相連接。單片機接收鍵盤數據時,數據線上的信號在時鐘為低時已經穩定,所以可以采用中斷方式實現接收數據(圖3)。

圖3 硬件設計
軟件流程如圖4。
本文程序通過中斷的方式接收按鍵值,轉換代碼后送給LCD1602顯示,中斷程序如下:
void Keyboard_out(void)interrupt 0
{
if((IntNum >0)&&(IntNum <9))
{
KeyV=KeyV>>1;//因鍵盤數據是低>>高,結合上一句所以右移一位

圖4 軟件流程
if(Key_Data)
KeyV= KeyV|0x80;//當鍵盤數據線為1時到最高位
}
IntNum++;
while(!Key_CLK);//等待PS/2CLK拉高
if(IntNum >10)
{
IntNum=0;//當中斷11次后表示一幀數據收完,清變量準備下一次接收
BF=1;//標識有字符輸入完了
EA=0;//關中斷等顯示完后再開中斷
}
本文著重介紹了PS/2通信協議,并將其應用到單片機系統中,可以應用到按鍵要求多的一些場合,而且對于設計專用鍵盤也有一定的指導意義。
[1]胡汗才.單片機原理及系統設計[M].北京:清華大學出版社,2002.
[2]孫德文.微型計算機技術[M].北京:高等教育出版社,2002.
[3]寧 飛,王維華,孔 宇.微型計算機原理與接口實踐[M].北京:清華大學出版社,2006.