單片機(jī)鍵盤(pán)接口技術(shù)
1.鍵盤(pán)接口電路<?XML:NAMESPACE PREFIX = O />
單片機(jī)的鍵盤(pán)接口電路有多種形式,最常用的是鍵盤(pán)掃描電路,如圖8-17所示。圖8-17中的鍵盤(pán)掃描電路是由3根行線與8根列線組成。3根行線的左邊接8155的PC口的3個(gè)引腳PC.0、PC.1、PC.2,右邊通過(guò)5K電阻接5V電源。8根列線通過(guò)反相器接8155B口(即位選口,地址為FF22H)。在行線與列線的交叉處設(shè)置一個(gè)按鍵,因此該單片機(jī)的鍵盤(pán)由3×8=24個(gè)按鍵組成。倒數(shù)第一、二行共16個(gè)數(shù)字鍵(0~F),第三行為8個(gè)功能鍵。從8155B口輸出8位低電平給8根列線d0~d7,若某行有鍵按下,則該行與列線接通為低電平。若某行無(wú)鍵按下,則該行保持高電平。由此可見(jiàn),測(cè)試PC.0、PC.1、PC.2的狀態(tài)就可以知道有無(wú)鍵按下,此外通過(guò)掃描方式可取出按鍵的鍵值。按鍵鍵值:0~F為數(shù)字鍵鍵值,10H~17H為功能鍵鍵值。
2.鍵盤(pán)掃描程序
(1)入口地址:KEY-SCAN,
(2)作用:判有無(wú)鍵按下
(3)出口狀態(tài):(A)=0 表示無(wú)鍵按下,
(A)≠0 表示有鍵按下。
(4)源程序
3.取鍵值程序
(1)名稱(chēng)與入口地址:KEY-GET 。
(2)作用:取按鍵鍵值。
(3)使用寄存器:A、R2、R4。
(4)出口狀態(tài):(A)=按鍵鍵值,0~F為數(shù)字鍵,10H~17H為功能鍵。
(5)程序設(shè)計(jì)基本思想
①調(diào)用鍵盤(pán)掃描程序判有無(wú)鍵按下,若無(wú)鍵按下則繼續(xù)判斷,若有鍵按下則取按鍵鍵值。在介紹取按鍵鍵值的方法之前先介紹列掃描碼的概念。
②列掃描碼
列掃描碼共8位,其中有1位為0 ,其它各位為1,初始值為11111110,該初始值存放在R2中,如圖8-27所示,0所在列的列號(hào)j存放在R4中,當(dāng)?shù)趈 列有鍵按下時(shí),按鍵所在行為低電平0,通過(guò)查行值是否為0,可確定按鍵的行號(hào)與列號(hào),并據(jù)此算出按鍵鍵值。因此列掃描碼的作用是確定第幾列有鍵按下。
③送列掃描碼
列掃描碼由R2通過(guò)累加器A傳送給8155B口,并由8155B口輸出給鍵盤(pán)電路的8根列線。8根列線中,第j列為0,其余各列為1。
④取行值
從PC口的PC.0~PC.2讀行信號(hào),若讀出的行值均為1,說(shuō)明第j列無(wú)鍵按下,將R2中的掃描碼左移1位,并將列號(hào)j存儲(chǔ)寄存器R4加1,轉(zhuǎn)③重新送掃描碼,查下一列有無(wú)鍵按下。若讀出第i行的行值中為0,說(shuō)明在第i行與第j列處有鍵按下,應(yīng)計(jì)算鍵值。
⑤計(jì)算鍵值
若讀出第i行為0 ,則說(shuō)明第i行與第j列處有鍵按下,由掃描碼中0所在列號(hào)j與行值為0的行號(hào)i可計(jì)算出按鍵鍵值:
鍵值= i×8+j。 (式中i=0~2,j=0~7)
例如:第0列與第0行處的按鍵按下,鍵值=0×8+0=0 ,即數(shù)字0鍵。
第0列與第1行處的按鍵按下,鍵值=1×8+0=8 ,即數(shù)字8鍵。
第0列與第2行處的按鍵按下,鍵值=2×8+0=10H。
由圖8-27可看出,上述計(jì)算公式是完全正確的。
<?XML:NAMESPACE PREFIX = V />
(6)流程圖:如圖8-29所示。
(7)源程序
注意:在調(diào)用鍵盤(pán)程序的主程序中,必須將8155初始化為A、B口基本I/O輸出方式,C口為基本輸入方式。然后才能調(diào)用上面取鍵值程序。
思考題:如何使0~7鍵與8~F鍵的鍵值互換,即按0鍵時(shí)顯示8,按8鍵時(shí)顯示0等?提示:將取鍵程序KEY_GET中的指令①與②互換即可。
編輯:admin 最后修改時(shí)間:2018-05-08