矩陣式鍵盤的程序設計
發(fā)布時間:2014/7/27 15:20:47 訪問次數(shù):881
在計算機控制系統(tǒng)中,SL490B鍵盤掃描只是CPU工作的一部分。因此在設計鍵盤掃描程序時,必須要保證鍵盤操作的實時性,又不能占有CPU太多的時間,還要充分考慮到抖動干擾的消除。一般可根據(jù)情況選用編程掃描、定時掃描或中斷掃描中的一種方式。
下面來考慮掃描程序的編寫與準備。逐行輸出行掃描信號“0”,即是CPU依次使行線Xo—X,為低電平,其輸出數(shù)據(jù)代碼分別為OIH(X。線)、02H(X.線)、04H(X:線)、08H(X,線)、10H(X。線)、20H(X,線)、40H(X。線)、80H(X,線)。
為消除按鍵的抖動干擾.程序中需調(diào)用延時lOOms的子程序,以便認定確有鍵按下,再識別其鍵值。
求十進制鍵值的方法是分別設一個行值寄存器CL和列值寄存器DL。接口電路中跨接在行列線上的64個鍵,由于同一列相鄰行之間相隔數(shù)8,所以每進行一次“0”行掃描后,如果此行無鍵按下,則行寄存器CL應加08再進行下一行的“0”行掃描;若有鍵按下,則不加08而轉(zhuǎn)求列值,由于列值比鍵值小1,如第一行第一列的鍵按下時列值Y。(即數(shù)據(jù)位D。)=0比01鍵值小1,所以列值寄存器DL應先加1,然后將讀入的列值循環(huán)右移,判斷進位位CF是否等
于零(即有否鍵按下),若無鍵按下,再繼續(xù)加l、右移、判斷,重復上述過程,直到有鍵按下。最后把行值和列值相加并進行DAA修正,即可得到所求的十進制鍵值。
例如,跨接在X:行與Y.列的18鍵按下,其鍵值計算方法如下:第一次“0”行掃描X。行,無鍵按下,CL= 00 +08= 08,接下來掃X,行,仍無鍵按下,加08并進行DAA修正,CL =08+
08 =16,再掃X:行,此時讀人的列值不等于FFH即表明有鍵下,則CL =16不變。然后轉(zhuǎn)求列值,列值寄存器先加1,再把讀入的列值循環(huán)移位,由于按下的鍵在Y,列,所以需移位丙次才能移出0值,因此DL =02,然后將行值寄存器與列值寄存器之值相加,并進行DAA修正,得到AL=CL+DL=16+02=18,即鍵值為18。
在計算機控制系統(tǒng)中,SL490B鍵盤掃描只是CPU工作的一部分。因此在設計鍵盤掃描程序時,必須要保證鍵盤操作的實時性,又不能占有CPU太多的時間,還要充分考慮到抖動干擾的消除。一般可根據(jù)情況選用編程掃描、定時掃描或中斷掃描中的一種方式。
下面來考慮掃描程序的編寫與準備。逐行輸出行掃描信號“0”,即是CPU依次使行線Xo—X,為低電平,其輸出數(shù)據(jù)代碼分別為OIH(X。線)、02H(X.線)、04H(X:線)、08H(X,線)、10H(X。線)、20H(X,線)、40H(X。線)、80H(X,線)。
為消除按鍵的抖動干擾.程序中需調(diào)用延時lOOms的子程序,以便認定確有鍵按下,再識別其鍵值。
求十進制鍵值的方法是分別設一個行值寄存器CL和列值寄存器DL。接口電路中跨接在行列線上的64個鍵,由于同一列相鄰行之間相隔數(shù)8,所以每進行一次“0”行掃描后,如果此行無鍵按下,則行寄存器CL應加08再進行下一行的“0”行掃描;若有鍵按下,則不加08而轉(zhuǎn)求列值,由于列值比鍵值小1,如第一行第一列的鍵按下時列值Y。(即數(shù)據(jù)位D。)=0比01鍵值小1,所以列值寄存器DL應先加1,然后將讀入的列值循環(huán)右移,判斷進位位CF是否等
于零(即有否鍵按下),若無鍵按下,再繼續(xù)加l、右移、判斷,重復上述過程,直到有鍵按下。最后把行值和列值相加并進行DAA修正,即可得到所求的十進制鍵值。
例如,跨接在X:行與Y.列的18鍵按下,其鍵值計算方法如下:第一次“0”行掃描X。行,無鍵按下,CL= 00 +08= 08,接下來掃X,行,仍無鍵按下,加08并進行DAA修正,CL =08+
08 =16,再掃X:行,此時讀人的列值不等于FFH即表明有鍵下,則CL =16不變。然后轉(zhuǎn)求列值,列值寄存器先加1,再把讀入的列值循環(huán)移位,由于按下的鍵在Y,列,所以需移位丙次才能移出0值,因此DL =02,然后將行值寄存器與列值寄存器之值相加,并進行DAA修正,得到AL=CL+DL=16+02=18,即鍵值為18。