一、 設計任務與要求
1. 搶答器同時供8名選手或8個代表隊比賽,分別用8個按鈕S0 ~ S7表示。
2. 設置一個系統清除和搶答控制開關S,該開關由主持人控制。
3. 搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,并在LED數碼管上顯示,同時揚聲器發出報警聲響提示。選手搶答實行優先鎖存,優先搶答選手的編號一直保持到主持人將系統清除為止。
4. 搶答器具有定時搶答功能,且一次搶答的時間由主持人設定(如30秒)。當主持人啟動"開始"鍵后,定時器進行減計時,同時揚聲器發出短暫的聲響,聲響持續的時間0.5秒左右。
5. 參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統清除為止。
6. 如果定時時間已到,無人搶答,本次搶答無效,系統報警并禁止搶答,定時顯示器上顯示00。
二、預習要求
1.復習編碼器、十進制加/減計數器的工作原理。
2.設計可預置時間的定時電路。
3.分析與設計時序控制電路。
4. 畫出定時搶答器的整機邏輯電路圖
三、設計原理與參考電路
1.數字搶答器總體方框圖
如圖所示為總體方框圖。其工作原理為:接通電源后,主持人將開關撥到"清除"狀態,搶答器處于禁止狀態,編號顯示器滅燈,定時器顯示設定時間;主持人將開關置?quot;開始"狀態,宣布"開始"搶答器工作。定時器倒計時,揚聲器給出聲響提示。選手在定時時間內搶答時,搶答器完成:優先判斷、編號鎖存、編號顯示、揚聲器提示。當一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次操作"清除"和"開始"狀態開關。
2.單元電路設計
(1) 搶答器電路
參考電路如圖所示。該電路完成兩個功能:一是分辨出選手按鍵的先后,并鎖存優先搶答者的編號,同時譯碼顯示電路顯示編號;二是禁止其他選手按鍵操作無效。工作過程:開關S置于"清除"端時,RS觸發器的 端均為0,4個觸發器輸出置0,使74LS148的 =0,使之處于工作狀態。當開關S置于"開始"時,搶答器處于等待工作狀態,當有選手將鍵按下時(如按下S5),74LS148的輸出 經RS鎖存后,1Q=1, =1,74LS48處于工作狀態,4Q3Q2Q=101,經譯碼顯示為"5"。此外,1Q=1,使74LS148 =1,處于禁止狀態,封鎖其他按鍵的輸入。當按鍵松開即按下時,74LS148的 此時由于仍為1Q=1,使 =1,所以74LS148仍處于禁止狀態,確保不會出二次按鍵時輸入信號,保證了搶答者的優先性。如有再次搶答需由主持人將S開關重新置?quot;清除"然后再進行下一輪搶答。74LS148為8線-3線優先編碼器,表11、1為其功能表。
上面這個被多家網站和許多電子制作大賽組委會廣泛使用的搶答器居然有嚴重的錯誤,就是沒法鎖存,或鎖存后沒法重啟,造成這一錯誤的關鍵是主持人開關有個清零動作,這個清0動作要確保鎖存器清0,而這個電路的缺陷是清零動作不能保證存儲器一定清零,因為清零是利用基本RS觸發器的置0功能,基本RS觸發器的置 0功能要求R端一定為0,S端一定為1,這樣才能確保清零,而上述電路主持人按下清0按鈕后,不能確RS的狀態一定為01,只能保證在主持人按下清零按鍵后R端為零,所以上述電路存在嚴重缺陷,以至于有些仿真軟件不能仿真出正確的結果,改正的辦法是將清零信號“非”以后,再和148的輸出端“或”后接入基本RS觸發器的S端。上述搶答器電路經修改后的VHDL程序如下:
74LS148的功能真值表:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY QDQ111 IS
PORT( START,D1,D2,D3,D4,D5,D6,D7,D8:IN STD_LOGIC;
QO0,QO1,QO2,QO3,W1:OUT STD_LOGIC;
XS:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END QDQ111;
ARCHITECTURE QDQ OF QDQ111 IS
SIGNAL EI,EIO:STD_LOGIC;
SIGNAL Q0,Q1,Y:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL QD3,QD2,QD1,QD0:STD_LOGIC;
COMPONENT RSd is
port(Rd,Sd:in std_logic;
Q:out std_logic);
END COMPONENT;
BEGIN
PROCESS(D1,D2,D3,D4,EI,START)
BEGIN
IF EI='0' then
IF D1='0' THEN Q0<= "1110";EIO<='0';
ELSIF D2='0' THEN Q0<="1101";EIO<='0';
ELSIF D3='0' THEN Q0<="1100";EIO<='0';
ELSIF D4='0' THEN Q0<="1011";EIO<='0';
ELSIF D5='0' THEN Q0<="1010";EIO<='0';
ELSIF D6='0' THEN Q0<="1001";EIO<='0';
ELSIF D7='0' THEN Q0<="1000";EIO<='0';
ELSIF D8='0' THEN Q0<="0111";EIO<='0';
ELSE Q0<="1111";EIO<='1';
END IF;
ELSE Q0<="1111";
END IF;
END PROCESS;
U1:RSd PORT MAP(START,((NOT START)OR Q0(0)),QD0);
U2:RSd PORT MAP(START,((NOT START)OR Q0(1)),QD1);
U3:RSd PORT MAP(START,((NOT START)OR Q0(2)),QD2);
U4:RSd PORT MAP(START,((NOT START)OR EIO),QD3);
EI<=QD3;
QO0<=QD0;QO1<=QD1;QO2<=QD2;QO3<=QD3;
--***********以上鎖存,以下編碼顯示****************--
Y<=QD3&QD2&QD1&QD0;
PROCESS(Y)
BEGIN
CASE Y IS
WHEN "1111"=>XS<="1001111";
WHEN "1110"=>XS<="0010010";
WHEN "1101"=>XS<="0000110";
WHEN "1100"=>XS<="1001100";
WHEN "1011"=>XS<="0100100";
WHEN "1010"=>XS<="0100000";
WHEN "1001"=>XS<="0001111";
WHEN "1000"=>XS<="0000000";
WHEN OTHERS=>XS<="0000001";
END CASE;
W1<='0';
END PROCESS;
END;
*******************************************************************
上面程序還需編寫一個基本RS觸發器以便調用,即component調用語句
library ieee;
use ieee.std_logic_1164.all;
entity RSd is
port(Rd,Sd:in std_logic;
Q:out std_logic);
end RSd;
architecture ca of RSd is
signal RS:std_logic_vector(1 downto 0);
SIGNAL Q0,A,B:std_logic;
begin
A<=NOT(Sd AND B);B<=NOT(Rd AND A);
Q<=A;
end;
***********************************************************************
定時電路:
由節目主持人根據搶答題的難易程度,設定一次搶答的時間,通過預置時間電路對計數器進行預置,計數器的時鐘脈沖由秒脈沖電路提供。可預置時間的電路選用十進制同步加減計數器74LS192進行設計,具體電路如上圖所示。
(3)報警電路
由555定時器和三極管構成的報警電路如圖11、4所示。其中555構成多諧振蕩器,振蕩頻率fo=1.43/[(RI+2R2)C],其輸出信號經三極管推動揚聲器。PR為控制信號,當PR為高電平時,多諧振蕩器工作,反之,電路停振。
4)時序控制電路
時序控制電路是搶答器設計的關鍵,它要完成以下三項功能:
①主持人將控制開關撥到"開始"位置時,揚聲器發聲,搶答電路和定時電路進人正常搶答工作狀態。
②當參賽選手按動搶答鍵時,揚聲器發聲,搶答電路和定時電路停止工作。
③當設定的搶答時間到,無人搶答時,揚聲器發聲,同時搶答電路和定時電路停止工作。
根據上面的功能要求,設計的時序控制電路如上圖所示。圖中,門G1 的作用是控制時鐘信號CP的放行與禁止,門G2的作用是控制74LS148的輸人使能端 。圖11、4的工作原理是:主持人控制開關從"清除"位置撥到"開始"位置時,來自于圖11、2中的74LS279的輸出 1Q=0,經G3反相, A=1,則時鐘信號CP能夠加到74LS192的CPD時鐘輸入端,定時電路進行遞減計時。同時,在定時時間未到時,則"定時到信號"為 1,門G2的輸出 =0,使 74LS148處于正常工作狀態,從而實現功能①的要求。當選手在定時時間內按動搶答鍵時,1Q=1,經 G3反相, A=0,封鎖 CP信號,定時器處于保持工作狀態;同時,門G2的輸出 =1,74LS148處于禁止工作狀態,從而實現功能②的要求。當定時時間到時,則"定時到信號"為0, =1,74LS148處于禁止工作狀態,禁止選手進行搶答。同時, 門G1處于關門狀態,封鎖 CP信號,使定時電路保持00狀態不變,從而實現功能③的要求。集成單穩觸發器74LS121用于控制報警電路及發聲的時間,其工作原理請讀者自行分析。
四、實驗儀器設備
1. 數字實驗箱。
2. 集成電路74LS148 1片,74LS279 1片,74LS48 3片,74LS192 2片,NE555 2片,74LS00 1片,74LS121 1片。
3. 電阻 510Ω 2只,1KΩ 9只,4.7kΩ l只,5.1kΩ l只,100kΩ l只,10kΩ 1只, 15kΩ 1只, 68kΩ l只。
4. 電容 0.1uF 1只,10uf 2只,100uf 1只。
5. 三極管 3DG12 1只。
6. 其它:發光二極管2只,共陰極顯示器3只。 五、實驗內容及方法1.組裝調試搶答器電路。
2.設計可預置時間的定時電路,并進行組裝和調試。當輸人1Hz的時鐘脈沖信號時,要求電路能進行減計時,當減計時到零時,能輸出低電平有效的定時時間到信號。
3.組裝調試報警電路。
4.完成定時搶答器的聯調,注意各部分電路之間的時序配合關系。然后檢查電路各部分的功能,使其滿足設計要求。
搶答器PLD程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY QDQ IS
PORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CP,CR,Start:IN STD_LOGIC;
A,B,C,DD,E,F,G,BP:OUT STD_LOGIC);
END QDQ;
ARCHITECTURE QDQ OF QDQ IS
SIGNAL CLK,DDD:STD_LOGIC;
SIGNAL Y:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL DO,YS:STD_LOGIC_VECTOR(7 DOWNTO 0);
COMPONENT QDLED7 is
PORT(DATA:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
a,b,c,d,e,f,g:out std_logic);
END COMPONENT;
BEGIN
PROCESS(CP,CLK,CR,DO,start)
BEGIN
IF Start='1' then
IF CLK'EVENT AND CLK='1' THEN
DO<=D;
END IF;
IF CR='0' THEN DO<="11111111";
END IF;
IF DO="11111111" THEN DDD<='1';
ELSE DDD<='0';
END IF;
END if;
END PROCESS;
CLK<=CP AND DDD;
YS<=DO;
PROCESS(YS)
BEGIN
CASE YS IS
WHEN "11111110" =>Y<="0001";
WHEN "11111101" =>Y<="0010";
WHEN "11111011" =>Y<="0011";
WHEN "11110111" =>Y<="0100";
WHEN "11101111" =>Y<="0101";
WHEN "11011111" =>Y<="0110";
WHEN "10111111" =>Y<="0111";
WHEN "01111111" =>Y<="1000";
WHEN OTHERS =>Y<="0000";
END CASE;
END PROCESS;
UU:QDLED7 PORT MAP(Y,A,B,C,DD,E,F,G);--組數顯示
BP<=NOT DDD; --驅動發聲裝置工作信號輸出
END;
八位鎖存器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SUOCQ IS
PORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CP,CR:IN STD_LOGIC;
Yout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END SUOCQ;
ARCHITECTURE QDQ OF SUOCQ IS
SIGNAL CLK,DDD:STD_LOGIC;
SIGNAL DO:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CP,CLK,CR,DO)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
DO<=D;
END IF;
IF CR='0' THEN DO<="11111111";
END IF;
IF DO="11111111" THEN DDD<='1';
ELSE DDD<='0';
END IF;
END PROCESS;
CLK<=CP AND DDD;
Yout<=DO;
END;
程序下載: http://www.zg4o1577.cn/f/qdq.rar