?? dpjjx28.htm
字號:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft FrontPage 5.0">
<TITLE>鍵盤接口與編程</TITLE>
</HEAD>
<BODY background="../back.jpg">
<OL>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"></font>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2><LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">矩陣式鍵盤接口技術及編程</LI></p>
</font>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P></font></OL>
<OL>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
</font>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">矩陣式鍵盤的結構與工作原理:</LI>
</p>
</font>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
</font>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>在鍵盤中按鍵數量較多時,為了減少</font><FONT SIZE=2>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口的占用,通常將按鍵排列成矩陣形式,如圖</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如</FONT><FONT SIZE=2>P1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口)就可以構成</FONT><FONT SIZE=2>4*4=16</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成</FONT><FONT SIZE=2>20</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>鍵的鍵盤,而直接用端口線則只能多出一鍵(</FONT><FONT SIZE=2>9</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>鍵)。由此可見,在</font></P>
<table width="300" border="0" cellspacing="2" cellpadding="2">
<tr>
<td>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<font size="2"><img src="dpj281.gif" width="308" height="333"></font></td>
</tr>
</table>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>需要的鍵數比較多時,采用矩陣法來做鍵盤是合理的。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的</font><FONT SIZE=2>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口作為輸出端,而列線所接的</FONT><FONT SIZE=2>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。具體的識別及編程方法如下所述。</font></P>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
</font>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">矩陣式鍵盤的按鍵識別方法</LI>
</p>
</font>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
</font>
</OL>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>行掃描法</font><FONT SIZE=2> </FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。</font></P><OL>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"></font><LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>判斷鍵盤中有無鍵按下</font><FONT SIZE=2> </FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>將全部行線</FONT><FONT SIZE=2>Y0-Y3</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>置低電平,然后檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>根行線相交叉的</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。</font><font size="2"></LI></font><FONT FACE="宋體" LANG="ZH-CN" SIZE=3></p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"></FONT><LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>判斷閉合鍵所在的位置</font><FONT SIZE=2> </FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。</font><font size="2"></LI></font><FONT FACE="宋體" LANG="ZH-CN" SIZE=3></p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P></font></OL>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<DIR>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">下面給出一個具體的例子:</P></DIR>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>圖仍如上所示。</font><FONT SIZE=2>8031</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單片機的</FONT><FONT SIZE=2>P1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口用作鍵盤</FONT><FONT SIZE=2>I/O</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口,鍵盤的列線接到</FONT><FONT SIZE=2>P1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口的低</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位,鍵盤的行線接到</FONT><FONT SIZE=2>P1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>口的高</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位。列線</FONT><FONT SIZE=2>P1.0-P1.3</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>分別接有</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>個上拉電阻到正電源</FONT><FONT SIZE=2>+5V</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,并把列線</FONT><FONT SIZE=2>P1.0-P1.3</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>設置為輸入線,行線</FONT><FONT SIZE=2>P1.4-P.17</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>設置為輸出線。</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>根行線和</FONT><FONT SIZE=2>4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>根列線形成</FONT><FONT SIZE=2>16</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>個相交點。</font></P>
<OL>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
</font>
<LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>檢測當前是否有鍵被按下。檢測的方法是</font><FONT SIZE=2>P1.4-P1.7</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>輸出全“</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>”,讀取</FONT><FONT SIZE=2>P1.0-P1.3</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>的狀態,若</FONT><FONT SIZE=2>P1.0-P1.3</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>為全“</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>”,則無鍵閉合,否則有鍵閉合。</font><font size="2"></LI>
</font>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
</p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
</FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。</LI>
</p>
</FONT>
<FONT FACE="宋體" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<LI>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -