矩陣鍵盤控制接口電路設計說明_第1頁
矩陣鍵盤控制接口電路設計說明_第2頁
矩陣鍵盤控制接口電路設計說明_第3頁
矩陣鍵盤控制接口電路設計說明_第4頁
矩陣鍵盤控制接口電路設計說明_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 .東 北 石 油 大 學課 程 設 計課 程 硬件課程設計 題 目 矩陣鍵盤控制接口電路設計 院 系 計算機與信息技術學院 專業班級 學生XX 學生學號 指導教師 2011年 07月 10 日東北石油大學課程設計任務書課程 硬件課程設計題目 矩陣鍵盤控制接口設計專業 計算機與信息技術09-4 學號 主要容、基本要求、主要參考資料等一、主要容:利用EL教學實驗箱、微機和Quartus軟件系統,設計并實現一個48鍵盤接口控制器。設計過程中使用層次設計方法和VHDL語言,完成硬件設計和功能仿真。最后下載到EL教學實驗箱中予以實現。二、基本要求:1.按照層次設計方法實現鍵盤接口控制器中的時序產生電路

2、、鍵盤掃描電路、彈跳消除電路、鍵盤譯碼電路、按鍵碼存儲電路和顯示八段數碼管電路。2. 按下某一鍵時,在數碼管上顯示該鍵對應的鍵值。三、參考文獻:1 松.EDA技術實用教程M.:科學, 2003.11-13.2 恒.FPGA/CPLD最新實用技術指南M.:清華大學, 2005.20-22.3 EDA先鋒工作室.Altera FPGA/CPLD設計 M.:人民郵電2005.32-33.4 松.SOPC技術實用教程M .清華大學.2005.1-15.完成期限: 第19周 指導教師: 專業負責人:2011年 06 月28 日目 錄第1章 EDA的概述11.1 EDA的概述1第2章 QUARTUS II

3、系統32.1 QUARTUS II3第3章矩陣鍵盤控制接口電路43.1 概述43.2 底層實體電路73.3 頂層實體電路103.4 仿真結果173.5 硬件驗證結果18結論21參考文獻2224 / 27第1章 EDA的概述1.1 EDA的概述EDA是電子設計自動化(Electronic DesignAutomation)的縮寫,在20世紀90年代初從計算機輔助設計(CAD)、計算機輔助制造(CAM)、計算機輔助測試(CAT)和計算機輔助工程(CAE)的概念發展而來的。20世紀90年代,國際上電子和計算機技術較先進的國家,一直在積極探索新的電子電路設計方法,并在設計方法、工具等方面進行了徹底的變

4、革,取得了巨大成功。在電子技術設計領域,可編程邏輯器件(如CPLD、FPGA)的應用,已得到廣泛的普與,這些器件為數字系統的設計帶來了極大的靈活性。這些器件可以通過軟件編程而對其硬件結構和工作方式進行重構,從而使得硬件的設計可以如同軟件設計那樣方便快捷。這一切極改變了傳統的數字系統設計方法、設計過程和設計觀念,促進了EDA技術的迅速發展。EDA技術就是以計算機為工具,設計者在EDA軟件平臺上,用硬件描述語言HDL完成設計文件,然后由計算機自動地完成邏輯編譯、化簡、分割、綜合、優化、布局、布線和仿真,直至對于特定目標芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術的出現,極提高了電路設計的效

5、率和可操作性,減輕了設計者的勞動強度。利用EDA工具,電子設計師可以從概念、算法、協議等開始設計電子系統,大量工作可以通過計算機完成,并可以將電子產品從電路設計、性能分析到設計出IC版圖或PCB版圖的整個過程的計算機上自動處理完成?,F在對EDA的概念或疇用得很寬。包括在機械、電子、通信、航空航天、化工、礦產、生物、醫學、軍事等各個領域,都有EDA的應用。目前EDA技術已在各大公司、企事業單位和科研教學部門廣泛使用。例如在飛機制造過程中,從設計、性能測試與特性分析直到飛行模擬,都可能涉與到EDA技術。二、幾個有關EDA的專題(1) EDA中心 (2) EDA中國門戶 (3) 中國EDA工程網 .

6、edagc.(4) EDA愛好者 .edafans. (5) EDA教學與研究 .edateach. 三、設計方法(1) 前端設計(系統建模RTL 級描述)后端設計(FPGAASIC)系統建模(2) IP 復用(3) 前端設計(4) 系統描述:建立系統的數學模型。(5) 功能描述:描述系統的行為或各子模塊之間的數據流圖。6) 邏輯設計:將系統功能結構化,通常以文本、原理圖、邏輯圖、布爾表達式來表示設計結果。(7) 仿真:包括功能仿真和時序仿真,主要驗證系統功能的正確性與時序特性。四、EDA工具軟件EDA工具軟件可大致可分為芯片設計輔助軟件、可編程芯片輔助設計軟件、系統設計輔助軟件等三類。目前進

7、入我國并具有廣泛影響的EDA軟件是系統設計軟件輔助類和可編程芯片輔助設計軟件:Protel、PSPICE、multiSIM7(原EWB的最新版本)、OrCAD、PCAD、LSIIogic、MicroSim,ISE,modelsim等等。這些工具都有較強的功能,一般可用于幾個方面,例如很多軟件都可以進行電路設計與仿真,同進還可以進行PCB自動布局布線,可輸出多種網表文件與第三方軟件接口。EDA工具軟件廠商三巨頭:Synopsys、Mentor Graphics、Cadence?!癳da”在英漢詞典中的解釋(來源:百度詞典):EDA abbr. 1. =Economic Development A

8、dministration (美國)(商務部)經濟開發署 2. =Economic Development Association (美國)經濟開發協會eda abbr. 1. =early departure authorized 經批準提前出發第2章 QUARTUS II系統2.1 QUARTUS IIQuartus II 是Altera公司的綜合性PLD開發軟件,支持原理圖、VHDL、VerilogHDL以與AHDL(Altera Hardware Description Language)等多種設計輸入形式,嵌自有的綜合器以與仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。

9、Quartus II可以在XP、Linux以與Unix上使用,除了可以使用Tcl腳本完成設計流程外,提供了完善的用戶圖形界面設計方式。具有運行速度快,界面統一,功能集中,易學易用等特點。 Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三方EDA工具。 此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方便地實現各種DSP應用系統;支持Altera的片上可

10、編程系統(SOPC)開發,集系統級設計、嵌入式軟件開發、可編程邏輯設計于一體,是一種綜合性的開發平臺。 Maxplus II 作為Altera的上一代PLD設計軟件,由于其出色的易用性而得到了廣泛的應用。目前Altera已經停止了對Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設計輔助工具,集成了SOPC和HardCopy設計流程,并且繼承了Maxplus II 友好的圖形界面與簡便的使用方法。 Altera

11、Quartus II 作為一種可編程邏輯的設計環境, 由于其強大的設計能力和直觀易用的接口,越來越受到數字系統設計者的歡迎。 Altera的Quartus II可編程邏輯軟件屬于第四代PLD開發平臺。該平臺支持一個工作組環境下的設計要求,其中包括支持基于Internet的協作設計。Quartus平臺與Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供應商的開發工具相兼容。改進了軟件的LogicLock模塊設計功能,增添 了FastFit編譯選項,推進了網絡編輯性能,而且提升了調試能力。支持MAX7000/MAX3000等

12、乘積項器件第3章 矩陣鍵盤控制接口電路3.1 概述在鍵盤中按鍵數量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口就可以構成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數比較多時,采用矩陣法來做鍵盤是合理的。矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,列線通過電阻接正電源,并將行線所接的FPGA的I/O口作為輸出端,而列線所接的I/O口則作為輸

