![VHDL鍵盤(pán)掃描_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/6584d8b5-ac50-4c20-bc27-66d2f273899e/6584d8b5-ac50-4c20-bc27-66d2f273899e1.gif)
![VHDL鍵盤(pán)掃描_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/6584d8b5-ac50-4c20-bc27-66d2f273899e/6584d8b5-ac50-4c20-bc27-66d2f273899e2.gif)
![VHDL鍵盤(pán)掃描_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/6584d8b5-ac50-4c20-bc27-66d2f273899e/6584d8b5-ac50-4c20-bc27-66d2f273899e3.gif)
![VHDL鍵盤(pán)掃描_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/6584d8b5-ac50-4c20-bc27-66d2f273899e/6584d8b5-ac50-4c20-bc27-66d2f273899e4.gif)
![VHDL鍵盤(pán)掃描_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/6584d8b5-ac50-4c20-bc27-66d2f273899e/6584d8b5-ac50-4c20-bc27-66d2f273899e5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、設(shè)計(jì)目的鞏固和運(yùn)用所學(xué)課程,理論聯(lián)系實(shí)際,提高分析、解決計(jì)算機(jī)技術(shù)實(shí)際問(wèn)題的獨(dú)立工作能力,通過(guò)對(duì)FPGA幾個(gè)簡(jiǎn)單的模塊設(shè)計(jì),進(jìn)一步加深對(duì)計(jì)算機(jī)原理以及數(shù)字電路應(yīng)用技術(shù)方面的了解與認(rèn)識(shí),進(jìn)一步熟悉數(shù)字電路系統(tǒng)設(shè)計(jì)、制作與調(diào)試的方法和步驟。二、設(shè)計(jì)內(nèi)容(1)設(shè)計(jì)一個(gè)4×4的鍵盤(pán)掃描模塊,要求有防抖動(dòng)功能。(2)用鍵盤(pán)控制16×16點(diǎn)陣LED顯示各種字符。(3)用鍵盤(pán)控制蜂鳴器發(fā)聲,能有各種音調(diào)。三、實(shí)現(xiàn)方法本系統(tǒng)的系統(tǒng)組成及連接原理如圖3.1所示,主系統(tǒng)由四個(gè)功能模塊組成:分頻模塊(為鍵盤(pán)掃描模塊和提供時(shí)鐘)、鍵盤(pán)掃描模塊、LED點(diǎn)陣模塊、發(fā)聲模塊。LED點(diǎn)陣發(fā)聲模塊鍵盤(pán)掃
2、描模塊分頻模塊時(shí)鐘輸入接蜂鳴器接LED點(diǎn)陣接鍵盤(pán)圖3.1整體模塊劃分1、分頻模塊分頻模塊的作用是把2MHZ的時(shí)鐘分成1kHZ和500HZ,為鍵盤(pán)掃描模塊和LED點(diǎn)陣模塊提供時(shí)鐘。主要方法是通過(guò)計(jì)數(shù)器實(shí)現(xiàn)分頻。分頻模塊如圖3.2,clk是輸入時(shí)鐘,clkout_kb是輸入給鍵盤(pán)掃描模塊使用,clkout_LED是輸入給LED點(diǎn)陣模塊使用。圖3.2 分頻模塊視圖其仿真結(jié)果如圖3.3圖 3.3分頻模塊仿真2、鍵盤(pán)掃描模塊2.1行列式鍵盤(pán)原理行列式鍵盤(pán)又叫做矩陣式鍵盤(pán)。用帶有I/O口的線組成行列結(jié)構(gòu),按鍵設(shè)置在行列的交點(diǎn)上。本次試驗(yàn)用到的是4×4的行列結(jié)構(gòu)鍵盤(pán),可以構(gòu)成16個(gè)按鍵。這樣,當(dāng)按
3、鍵數(shù)量平方增長(zhǎng)是,I/O口只是線性增長(zhǎng),這樣就可以節(jié)省I/O口。行列式鍵盤(pán)的原理如圖3.4所示。CDEF89AB45670123keyin上拉電阻keydrv圖 3.4 行列式鍵盤(pán)的原理按鍵設(shè)置在行列線交叉點(diǎn),行、列線分別連接到按鍵開(kāi)關(guān)的兩端。列線通過(guò)上拉電阻接+5V的電壓,即列線的輸出被嵌位在高電平狀態(tài)。判斷按鍵中有無(wú)鍵按下時(shí)通過(guò)行線輸入掃描信號(hào),然后從列線讀取到狀態(tài)實(shí)現(xiàn)的。其方法是依次給行線送低電平,檢查列線的輸入。如果列線信號(hào)全為高電平,則代表低電平所在的行中無(wú)按鍵按下;如果列線有輸入為低電平,則低電平信號(hào)所在的行和出現(xiàn)低電平的列的交點(diǎn)處有按鍵按下。設(shè)行掃描信號(hào)為keydrv3keydr
4、v0,列線按鍵輸入信號(hào)keyin3keyin0與按鍵位置的關(guān)系如表3.1所示表3.1行掃描信號(hào)、列線按鍵輸入信號(hào)與按鍵位置的關(guān)系keydrv3keydrv0keyin3keyin0對(duì)應(yīng)的按鍵111011100110111011201113110111104110151011601117101111108110191011A0111B01111110C1101D1011E0111F2.2鍵盤(pán)掃描系統(tǒng)模塊劃分4×4鍵盤(pán)鍵盤(pán)譯碼電路掃描電路按鍵去抖動(dòng)電路時(shí)鐘輸入輸入鍵盤(pán)值圖3.5 鍵盤(pán)掃描系統(tǒng)模塊劃分鍵盤(pán)掃描電路時(shí)用于產(chǎn)生keydrv3-keydrv0信號(hào),其變化順序?yàn)?110110110
5、110111周而復(fù)始的掃描。其停留在每個(gè)狀態(tài)的時(shí)間大約有10ms。掃描電路的模型如下:圖3.6 掃描電路外觀接口掃描電路的仿真如圖3.7所示:圖3.7 掃描電路仿真鍵盤(pán)譯碼電路是從keydrv3keydrv0和keyin3keyin0譯出按鍵值的電路,它的真值表如表1所示。鍵盤(pán)譯碼電路的模型如圖3.8所示:圖3.8 鍵盤(pán)譯碼電路外觀其中鍵值keycode用5位編碼,keycode為0000001111表示鍵值0F,keycode為11111時(shí)表示無(wú)按鍵按下。譯碼電路的仿真如圖3.9所示:圖3.9譯碼電路仿真圖3.9仿真的是掃描信號(hào)在keydrv=1011時(shí)有按鍵按下,并且keyin=0111時(shí)
6、的鍵值,由表1可知這時(shí)的鍵值因該是B,而由圖中可以看出仿真結(jié)果是5h0B,即預(yù)測(cè)結(jié)果與仿真結(jié)果一致。2.3 按鍵去抖動(dòng)電路實(shí)現(xiàn)由于機(jī)械觸點(diǎn)的彈性作用,觸點(diǎn)在閉合和斷開(kāi)瞬間的電接觸情況不穩(wěn)定,造成了電壓信號(hào)的抖動(dòng)現(xiàn)象,如圖3.10所示。鍵的抖動(dòng)時(shí)間一般為 510ms。這種現(xiàn)象會(huì)引起FPGA對(duì)于一次鍵操作進(jìn)行多次處理,因此須設(shè)法消除鍵接通或斷時(shí)的抖動(dòng)現(xiàn)象。去抖動(dòng)的方法有硬件和軟件兩種:硬件去抖動(dòng)和軟件去抖動(dòng)。圖3.10按鍵抖動(dòng)現(xiàn)象去抖動(dòng)模塊采用多次連續(xù)檢測(cè)輸入鍵值的原理防抖。當(dāng)檢測(cè)到有鍵值輸入時(shí)并不馬上輸出,而是當(dāng)16次輸入的鍵值都一樣時(shí)才輸出,其中只要有一次鍵值不同的話計(jì)數(shù)器都會(huì)置零,重新記數(shù)。
7、這樣就能消除按鍵的抖動(dòng)影響。其模塊外觀如圖3.11所示。圖3.11去抖動(dòng)模塊外觀按鍵去抖動(dòng)仿真:圖3.12按鍵去抖動(dòng)仿真由仿真圖形可以看出,輸入keyvaluein開(kāi)始和結(jié)束時(shí)都產(chǎn)生抖動(dòng),但經(jīng)過(guò)去抖模塊后抖動(dòng)消失了。起到了去抖動(dòng)的功能。3、16×16 LED 點(diǎn)陣顯示屏的設(shè)計(jì)3.1 16x16 LED點(diǎn)陣的工作原理及連接組成方式:16x16 LED點(diǎn)陣的工作原理同8x8 LED點(diǎn)陣的工作原理,圖3.13是8x8的LED點(diǎn)陣單色行共陽(yáng)模塊的內(nèi)部結(jié)構(gòu)圖,其單點(diǎn)工作電壓Uf為18 V,正向電流IF為810 mA。當(dāng)某一行線為高電平而某一列線為低時(shí),其行列交叉的點(diǎn)就被點(diǎn)亮;而當(dāng)其某一列線為高
8、時(shí),其行列交叉的點(diǎn)為暗;當(dāng)某一行線為低電平時(shí),無(wú)論列線如何,對(duì)應(yīng)這一行的點(diǎn)全部為暗。圖3.13:8x8的LED點(diǎn)陣單色行共陽(yáng)模塊的內(nèi)部結(jié)構(gòu)圖本實(shí)驗(yàn)采用的16x16 LED點(diǎn)陣用四個(gè)8x8點(diǎn)陣顯示構(gòu)成,其連接方法如圖3.14所示。圖中,將(A)和(B)的8列、(C)和(D)的8列分別對(duì)應(yīng)相連,同時(shí)將(A)和(C)的8行、 (B)和(D)的8行分別對(duì)應(yīng)相連。即可形成一個(gè)16行(每一行有16個(gè)LED)、16列(每一列也有16個(gè)LED)的16x16點(diǎn)陣顯示器,可將這256個(gè)點(diǎn)稱(chēng)為一頁(yè),這樣,顯示字符時(shí)。只要對(duì)一頁(yè)中對(duì)應(yīng)的亮滅進(jìn)行控制即可。圖3.14:四個(gè)8x8點(diǎn)陣顯示構(gòu)成的16x16 LED點(diǎn)陣3.2
9、 16x16 LED點(diǎn)陣的驅(qū)動(dòng)方式本實(shí)驗(yàn)采用動(dòng)態(tài)掃描型驅(qū)動(dòng)方式顯示,即顯示屏上的16行發(fā)光二極管共用一組列驅(qū)動(dòng)寄存器,然后通過(guò)行驅(qū)動(dòng)管的分時(shí)工作,來(lái)使每行LED的點(diǎn)亮?xí)r間占總時(shí)間的116。只要每行的刷新速率大于50 Hz,利用人眼的視覺(jué)暫留效應(yīng),人們就可以看到一幅完整的文字或畫(huà)面。掃描驅(qū)動(dòng)分行掃描驅(qū)動(dòng)和列掃描驅(qū)動(dòng)。由于16x16點(diǎn)陣顯示器有16行,故使用行掃描信號(hào),本電路中加入了一個(gè)4-16線譯碼器,其輸入是一個(gè)頻率為1000Hz的時(shí)鐘信號(hào),內(nèi)部采用4位二進(jìn)制加法器,分別為00001111,然后使每種狀態(tài)只控制一路輸出,解碼輸出為低態(tài)掃描信號(hào),即會(huì)有16路輸出。本實(shí)驗(yàn)的列信號(hào)由事先存于寄存器中
10、的16進(jìn)制碼構(gòu)成,每個(gè)矩陣表示一個(gè)字符的列掃描信號(hào),伴隨行掃描信號(hào)進(jìn)行交替的掃描,其設(shè)計(jì)圖見(jiàn)附錄中16x16 LED點(diǎn)陣掃描設(shè)計(jì)草圖。本實(shí)驗(yàn)所顯示的字符由鍵盤(pán)編碼所確定,其編碼與顯示字符對(duì)應(yīng)的關(guān)系如表3.2所示:表3.2:鍵盤(pán)編碼與對(duì)應(yīng)顯示字符鍵盤(pán)編碼00000000010001000011顯示字符0123鍵盤(pán)編碼00100001010011000111顯示字符4567鍵盤(pán)編碼01000010010101001011顯示字符89AB鍵盤(pán)編碼01100011010111001111顯示字符CDEF鍵盤(pán)編碼11111顯示字符音符圖形3.3 16x16 LED點(diǎn)陣驅(qū)動(dòng)電路16x16 LED點(diǎn)陣驅(qū)動(dòng)外
11、觀電路如圖3.15所示:圖3.15 16x16 LED點(diǎn)陣驅(qū)動(dòng)電路外觀16x16 LED點(diǎn)陣驅(qū)動(dòng)電路原理圖如圖3.16所示:圖3.16:16x16 LED點(diǎn)陣驅(qū)動(dòng)電路原理圖驅(qū)動(dòng)行信號(hào)仿真如圖3.17所示:圖3.17驅(qū)動(dòng)行信號(hào)4、發(fā)聲模塊4.1音調(diào)的產(chǎn)生音調(diào)的產(chǎn)生是通過(guò)分頻實(shí)現(xiàn)的。設(shè)計(jì)要求產(chǎn)生不同的音調(diào),就需要不同的分頻器??梢韵葮?gòu)造一個(gè)分頻器,然后通過(guò)VHDL中的參數(shù)傳遞語(yǔ)句構(gòu)造出十二個(gè)不同的分頻器,其分頻數(shù)見(jiàn)表3.2(輸入時(shí)鐘是2MHz)。表3.3音符頻率對(duì)照表鍵值音符頻率分頻數(shù)鍵值音符頻率分頻數(shù)0低53925102.04087中57842551.02041低64404545.45458中6
12、8802272.72732低74944048.5839中79882024.29153中15233824.0918A高110461912.04594中25783460.2076B高211751702.12775中36593034.9014C高313181517.45076中46982865.3295D高413971431.63924.2電路實(shí)現(xiàn)發(fā)聲模塊其內(nèi)部是一個(gè)有一個(gè)輸入,十二個(gè)輸出的分頻器,用于產(chǎn)生十二種音調(diào)。然后根據(jù)鍵值判斷哪個(gè)口輸出。其頂層視圖如圖3.18所示。圖3.18發(fā)聲模塊外觀發(fā)聲模塊的仿真見(jiàn)圖3.19圖3.19發(fā)聲模塊仿真仿真波形中l(wèi)5h4是分頻器的十二個(gè)輸出口,當(dāng)鍵值是C時(shí)sp
13、eaker輸入的是h3的值,達(dá)到了要求。5、頂層模塊實(shí)現(xiàn)頂層電路只是把分頻模塊、鍵盤(pán)掃描模塊、LED點(diǎn)陣模塊和發(fā)聲模塊連接起來(lái),其外觀和內(nèi)部結(jié)構(gòu)如圖3.20和3.21所示。圖3.20頂層模塊外觀圖3.21頂層模塊內(nèi)部結(jié)構(gòu)6、管腳的定義管腳的定義如表3.4所示表3.4 管腳的定義I/O NameI/O DirectionLocBankclkInputP3BANK7SpeakerOutputP95BANK4keydrv<0>OutputP120BANK3keydrv<1>OutputP121BANK3keydrv<2>OutputP122BANK3keydrv&
14、lt;3>OutputP123BANK3keyin<0>InputP125BANK3keyin<1>InputP127BANK3keyin<2>InputP129BANK3keyin<3>InputP132BANK2LEDcolumn<0>OutputP133BANK2LEDcolumn<1>OutputP134BANK2LEDcolumn<2>OutputP136BANK2LEDcolumn<3>OutputP138BANK2LEDcolumn<4>OutputP139BANK2
15、LEDcolumn<5>OutputP140BANK2LEDcolumn<6>OutputP141BANK2LEDcolumn<7>OutputP147BANK2LEDcolumn<8>OutputP148BANK2LEDcolumn<9>OutputP149BANK2LEDcolumn<10>OutputP150BANK2LEDcolumn<11>OutputP151BANK2LEDcolumn<12>OutputP152BANK2LEDcolumn<13>OutputP162BANK
16、1LEDcolumn<14>OutputP163BANK1LEDcolumn<15>OutputP164BANK1LEDrow<0>OutputP165BANK1LEDrow<1>OutputP167BANK1LEDrow<2>OutputP73BANK5LEDrow<3>OutputP74BANK5LEDrow<4>OutputP70BANK5LEDrow<5>OutputP71BANK5LEDrow<6>OutputP68BANK5LEDrow<7>OutputP69BA
17、NK5LEDrow<8>OutputP63BANK5LEDrow<9>OutputP67BANK5LEDrow<10>OutputP61BANK5LEDrow<11>OutputP62BANK5LEDrow<12>OutputP59BANK5LEDrow<13>OutputP60BANK5LEDrow<14>OutputP57BANK5LEDrow<15>OutputP58BANK5附錄 程序代碼1、頂層模塊library IEEE;use IEEE.STD_LOGIC_1164.ALL;use I
18、EEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity play_show is Port ( clk : in STD_LOGIC; keyin : in STD_LOGIC_VECTOR (3 downto 0); keydrv : out
19、 STD_LOGIC_VECTOR (3 downto 0);LEDrow : out STD_LOGIC_VECTOR(15 downto 0);-LED行掃描信號(hào) LEDcolumn : out STD_LOGIC_VECTOR(15 downto 0); Displayshow: out STD_LOGIC_VECTOR (6 downto 0); Displayselect: out STD_LOGIC_VECTOR (3 downto 0); speaker : out STD_LOGIC);end play_show;architecture rtl of play_show is
20、component freq_divisionPort ( clk:in STD_LOGIC; clkout_kb:out STD_LOGIC; clkout_LED:out STD_LOGIC; clkout_display:out std_logic);end component;component keyboardPort ( clk : in STD_LOGIC;-掃描時(shí)鐘,周期10ms keyin : in STD_LOGIC_VECTOR (3 downto 0); keydrv : out STD_LOGIC_VECTOR(3 downto 0); keyvalue : out
21、STD_LOGIC_VECTOR(4 downto 0);-輸出掃描信號(hào)end component;component LEDArrayPort ( clk : in STD_LOGIC;-時(shí)鐘信號(hào),經(jīng)分燈韉玫1ms脈沖 keycode : in STD_LOGIC_VECTOR(4 downto 0);-鍵盤(pán)給的編碼 LEDrow : out STD_LOGIC_VECTOR(15 downto 0);-LED行掃描信號(hào) LEDcolumn : out STD_LOGIC_VECTOR(15 downto 0)-LED列信號(hào) );end component;component playpor
22、t (clk:in STD_LOGIC;keyvalue:in STD_LOGIC_VECTOR(4 downto 0);speaker:out STD_LOGIC);end component;component IBUF port (I: in std_logic; O: out std_logic); end component;component Display Port ( Keyvalue : in STD_LOGIC_VECTOR (4 downto 0); clk: in STD_LOGIC; Display : out STD_LOGIC_VECTOR (6 downto 0
23、); Diselect : out STD_LOGIC_VECTOR (3 downto 0);end component;-signal clkin:STD_LOGIC;signal clkout_kb,clkout_LED,clkout_display:STD_LOGIC;-signal keydrv1:STD_LOGIC_VECTOR (3 downto 0);signal keyvalue1:STD_LOGIC_VECTOR (4 downto 0);signal CLK_SIG: std_logic;begin-keydrv<=keydrv1;U1: IBUF port map
24、 (I => clk, O => CLK_SIG);U2freq_division:freq_divisionport map(CLK_SIG,clkout_kb,clkout_LED,clkout_display);U3keyboard:keyboardport map(clkout_kb,keyin,keydrv,keyvalue1);U4LEDArray1616:LEDArrayport map(clkout_LED,keyvalue1,LEDrow,LEDcolumn);U5Uplay:playport map(CLK_SIG,keyvalue1,speaker);U6Di
25、splay:Displayport map(keyvalue1,clkout_display,Displayshow,Displayselect);end rtl;2、分頻器entity fredivn isgeneric(N:integer:=2); Port ( clkin:in STD_LOGIC; clkout:out STD_LOGIC);end fredivn;architecture Behavioral of fredivn issignal clk1:std_logic:='0'signal counter:integer range 0 to n;begin
26、process(clkin)begin if rising_edge(clkin)then if counter=(n-1)/2 then clk1<=not clk1; counter<=0; else counter<=counter+1; end if; end if; end process;clkout<=clk1;end Behavioral;3、總分頻器entity freq_division isPort ( clk:in STD_LOGIC; clkout_kb:out STD_LOGIC; clkout_LED:out STD_LOGIC; clko
27、ut_display:out STD_LOGIC);end freq_division;architecture RTL of freq_division iscomponent fredivn isgeneric(N:positive); Port ( clkin:in STD_LOGIC; clkout:out STD_LOGIC);end component;beginU1:fredivngeneric map(N=>kb_N)port map(clk,clkout_kb);U2:fredivngeneric map(N=>LED_N)port map(clk,clkout_
28、LED);U3:fredivngeneric map(N=>display_N)port map(clk,clkout_display);end RTL;4、鍵盤(pán)掃描驅(qū)動(dòng)entity keyscan is Port ( clkin : in STD_LOGIC;-掃描時(shí)鐘,周期20ms keydrv : out STD_LOGIC_VECTOR(3 downto 0);-輸出掃描信號(hào)end keyscan;architecture behavioral of keyscan issignal count : std_logic_vector(1 downto 0):="00&q
29、uot;-計(jì)數(shù)器信號(hào)beginprocess(clkin)beginif rising_edge(clkin) thenif count="11" thencount<="00"elsecount<=count+1;end if;end if;end process;process(count)begincase count iswhen "00"=>keydrv<="1110"when "01"=>keydrv<="1101"when &
30、quot;10"=>keydrv<="1011"when "11"=>keydrv<="0111"when others =>keydrv<="0000"end case;end process;end behavioral;5、鍵盤(pán)編碼entity keydecoder is Port ( clkin: in std_logic; keyin : in STD_LOGIC_VECTOR (3 downto 0); keydrv : in STD_LOGIC_VECTO
31、R (3 downto 0); keycode : out STD_LOGIC_VECTOR (4 downto 0); end keydecoder;architecture Rtl of keydecoder issignal temp:STD_LOGIC_VECTOR (7 downto 0);signal keyvalue1:STD_LOGIC_VECTOR (4 downto 0):="11111"signal count:std_logic_vector(1 downto 0):="00"-signal keypressed:boolean:
32、=false;-signal q1,q2,q3,q4:boolean;begintemp<=keydrv&keyin;process(clkin)beginif falling_edge(clkin) thenif keyin="1111" thenif count="11" thenkeyvalue1<="11111"count<="00"elsecount<=count+1;end if;elsecount<="00"case temp iswhen&q
33、uot;11101110"=>keyvalue1<="00000"when"11101101"=>keyvalue1<="00001"when"11101011"=>keyvalue1<="00010"when"11100111"=>keyvalue1<="00011"when"11011110"=>keyvalue1<="00100"when&q
34、uot;11011101"=>keyvalue1<="00101"when"11011011"=>keyvalue1<="00110"when"11010111"=>keyvalue1<="00111"when"10111110"=>keyvalue1<="01000"when"10111101"=>keyvalue1<="01001"when&q
35、uot;10111011"=>keyvalue1<="01010"when"10110111"=>keyvalue1<="01011"when"01111110"=>keyvalue1<="01100"when"01111101"=>keyvalue1<="01101"when"01111011"=>keyvalue1<="01110"when&q
36、uot;01110111"=>keyvalue1<="01111"when others =>keyvalue1<=keyvalue1;end case;end if;end if;end process;keycode<=keyvalue1;end rtl;6、鍵盤(pán)防抖entity Antiwitter is Port ( clkin : in STD_LOGIC; keyvaluein : in STD_LOGIC_VECTOR (4 downto 0); keyvalueout : out STD_LOGIC_VECTOR (4
37、 downto 0);end Antiwitter;architecture Behavioral of Antiwitter issignal TempNum:std_logic_vector(4 downto 0);signal Counter:std_logic_vector(4 downto 0);signal Start:std_logic;beginprocess(clkin)beginif rising_edge(clkin) then if Start='0' thenTempNum<="11111"keyvalueout<=&q
38、uot;11111"Start<='1'elseif keyvaluein/=TempNum thenTempNum<=Keyvaluein;Counter<="00000"elseif Counter="11111" thenkeyvalueout<=keyvaluein;Counter<="00000"elseCounter<=Counter+1;end if;end if;end if;end if;end process;end Behavioral;7、鍵盤(pán)頂層e
39、ntity keyboard isPort ( clk : in STD_LOGIC;-掃描時(shí)鐘,周期10ms keyin : in STD_LOGIC_VECTOR (3 downto 0); keydrv : out STD_LOGIC_VECTOR(3 downto 0); keyvalue : out STD_LOGIC_VECTOR(4 downto 0);-輸出掃描信號(hào)end keyboard;architecture RTL of keyboard iscomponent keyscanPort ( clkin : in STD_LOGIC;-掃描時(shí)鐘,周期10ms keydrv
40、 : out STD_LOGIC_VECTOR(3 downto 0);-輸出掃描信號(hào)end component;component keydecoderPort ( clkin:in std_logic; keyin : in STD_LOGIC_VECTOR (3 downto 0); keydrv : in STD_LOGIC_VECTOR (3 downto 0); keycode : out STD_LOGIC_VECTOR (4 downto 0);end component;component Antiwitter Port ( clkin : in STD_LOGIC; key
41、valuein : in STD_LOGIC_VECTOR (4 downto 0); keyvalueout : out STD_LOGIC_VECTOR (4 downto 0);end component;signal keydrv1:STD_LOGIC_VECTOR (3 downto 0);signal key:std_logic_vector(4 downto 0);beginU1:keyscanport map(clk,keydrv1);U2:keydecoderport map(clk,keyin,keydrv1,key);U3:Antiwitterport map(clk,k
42、ey,keyvalue);keydrv<=keydrv1;end RTL;8、LED掃描entity LEDArray is Port ( clk : in STD_LOGIC;-時(shí)鐘信號(hào),經(jīng)分頻器得到1ms脈沖 keycode : in STD_LOGIC_VECTOR(4 downto 0);-鍵盤(pán)給的編碼 LEDrow : out STD_LOGIC_VECTOR(15 downto 0);-LED行掃描信號(hào) LEDcolumn : out STD_LOGIC_VECTOR(15 downto 0)-LED列信號(hào) );end LEDArray;architecture Scan o
43、f LEDArray issignal count : std_logic_vector(3 downto 0):="0000"-計(jì)數(shù)器信號(hào)begin-時(shí)鐘信號(hào)觸發(fā)的計(jì)數(shù)器計(jì)數(shù)-process(clk)beginif rising_edge(clk) thenif count="1111" thencount<="0000"elsecount<=count+1;end if;end if;end process;-由count信號(hào)引發(fā)的行列掃描-process(count)begin-列信號(hào)-case count iswh
44、en "0000"=>LEDrow<=x"8000"when "0001"=>LEDrow<=x"4000"when "0010"=>LEDrow<=x"2000"when "0011"=>LEDrow<=x"1000"when "0100"=>LEDrow<=x"0800"when "0101"=>LEDrow
45、<=x"0400"when "0110"=>LEDrow<=x"0200"when "0111"=>LEDrow<=x"0100"when "1000"=>LEDrow<=x"0080"when "1001"=>LEDrow<=x"0040"when "1010"=>LEDrow<=x"0020"when &qu
46、ot;1011"=>LEDrow<=x"0010"when "1100"=>LEDrow<=x"0008"when "1101"=>LEDrow<=x"0004"when "1110"=>LEDrow<=x"0002"when "1111"=>LEDrow<=x"0001"when others=>LEDrow<=x"0000
47、"end case;-行信號(hào)-case keycode is-顯示0-when "00000"=>case count iswhen "0000"=>LEDcolumn<=x"03C0"when "0001"=>LEDcolumn<=x"07E0"when "0010"=>LEDcolumn<=x"0E70"when "0011"=>LEDcolumn<=x"0C
48、30"when "0100"=>LEDcolumn<=x"0C30"when "0101"=>LEDcolumn<=x"0C30"when "0110"=>LEDcolumn<=x"0C30"when "0111"=>LEDcolumn<=x"0C30"when "1000"=>LEDcolumn<=x"0C30"when &q
49、uot;1001"=>LEDcolumn<=x"0C30"when "1010"=>LEDcolumn<=x"0C30"when "1011"=>LEDcolumn<=x"0C30"when "1100"=>LEDcolumn<=x"0C30"when "1101"=>LEDcolumn<=x"0E70"when "1110"=
50、>LEDcolumn<=x"07E0"when "1111"=>LEDcolumn<=x"03C0"when others=>LEDcolumn<=x"0000"end case;-顯示1-when "00001" =>case count iswhen "0000"=>LEDcolumn<=x"0080"when "0001"=>LEDcolumn<=x"01
51、80"when "0010"=>LEDcolumn<=x"0780"when "0011"=>LEDcolumn<=x"0F80"when "0100"=>LEDcolumn<=x"0180"when "0101"=>LEDcolumn<=x"0180"when "0110"=>LEDcolumn<=x"0180"when &q
52、uot;0111"=>LEDcolumn<=x"0180"when "1000"=>LEDcolumn<=x"0180"when "1001"=>LEDcolumn<=x"0180"when "1010"=>LEDcolumn<=x"0180"when "1011"=>LEDcolumn<=x"0180"when "1100"=
53、>LEDcolumn<=x"0180"when "1101"=>LEDcolumn<=x"0180"when "1110"=>LEDcolumn<=x"0FF0"when "1111"=>LEDcolumn<=x"0FF0"when others=>LEDcolumn<=x"0000"end case;-顯示2-when "00010"=>case c
54、ount iswhen "0000"=>LEDcolumn<=x"03C0"when "0001"=>LEDcolumn<=x"07E0"when "0010"=>LEDcolumn<=x"0E70"when "0011"=>LEDcolumn<=x"0C30"when "0100"=>LEDcolumn<=x"0C30"when &qu
55、ot;0101"=>LEDcolumn<=x"0C30"when "0110"=>LEDcolumn<=x"0070"when "0111"=>LEDcolumn<=x"00E0"when "1000"=>LEDcolumn<=x"01C0"when "1001"=>LEDcolumn<=x"0380"when "1010"=&
56、gt;LEDcolumn<=x"0700"when "1011"=>LEDcolumn<=x"0E00"when "1100"=>LEDcolumn<=x"0C00"when "1101"=>LEDcolumn<=x"0C00"when "1110"=>LEDcolumn<=x"0FF0"when "1111"=>LEDcolumn<
57、;=x"0FF0"when others=>LEDcolumn<=x"0000"end case;-顯示3-when "00011"=>case count iswhen "0000"=>LEDcolumn<=x"03C0"when "0001"=>LEDcolumn<=x"07E0"when "0010"=>LEDcolumn<=x"0E70"when &quo
58、t;0011"=>LEDcolumn<=x"0C30"when "0100"=>LEDcolumn<=x"0C30"when "0101"=>LEDcolumn<=x"0C70"when "0110"=>LEDcolumn<=x"00E0"when "0111"=>LEDcolumn<=x"01C0"when "1000"=&g
59、t;LEDcolumn<=x"00E0"when "1001"=>LEDcolumn<=x"0070"when "1010"=>LEDcolumn<=x"0030"when "1011"=>LEDcolumn<=x"0C30"when "1100"=>LEDcolumn<=x"0C30"when "1101"=>LEDcolumn<=x"0E70"when "1110"=>LEDcolumn<=x"07E0"when "1111"=>LEDcolumn<=x"03C0"when others=>LEDcolumn<=x"0000&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年五香鹵豬心行業(yè)深度研究分析報(bào)告
- 第24課《十五從軍征》教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
- 2025年貝瓷餐具合作協(xié)議書(shū)
- 中國(guó)數(shù)字電子經(jīng)緯儀行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 移動(dòng)式平板頂車(chē)機(jī)項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 60米短跑 教學(xué)設(shè)計(jì)-2023-2024學(xué)年高三上學(xué)期體育與健康人教版必修第一冊(cè)
- 中國(guó)咖啡伴侶項(xiàng)目投資可行性研究報(bào)告
- 第三章圓的初步認(rèn)識(shí) 3.1 認(rèn)識(shí)圓教學(xué)設(shè)計(jì)2024-2025學(xué)年人教版(五四制)六年級(jí)數(shù)學(xué)上冊(cè)
- Unit 3 Let's make a kite ( Lesson1 ) (教學(xué)設(shè)計(jì)).-2023-2024學(xué)年湘少版(三起)英語(yǔ)五年級(jí)下冊(cè)
- 川教版信息技術(shù)(2019)四年級(jí)下冊(cè)《第三單元 奇妙的畫(huà)筆 2 自制積木》教學(xué)設(shè)計(jì)
- 學(xué)前兒童表演游戲的組織與指導(dǎo)(學(xué)前兒童游戲課件)
- 中小學(xué)教師校園安全培訓(xùn)
- 2024年北京法院聘用制審判輔助人員招聘筆試參考題庫(kù)附帶答案詳解
- 建筑用真空陶瓷微珠絕熱系統(tǒng)應(yīng)用技術(shù)規(guī)程
- (高清版)DZT 0276.13-2015 巖石物理力學(xué)性質(zhì)試驗(yàn)規(guī)程 第13部分:巖石比熱試驗(yàn)
- (高清版)DZT 0214-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 銅、鉛、鋅、銀、鎳、鉬
- (高清版)DZT 0017-2023 工程地質(zhì)鉆探規(guī)程
- 華為狼性培訓(xùn)課件
- 江蘇省初中美術(shù)學(xué)業(yè)水平考試參考復(fù)習(xí)題庫(kù)(含答案)
- 短視頻運(yùn)營(yíng)實(shí)戰(zhàn):抖音短視頻運(yùn)營(yíng)
- 設(shè)備維保的關(guān)鍵績(jī)效指標(biāo)與評(píng)估
評(píng)論
0/150
提交評(píng)論