利用按鍵控制點(diǎn)陣進(jìn)行十進(jìn)制數(shù)字顯示(共25頁)_第1頁
利用按鍵控制點(diǎn)陣進(jìn)行十進(jìn)制數(shù)字顯示(共25頁)_第2頁
利用按鍵控制點(diǎn)陣進(jìn)行十進(jìn)制數(shù)字顯示(共25頁)_第3頁
利用按鍵控制點(diǎn)陣進(jìn)行十進(jìn)制數(shù)字顯示(共25頁)_第4頁
利用按鍵控制點(diǎn)陣進(jìn)行十進(jìn)制數(shù)字顯示(共25頁)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上中北大學(xué)課 程 設(shè) 計(jì) 說 明 書  學(xué)生姓名:郭士西學(xué) 號(hào):學(xué) 院:電子與計(jì)算機(jī)科學(xué)技術(shù)學(xué)院 專 業(yè):微電子學(xué) 題 目:利用按鍵控制點(diǎn)陣進(jìn)行十進(jìn)制數(shù)字顯示   指導(dǎo)教師: 崔永俊 職稱: 副教授  2012 年 6 月 22 日目 錄1.課程設(shè)計(jì)目的22.課程設(shè)計(jì)內(nèi)容及要求2 2.1設(shè)計(jì)內(nèi)容2 2.2設(shè)計(jì)要求23.設(shè)計(jì)方案及實(shí)現(xiàn)情況2 3.1設(shè)計(jì)思路2 3.2工作原理及框圖3 3.3各模塊程序代碼及仿真結(jié)果4 3.4實(shí)驗(yàn)箱驗(yàn)證情況204課程設(shè)計(jì)總結(jié)245.參考文獻(xiàn)251、課程設(shè)計(jì)目的 (

2、1)學(xué)習(xí)操作數(shù)字電路設(shè)計(jì)實(shí)驗(yàn)開發(fā)系統(tǒng),掌握點(diǎn)陣顯示模塊的工作原理及應(yīng)用。(2)掌握組合邏輯電路、時(shí)序邏輯電路的設(shè)計(jì)方法。(3)學(xué)習(xí)掌握可編程器件設(shè)計(jì)的全過程。2、課程設(shè)計(jì)內(nèi)容和要求2.1、設(shè)計(jì)內(nèi)容 (1)學(xué)習(xí)掌握按鍵開關(guān)控制模塊、點(diǎn)陣顯示模塊的工作原理及應(yīng)用; (2)熟練掌握VHDL編程語言,編寫按鍵開關(guān)控制模塊的控制邏輯; (3)仿真所編寫的程序,模擬驗(yàn)證所編寫的模塊功能; (4)下載程序到芯片中,硬件驗(yàn)證所設(shè)置的功能,能夠?qū)崿F(xiàn)十進(jìn)制數(shù)字的顯示。 (5) 整理設(shè)計(jì)內(nèi)容,編寫設(shè)計(jì)說明書。2.2、設(shè)計(jì)要求 (1)本課程設(shè)計(jì)說明書; (2)VHDL源程序及內(nèi)部原理圖; (3)該設(shè)計(jì)可以在實(shí)驗(yàn)箱上正

3、常工作并演示。 3、設(shè)計(jì)方案及實(shí)現(xiàn)情況3.1、設(shè)計(jì)思路 根據(jù)題目設(shè)計(jì)要求,由于整個(gè)過程的實(shí)現(xiàn)比較繁瑣,所以采用模塊化設(shè)計(jì)思想會(huì)更好些,對(duì)于不同的功能用不同的程序模塊實(shí)現(xiàn)。各個(gè)模塊之間保持相對(duì)獨(dú)立,最終將各個(gè)模塊合在一塊,這樣有利于對(duì)不同的功能模塊進(jìn)行理解個(gè)、分析、調(diào)試、仿真。利用按鍵開關(guān)控制點(diǎn)陣進(jìn)行十進(jìn)制數(shù)字顯示,我們可以采用單個(gè)按鍵計(jì)數(shù)遞增的形式進(jìn)行顯示,也可以利用十個(gè)按鍵,每個(gè)對(duì)應(yīng)一個(gè)十進(jìn)制數(shù)字,進(jìn)行隨意顯示。我更傾向于十個(gè)按鍵同時(shí)使用,這是我的初衷。 我把整個(gè)系統(tǒng)分成四個(gè)模塊,包括分頻模塊、消抖模塊、列控制模塊和顯示模塊。分頻模塊,我通過查找資料和參考試驗(yàn)箱把它設(shè)為1000分頻,偶數(shù)分頻