13、入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。實驗儀器中48矩陣鍵盤的電路原理圖如圖所示:圖3-1 48矩陣鍵盤的電路原理圖掃描信號為BCOM8.1,在BCOM8.1前已接有一個3-8譯碼器,3-8譯碼器的輸入為SEL0SEL3。當3-8譯碼器的輸入為“000”時,即BCOM1為0,其他位為1,我們按下第一排第一鍵,此時KIN0輸出0,KIN1KIN3輸出全為1,按下第二排第二鍵時,KIN1輸出0,其他輸出1;當3-8譯碼器輸入為001時,即BCOM2為0,我們按下第一排第

14、二鍵,此時KIN0輸出0,KIN1KIN3輸出全為1,同理其他鍵依此類推。鍵盤上的每個按鍵就是一個開關,當某鍵被按下時,該按鍵的接點會呈現0狀態,反之為1。掃描信號為SEL2.0進入3-8譯碼器,再從譯碼器輸出到鍵盤,所以第一次只能掃描一排,依此周而復始。按鍵位置與數碼的關系如表50-1所示。若從KIN3.0輸出的皆為1時,表示沒有按鍵按下,代表該列沒有按鍵被按下,則不進行按鍵編碼的操作,反之,如果有被按下時,則應將KIN3.0讀出的值送到譯碼電路進行編碼。設置掃描信號為SEL2SEL0,列線按鍵輸入信號KIN3KIN0與按鍵位置的關系如表所示:SEL2SEL0KIN3KIN0對應的按鍵鍵盤譯

15、 碼輸出按鍵功能0001110000000數字01101600100數字61011LAST10100功能鍵0111CTRL11000功能鍵0011110100001數字11101700111數字71011STEP10101功能鍵0111EMPTY111010擴展10101110200010數字21101REG10010功能鍵1011C01100字母C0111EMPTY211011擴展20111110300011數字31101EXEC10011功能鍵1011D01101字母D0111EMPTY311100擴展31001110MEM10000功能鍵1101801000數字81011E01110字母

16、E0111EMPTY411101擴展41011110ESC10001功能鍵1101901001數字91011F01111字母F0111SHIFT11001功能鍵1101110400100數字41101A01010字母A1011NEXT10110功能鍵0111NONE11110無定義1111110500101數字51101B01011字母B1011ENTER10111功能鍵0111NONE11110無定義圖3-2 鍵盤參數表3.2 底層實體電路彈跳消除電路因為按鍵大多是機械式開關結構,在開關切換的瞬間會在接觸點出現來回彈跳的現象,對于激活關閉一般電器并不會有何影響,但對于靈敏度較高的電路,卻有可

17、能產生誤動作而出錯。彈跳現象產生的原因可從圖50-2說明。雖然只是按下按鍵一次然后放掉,然而實際產生的按鍵信號卻不只跳動一次,經過取樣的檢查后將會造成誤判,以為按鍵兩次。按鍵信號抽樣信號抽樣結果圖3-3 彈跳現象產生錯誤的抽樣結果如果調整抽樣頻率,可以發現彈跳現象獲得了改善。按鍵信號抽樣信號抽樣結果圖3-4 調整抽樣頻率后得到的抽樣結果因此必須加上彈跳消除電路,避免誤操作信號的發生。注意,彈跳消除電路所使用脈沖信號的頻率必須比其它電路使用的脈沖信號的頻率更高;通常將掃描電路或LED顯示電路的工作頻率定在24HZ左右,兩者的工作頻率是通常的4倍或更高。該元件為一個通用的全功能的消抖動元件,含有自

18、由計數器模塊、消抖動模塊和微分模塊。各引腳說明如下:Key為按鍵輸入信號,高電平有效,有抖動毛刺;clr是清零信號,低電平有效;clk是同步時鐘信號,選擇20MHZ;dly_out是消抖動輸出;diff_out是消抖動微分輸出。LIBRARY IEEE; -消除USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY debouncing ISPORT(clk,key:IN STD_LOGIC; clr:IN STD_LOGIC; dly_out,dif_out:OUT STD_LOGIC);END debouncin

