![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/7/15/a76e7407-2f1b-4598-a454-c9c53209a306/a76e7407-2f1b-4598-a454-c9c53209a306pic.jpg)
![畢業(yè)設(shè)計--ps2鍵盤鼠標(biāo)識別器的設(shè)計_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/7/15/a76e7407-2f1b-4598-a454-c9c53209a306/a76e7407-2f1b-4598-a454-c9c53209a3061.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 畢業(yè)設(shè)計說明書(論文)</p><p> 學(xué) 院: 信息工程學(xué)院 </p><p> 專 業(yè): 通信工程 </p><p> 題 目: PS/2鍵盤鼠標(biāo)識別器的設(shè)計 </p><p> 畢業(yè)設(shè)計說明
2、書(論文)中文摘要</p><p> 鍵盤是嵌入式系統(tǒng)的最重要的輸入設(shè)備之一,是實現(xiàn)人機交互的重要途徑,設(shè)計者除了可以自行設(shè)計掃描式矩陣鍵盤之外,還可以選擇標(biāo)準(zhǔn)PS/2鍵盤實現(xiàn)人機交互。標(biāo)準(zhǔn)PS/2鍵盤由于接口通信協(xié)議簡單,在系統(tǒng)中占用軟硬件資源少,高可靠性,表達信息量大而得到了越來越廣泛的應(yīng)用。PS/2接口作為傳統(tǒng)的鼠標(biāo)鍵盤接口已經(jīng)被大部分人所熟知,雖然隨著USB接口鍵鼠的普及,絕大多數(shù)PC用戶均選擇了USB的
3、鍵鼠,但目前主流PC中依舊保留了PS/2鍵鼠的接口,由于PS/2接口實現(xiàn)簡單,使用方便的特點,在許多領(lǐng)域如工控機等仍舊采用PS/2接口來完成基本的人機交互。本文分析了當(dāng)前市場上主流PS/2鍵盤鼠標(biāo)的工作協(xié)議,闡述了PS/2接口鍵盤識別器的工作原理。關(guān)鍵詞 嵌入式系統(tǒng) PS/2鍵盤鼠標(biāo) 矩陣鍵盤 通信協(xié)議</p><p> 畢業(yè)設(shè)計說明書(論文)外文摘要</p><p><b
4、> 目 錄</b></p><p><b> 摘要I</b></p><p> AbstractII</p><p> 第1章 緒 論1</p><p> 1.1 選題的背景1</p><p> 1.2 課題研究的目的和意義2</p>&l
5、t;p> 1.3 PS/2的現(xiàn)狀與發(fā)展3</p><p> 第2章 PS/2鼠標(biāo)、鍵盤協(xié)議4</p><p> 2.1 PS/2的物理接口 4</p><p> 2.2 PS/2鍵盤鼠標(biāo)協(xié)議4</p><p> 2.3 設(shè)備到主機的通訊過程5</p><p> 2.4 主機到設(shè)備的通訊7&
6、lt;/p><p> 2.5 本章小結(jié) 9</p><p> 第3章 PS/2鍵盤接口設(shè)計10</p><p> 3.1 PS/2鍵盤接口特性10</p><p> 3.1.1 PS/2鍵盤接口概述10</p><p> 3.1.2 掃描碼10</p><p> 3.1.3 通
7、碼斷碼和機打重復(fù)率10</p><p> 3.2 硬件接口設(shè)計11</p><p> 3.2.1 單片機的基礎(chǔ)知識11</p><p> 3.2.2 單片機的發(fā)展12</p><p> 3.2.3 單片機AT89C51的特性12</p><p> 3.2.4 硬件電路圖16</p>
8、<p> 3.3 軟件程序設(shè)計17</p><p> 3.3.1 單片機與鍵盤間的PS/2通信程序的設(shè)計17</p><p> 3.3.2 鍵盤鍵盤初始化程序19</p><p> 3.4 本章小結(jié)20</p><p> 第4章 PS/2鼠標(biāo)接口設(shè)計21</p><p> 4.1 PS/
9、2鼠標(biāo)接口特性21</p><p> 4.1.1 輸入、分辨率和縮放比例21</p><p> 4.1.2 位移數(shù)據(jù)包21</p><p> 4.1.3 PS/2鼠標(biāo)工作模式22</p><p> 4.1.4 PS/2鼠標(biāo)的數(shù)據(jù)傳送幀過程詳解22</p><p> 4.2 單片機和PS/2鼠標(biāo)的硬件
10、接口23</p><p> 4.3 PS/2鼠標(biāo)的軟件設(shè)計24</p><p> 4.4 本章小結(jié)25</p><p><b> 總 結(jié)26</b></p><p><b> 參考文獻27</b></p><p><b> 致謝28</
11、b></p><p><b> 附錄29</b></p><p><b> 第1章 緒 論</b></p><p><b> 1.1 選題的背景</b></p><p> PS/2接口是計算機發(fā)展到一定階段的一種接口規(guī)范,是1987年,IBM推出的鍵盤接口標(biāo)準(zhǔn)
12、,支持雙向串行通訊協(xié)議。鍵盤和鼠標(biāo)上的口是Male(公的),稱為Plug(插頭)。主板上的接口是Female(母的),稱為Socket(插座)。因此,這兩個就分別是Plug Socket,簡稱PS而已,又因為其支持雙向通信協(xié)議,故稱為PS/2接口。PS/2是在較早電腦上常見的接口之一,用于鼠標(biāo)、鍵盤等設(shè)備。一般情況下,PS/2接口的鼠標(biāo)為綠色,鍵盤為紫色。以前完全開放的PC標(biāo)準(zhǔn)讓IBM覺得利益受了損失。所以IBM設(shè)計了PS/2這種電腦,
13、目的是重新定義PC標(biāo)準(zhǔn),不再采用開放標(biāo)準(zhǔn)的方式。在這種電腦上IBM使用了新型MCA總線,新的OS/2操作系統(tǒng)。PS/2電腦上使用的鍵盤鼠標(biāo)接口就是現(xiàn)在的PS/2接口。因為標(biāo)準(zhǔn)不開放,PS/2電腦在市場中失敗了。只有PS/2接口一直沿用到今天[1]。</p><p> PS/2設(shè)備接口用于許多的現(xiàn)代的鼠標(biāo)和鍵盤,它是由IBM開發(fā)并且最初出現(xiàn)在IBM技術(shù)參考手冊里。標(biāo)準(zhǔn)PS/2鍵盤由于接口通信協(xié)議簡單,在系統(tǒng)中占用
14、的軟硬件資源少,可靠性高,表達信息量大而得到越來越廣泛的應(yīng)用[2]。</p><p> 目前,在嵌入式智能儀器儀表中,常用LCD加鍵盤實現(xiàn)人機接口,在實際應(yīng)用中人機界面需要顯示漢字,筆者從事的一個電力保護項目中還需要輸入并保存漢字以標(biāo)注線路號的信息,如果用簡單的控制鍵盤實現(xiàn)英文甚至漢字的輸入,則程序比較復(fù)雜,筆者考慮到PC上用的標(biāo)準(zhǔn)PS/2鍵盤,可通過簡單的接口實現(xiàn)與MCU的連接,利用成熟且普及的PC鍵盤,可實
15、現(xiàn)復(fù)雜的輸入,對于MCU并不占用很多口線,甚至口線復(fù)用,可僅在需要輸入時再接上鍵盤,是一種廉價的鍵盤解決方案。</p><p> 鍵盤是嵌入式系統(tǒng)的重要的輸入設(shè)備,是實現(xiàn)人機交互的重要的手段之一,隨著標(biāo)準(zhǔn)PS/2鍵盤急速成熟和價格不斷下降,在嵌入式系統(tǒng)的設(shè)計中,用標(biāo)準(zhǔn)PS/2鍵盤取代自制簡易的掃描式矩陣式鍵盤稱為可能[3]。在單片機系統(tǒng)中,經(jīng)常使用的鍵盤都是專用鍵盤。此類鍵盤為單獨設(shè)計制作的,成本高,使用硬件連
16、接線多,而且可靠性不高,這一狀況在那些要求鍵盤按鍵較多的應(yīng)用系統(tǒng)中更為突出。與此相比,在PC系統(tǒng)中廣泛應(yīng)用PS/2鍵盤具有價格低,通用可靠而且連接線少(僅使用2根信號線)的特點,并且可滿足多種系統(tǒng)的要求。因此在單片機系統(tǒng)中應(yīng)用PS/2鍵盤是一種很好的選擇。</p><p> 1.2 課題研究的目的和意義</p><p> PS/2接口是輸入裝置接口,而不是傳輸接口。所以PS/2口根本沒
17、有傳輸速率的概念,只有掃描速率。在Windows環(huán)境下,PS/2鼠標(biāo)的采樣率默認(rèn)為60次/秒,USB鼠標(biāo)的采樣率為120次/秒。較高的采樣率理論上可以提高鼠標(biāo)的移動精度。PS/2接口設(shè)備不支持熱插拔,強行帶電插拔有可能燒毀主板。</p><p> PS/2可以與USB接口互轉(zhuǎn),即PS/2接口設(shè)備可以轉(zhuǎn)成USB,USB接口設(shè)備也可以轉(zhuǎn)成PS/2。早期,在PS/2鍵盤中,包含了一個嵌入式的微控制器(如InDl,80
18、48系列),以用來執(zhí)行各項的工作并減少整個系統(tǒng)工作中的負(fù)擔(dān)。微控制器所要作的工作就是監(jiān)測所有的按鍵,以及當(dāng)按鍵被按下或放開時,就回報給主機。</p><p> 在單片機的嵌入式應(yīng)用中,有時需要輸入較多的參數(shù),來完成程序或數(shù)據(jù)參數(shù)的設(shè)定操作,在對信息安全要求較高的場所(比如銀行系統(tǒng)的一些智能設(shè)備),有時需要輸入一些敏感的數(shù)字或字母資料,有十多個按鍵的位置及常規(guī)輸入設(shè)備由于很容易被別人看到操作作者按按鍵的位置及順序
19、從而使得數(shù)據(jù)失密。PS/2接口的鼠標(biāo)是被現(xiàn)代個人微機廣泛采用的外部定點輸入設(shè)備,它易于操作而且價格廉價。如果能夠利用PS/2鼠標(biāo)的標(biāo)準(zhǔn)接口特性,在單片機應(yīng)用系統(tǒng)中設(shè)計一個PS/2接口作為系統(tǒng)的輸入設(shè)備,不僅占用資源少,成本低而且操作簡單,同時具有保密性好的優(yōu)點。</p><p> 1.3 PS/2的現(xiàn)狀與發(fā)展</p><p> 隨著計算機工業(yè)的發(fā)展,作為計算機最常用輸入設(shè)備的鍵盤也日新
20、月異。1981年IBM推出了IBM PC/XT鍵盤及其接口標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了83鍵,采用5腳DIN連接器和簡單的串行協(xié)議。實際上,第一套鍵盤掃描碼集并沒有主機到鍵盤的命令。為此,1984年IBM推出了IBM AT鍵盤接口標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了84-101鍵,采用5腳DIN連接器和雙向串行通訊協(xié)議,此協(xié)議依照第二套鍵盤掃描碼集設(shè)有8個主機到鍵盤的命令。到了1987年,IBM又推出了PS/2鍵盤接口標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)仍舊定義了84-101鍵,但是采用
21、6腳mini-DIN連接器,該連接器在封裝上更小巧,仍然用雙向串行通訊協(xié)議并且提供有可選擇的第三套鍵盤掃描碼集,同時支持17個主機到鍵盤的命令。現(xiàn)在,市面上的鍵盤都和PS/2及AT鍵盤兼容,只是功能不同而已。一般,具有五腳連接器的鍵盤稱之為AT鍵盤,而具有六腳mini-DIN連接器的鍵盤則稱之為PS/2鍵盤。其實這兩種連接器都只有四個腳有意義。它們分別是Clock(時鐘腳)、DATA(數(shù)據(jù)腳)、+5V(電源腳)和Ground(電源地)。
22、在PS/2鍵盤與PC機的物理連接上只要保證這四根線一一對應(yīng)就可</p><p> PS/2接口是一種PC兼容電腦系統(tǒng)上的接口,可以用來鏈接鍵盤及鼠標(biāo)。PS/2的命名來自于1987年IBM所推出的個人電腦:PS/2系列。PS/2鼠標(biāo)連接通常用來取代舊式的串行鼠標(biāo)接口(DB -9 RS-232);而PS/2鍵盤連接則是用來取代為IBM PC/AT所設(shè)計的大型5-pin DIN接口。PS/2的鍵盤及鼠標(biāo)接口在電氣特性
23、上十分相似,其中主要的差別在于鍵盤接口需要雙向溝通。在早期如果對調(diào)鍵盤和鼠標(biāo)的插槽,大部分的臺式機主板將不能識別出鍵盤及鼠標(biāo)?,F(xiàn)在已經(jīng)沒有關(guān)系了[4]。目前PS/2接口已經(jīng)慢慢的被USB所取代,只有少部分的臺式機仍然提供PS/2接口。有些鼠標(biāo)可以使用轉(zhuǎn)換器將接口由USB轉(zhuǎn)換成PS/2,亦有可以從USB分接成鍵盤鼠標(biāo)用PS/2接口的轉(zhuǎn)接線。PS/2接口不支持熱插拔。</p><p> 可以說,二十世紀(jì)跨越了三個“
24、電”的時代,即電氣時代、電子時代和現(xiàn)已進入的電腦時代。不過,這種電腦,通常是指個人計算機,簡稱PC機。它由主機、鍵盤、顯示器等組成。還有一類計算機,大多數(shù)人卻不怎么熟悉。這種計算機就是把智能賦予各種機械的單片機(亦稱微控制器)。顧名思義,這種計算機的最小系統(tǒng)只用了一片集成電路,即可進行簡單運算和控制。因為它體積小,通常都藏在被控機械的“肚子”里。它在整個裝置中,起著有如人類頭腦的作用,它出了毛病,整個裝置就癱瘓了?,F(xiàn)在,這種單片機的使用
25、領(lǐng)域已十分廣泛,如智能儀表、實時工控、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等。各種產(chǎn)品一旦用上了單片機,就能起到使產(chǎn)品升級換代的功效,常在產(chǎn)品名稱前冠以形容詞——“智能型”,如智能型洗衣機等。現(xiàn)在有些工廠的技術(shù)人員或其它業(yè)余電子開發(fā)者搞出來的某些產(chǎn)品,不是電路太復(fù)雜,就是功能太簡單且極易被仿制。究其原因,可能就卡在產(chǎn)品未使用單片機或其它可編程邏輯器件上。</p><p> 第2章 PS/2鼠標(biāo)、鍵盤協(xié)議</p&g
26、t;<p> 2.1 PS/2的物理接口</p><p> 物理上的PS/2端口是兩類連接器中的一種:5腳的DIN或6腳的Mini-DIN。這兩種連接器(在電氣特性上)是十分類似的,實際上兩者只有一點不同那就是管腳的排列。這就意味著這兩類連接器可以很容易用一種簡單的硬件連線的適配器來轉(zhuǎn)換。這種適配器大約每個值6美元,或者你可以根據(jù)任意兩種連接器的對應(yīng)管腳關(guān)系做你自己的適配器。DIN標(biāo)準(zhǔn)是由德國標(biāo)
27、準(zhǔn)化組織(Deutsches Institut Fuer Norm)建立的。</p><p> PC鍵盤可以有6腳的mini-DIN或5腳的DIN連接器[6]。如果你的鍵盤是6腳的mini-DIN而你的計算機是5腳的DIN(或者相反),這兩類連接器可以用上面提到的適配器來兼容。具有6腳mini-DIN的鍵盤通常被叫做“PS/2”鍵盤,而那些有5腳DIN叫做“AT”設(shè)備(“XT”鍵盤也使用5腳DIN,但它們非常古
28、老并且多年前就不生產(chǎn)了)。所有現(xiàn)代的為PC建造的鍵盤不是PS/2,AT就是USB的。這篇文章不適用于USB,設(shè)備它們使用了一種完全不同的接口。</p><p> 鼠標(biāo)流行著大量的形狀和大?。ê徒涌冢?,最流行的類型可能算是PS/2鼠標(biāo),現(xiàn)在USB鼠標(biāo)漸漸開始流行起來了。串行鼠標(biāo)同樣非常流行,但計算機工業(yè)放棄了它們轉(zhuǎn)而支持USB和PS/2設(shè)備。</p><p> 每種連接器的引腳定義如下所
29、示</p><p> 圖2-1 5腳DIN連接器</p><p> 圖2-2 6腳DIN連接器</p><p> 2.2 PS/2鍵盤鼠標(biāo)協(xié)議</p><p> 在剛才提到連接器上有四個有趣的管腳;電源地、5V、數(shù)據(jù)和時鐘。Host(計算機)提供+5V,并且鍵盤/鼠標(biāo)的地連接到host的電源地上。數(shù)據(jù)和時鐘都是集電極開路的,這就意味著
30、它們通常保持高電平而且很容易下拉到地(邏輯0)。任何你連接到PS/2鼠標(biāo)、鍵盤或host的設(shè)備在時鐘和數(shù)據(jù)線上要有一個大的上拉電阻。置“0” 就把線拉低,置“1”就讓線上浮成高電平。(注意:如果你打算使用象PIC這樣的微控制器,由于它們的I/O管腳是雙向的,你可以跳過晶體管和緩沖門,并且通用同一個管腳進行輸入和輸出。在這種組態(tài)情況下,要設(shè)置管腳為輸入就寫入1使得電阻上拉線上的電平,要改變管腳為輸出就寫入0到那個管腳,把線路下拉到地。)&
31、lt;/p><p> PS/2鼠標(biāo)和鍵盤履行一種雙向同步串行協(xié)議。換句話說,每次數(shù)據(jù)線上發(fā)送一位數(shù)據(jù)并且每在時鐘線上發(fā)一個脈沖就被讀入。鍵盤、鼠標(biāo)可以發(fā)送數(shù)據(jù)到主機,而主機也可以發(fā)送數(shù)據(jù)到設(shè)備,但主機總是在總線上有優(yōu)先權(quán),它可以在任何時候抑制來自于鍵盤/鼠標(biāo)的通訊,只要把時鐘拉低即可。</p><p> 從鍵盤、鼠標(biāo)發(fā)送到主機的數(shù)據(jù)在時鐘信號的下降沿(當(dāng)時鐘從高變到低的時候)被讀??;從主機
32、發(fā)送到鍵盤、鼠標(biāo)的數(shù)據(jù)在上升沿(當(dāng)時鐘從低變到高的時候)被讀取。不管通訊的方向怎樣,鍵盤、鼠標(biāo)總是產(chǎn)生時鐘信號。如果主機要發(fā)送數(shù)據(jù),它必須首先告訴設(shè)備開始產(chǎn)生時鐘信號(這個過程在下一章節(jié)中被描述)最大的時鐘頻率是 33KHZ,而且大多數(shù)設(shè)備工作在10-20KHZ。如果你要制作一個PS/2設(shè)備,我推薦你把頻率控制在15KHZ左右。這就意味著時鐘應(yīng)該是高40微秒低40微秒。</p><p> 所有數(shù)據(jù)安排在字節(jié)中,
33、每個字節(jié)為一幀,包含了11-12個位。這些位的含義如下:</p><p> 表2-1 數(shù)據(jù)幀格式說明</p><p> 如果數(shù)據(jù)位中包含偶數(shù)個1,校驗位就會置1;如果數(shù)據(jù)位中包含奇數(shù)個1,校驗位就會置0。數(shù)據(jù)位中1的個數(shù)加上校驗位總是為奇數(shù)(這就是奇校驗)這是用來進行錯誤檢測的。</p><p> 當(dāng)主機發(fā)送數(shù)據(jù)給鍵盤、鼠標(biāo)時,設(shè)備回送一個握手信號來應(yīng)答數(shù)據(jù)包
34、已經(jīng)收到。這個位不會出現(xiàn)在設(shè)備發(fā)送數(shù)據(jù)到主機的過程中。</p><p> 2.3 設(shè)備到主機的通訊過程</p><p> 數(shù)據(jù)和時鐘線都是集電極開路結(jié)構(gòu)(正常保持高電平)。當(dāng)鍵盤或鼠標(biāo)等待發(fā)送數(shù)據(jù)時,它首先檢查時鐘以確認(rèn)它是否是高電平。如果不是,那么是主機抑制了通訊,設(shè)備必須緩沖任何要發(fā)送的數(shù)據(jù)直到重新獲得總線的控制權(quán)(鍵盤有16字節(jié)的緩沖區(qū),而鼠標(biāo)的緩沖區(qū)僅存儲最后一個要發(fā)送的數(shù)據(jù)包
35、)。如果時鐘線是高電平,設(shè)備就可以開始傳送數(shù)據(jù)。</p><p> 如我在上一節(jié)提及的,鍵盤和鼠標(biāo)使用一種每幀包含11位的串行協(xié)議[7]。這些位含義是:</p><p> 表2-2 數(shù)據(jù)幀格式說明</p><p> 每位在時鐘的下降沿被主機讀入,如圖2-3:</p><p> 圖2-3:設(shè)備到主機</p><p&g
36、t; 當(dāng)時鐘為高時,設(shè)備驅(qū)動數(shù)據(jù)線改變狀態(tài),在時鐘信號的下降沿數(shù)據(jù)被控制器鎖存。</p><p> 時鐘頻率為10—16.7KHZ,從時鐘脈沖的上升沿到一個數(shù)據(jù)轉(zhuǎn)變的時間至少要有5微秒。數(shù)據(jù)變化到時鐘脈沖的下降沿的時間至少要有5微秒并且不大于25微秒。這個定時非常重要。主機可以在第11個時鐘脈沖(停止位)之前把線拉低,導(dǎo)致設(shè)備放棄發(fā)送當(dāng)前字節(jié)(這是非常罕見的)。在停止位發(fā)送之后,設(shè)備在發(fā)送下個包前至少應(yīng)該等待
37、50毫秒。這將給主機時間當(dāng)它處理接收到的字節(jié)時抑制發(fā)送(主機在收到每個包時,通常自動做這個)。在主機釋放抑制后,設(shè)備至少應(yīng)該在發(fā)送任何數(shù)據(jù)前等50毫秒。</p><p> 按下面的過程發(fā)送一個單一字節(jié)從PS/2到主機:</p><p> ?。?)檢測時鐘線電平,如果時鐘線為低,則延時50微秒;</p><p> 檢測判斷時鐘信號是否為高,為高,則向下執(zhí)行,為低,
38、則轉(zhuǎn)到(1);</p><p> (2)檢測數(shù)據(jù)線是否為高,如果為高則繼續(xù)執(zhí)行,如果為低,則放棄發(fā)送(此時PC機在向PS/2設(shè)備發(fā)送數(shù)據(jù),所以PS/2設(shè)備要轉(zhuǎn)移到接收程序處接收數(shù)據(jù));</p><p> (3)延時20微秒(如果此時正在發(fā)送起始位,則應(yīng)延時40微秒);</p><p> (4)輸出起始位(0)到數(shù)據(jù)線上。這里要注意的是:在送出每一位后都要檢測時
39、鐘線,以確保PC機沒有抑制PS/2設(shè)備,如果有則中止發(fā)送;</p><p> ?。?)輸出8個數(shù)據(jù)位到數(shù)據(jù)線上;</p><p><b> ?。?)輸出校驗位;</b></p><p> ?。?)輸出停止位(1);</p><p> (8)延時30微秒(如果在發(fā)送停止位時釋放時鐘信號則應(yīng)延時50微秒);</p&g
40、t;<p> 按如下的過程發(fā)送單個位:</p><p> ?。?)準(zhǔn)備數(shù)據(jù)位(將需要發(fā)送的數(shù)據(jù)位放到數(shù)據(jù)線上)</p><p><b> ?。?)延遲20微秒</b></p><p><b> ?。?)把時鐘拉低</b></p><p><b> ?。?)延遲40微秒<
41、;/b></p><p><b> (5)釋放時鐘</b></p><p><b> ?。?)延遲20微秒</b></p><p> 2.4 主機到設(shè)備的通訊</p><p> 被發(fā)送的包有點不同于主機到設(shè)備通訊過程。首先,PS/2設(shè)備總是產(chǎn)生時鐘信號。如果主機要發(fā)送數(shù)據(jù),它必須首先把時
42、鐘和數(shù)據(jù)線設(shè)置為“請求發(fā)送”狀態(tài),如下示:</p><p> 1)通過下拉時鐘線至少100微秒來抑制通訊。</p><p> 2)通過下拉數(shù)據(jù)線來應(yīng)用“請求發(fā)送”然后釋放時鐘。</p><p> 設(shè)備應(yīng)該在不超過10毫秒的間隔內(nèi)就要檢查這個狀態(tài)。當(dāng)設(shè)備檢測到這個狀態(tài),它將開始產(chǎn)生時鐘信號,并且時鐘脈沖標(biāo)記下輸入八個數(shù)據(jù)位和一個停止位。主機僅當(dāng)時鐘線為低的時候改
43、變數(shù)據(jù)線,而數(shù)據(jù)在時鐘脈沖的上升沿被鎖存。當(dāng)發(fā)生在設(shè)備到主機通訊的過程中時正好相反。</p><p> 在停止位發(fā)送后,設(shè)備要應(yīng)答接收到的字節(jié),就把數(shù)據(jù)線拉低并產(chǎn)生最后一個時鐘脈沖。如果主機在第11個時鐘脈沖后不釋放數(shù)據(jù)線,設(shè)備將繼續(xù)產(chǎn)生時鐘脈沖直到數(shù)據(jù)線被釋放(然后設(shè)備將產(chǎn)生一個錯誤)。</p><p> 主機可以在第11個時鐘脈沖(應(yīng)答位)前中止一次傳送,只要下拉時鐘線至少100微
44、秒。</p><p> 要使得這個過程易于理解,主機必須按下面的步驟發(fā)送數(shù)據(jù)到PS/2設(shè)備:</p><p> ?。?)把時鐘線拉低至少100微秒</p><p> ?。?) 把數(shù)據(jù)線拉低</p><p><b> (3) 釋放數(shù)據(jù)線</b></p><p> ?。?) 等待設(shè)備把時鐘線拉低&
45、lt;/p><p> ?。?) 設(shè)置/復(fù)位數(shù)據(jù)線發(fā)送第一個數(shù)據(jù)位</p><p> ?。?) 等待設(shè)備把時鐘拉高 </p><p> ?。?) 等待設(shè)備把時鐘拉低</p><p> ?。?) 重復(fù)5-7步 發(fā)送剩下的7個數(shù)據(jù)位和校驗位</p><p><b> ?。?) 釋放數(shù)據(jù)線</b><
46、/p><p> ?。?0)等待設(shè)備把數(shù)據(jù)線拉低</p><p> (11)等待設(shè)備把時鐘線拉低</p><p> ?。?2) 等待設(shè)備釋放數(shù)據(jù)線和時鐘線。</p><p> 圖2-4用圖形表示,圖2-5以單獨的時序表示了由主機產(chǎn)生的信號及由PS/2設(shè)備產(chǎn)生的信號。注意應(yīng)答位時序的改變,數(shù)據(jù)的改變發(fā)生在時鐘線為高的時候,不同于其它11位是當(dāng)它為
47、低的時候。</p><p> 圖2-4 主機到設(shè)備的通信</p><p> 圖2-5 主機到設(shè)備通訊的詳細(xì)過程</p><p> 圖3-5描述了兩個重要的定時條件(a)和(b)。(a)在主機最初把數(shù)據(jù)線拉低后,設(shè)備開始產(chǎn)生時鐘脈沖的時間,必須不大于15毫秒;(b)數(shù)據(jù)包被發(fā)送的時間必須不大于2ms。如果這兩個條件不滿足,主機將產(chǎn)生一個錯誤。在包收到后,主機為了
48、處理數(shù)據(jù)立刻把時鐘線拉低來抑制通訊。如果主機發(fā)送的命令要求有一個回應(yīng),這個回應(yīng)必須在主機釋放時鐘線后20毫秒之內(nèi)被收到。如果沒有收到,則主機產(chǎn)生一個錯誤。在設(shè)備到主機通訊的情況中,時鐘改變后的5微秒內(nèi)不應(yīng)該發(fā)生數(shù)據(jù)改變的情況。</p><p> 如果要仿真一個鼠標(biāo)或鍵盤,則按如下的過程從主機讀入數(shù)據(jù):</p><p> 在你的主程序中,至少每10毫秒檢測數(shù)據(jù)線是否為低,如果數(shù)據(jù)線已被主
49、機拉低,則從主機讀取一個字節(jié)。</p><p> ?。?)等待時鐘線為高電平; </p><p> ?。?)判斷數(shù)據(jù)線是否為低,為高則錯誤退出,否則繼續(xù)執(zhí)行;</p><p> ?。?)讀地址線上的數(shù)據(jù)內(nèi)容,共8個Bit,每讀完一個位,都應(yīng)檢測時鐘線是否被PC機拉低,如果被拉低則要中止接收 ;</p><p> ?。?)讀地址線上的校驗位內(nèi)
50、容,1個Bit; </p><p> (5)讀入停止位; </p><p> ?。?)如果數(shù)據(jù)線上為0(即還是低電平),PS/2設(shè)備繼續(xù)產(chǎn)生時鐘,直到接收到1</p><p> 且產(chǎn)生出錯信號為止(因為停止位是1,如果PS/2設(shè)備沒有讀到停止位,則表明此次傳輸出錯);</p><p>
51、;<b> (7)輸出應(yīng)答位;</b></p><p> (8)檢測奇偶校驗位,如果校驗失敗,則產(chǎn)生錯誤信號以表明此次傳輸出現(xiàn)錯誤;</p><p> ?。?)延時45微秒,以便PC機進行下一次傳輸 [8] 。 </p><p> 按如下次序讀取每位(8個數(shù)據(jù)位、檢驗位和停止位):</p><p><b>
52、; ?。?)延遲20微秒</b></p><p> (2)把時鐘拉低 </p><p><b> ?。?)延遲40微秒</b></p><p><b> (4)釋放時鐘</b></p><p><b> ?。?)延遲20微秒</b></p>&
53、lt;p><b> ?。?)讀數(shù)據(jù)線</b></p><p> 按如下次序發(fā)送應(yīng)答位:</p><p> ?。?) 延遲15微秒</p><p><b> ?。?)把數(shù)據(jù)線拉低</b></p><p><b> (3)延遲5微秒</b></p><
54、p><b> ?。?)把時鐘線拉低</b></p><p><b> ?。?)延遲40微秒</b></p><p><b> ?。?)釋放時鐘線</b></p><p><b> (7)延遲5微秒</b></p><p><b> ?。?
55、)釋放數(shù)據(jù)</b></p><p><b> 2.5 本章小結(jié)</b></p><p> PS/2鍵盤、鼠標(biāo)協(xié)議包括物理上的連接器以及它的電氣特性。具體分為設(shè)備到主機的通訊和主機到設(shè)備的通訊。本章節(jié)還具體闡述了兩者之間的不同點和工作流程以及工作原理。</p><p> 第3章 PS/2鍵盤接口設(shè)計</p><
56、;p> 3.1 PS/2鍵盤接口特性</p><p> 現(xiàn)今仍在使用中的絕大多數(shù)流行的鍵盤包括:USB鍵盤,它最后出現(xiàn)的鍵盤被所有新式的計算機支持(Macintosh和IBM/及其兼容機)。它們有自己相關(guān)的復(fù)雜接口并且不包含這篇文章中。IBM機器兼容鍵盤,也叫做“AT鍵盤”或“PS/2鍵盤”,所有現(xiàn)代的PC都支持這個設(shè)備。它們是最容易使用的接口,也是本文的主題。ADB鍵盤,連接到老式Macintosh系
57、統(tǒng)的Apple桌面總線。</p><p> 3.1.1 PS/2鍵盤接口概述</p><p> 鍵盤上包含了一個大型的按鍵矩陣,它們是由安裝在電路板上的處理器(叫做“鍵盤編碼器”)來監(jiān)視的。具體的處理器在鍵盤與鍵盤之間是多樣化的,大概好似它們基本上都做著同樣的事情:監(jiān)視哪些按鍵被按下或釋放了,并傳送適當(dāng)?shù)臅r候到主機。如果有必要,處理器處理所有的去抖動并在它的16 字節(jié)緩沖區(qū)里緩沖數(shù)據(jù)[
58、9]。你的主板包含了一個“鍵盤控制器”負(fù)責(zé)解碼所有來自鍵盤的數(shù)據(jù),并告訴你的軟件什么事件發(fā)生了。在主機和鍵盤之間的通訊使用IBM 的協(xié)議。</p><p><b> 3.1.2 掃描碼</b></p><p> 鍵盤的處理器花費很多的時間來掃描或監(jiān)視按鍵矩陣。如果它發(fā)現(xiàn)有鍵被按下,釋放或按住,鍵盤將發(fā)送“掃描碼”的信息包到計算機。掃描碼有兩種不同的類型:“通碼”和
59、“斷碼”。當(dāng)一個鍵被按下或按住就發(fā)送通碼;當(dāng)一個鍵被釋放就發(fā)送斷碼。每個按鍵被分配了唯一的通碼和斷碼,這樣主機通過查找唯一的掃描碼就可以測定是哪個按鍵。每個鍵一整套的通斷碼組成了“掃描碼集”。有三套標(biāo)準(zhǔn)的掃描碼集,分別是第一套、第二套和第三套。所有現(xiàn)代的鍵盤默認(rèn)使用第二套掃描碼。</p><p> 第一套掃描碼集:原始的XT掃描碼集;現(xiàn)在某些鍵盤還支持;</p><p> 第二套掃描碼
60、集:所有現(xiàn)代鍵盤默認(rèn)的掃描碼集;</p><p> 第三套掃描碼集:可選的PS/2掃描碼集(很少使用);</p><p> 3.1.3 通碼斷碼和機打重復(fù)率</p><p> 只要一個鍵被按下,這個鍵的通碼就被發(fā)送到計算機。記住通碼只表示鍵盤上的一個按鍵,它不表示印刷在按鍵上的那個字符。這就意味著在通碼和ASCII 碼之間沒有已定義的關(guān)聯(lián)。直到主機把掃描碼翻譯
61、成一個字符或命令。雖然多數(shù)第二套通碼都只有一個字節(jié)寬,但也有少數(shù)“擴展按鍵”的通碼是兩字節(jié)或四字節(jié)寬。這類的通碼第一個字節(jié)總是為E0h。</p><p> 正如鍵按下通碼就被發(fā)往計算機一樣,只要鍵一釋放,斷碼就會被發(fā)送。每個鍵都有它自己唯一的通碼,它們也都有唯一的斷碼。幸運的是,你不用總是通過查表來找出按鍵的斷碼,在通碼和斷碼之間存在著必然的聯(lián)系。多數(shù)第二套斷碼有兩字節(jié)長,它們的第一個字節(jié)是F0h,第二個字節(jié)是
62、這個鍵的通碼。擴展按鍵的斷碼通常有三個字節(jié),它們前兩個字節(jié)是E0h,F(xiàn)0h,最后一個字節(jié)是這個按鍵通碼的最后一個字節(jié)。作為一個例子,我在下面列出了幾個按鍵的第二套通碼和斷碼:</p><p> 表3-1 個別第二套的通碼斷碼</p><p> 例如:通碼和斷碼是以什么樣的序列發(fā)送到你的計算機,使得字符“G”出現(xiàn)在你的字處理軟件里呢?因為這是一個大寫字母,需要發(fā)生這樣的事件次序:按下“S
63、hift”鍵按下“G”鍵,釋放“G”鍵,釋放“Shift”鍵。與這些時間相關(guān)的掃描碼如下“Shift”鍵的通碼(12h),“G”鍵的通碼(34h),“G”鍵的斷碼(F0h,34h),“Shift”鍵的斷碼(F0h,12h)。因此,發(fā)送到你的計算機的數(shù)據(jù)應(yīng)該是:12h,34h ,F(xiàn)0h,34h,F(xiàn)0h,12h。</p><p> 如果你按了一個鍵,這個鍵的通碼被發(fā)送到計算機。當(dāng)你按下并按住這個鍵,則這個鍵就變成了
64、機打,這就意味著鍵盤將一直發(fā)送這個鍵的通碼直到它被釋放或者其他鍵被按下。要想證實這點,只要打開一個文本編輯器并按下“A”鍵。當(dāng)你首先按下這個鍵,字符“a ”立刻出現(xiàn)在你的屏幕上。在一個短暫的延遲后,接著出現(xiàn)一整串的“a ”直到你釋放“A ”鍵。這里有兩個重要的參數(shù):機打延時,是第一個和第二個“a”之間的延遲:機打速率是在機打延時后每秒有多少字符出現(xiàn)你的屏幕上。機打延時的范圍可以從0.25 秒到1.00 秒;機打速率的范圍可以從2.0cp
65、s(字符每秒)到30.0cps。你可以用“Set Typematic Rate/Delay ”(0xF3)命令來改變機打速率和延時[10]。</p><p> 機打的數(shù)據(jù)不被鍵盤所緩沖。在多個鍵被按下的情況下,只有最后一個按下的鍵變成機打。當(dāng)這個鍵被釋放時,機打重復(fù)就停止了,甚至于其他的鍵依然還按著。</p><p> 3.2 硬件接口設(shè)計 </p><p>
66、 總體來說本文本研究課題所設(shè)計的PS/2鍵盤鼠標(biāo)識別器是基于單片機控制的,并且是以美國ATMEL公司的AT89C51為核心。</p><p> 3.2.1 單片機的基礎(chǔ)知識</p><p> 單片機就是在一塊半導(dǎo)體硅片上集成了微處理器(CPU),存儲器(RAM,ROM,EPROM)和各種輸入、輸出接口(定時器/計數(shù)器,并行I/O口,串行口,A/D轉(zhuǎn)換器以及脈寬調(diào)制器PWM等),這樣一塊
67、集成電路芯片具有一臺計算機的特性,因而被稱為單片微型計算機,簡稱單片機。</p><p> 單片機主要應(yīng)用于測控領(lǐng)域,用以實現(xiàn)各種測試和控制功能。為了強調(diào)其控制屬性,在國際上,多把單片機稱為微控制器MCU(MicroController Unit)。由于單片機在使用時,通常是處于測控系統(tǒng)的核心地位并嵌入其中,所以,通常也把單片機稱為嵌入式控制器EMCU(Embedded MicroController Unit
68、)。通常,單片機由單塊集成電路芯片構(gòu)成,內(nèi)部包含有計算機的基本功能部件:CPU(Central Processing Unit,中央處理器)、存儲器和I/O接口電路等。因此,單片機只需要與適當(dāng)?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個單片機控制系統(tǒng)。單片機內(nèi)部也用和電腦功能類似的模塊,比如CPU,內(nèi)存,并行總線,還有和硬盤作用相同的存儲器件,不同的是它的這些部件性能都相對我們的家用電腦弱很多,不過價錢也是低的,一般不超過10元即可。</
69、p><p> 3.2.2 單片機的發(fā)展</p><p> 早期的單片機都是8位或4位的。其中最成功的是INTEL的8031,因為簡單可靠而性能不錯獲得了很大的好評[11] 。此后在8031上發(fā)展出了MCS51系列單片機系統(tǒng)?;谶@一系統(tǒng)的單片機系統(tǒng)直到現(xiàn)在還在廣泛使用。隨著工業(yè)控制領(lǐng)域要求的提高,開始出現(xiàn)了16位單片機,但因為性價比不理想并未得到很廣泛的應(yīng)用。90年代后隨著消費電子產(chǎn)品大發(fā)
70、展,單片機技術(shù)得到了巨大的提高。隨著INTEL i960系列特別是后來的ARM系列的廣泛應(yīng)用,32位單片機迅速取代16位單片機的高端地位,并且進入主流市場。而傳統(tǒng)的8位單片機的性能也得到了飛速提高,處理能力比起80年代提高了數(shù)百倍。目前,高端的32位單片機主頻已經(jīng)超過300MHz,性能直追90年代中期的專用處理器,而普通的型號出廠價格跌落至1美元,最高端的型號也只有10美元。當(dāng)代單片機系統(tǒng)已經(jīng)不再只在裸機環(huán)境下開發(fā)和使用,大量專用的嵌入
71、式操作系統(tǒng)被廣泛應(yīng)用在全系列的單片機上。而在作為掌上電腦和手機核心處理的高端單片機甚至可以直接使用專用的Windows和Linux操作系統(tǒng)。</p><p> 單片機比專用處理器更適合應(yīng)用于嵌入式系統(tǒng),因此它得到了最多的應(yīng)用。事實上單片機是世界上數(shù)量最多的計算機。現(xiàn)代人類生活中所用的幾乎每件電子和機械產(chǎn)品中都會集成有單片機。手機、電話、計算器、家用電器、電子玩具、掌上電腦以及鼠標(biāo)等電腦配件中都配有1-2部單片機
72、[12]。而個人電腦中也會有為數(shù)不少的單片機在工作。汽車上一般配備40多部單片機,復(fù)雜的工業(yè)控制系統(tǒng)上甚至可能有數(shù)百臺單片機在同時工作!單片機的數(shù)量不僅遠超過PC機和其他計算的綜合,甚至比人類的數(shù)量還要多。</p><p> 3.2.3 單片機AT89C51的特性</p><p> AT89C系列單片機是ATMEL公司生產(chǎn)的一款標(biāo)準(zhǔn)型單片機。其中數(shù)字9表示內(nèi)含F(xiàn)lash存儲器,C表示C
73、MOS工藝。AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機,片內(nèi)含4k bytes的可反復(fù)擦寫的只讀程序存儲器(PEROM)和128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲單元,功能強大AT89C51單片機可為您提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。<
74、/p><p><b> 1.主要性能參數(shù)</b></p><p> 與MCS-51產(chǎn)品指令系統(tǒng)完全兼容;4k字節(jié)可重擦寫Flash閃速存儲器;1000次擦寫周期;有10年數(shù)據(jù)保留時間;全靜態(tài)操作:0Hz-24MHz;三級加密程序存儲器;128×8字節(jié)內(nèi)部RAM;32個可編程I/O口線;2個16位定時/計數(shù)器;6個中斷源;可編程串行UART通道;低功耗空閑和掉
75、電模式;片內(nèi)振蕩器和時鐘電路[13]。</p><p> AT89C51管腳圖如圖3-1所示。</p><p> 圖3-1 AT89C51單片機管腳圖</p><p><b> 2.功能引腳說明</b></p><p><b> VCC:電源電壓。</b></p><p&
76、gt;<b> GND:接地。</b></p><p> P0:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口P0寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在FLASH編程時,P0口接收指令字節(jié),而在
77、程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。</p><p> P1口:P1口是一個帶內(nèi)部上拉電阻的8位雙向I/O口,Pl口的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻某個引腳被外部信號拉低時會輸出一個電流ILL。Flash編程和程序校驗期間,P1接收低8位地址。</p>
78、<p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能
79、寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。FLASH編程或校驗時,P2亦接收高位地址和一些控制信號。</p><p> P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>
80、 P3口除了作為一般的I/0口線外,更重要的用途是它的第二功能,如下表所示:</p><p> 表3-2 引腳及其功能</p><p> 此外,P3口還接收一些用于FLASH閃速存儲器編程和程序校驗的控制信號。</p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時當(dāng)8051通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)2
81、4個時鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指鐘寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),</p><p> 表3-3 8051的初始態(tài)</p><p> ALE/PROG:當(dāng)訪問外部程序
82、存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位??山笰LE操作。該位置位后,只有一條MOVX和MOVC指令才能將A
83、LE激活,此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應(yīng)設(shè)置ALE禁止位無效[14]。</p><p> PSEN:程序儲存允許PSEN輸出是外部程序存儲器的讀選通信號,當(dāng)AT89C51 由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。</p><p> EA/VPP:當(dāng)/EA保持低電平時,則
84、在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p> XTAL1:來自反向振蕩器的輸出。</p>
85、<p> 3.振蕩器特性及芯片擦除</p><p> AT89C5l 中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1 和XTAL2 分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器。</p><p> 整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms來完成。在
86、芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。</p><p> 此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM、定時器、計數(shù)器、串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個硬件復(fù)位為止。</p><p&g
87、t; 3.2.4 硬件電路圖</p><p> PS/2鍵盤與AT89C51單片機的連接方式如圖4-2所示。P3.0接PS/2數(shù)據(jù)線;P3.2(INT0)接PS/2時鐘線。因為單片機的P3口內(nèi)部是帶上拉電阻的,所以PS/2的時鐘線和數(shù)據(jù)線可以直接與單片機的P.0,P3.2相連接。</p><p> 圖3-2 PS/2鍵盤與單片機連接圖</p><p> 考慮
88、到時鐘脈沖信號總由鍵盤產(chǎn)生,因此,采用這種方案:鍵盤的CLOCK接主機的一外部中斷(INTO),數(shù)據(jù)線,接任一I/O口線(P3.0,為兼容用串口方式故接在RxD0上)。在數(shù)據(jù)線及時鐘線上加10K的大電阻上拉,試驗中,首先使用最原始的查尋方式,即MCU在釋放總線控制權(quán)后(置CLOCK為高),一直查詢CLOCK狀態(tài),由圖3知鍵盤需要發(fā)送數(shù)據(jù)時,取得總線控制權(quán),產(chǎn)生時鐘的下降沿,主機繼續(xù)查詢CLOCK當(dāng)檢測到下降沿,即從DATA讀入一個數(shù)據(jù),
89、循環(huán)往復(fù),直至接收完8位數(shù)據(jù)位,一個奇校驗位,一個停止位。</p><p> 此種方式通過后,即在程序中改為CLOCK觸發(fā)產(chǎn)生中斷方式,即主機釋放總線控制權(quán)后,開外部中斷,CLOCK下降沿產(chǎn)生中斷信號,進人中斷服務(wù)程序接收數(shù)據(jù),但此種方案的不足在于,中斷頻繁,耗費資源??紤]到鍵盤與主機采用串行傳輸,類似于MCU的UART傳輸,故可DAT接MCU的RxD0這樣主機每接收到數(shù)據(jù)才中斷一次,減少了資源的耗費,不過,鍵
90、盤等 PS/2設(shè)備一般工作在10-20kHz(依廠家設(shè)備不同),故要求主機與設(shè)備的波特率同步自適應(yīng),才能正確接收數(shù)據(jù)(波特率自適應(yīng)的實現(xiàn):鍵盤上電自檢時要發(fā)送狀態(tài)碼,利用時鐘脈沖的中斷,由定時器測量脈沖周期,可得時鐘頻率,從而得到波特率,實現(xiàn)波特率的自適應(yīng))</p><p> 3.3 軟件程序設(shè)計</p><p> PS/2 104鍵盤驅(qū)動程序主要任務(wù)是實現(xiàn)單片機與鍵盤鍵的PS/2通信
91、,同時將接受到的按鍵掃描碼轉(zhuǎn)換為該鍵盤的鍵值,提供給系統(tǒng)上層軟件使用。</p><p> 軟件流程圖如下圖3-3所示,驅(qū)動及鍵盤碼的映射和部分按鍵服務(wù)程序由中斷服務(wù)程序完成,鍵盤鍵值通過全局變量傳遞給主程序,主程序只要查詢標(biāo)志位,當(dāng)有鍵按下時,執(zhí)行相應(yīng)的程序,在這里,筆者完成了全拼的輸入法程序,并通過了試驗驗證。</p><p> 圖3-3 軟件設(shè)計流程圖</p><
92、;p> 3.3.1 單片機與鍵盤間的PS/2通信程序的設(shè)計</p><p> 在PS/2通信過程中,主設(shè)備(文中是單片機)是在時鐘信號為低時發(fā)送和接收數(shù)據(jù)信號。因為單片機向鍵盤發(fā)送的是指令,需要鍵盤回應(yīng),所以這部分程序采用查詢方式;而單片機接收鍵盤數(shù)據(jù)時,數(shù)據(jù)線上的信號在時鐘為低時已經(jīng)穩(wěn)定,所以這部分程序采用中斷方式,且不需要在程序中加入延時程序。</p><p> 單片機向
93、PS/ 2 鍵盤發(fā)送數(shù)據(jù)程序代碼為:</p><p> Void PS2_sent char(unsigned char sent char){ //PS/2主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù)</p><p> unsigned char sent bit_CNT= 0x00;</p><p> unsigned char sent char_CHK = 0x00;&
94、lt;/p><p> EX0=0; //關(guān)外部中斷0</p><p> // 發(fā)起一個傳送 ,發(fā)起始位</p><p> PS2_SGN_CLOCK = 0; //將時鐘線拉低并保持100微妙</p><p> delay1
95、00us();</p><p> PS2_SGN_DATA=0;//起始位</p><p> PS2_SGN_CLOCK=1;</p><p> // 發(fā)送DATA 0-7</p><p> for(sent bit_CNT=0;sent bit_CNT< 8;sent bit_CNT++) {</p><p
96、> while(PS2_SGN_CLOCK)_NOP_(); //等待時鐘線變?yōu)榈?lt;/p><p> PS2_SGN_DATA=sent char & 0x01; //發(fā)送數(shù)據(jù)</p><p> if (PS2_SGN_DATA) sent char_CHK+ +; //計算校驗</p><p> while
97、 (! PS2_SGN_CLOCK)_NOP_(); //等待時鐘線變高</p><p> Sent char>>=1; //待發(fā)送數(shù)據(jù)右移一位</p><p><b> }</b></p><p><b> // 發(fā)送校驗位</b></p>
98、<p> while (PS2_SGN_CLOCK)_NOP_(); //等待時鐘線變低</p><p> switch (sent char_CNK) {</p><p><b> case 0 :</b></p><p><b> case 2 :</b></p><p&
99、gt;<b> case 4 :</b></p><p> case 6 : PS2_SGN_DATA =1;break; //奇校驗</p><p><b> case 1 :</b></p><p><b> case 3 :</b></p><p><
100、;b> case 5 :</b></p><p> case 7 :PS2_SGN_DATA = 0;break; //奇校驗</p><p> default :break;</p><p><b> }</b></p><p> while (!PS2_SGN_CLOCK)_NOP
101、_(); //等待時鐘線變高</p><p> while ( PS2_SGN_CLOCK)_NOP_(); //等待時鐘線變低</p><p> PS2_SGN_DATA=1; //發(fā)送停止位停止位總為1</p><p> while (! PS2_SGN_CLOCK)_NOP_(); //等
102、待時鐘線變高</p><p> while (PS2_SGN_CLOCK)_NOP_(); //等待時鐘線變低</p><p><b> //接收 ACK</b></p><p> //if (PS2_SGN_DATA) error () ;</p><p> //ACK信號由鍵盤發(fā)出 ,總為低電平&
103、lt;/p><p> while(!PS2_SGN_CLOCK)_NOP_(); //等待時鐘線變高</p><p> EX0=1; //開外部中斷0</p><p><b> }</b></p><p> 單片機由PS/2鍵盤接收數(shù)據(jù)程序:外
104、部中斷0設(shè)置為下降沿觸發(fā)</p><p> void int0()interrupt 0 using 0{</p><p> EX0=0; //關(guān)外部中斷 0</p><p> switch(PS2_rev char_CNT) {</p><p><b> case
105、 1:</b></p><p><b> …</b></p><p> case 8:MCU_rev char<<=1 ;</p><p> if (PS2_SGN_DATA) MCU_rev char= 0x01 ;</p><p> ps2_rev char_CNT++;</p&
106、gt;<p><b> Break;</b></p><p> Case 0: PS2_rev char_CNT + +;break;//開始位,</p><p> Case 9 : PS2_rev char_CNT+ +;break;//校驗位,可添加校驗程序</p><p> Case 10 : _NOP_ ();
107、 //停止位</p><p> PS2_rev char_NOP=0;</p><p> Rev char_flag=1; //置接收到數(shù)據(jù)標(biāo)識位</p><p><b> Break;</b></p><p> default:break;</p>
108、<p><b> }</b></p><p> EX0=1; //開外部中斷 0</p><p><b> }</b></p><p> 3.3.2 鍵盤鍵盤初始化程序</p><p> ?。?)上電后,接收鍵盤上電自檢通過
109、信號0xAA,或者自檢出錯信號0xFC。單片機接收為0xAA則進入下一步,否則進行出錯處理;</p><p> ?。?)關(guān)LED指示,單片機發(fā)送0xED,然后接收鍵盤回應(yīng),0xFA,接著發(fā)送0x00接收 0xFA;</p><p> (3)設(shè)置機打延時和速率:單片機發(fā)送0xF3,接收0xFA,發(fā)送0x00(250ms ,2.0 cps),接收0xFA;</p><p&
110、gt; ?。?)檢查LED,發(fā)送0xED,接收0xFA,發(fā)送0x07(開所有LED),接收0xFA,發(fā)送0xED,接收0xFA,發(fā)送0x00(關(guān)LED),接收0xFA;</p><p> (5)允許鍵盤,發(fā)送0xF4,接收0xFA。鍵盤LED改變ps2_led change()函數(shù)流程:發(fā)送0xED;接收0xFA;發(fā)送led_stat us;接收0xFA;</p><p><b&g
111、t; 3.4 本章小結(jié)</b></p><p> 本章節(jié)主要敘述了PS/2鍵盤接口的軟硬件的實現(xiàn)。對本次課題主要用到的AT89C51進行了詳細(xì)的介紹。從性能參數(shù)到引腳說明再到它的振蕩特性都進行了詳細(xì)的解釋,單片機與鍵盤鍵的PS/2通信程序的編程設(shè)計也很詳細(xì)。在硬件方面更是給出了元器件間的電子連接圖,并對用到的引腳進行了解釋說明。</p><p> 第4章 PS/2鼠標(biāo)接口
112、設(shè)計</p><p> 4.1 PS/2鼠標(biāo)接口特性</p><p> PS/2鼠標(biāo)與主機接口遵循雙向異步串行通信協(xié)議。PS/2鼠標(biāo)在時鐘信號的作用下串行發(fā)送或者接受數(shù)據(jù)。</p><p> 4.1.1 輸入、分辨率和縮放比例</p><p> 標(biāo)準(zhǔn)的PS/2鼠標(biāo)支持下面的輸入:X(左右)位移,Y(上下)位移,左鍵,中鍵和右鍵。鼠標(biāo)以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ps2鼠標(biāo)鍵盤協(xié)議 外文翻譯
- 畢業(yè)設(shè)計----基于單片機的ps2鍵盤設(shè)計
- 基于verilog的ps2鍵盤設(shè)計進階
- diy輕松把鍵盤、鼠標(biāo)ps2接口改造成usb接口
- 實驗四_ps2鍵盤的控制
- 基于fpga的ps2鍵盤鼠標(biāo)控制電子琴說明書
- 基于fpga的ps2鼠標(biāo)接口設(shè)計及vga顯示
- 課程設(shè)計--基于fpga的vga圖像漢字顯示及ps2鍵盤控制設(shè)計與應(yīng)用
- fpga控制的ps2接口電路設(shè)計
- ps畢業(yè)設(shè)計
- hdl-ps2接口鍵盤課程設(shè)計
- 畢業(yè)設(shè)計----ps網(wǎng)頁設(shè)計
- 畢業(yè)設(shè)計----手指鍵盤的設(shè)計
- 鼠標(biāo)殼體畢業(yè)設(shè)計論文
- ps2模擬器pcsx2設(shè)置及使用教程
- 畢業(yè)設(shè)計---鼠標(biāo)外殼的模具設(shè)計
- 畢業(yè)論文----基于vhdl語言的vga、ps2接口協(xié)議
- 鼠標(biāo)設(shè)計模具設(shè)計與畢業(yè)設(shè)計
- ps2接口與usb引腳圖
- 畢業(yè)設(shè)計-- 游戲鼠標(biāo)外觀設(shè)計
評論
0/150
提交評論