4、比較容易實(shí)現(xiàn)。消抖要十個(gè)鍵同時(shí)消抖,并且具有保持功能,所以這里需要斟酌一下,否則點(diǎn)陣不能一直點(diǎn)亮,這樣就省去了鎖存模塊,一箭雙雕。列掃描模塊就是利用時(shí)鐘上升沿信號(hào)對(duì)點(diǎn)陣進(jìn)行逐列循環(huán)掃描,把這個(gè)信號(hào)給sel3到sel0作為選擇信號(hào)。顯示模塊就是通過sel端口和按鍵消抖后的信號(hào)進(jìn)行選擇,屬于掃描行信號(hào)。到此就可以很好的做以下細(xì)致的工作了。3.2、工作原理及框圖 (1)工作原理 16×16 LED點(diǎn)陣由四塊8×8 LED 點(diǎn)陣組成,共256個(gè)LED燈,只需要讓對(duì)應(yīng)的LED燈點(diǎn)亮,就可以漢字?jǐn)?shù)字顯示,如圖1、2,列選擇信號(hào)如表1. 圖1.點(diǎn)陣實(shí)物圖 表1. 圖2.點(diǎn)亮示意圖 SEL

5、3SEL2SEL1SEL0點(diǎn)亮列號(hào)1111第1列1110第2列1101第3列1100第4列1011第5列1010第6列1001第7列1000第8列0111第9列0110第10列0101第11列0100第12列0011第13列0010第14列0001第15列0000第16列 (2)系統(tǒng)連接圖, 輸入1MHz的時(shí)鐘,分頻為1K,消抖6ms 圖3. 系統(tǒng)連接總圖3.3、各模塊的程序代碼及仿真結(jié)果 (1)分頻模塊 由于我的是一千分頻,在仿真上很難觀察,所以我的仿真圖是十分頻的。 一千分頻程序library ieee;Use ieee.std_logic_1164.all;use ieee.std_lo

6、gic_unsigned.all;entity fenpin is port(clk:in std_logic; clk_out:out std_logic);end fenpin;architecture fenpin_1 of fenpin issignal cnt:integer range 0 to 999:=0;begin process(clk) begin if clk'event and clk='1' then -上升沿有效 if cnt=999 then -從0到999為一千 cnt <= 0; else cnt <= cnt+1; en