19、g;ARCHITECTURE a OF debouncing IS SIGNAL sample,dly,diff:STD_LOGIC; BEGINfree_counter:block -計數器模塊 SIGNAL :STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL d0:STD_LOGIC; BEGIN PROCESS(clr,clk) BEGIN if clr=0then d0=0; 0); elsif clkevent and clk=1then d0= (4); = +1; end if; end process; sample=not( (4) and (not

20、d0);end block free_counter;debunce:block -消抖動模塊 signal d0,d1,s,r:std_logic;begin process(clk,clr) begin if clr=0 then dly=0; elsif rising_edge(clk) then if sample=1 then d1=d0; d0=key; s=d0 and d1; r=not d0 and not d1; if s=0 and r=0 then dly=dly; elsif s=0 and r=1 then dly=0; elsif s=1 and r=0 then

21、 dly=1; else dly=0; end if; end if; end if; end process; dly_out=dly;end block debunce;differential:block -微分模塊 signal d1,d0:std_logic; begin process(clk,clr) begin if clr=0then d0=0;d1=0; elsif rising_edge(clk)then d1=d0;d0=dly; end if; diff=d0 and not d1; end process; dif_out=diff;end block differ

22、ential;END a;彈跳消除電路生成元件:圖3-5 彈跳消除電路生成元件3.3 頂層實體電路1、 時鐘產生電路當一個系統中使用不同操作頻率的脈沖波形時,最方便的方法就是利用一個自由計數器來產生各種頻率。本電路中就使用三種不同頻率的工作脈沖波形。它們分別是:系統時鐘(它是系統部所有時鐘的提供者,頻率最高)、彈跳消除取樣信號、鍵盤掃描信號和七段顯示器掃描信號。在很多的電路設計中,鍵盤掃描信號和七段顯示器掃描信號可以使用一樣的時鐘信號,本設計也采用此方法。該模塊中的掃描信號就是取了計數器中的3個值,使用語句: SELTMP=Q(7 DOWNTO 5);此處SELTMP要預先定義為3bit的寬度

23、。2、 鍵盤掃描電路掃描電路的作用是用來提供鍵盤掃描信號的電路,掃描信號的變化的順序依次為000-001-010-011-100-101-110-111依次的周而復始。掃描時依序分別掃描八列按鍵,當掃描信號為000時,掃描0這一列按鍵每掃描一列按鍵,就檢查一次是否有按鍵按下,如果這排有按鍵按下,就馬上停止掃描,立即進行按鍵編碼動作,存儲鍵碼,如果沒有按鍵按下,則繼續掃描下一列。用語句SELTMP=Q(7 DOWNTO 5); SELOUT=SELTMP;即可實現鍵盤掃描。3、 鍵盤譯碼電路上述鍵盤中的按鍵可分為數字鍵和功能鍵。數字鍵主要用來輸入數字,但鍵盤所產生的輸出KIN3KIN0無法拿來直

24、接使用;另外不同的數字按鍵也擔負不同的功能,因此必須由鍵盤譯碼電路來規劃第個按鍵的輸出形式,以便執行相應的動作。譯碼電路負責的工作有:a)判別是否有鍵按下。b)將被按下鍵編碼成對應的ZOUT7.08位二進制編碼,即用十進制數來顯示按鍵值:KEY_CODE=ZOUT;c)把KEY_CODE送到部下一級電路,即按鍵碼的寄存器_選擇器模塊。4、 按鍵碼存儲電路因為每次掃描會產生新的按鍵數據,可能會覆蓋前面的數據,所以需要一個按鍵存儲電路,將整個鍵盤掃描完畢后記錄下來。5、 顯示電路該模塊把DB3.0的值譯成8位的數碼管所對應的0、1、2、3、4、5、6、7、8、9,使數碼管正常顯示按鍵值。libra

