數字競賽搶答器_第1頁
數字競賽搶答器_第2頁
數字競賽搶答器_第3頁
數字競賽搶答器_第4頁
數字競賽搶答器_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、長 沙 學 院課程設計說明書題目 數字競賽搶答器的設計 系(部) 電子與通信工程系 專業 電氣工程及其自動化 班級 一班 姓名 盧玉芳 學號 2009042124 指導教師 瞿瞾 謝明華 起止日期 2011-12-19至1-1 EDA技術課程設計任務書系(部):電子與通信工程系 專業:電氣工程及其自動化 指導教師:謝明華課題名稱數字競賽搶答器的設計設計內容及要求(1)課題內容:1、設計一個可容納3組參賽的數字式搶答器,每組設一個按鈕,供搶答使用。2、搶答器具有第一信號鑒別和鎖存功能,使除第一搶答者外的按鈕不起作用。3、設置一個主持人“復位”按鈕。4、主持人復位后,開始搶答,第一信號鑒別鎖存電路

2、得到信號后,有指示燈顯示搶答組別,揚聲器發出1秒的音響。5、設置一個計分電路,每組開始預置10分,由主持人記分,答對一次加1分,答錯一次減1分。要求進行按鍵防抖動設計。(2)主要任務:完成該系統的硬件和軟件的設計,并制作出實物裝置,調試好后并能實際運用(指導教師提供制作所需的器件),最后就課程設計本身提交一篇課程設計說明書。設計工作量1、VHDL語言程序設計;2、波形仿真;3、在實驗裝置上進行硬件測試,并進行演示;4、提交一份完整的課程設計說明書,包括設計原理、程序設計、程序分析、仿真分析、硬件測試、調試過程,參考文獻、設計總結等。進度安排起止日期(或時間量)設計內容(或預期目標)備注第1天課

3、題介紹,答疑,收集材料第2天設計方案論證第3天進一步討論方案, 對設計方案進行必要的修正,方案確定后開始進行VHDL語言程序設計第4天設計VHDL語言程序第59天在實驗裝置上進行硬件測試,對VHDL語言程序進行必要的修正,并進行演示教研室意見年 月 日系(部)主管領導意見年 月 日長沙學院課程設計鑒定表姓名盧玉芳學號2009042124專業電氣工程及其自動化班級一班設計題目數字競賽搶答器指導教師謝明華指導教師意見:評定等級: 教師簽名: 日期: 答辯小組意見:評定等級:答辯小組長簽名:日期:教研室意見:教研室主任簽名: 日期: 系(部)意見:系主任簽名:日期:說明課程設計成績分“優秀”、“良好

4、”、“及格”、“不及格”四類;目 錄一總體設計思想5二設計步驟和調試過程51.搶答器鑒別鎖存模塊52.搶答器計分模塊63.蜂鳴模塊94.譯碼模塊95.動態掃描模塊106.總體模塊117.各引腳分配16三仿真及仿真結果分析17四、結論及心得體會18五、參考文獻19一、總體設計思想1.基本要求: 1)、設計一個可容納3組參賽的數字式搶答器,每組設一個按鈕,供搶答使用。 2)、搶答器具有第一信號鑒別和鎖存功能,使除第一搶答者外的按鈕不起作用。 3)、設置一個主持人“復位”按鈕。 4)、主持人復位后,開始搶答,第一信號鑒別鎖存電路得到信號后,有指示燈顯示搶答組別,揚聲器 發出1秒的音響。 5)、設置一

5、個計分電路,每組開始預置10分,由主持人記分,答對一次加1分,答錯一次減1分。要求進行按鍵防抖動設計。 2.基本原理 本設計為三路智能搶答器,所以這種搶答器要求有三路不同組別的搶答輸入信號,并能識別最先搶答的信號,直觀地通過數顯和蜂鳴等方式顯示出組別;同時該系統還應有復位、分數置位功能。 搶答過程:主持人按下系統復位鍵(RST),系統進入搶答狀態,計分模塊輸出初始信號給數碼顯示模塊并顯示出初始值10。當某參賽組搶先將搶答鍵按下時,系統將其余兩路路搶答信號封鎖,同時蜂鳴器發出聲音提示,該組對應的指示燈顯示信號,從而顯示出該搶答成功組,并一直保持到下一輪主持人將系統清零為止。主持人對搶答結果進行確