7、d if; end if; end process;process(cnt)beginif cnt<500 then clk_out<='0'-0到499為低電平else clk_out<='1'end if;end process;end fenpin_1;圖4. 十分頻仿真波形仿真圖 (2)消抖模塊 程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xiaodou isport(clk,rst:in std_logic; key

8、_in:in std_logic_vector(0 to 9); -按鍵輸入 key_out:out std_logic_vector(0 to 9);-經(jīng)消抖按鍵輸出end xiaodou;architecture rt1 of xiaodou issignal num:integer range 0 to 5; -計(jì)6次消抖,為6msbeginprocess(clk)beginif(rst='0') thenif(clk'event and clk='1') then if(key_in/="")then -說明有鍵按下if (n

9、um=5)then num<=0;key_out<=key_in; -計(jì)滿6次說明有效else num<=num+1;end if;elsenum<=0;-無鍵按下保持上次的值,計(jì)數(shù)清0end if;end if;elsenum<=0;key_out<=""end if;end process;end rt1; 從圖5我們看到只要有鍵按下,那么就一直有一個(gè)輸出低電平信號(hào),這說明點(diǎn)陣可以保持點(diǎn)亮狀態(tài)。并且key_in1持續(xù)六個(gè)周期,產(chǎn)生了低電平,而key_in2持續(xù)了5個(gè)周期,沒產(chǎn)生低電平說明消抖確實(shí)是六次即6ms,成功實(shí)現(xiàn)消抖。圖5.按鍵

10、消抖仿真圖形 (3)列掃描模塊 程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity lie isport(clk:in std_logic; sel:out std_logic_vector(3 downto 0);end lie; architecture control_1 of lie isbeginprocess(clk) variable tmp:std_logic_vector(3 downto 0);beginif clk'event and clk='

11、1' then if tmp="1111" then-循環(huán)16進(jìn)制計(jì)數(shù) tmp:="0000" else tmp:=tmp+1; end if;end if;sel<=tmp-1;end process;end control_1; 仿真圖6 列掃描仿真結(jié)果 (4)顯示模塊 程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity xianshi isport( key_out:in std_logic_vector(0 to 9);

12、-按鍵信號(hào) sel:in std_logic_vector(3 downto 0);-列掃描信號(hào)dout:out std_logic_vector(15 downto 0);-輸出控制行,進(jìn)行相應(yīng)顯示end xianshi; architecture xianshi_1 of xianshi isbegin process(key_out,sel)-把按鍵和列掃描信號(hào)作為敏感信號(hào) begin case key_out is when ""=> case sel is when "0000"=>dout<="00000"

13、; when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="10000" when "0100"=>dout<="11000" when "0101"=>dout<="01100" when "0110"=>dout<

14、;="00100" when "0111"=>dout<="00100" when "1000"=>dout<="00100" when "1001"=>dout<="01100" when "1010"=>dout<="11000" when "1011"=>dout<="10000" when "1100

15、"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="00000"-顯示0 when others=>null; end case; when ""=> case sel is when "0000"=>dout&l

16、t;="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="00000" when "0100"=>dout<="00000" when "0101"=>dout<="00000" when "011

17、0"=>dout<="11100" when "0111"=>dout<="11000" when "1000"=>dout<="01000" when "1001"=>dout<="00000" when "1010"=>dout<="00000" when "1011"=>dout<="00000&qu

18、ot; when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="00000"-顯示1 when others=>null; end case; when ""=> case sel is when "00

19、00"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="00000" when "0100"=>dout<="10000" when "0101"=>dout<="11000&q

20、uot; when "0110"=>dout<="01100" when "0111"=>dout<="00100" when "1000"=>dout<="00100" when "1001"=>dout<="01100" when "1010"=>dout<="11000" when "1011"=>dout

21、<="10000" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="00000"-顯示2 when others=>null; end case; when ""=> case s

22、el is when "0000"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="00000" when "0100"=>dout<="10000" when "0101"=>dou

23、t<="11000" when "0110"=>dout<="01100" when "0111"=>dout<="00100" when "1000"=>dout<="00100" when "1001"=>dout<="01100" when "1010"=>dout<="11000" when "

24、1011"=>dout<="10000" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="00000"-顯示3 when others=>null; end case; when "

25、;"=> case sel is when "0000"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="00000" when "0100"=>dout<="00000" when "

26、;0101"=>dout<="00000" when "0110"=>dout<="11110" when "0111"=>dout<="11100" when "1000"=>dout<="11000" when "1001"=>dout<="10000" when "1010"=>dout<="0000

27、0" when "1011"=>dout<="00000" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="00000"-顯示4 when others=>null; e

28、nd case; when ""=> case sel is when "0000"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="00000" when "0100"=>dout<="001

29、00" when "0101"=>dout<="00100" when "0110"=>dout<="00100" when "0111"=>dout<="00100" when "1000"=>dout<="00100" when "1001"=>dout<="00100" when "1010"=>

30、dout<="11100" when "1011"=>dout<="11100" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="00000"-顯示5 when

31、 others=>null; end case; when ""=> case sel is when "0000"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="00000" when "0100"=>

32、;dout<="10000" when "0101"=>dout<="11000" when "0110"=>dout<="01100" when "0111"=>dout<="00100" when "1000"=>dout<="00100" when "1001"=>dout<="01100" when &q

33、uot;1010"=>dout<="11000" when "1011"=>dout<="10000" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="0

34、0000"-顯示6 when others=>null; end case; when ""=> case sel is when "0000"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="00000" when &

35、quot;0100"=>dout<="11100" when "0101"=>dout<="11100" when "0110"=>dout<="01100" when "0111"=>dout<="01100" when "1000"=>dout<="01100" when "1001"=>dout<="

36、01100" when "1010"=>dout<="01100" when "1011"=>dout<="11100" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=&

37、gt;dout<="00000"-顯示7 when others=>null; end case; when ""=> case sel is when "0000"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"=>dout<="

38、;00000" when "0100"=>dout<="10000" when "0101"=>dout<="11000" when "0110"=>dout<="01100" when "0111"=>dout<="00100" when "1000"=>dout<="00100" when "1001"=

39、>dout<="01100" when "1010"=>dout<="11000" when "1011"=>dout<="10000" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when

40、 "1111"=>dout<="00000"-顯示8 when others=>null; end case; when ""=> case sel is when "0000"=>dout<="00000" when "0001"=>dout<="00000" when "0010"=>dout<="00000" when "0011"

41、=>dout<="00000" when "0100"=>dout<="10000" when "0101"=>dout<="11000" when "0110"=>dout<="01100" when "0111"=>dout<="00100" when "1000"=>dout<="00100" whe

42、n "1001"=>dout<="01100" when "1010"=>dout<="11000" when "1011"=>dout<="10000" when "1100"=>dout<="00000" when "1101"=>dout<="00000" when "1110"=>dout<="00000" when "1111"=>dout<="00000"-顯示9 when others=>null; end case; when ""=> case sel is when "0000"=>dout<="0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論