25、ry ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;entity keys_test isport(clk20,clr:in std_logic; selout:out std_logic_vector(2 downto 0); notselout_0:out std_logic; key:in std_logic_vector(3 downto 0); segout:out std_logic_vector(7 downto 0);end key

26、s_test; architecture a of keys_test iscomponent debouncing -鍵盤掃描模塊 port(key:in std_logic; clk,clr:in std_logic; dly_out:out std_logic);end component; signal clk,clk1,clk2,clk4:std_logic; signal seltmp:std_logic_vector(2 downto 0); signal key_code:std_logic_vector(7 downto 0); signal c:std_logic_vect

27、or(3 downto 0); signal db,key_in:std_logic_vector(3 downto 0); signal seg:std_logic_vector(7 downto 0);begin segout(7 downto 0)=seg; selout=seltmp; notselout_0=not seltmp(0); key_in=not key;fenpin:block signal m:integer range 0 to 10#5#; begin process(clk20) begin if clk20event and clk20=1then if m=

28、10#5# then m=0; else m=m+1; end if; end if; end process; process(m) begin if m=10#5# then clk4=1; else clk4=0; end if; end process; end block fenpin;counter:block -時鐘產生電路 signal q:std_logic_vector(10 downto 0); begin process(clk4,clr) begin if clr=0 then q0); elsif clk4event and clk4=1 then q=q+1; e

29、nd if;end process; clk=q(0); clk1=q(2); clk2=q(4); seltmpkey_in(0), dly_out=c(0),clr=clr,clk=clk); u2:debouncing port map(key=key_in(1), dly_out=c(1),clr=clr,clk=clk); u3:debouncing port map(key=key_in(2), dly_out=c(2),clr=clr,clk=clk); u4:debouncing port map(key=key_in(3),dly_out=c(3),clr=clr,clk=c

30、lk);end block debounuing;key_decoder:block -鍵盤譯碼電路 signal z:std_logic_vector(6 downto 0); signal zout:std_logic_vector(7 downto 0); beginz=(not c)&seltmp; key_code=zout; -用十進制數顯示 process(clk1,clr) beginif clr=0 then zout0);elsif clk1event and clk1=1 thencase z isWHEN1110000=ZOUTZOUTZOUTZOUTZOUTZOUTZ

31、OUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUTZOUT=11111111;end case;END IF;END PROCESS;END BLOCK key_decoder;REG_MULTIPLEXER:BLOCK -按鍵碼的存儲模塊SIGNAL KEY_CODE1:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(CLK2,clr)begin if clr=0 then KEY_CODE10); E

32、LSIF(CLK2EVENT AND CLK2=1)THEN if(key_code=11111111) then KEY_CODE1=KEY_CODE1; ELSE KEY_CODE1=KEY_CODE; end if; END if;END PROCESS;DB=KEY_CODE1(3 DOWNTO 0)WHEN(SELTMP(0)=0)ELSE KEY_CODE1(7 DOWNTO 4)WHEN(SELTMP(0)=1)ELSE 0000;End Block REG_MULTIPLEXER;seven_segment:block -顯示模塊 begin seg=00111111 when

33、 db=0000 else 00000110 when db=0001 else 01011011 when db=0010 else 01001111 when db=0011 else 01100110 when db=0100 else 01101101 when db=0101 else 01111101 when db=0110 else 00000111 when db=0111 else 01111111 when db=1000 else 01101111 when db=1001 else 01110111 when db=1010 else 01111100 when db

34、=1011 else 00111001 when db=1100 else 01011110 when db=1101 else 01111001 when db=1110 else 01110001 when db=1111 else 00000000; end block seven_segment; end a;頂層實體電路生成元件:圖3-6 頂層實體電路生成元件3.4 仿真結果彈跳消除電路設計實體仿真波形圖:圖3-7 彈跳消除電路設計實體仿真波形圖頂層設計實體仿真波形圖:圖3-8 頂層設計實體仿真波形圖3.5 硬件驗證結果將實驗箱與微機和電源分別連接好。首先檢測試驗箱是否可以使用,經檢測無誤后,開通電源。根據引腳的鎖定情況,將CLK20時鐘接20MHZ時鐘輸入,KEY3.0分別接實驗儀器的鍵盤輸出KIN3.0,SELOU

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論