6、認,隨后,開始回答問題。根據答題的正誤來確定加分或減分,并通過數碼顯示模塊將成績顯示出來。主持人按下復位鍵,即RST 為高電平有效狀態,清除前一次的搶答組別,又可開始新的一輪的搶答。 此搶答器的設計中采用自頂向下的設計思路,運用VHDL 硬件描述語言對各個模塊進行層次化、系統化的描述,并用多個進程聯系起來。 二、設計步驟和調試過程模塊設計和相應模塊程序將該任務分成幾個模塊進行設計,分別為:搶答器鑒別鎖存模塊、搶答器計分模塊、蜂鳴模塊、譯碼模塊、動態掃描模塊,最后是撰寫頂層文件。 搶答器鑒別鎖存模塊: 搶答器鑒別模塊在這個模塊中主要實現搶答過程中的搶答功能,并且能實現當有一路搶答按鍵按下時,該路

7、搶答信號將其余過濾搶答封鎖的功能。其中有三個搶答信號 A1,B1,C1;搶答狀態顯示信號 states;系統復位信號 en。 VHDL 源程序1.搶答器鑒別鎖存模塊 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY QDJB IS PORT(en: IN STD_LOGIC; A, B, C: IN STD_LOGIC; -3個組 A1,B1,C1: OUT STD_LOGIC; STATES: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END ENTITY QDJB; ARCHITECTURE ART OF QDJB

8、 ISsignal a_1,b_1,c_1:std_logic; BEGIN PROCESS(CLR,A,B,C) IS BEGINIF en='1' THEN STATES<="0000"a_1<='0'b_1<='0'c_1<='0'-清零elsif a_1='1' or b_1='1' or c_1='1' then null; -鎖存elsif a='1' then a_1<='1'states

9、<="001"elsif b='1' then b_1<='1'states<="010"elsif c='1' then c_1<='1'states<="100"end if;a1<=a_1;b1<=b_1;c1<=c_1;END PROCESS; END ARCHITECTURE ART;2.搶答器計分模塊: 在這個模塊中主要實現搶答過程中的加減情況,首先將分數顯示復位,即均為10,主持人根據選手答題情況,若選手回答正

10、確則進行加分,即按定加分按鈕為ADD;若選手回答錯誤則進行減分,即按定減分按鈕為SUB,選擇端為CHOS,用來判定系統是進行加分還是進行減分;輸出到計分顯示模塊的信號為AA,BB,CC。由于存在按鍵抖動情況,程序設置了一個JIFEN鍵,在JIFEN為高電平時,在進行加減分的按鍵,按鍵抖動基本平穩,但仍然還存在少許;VHDL 源程序 P_A:PROCESS(ADD,CHOS) IS VARIABLE POINTS_A2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_A1: STD_LOGIC_VECTOR(3 DO

11、WNTO 0):="0000" VARIABLE POINTS_B2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_B1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_C2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_C1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"BEGINIF

12、(ADD'EVENT AND ADD='1')THENIF JIFEN=1 THENIF CHOS="001"THEN IF POINTS_A1="1001" THEN POINTS_A1:="0000" IF POINTS_A2="1001" THEN POINTS_A2:="0000" ELSE POINTS_A2:=POINTS_A2+1; END IF; ELSE POINTS_A1:=POINTS_A1+1; END IF; END IF; IF JIFEN=1

13、 THEN IF CHOS="010" THEN IF POINTS_B1="1001" THEN POINTS_B1:="0000" IF POINTS_B2="1001" THEN POINTS_B2:="0000" ELSE POINTS_B2:=POINTS_B2+1; END IF; ELSE POINTS_B1:=POINTS_B1+1; END IF;END IF; IF JIFEN=1 THENIF CHOS="100" THEN IF POINTS_C1=&

14、quot;1001" THEN POINTS_C1:="0000" IF POINTS_C2="1001" THEN POINTS_C2:="0000" ELSE POINTS_C2:=POINTS_C2+1; END IF; ELSE POINTS_C1:=POINTS_C1+1; END IF;END IF;end if; AA2<=POINTS_A2; AA1<=POINTS_A1; BB2<=POINTS_B2; BB1<=POINTS_B1; CC2<=POINTS_C2; CC1&l

15、t;=POINTS_C1; END PROCESS P_A; P_B: PROCESS(SUB,CHOS) IS VARIABLE POINTS_D2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_D1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_E2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_E1: STD_LOGIC_VECTOR(3 DOW

16、NTO 0):="0000" VARIABLE POINTS_F2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_F1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" BEGIN IF(SUB'EVENT AND SUB='1') THEN IF JIFEN=1 THENIF CHOS="001" THEN IF POINTS_D1="0000" THEN POINTS_D1:=&q

17、uot;1001" IF POINTS_D2="0000" THENPOINTS_D2:="1001" ELSEPOINTS_D2:=POINTS_D2-1; END IF; ELSE POINTS_D1:=POINTS_D1-1; END IF; END IF;IF JIFEN=1 THEN I F CHOS="010" THEN IF POINTS_E1="0000" THEN POINTS_E1:="1001" IF POINTS_E2="0000" THEN

18、POINTS_E2:="1001" ELSEPOINTS_E2:=POINTS_E2-1; END IF; ELSE POINTS_E1:=POINTS_E1-1; END IF; END IF;IF JIFEN=1 THENIF CHOS="100" THEN IF POINTS_F1="0000" THEN POINTS_F1:="1001" IF POINTS_F2="0000" THENPOINTS_F2:="1001" ELSEPOINTS_F2:=POINTS_F

19、2-1; END IF; ELSE POINTS_F1:=POINTS_F1-1; END IF; END IF; END IF; DD2<=POINTS_D2; DD1<=POINTS_D1; EE2<=POINTS_E2; EE1<=POINTS_E1; FF2<=POINTS_F2; FF1<=POINTS_F1; END PROCESS P_B;END ARCHITECTURE ART;3.蜂鳴模塊: 在這個模塊中主要實現搶答過程中的蜂鳴功能,當搶答者按下搶答鍵時,除了指示燈顯示意外,同時蜂鳴器蜂鳴1秒。此模塊就是運用分頻信號來控制蜂鳴器,已達到蜂鳴

20、一秒的實驗效果。當搶答結束時,蜂鳴器停止發聲。process(clk,op) -fengmingbegin if clk'event and clk='1' then if op=25000000 then op<=0; clk2 <= not clk2; else op<=op+1; end if; end if;end process;process(clk0)begin if clk0'event and clk0='1' then if p=5 then p<=0; else p<=p+1; end if;

21、end if;end process;4.譯碼模塊: 在這個模塊中主要實現搶答過程中將 BCD 碼轉換成 7 段現實數碼管的功能。 VHDL 源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY YMQ IS PORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); END YMQ; ARCHITECTURE ART OF YMQ IS BEGIN PROCESS(A

22、IN4) BEGIN CASE AIN4 IS WHEN "0000"=>DOUT7<="1111110" -0WHEN "0001"=>DOUT7<="0110000" -1 WHEN "0010"=>DOUT7<="1101101" -2WHEN "0011"=>DOUT7<="1111001" -3WHEN "0100"=>DOUT7<="0

23、110011" -4WHEN "0101"=>DOUT7<="1011011" -5WHEN "0110"=>DOUT7<="1011111" -6WHEN "0111"=>DOUT7<="1110000" -7WHEN "1000"=>DOUT7<="1111111" -8WHEN "1001"=>DOUT7<="1111011&quo

24、t; -9WHEN OTHERS=>DOUT7<="0000000" END CASE; END PROCESS; END ARCHITECTURE ART; 波形顯示如下:5.動態掃描模塊: 動態顯示是將所有顯示數據的BCD碼按照一定的順序和變化頻率送到公用數據總線上,在通過一個公用的顯示譯碼器譯碼后,接到數碼管的驅動端。這里是將A,B,C三位選手的回答成績,即分數顯示在數碼管上。 硬件測試時,第一二個數碼管顯示的是A組搶答所得的分數;第三四個數碼管顯示的是B組搶答所得的分數;第五六個數碼管顯示的是C組搶答所得的分數。第七八個數碼管滅,不運用到試驗中。VHDL

25、 源程序 begin -saomiaoxianshi process(clk) begin if clk'event and clk='1' then if cnter=25000000 then cnter<=0; else cnter<=cnter+1; end if ; end if; end process;process(newclk) begin if cnter=25000000 THEN newclk<='1' else newclk<='0' end if; if newclk'event

26、 and newclk='1' then IF cdi<7 then cdi<=cdi+'1' else cdi<=(others=>'0'); end if; end if ;end process; process(cdi) begin case cdi is when "000"=>led_selout<="00000001" when "001"=>led_selout<="00000010" when &quo

27、t;010"=>led_selout<="00000100" when "011"=>led_selout<="00001000" when "100"=>led_selout<="00010000" when "101"=>led_selout<="00100000" when "110"=>led_selout<="01000000" when

28、 "111"=>led_selout<="10000000" end case; end process;process(p) begin case p is When "0000"=>led7s<="1000000" When "0001"=>led7s<="1111001" When "0010"=>led7s<="0100100" When "0011"=>

29、led7s<="0110000"When "0100"=>led7s<="0011001" When "0101"=>led7s<="0010010"When "0110"=>led7s<="0000010"When "0111"=>led7s<="1111000"When "1000"=>led7s<="0000000&

30、quot; When "1001"=>led7s<="0010000" when others => null; end case;end process;6. 采用自頂向下的設計思路,運用VHDL 硬件描述語言對各個模塊進行層次化、系統化的描述,并用多個進程聯系起來。綜合以上模塊,數字競賽搶答器的總程序如下所示:本程序以一個總的源體文件自頂向下,將上面的模塊以進程的方式有順序的插入,得到以下結果。library ieee; use ieee.std_logic_1164.all; entity qiangdaqi is port(cl

31、k:in std_logic; rst,en:in std_logic; JIFEN: in std_logic; A,B,C:in std_logic; SUB,ADD:in std_logic; CHOS: in std_logic_vector(2 downto 0); ring:out std_logic;led_selout: out std_logic_vector(7 downto 0);led7s: out std_logic_vector(6 downto 0) );end entity qiangdaqi;architecture art of qiangdaqi is s

32、ignal num:integer range 0 to 50000000; signal a_1,b_1,c_1:std_logic; signal qq: integer range 25000000 to 0; signal Cdi:std_logic_vector(2 downto 0); signal cnter:integer range 0 to 25000000; signal newclk: std_logic; signal op: integer range 25000000 downto 0; signal p: integer range 5 downto 0; si

33、gnal clk0,clk1,clk2: std_logic; signal en:std_logic; signal A1,B1,C1: std_logic_vector(2 downto 0);process(clk,ft) -fenpin; begin if clk'event and clk='1' thenif ft<25000000 thenft<='0'elseft<='1'end if ;end if;end process;end;process(rst,states) -jianbiesuocun;

34、begin if rst='1' then states<="0000"a_1<='0'b_1<='0'c_1<='0'-清零 elsif a_1='1' or b_1='1' or c_1='1' then null; -鎖存 elsif a='1' then a_1<='1'states<="001" elsif b='1' then b_1<=

35、9;1'states<="010" elsif c='1' then c_1<='1'states<="100" end if; a1<=a_1;b1<=b_1;c1<=c_1;end process; end architecture art;PROCESS(CHOS,ADD,SUB) -jifen;BEGIN P_A:PROCESS(ADD,CHOS) IS VARIABLE POINTS_A2: STD_LOGIC_VECTOR(3 DOWNTO 0):="000

36、1" VARIABLE POINTS_A1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_B2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_B1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_C2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_C1: STD_

37、LOGIC_VECTOR(3 DOWNTO 0):="0000"BEGINIF(ADD'EVENT AND ADD='1')THENIF JIFEN=1 THENIF CHOS="001"THEN IF POINTS_A1="1001" THEN POINTS_A1:="0000" IF POINTS_A2="1001" THEN POINTS_A2:="0000" ELSE POINTS_A2:=POINTS_A2+1; END IF; ELSE P

38、OINTS_A1:=POINTS_A1+1; END IF;END IF; IF JIFEN=1 THEN IF CHOS="010" THEN IF POINTS_B1="1001" THEN POINTS_B1:="0000" IF POINTS_B2="1001" THEN POINTS_B2:="0000" ELSE POINTS_B2:=POINTS_B2+1; END IF; ELSE POINTS_B1:=POINTS_B1+1; END IF;END IF;IF JIFEN=1

39、THEN IF CHOS="100" THEN IF POINTS_C1="1001" THEN POINTS_C1:="0000" IF POINTS_C2="1001" THEN POINTS_C2:="0000" ELSE POINTS_C2:=POINTS_C2+1; END IF; ELSE POINTS_C1:=POINTS_C1+1; END IF;END IF;END IF; AA2<=POINTS_A2; AA1<=POINTS_A1; BB2<=POINTS

40、_B2; BB1<=POINTS_B1; CC2<=POINTS_C2; CC1<=POINTS_C1; END PROCESS P_A; P_B: PROCESS(SUB,CHOS) IS VARIABLE POINTS_D2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_D1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_E2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001&

41、quot; VARIABLE POINTS_E1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000" VARIABLE POINTS_F2: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001" VARIABLE POINTS_F1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"BEGINIF(SUB'EVENT AND SUB='1') THENIF CHOS="001" THENIF JIFEN=1 THEN IF

42、POINTS_D1="0000" THEN POINTS_D1:="1001" IF POINTS_D2="0000" THEN POINTS_D2:="1001" ELSE POINTS_D2:=POINTS_D2-1; END IF; ELSE POINTS_D1:=POINTS_D1-1; END IF;END IF;IF JIFEN=1 THENIF CHOS="010" THEN IF POINTS_E1="0000" THEN POINTS_E1:="1

43、001" IF POINTS_E2="0000" THEN POINTS_E2:="1001" ELSE POINTS_E2:=POINTS_E2-1; END IF; ELSE POINTS_E1:=POINTS_E1-1; END IF;END IF;IF JIFEN=1 THENIF CHOS="100" THEN IF POINTS_F1="0000" THEN POINTS_F1:="1001" IF POINTS_F2="0000" THEN POINT

44、S_F2:="1001" ELSE POINTS_F2:=POINTS_F2-1; END IF; ELSE POINTS_F1:=POINTS_F1-1; END IF; END IF;END IF; DD2<=POINTS_D2; DD1<=POINTS_D1; EE2<=POINTS_E2; EE1<=POINTS_E1; FF2<=POINTS_F2; FF1<=POINTS_F1;END PROCESS P_B;END ARCHITECTURE ART;process(clk,op) -fengmingbegin if clk&

45、#39;event and clk='1' then if op=25000000 then op<=0; clk2 <= not clk2; else op<=op+1; end if; end if;end process;process(clk0)begin if clk0'event and clk0='1' then if p=5 then p<=0; else p<=p+1; end if; end if;end process;begin -saomiaoxianshi process(clk) begin i

46、f clk'event and clk='1' then if cnter=25000000 then cnter<=0; else cnter<=cnter+1; end if ; end if; end process;process(newclk) begin if cnter=25000000 THEN newclk<='1' else newclk<='0' end if; if newclk'event and newclk='1' then IF cdi<7 then c

47、di<=cdi+'1' else cdi<=(others=>'0'); end if; end if ;end process; process(cdi) begin case cdi is when "000"=>led_selout<="00000001" when "001"=>led_selout<="00000010" when "010"=>led_selout<="00000100&q

48、uot; when "011"=>led_selout<="00001000" when "100"=>led_selout<="00010000" when "101"=>led_selout<="00100000" when "110"=>led_selout<="01000000" when "111"=>led_selout<="10000

49、000" end case; end process;process(p) begin case p is When "0000"=>led7s<="1000000" When "0001"=>led7s<="1111001" When "0010"=>led7s<="0100100" When "0011"=>led7s<="0110000"When "0100&qu

50、ot;=>led7s<="0011001"When "0101"=>led7s<="0010010" When "0110"=>led7s<="0000010" When "0111"=>led7s<="1111000" When "1000"=>led7s<="0000000"When "1001"=>led7s<="0010000" when others => null; end case;end process;process(rst,en,clk2) -送到蜂鳴器 beginif rst='1' thenring<='0'elsif en='1' thenring<=clk2;elseri

溫馨提示

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

評論

0/150

提交評論