




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、PS2鍵盤接口控制器設(shè)計 PS/2鍵盤接口控制器設(shè)計班級 姓名: 學(xué)號: 班內(nèi)序號: 時間: 課題名稱:PS/2鍵盤接口控制器設(shè)計一、摘要和關(guān)鍵詞摘要: PS/2是在電腦上常見的接口之一,用于鼠標、鍵盤等設(shè)備。PS/2接口是輸入裝置接口,而不是傳輸接口,所以PS/2口只有掃描速率。在Windows環(huán)境下,PS/2鼠標的采樣率默認為60次/秒。微控制器所要作的工作就是監(jiān)測所有的按鍵,以及當按鍵被按下或放開時,就回報給主機。本實驗中,通過數(shù)字可編程芯片模擬控制器將鍵盤的輸入分別輸出到數(shù)碼管和點陣顯示。關(guān)鍵詞:PS/2接口 點陣 數(shù)碼管 數(shù)字可編程芯片二、設(shè)計任務(wù)要求設(shè)計制作一個PS/2鍵盤接口控制
2、器,實現(xiàn)以下功能:1. 按照PS/2鍵盤接口標準設(shè)計一個控制器,接收PS/2鍵盤發(fā)送的數(shù)據(jù),用數(shù)碼管顯示接收到的鍵值(只顯示09,az,部分不便用數(shù)碼管顯示的字符可自行設(shè)定顯示方式,接收到其他鍵值則不顯示);2. 用88點陣做顯示屏,顯示所有按鍵的鍵值。三、設(shè)計思路、總體結(jié)構(gòu)框圖1. 設(shè)計思路:帶PS/2接口的鍵盤與實驗開發(fā)板連接后,通過可編程芯片讀取鍵盤輸入的鍵值,通過數(shù)據(jù)線分別傳送至數(shù)碼管和8*8點陣顯示。在實驗中,分三個模塊實現(xiàn)實驗所要求的功能:檢測鍵盤輸入鍵值模塊、數(shù)碼管顯示模塊、8*8點陣顯示模塊。將三個模塊分別設(shè)計好后,組合在一起,即可實現(xiàn)實驗所要求的功能。2. 總體結(jié)構(gòu)框圖:四、
3、控制器部分的狀態(tài)轉(zhuǎn)移圖和流程圖1. 控制器部分的狀態(tài)轉(zhuǎn)移圖如下圖所示(其中狀態(tài)值是shift_in的值,假設(shè)本次傳輸?shù)淖止?jié)數(shù)據(jù)值是11010011,傳輸其他字節(jié)數(shù)據(jù)信息時,同理,只需修改shift_in值即可):2. 控制器部分的流程圖如下圖所示:五、分塊電路和總體電路設(shè)計分三個模塊實現(xiàn)實驗所要求的功能:檢測鍵盤輸入鍵值模塊、數(shù)碼管顯示模塊、8*8點陣顯示模塊。其組合關(guān)系如下圖所示:實驗完成后的總體效果圖如下圖所示:1. 檢測鍵盤輸入鍵值模塊設(shè)計檢測帶PS/2接口的鍵盤輸入時,需要按照特定的步驟來執(zhí)行操作,才能正確地讀取鍵盤輸入的鍵值。嚴格的讀取數(shù)據(jù)步驟為:1)等待鍵盤時鐘信號clock =
4、high;2)延時50微秒;3)鍵盤時鐘信號clock仍舊為high?No則回到第1步,Yes則向下執(zhí)行;4)數(shù)據(jù)控制信號data=high?No則放棄(并且從主機讀取字節(jié)),Yes則向下執(zhí)行;5)延遲20微秒(若正在發(fā)送起始位則延時40微秒);6) 輸出起始位bit (0) (在發(fā)送所有這些位的每一位后都要檢測時鐘線);7) 輸出8個數(shù)據(jù)位(測試時鐘確認主機是否把時鐘線拉低了);8) 輸出校驗位;9) 輸出停止位,延遲30 毫秒。而按如下的過程發(fā)送單個位1)設(shè)置復(fù)位數(shù)據(jù);2)延遲20微秒;3)把時鐘拉低;4)延遲40微秒;5)釋放時鐘;6)延遲20微秒。通過實際情況修正與改進以上步驟,在本實
5、驗中采用的讀取鍵盤輸入鍵值模塊的VHDL語言編程的流程圖如下圖所示:2. 數(shù)碼管顯示模塊設(shè)計當需要在一個數(shù)碼管上顯示字符時只要在數(shù)據(jù)端需要點亮的字段管腳上輸入1,不需要點亮的字段輸入管腳上輸入0,同時把相應(yīng)的控制端置為0即可。當鍵盤鍵值和數(shù)字09的通碼比較后,即可送往數(shù)碼管顯示。數(shù)字09對應(yīng)的ag、p的高低電平如下表所示:數(shù)字abcdefgp011111100101100000211011010311110010401100110510110110610111110711100000811111110911110110數(shù)碼管功能原理圖如下圖所示:3. 8*8點陣顯示模塊點陣是由8行8列一共64
6、個發(fā)光二極管構(gòu)成。一共對外的管腳有16條,分為行ROW1ROW8 和列COL1COL8。點亮EPM1270TCC54芯片上的點陣上某一個點的條件是對應(yīng)該點的行管腳輸出高電平,列管腳輸出低電平。利用點陣顯示某個字符時,需要先計算出需要點亮點陣的哪些點,再使用行掃描的掃描方式對點陣逐行掃描,即可顯示所需要顯示的字符,其流程圖如下所示:六、所實現(xiàn)功能說明1. 已完成的基本功能和擴展功能:1)可分別用撥碼開關(guān)SW0SW5控制是否使用數(shù)碼管DSP1DSP6顯示數(shù)字鍵值,數(shù)碼管可顯示數(shù)字09;2)可用SW7控制是否使用8*8點陣顯示鍵值,點陣可顯示數(shù)字09、字母AZ;3)可用SW6控制是否讀取鍵盤輸入的鍵
7、值。2. 器件資源占用情況:使用了41個管腳接口,如下圖所示:使用了336個宏單元,如下圖所示:3. 關(guān)鍵波形仿真:在進行波形仿真時,由于本實驗?zāi)MPS/2控制器的特殊性,輸入的主要數(shù)據(jù)是keyboard_data,每次讀取1位數(shù)據(jù),在波形仿真時,輸出的是鍵盤鍵值的通碼,輸入輸出的數(shù)據(jù)的位數(shù)不一致(keyboard_data是1位,而輸出是8位),由于仿真時系統(tǒng)的時鐘不能太快,否則仿真時間會特別長導(dǎo)致軟件崩潰,故在仿真波形上只能看到點陣中第一行的波形4. 測試方法與步驟:主要按以下步驟進行本系統(tǒng)的調(diào)試與改進:1)鍵盤與實驗開發(fā)板之間連接好;2)單獨編寫數(shù)碼管顯示程序,利用數(shù)碼管顯示特定的數(shù)字;
8、3)單獨編寫點陣顯示程序,利用點陣顯示特定的字符;4)編寫鍵盤輸入鍵值讀取程序,并和數(shù)碼管程序結(jié)合起來,把輸出數(shù)據(jù)送至數(shù)碼管顯示。這時,就可以根據(jù)數(shù)碼管顯示的字符是否正確來改進鍵盤輸入鍵值讀取程序,只要數(shù)碼管能正確顯示一個數(shù)字,顯示其余的數(shù)字也就是重復(fù)相同的原理而已;5)在前面4步調(diào)試好后,把三個模塊檢測鍵盤輸入鍵值模塊、數(shù)碼管顯示模塊、8*8點陣顯示模塊的程序組合起來即可。七、故障及問題分析在編寫檢測鍵盤輸入鍵值模塊的VHDL程序時,按照參考資料上的特定步驟,并不能正確地讀取鍵盤輸入的鍵值。問題分析:對于兩份PDF參考資料上關(guān)于PS/2設(shè)備向主機發(fā)送一個字節(jié)和一位數(shù)據(jù)的描述,其是建立在向主機
9、(計算機)發(fā)送的基礎(chǔ)上的,而本實驗中利用數(shù)字電路實驗開發(fā)板模擬PS/2控制器,數(shù)字芯片可以直接從鍵盤數(shù)據(jù)輸入口讀取數(shù)據(jù),省去了很多不必需的步驟:1)校驗位和停止位:由于起始位始終為0,數(shù)據(jù)位為8位,而檢驗位與停止位讀取與否并不影響該程序的功能實現(xiàn),所以只需讀取PS/2鍵盤的起始位和數(shù)據(jù)位,并且最終將8位數(shù)據(jù)位轉(zhuǎn)存入data_cade和data_code1。這樣,既不影響程序功能的正確實現(xiàn),又能精簡程序代碼。2)時鐘信號電平:在參考資料中,在讀取數(shù)據(jù)位時,要求時鐘信號為高。但在實際編程仿真中發(fā)現(xiàn):在等待時鐘信號時,它的電平高低對后來的讀取數(shù)據(jù)并沒有影響。這也是本次實驗的特殊之處,同樣,對于數(shù)據(jù)位
10、的高低電平也不必強制要求。3)延時問題:在參考資料中,反復(fù)提到讀取數(shù)據(jù)位過程中的延時,但在編程中發(fā)現(xiàn)并不需要設(shè)置延時,而同樣能正確地讀取了鍵盤輸入的數(shù)據(jù)。在使用VHDL語言編程、利用數(shù)字可編程芯片仿真PS/2控制器時,并不需要專門的延時時間,鍵盤數(shù)據(jù)是每一位連續(xù)傳向數(shù)據(jù)線的,其中指令的執(zhí)行時間已經(jīng)足夠控制芯片讀取數(shù)據(jù)的緩沖時間。八、總結(jié)和結(jié)論通過這次數(shù)電實驗,我進一步加深了對可編程邏輯器件的認識,熟練掌握了quartus ii軟件的使用方法,包括編程,仿真下載測試。并且系統(tǒng)的學(xué)習(xí)了VHDL語言。 同時,學(xué)習(xí)了PS/2協(xié)議,了解了PS/2鍵盤是如何向主機傳輸數(shù)據(jù)的,也解開了我從小到大一直的疑惑。
11、九、參考文獻1 PS/2鍵盤協(xié)議2數(shù)字電路與邏輯設(shè)計實驗教程北京郵電大學(xué)電子工程學(xué)院電路實驗中心2009年3月十、源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity keyboard is port( keyboard_clk, keyboard_data, key_stop: in std_logic;-鍵盤時鐘信號,1位數(shù)據(jù)信號,終止鍵盤輸入信號clk:in std_logic;-系統(tǒng)時鐘信號led_clr: in st
12、d_logic;-點陣顯示復(fù)位信號 led_code: out std_logic_vector(7 downto 0); -接收到的送數(shù)碼管顯示的8位數(shù)據(jù)信號cat: out std_logic_vector(5 downto 0);-控制哪個數(shù)碼管顯示swcat: in std_logic_vector(5 downto 0);-利用撥碼開關(guān)控制哪個數(shù)碼管顯示 row: out std_logic_vector(7 downto 0);-行通量 col: out std_logic_vector(7 downto 0);-列通量end keyboard;architecture a of
13、keyboard issignal counter : std_logic_vector(3 downto 0); -計數(shù)器signal shift_in : std_logic_vector(8 downto 0); -包含1個起始位和8個數(shù)據(jù)位signal read_bit : std_logic; -是否讀取數(shù)據(jù)控制信號signal data_code : std_logic_vector(7 downto 0); -8位數(shù)據(jù)信號signal data_code1: std_logic_vector(7 downto 0);-點陣顯示signal temp: integer range
14、1 to 8;-列掃描控制信號signal t: std_logic;signal clkout: std_logic;beginprocess(clk)-1K分頻器variable count: integer range 0 to 1000;beginif (clkevent and clk=1) thenif (count = 499) thencount := 0;t = not t;elsecount := count + 1;end if;end if;clkout = t;end process;processbeginwait until (keyboard_clkevent
15、and keyboard_clk = 0);-等待鍵盤時鐘信號為低電平if key_stop = 1 then -終止鍵盤輸入 counter = 0000; -計數(shù)器設(shè)置為0 read_bit = 0; -讀取數(shù)據(jù)控制信號為低電平else if keyboard_data = 0 and read_bit = 0 then -數(shù)據(jù)線信號為低電平且讀取數(shù)據(jù)控制信號為低電平 read_bit= 1; -則開始讀取數(shù)據(jù)位 else if read_bit = 1 then -開始處理8個數(shù)據(jù)位 if counter 1001 then -計數(shù)器小于1001時 counter = counter +
16、 1; -計數(shù)器加1 shift_in(7 downto 0) = shift_in(8 downto 1); -每次不讀取shift_in(0)(該位為起始位) shift_in(8) = keyboard_data; -讀取新的數(shù)據(jù)位 else data_code = shift_in(7 downto 0); -存儲8位數(shù)據(jù)信號 data_code1 = shift_in(7 downto 0); -存儲8位數(shù)據(jù)信號 read_bit = 0; -讀取數(shù)據(jù)控制信號置0 counter = 0000; -計數(shù)器置0 end if; end if; end if;end if;end pro
17、cess;process(data_code)-數(shù)據(jù)送數(shù)碼管顯示begin cat led_code led_code led_code led_code led_code led_code led_code led_code led_code led_code led_code = 00000000; end case;end process;process(data_code1,clkout)-數(shù)據(jù)送led點陣顯示beginif led_clr=1 then -復(fù)位row=00000000;col=00000000;temp rowcolcolcolcolcolcolcolcolcolco
18、lcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcol rowcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcol rowcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcol rowcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolcolc
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班主任班級安全防范與應(yīng)急處理協(xié)議
- 舊村改造項目拆遷補償與二手房購買合同
- 財務(wù)軟件研發(fā)保密協(xié)議及勞動合同模板
- 電玩城免責協(xié)議書范本
- 部門副總經(jīng)理員工晉升與發(fā)展規(guī)劃勞動合同范本
- 殘疾人勞動合同簽訂與勞動爭議預(yù)防與處理
- 樁基成孔智能監(jiān)測儀
- 學(xué)校繳費流程規(guī)范說明
- 快遞店店員培訓(xùn)
- 2025消防知識培訓(xùn)
- 中央民族大學(xué)強基校測面試題
- 2025年陜西、山西、青海、寧夏高考政治試卷真題(含答案解析)
- 2025年 中國南水北調(diào)集團新能源投資公司第一批中層及考試筆試試卷附答案
- 期末試卷(五)(含答案含聽力原文無聽力音頻)-2024-2025學(xué)年人教PEP版英語(新教材)三年級下冊
- 3.21 明清時期的科技與文化 課件 2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 出國培訓(xùn)考試試題及答案
- 養(yǎng)老護理員四級考試題庫及答案
- 湖南2024生地會考試卷及答案
- 廣東省深圳市2024年中考英語真題(含答案)
- 敘事護理學(xué)智慧樹知到答案2024年中國人民解放軍海軍軍醫(yī)大學(xué)
- 六年級主題班隊會記錄表(6個表)
評論
0/150
提交評論