一、 設(shè)計任務(wù)與要求
1. 搶答器同時供8名選手或8個代表隊比賽,分別用8個按鈕S0 ~ S7表示。
2. 設(shè)置一個系統(tǒng)清除和搶答控制開關(guān)S,該開關(guān)由主持人控制。
3. 搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在LED數(shù)碼管上顯示,同時揚聲器發(fā)出報警聲響提示。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。
4. 搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定(如30秒)。當主持人啟動"開始"鍵后,定時器進行減計時,同時揚聲器發(fā)出短暫的聲響,聲響持續(xù)的時間0.5秒左右。
5. 參賽選手在設(shè)定的時間內(nèi)進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。
6. 如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。
二、預習要求
1.復習編碼器、十進制加/減計數(shù)器的工作原理。
2.設(shè)計可預置時間的定時電路。
3.分析與設(shè)計時序控制電路。
4. 畫出定時搶答器的整機邏輯電路圖
三、設(shè)計原理與參考電路
1.數(shù)字搶答器總體方框圖
如圖所示為總體方框圖。其工作原理為:接通電源后,主持人將開關(guān)撥到"清除"狀態(tài),搶答器處于禁止狀態(tài),編號顯示器滅燈,定時器顯示設(shè)定時間;主持人將開關(guān)置?quot;開始"狀態(tài),宣布"開始"搶答器工作。定時器倒計時,揚聲器給出聲響提示。選手在定時時間內(nèi)搶答時,搶答器完成:優(yōu)先判斷、編號鎖存、編號顯示、揚聲器提示。當一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次操作"清除"和"開始"狀態(tài)開關(guān)。
2.單元電路設(shè)計
(1) 搶答器電路
參考電路如圖所示。該電路完成兩個功能:一是分辨出選手按鍵的先后,并鎖存優(yōu)先搶答者的編號,同時譯碼顯示電路顯示編號;二是禁止其他選手按鍵操作無效。工作過程:開關(guān)S置于"清除"端時,RS觸發(fā)器的 端均為0,4個觸發(fā)器輸出置0,使74LS148的 =0,使之處于工作狀態(tài)。當開關(guān)S置于"開始"時,搶答器處于等待工作狀態(tài),當有選手將鍵按下時(如按下S5),74LS148的輸出 經(jīng)RS鎖存后,1Q=1, =1,74LS48處于工作狀態(tài),4Q3Q2Q=101,經(jīng)譯碼顯示為"5"。此外,1Q=1,使74LS148 =1,處于禁止狀態(tài),封鎖其他按鍵的輸入。當按鍵松開即按下時,74LS148的 此時由于仍為1Q=1,使 =1,所以74LS148仍處于禁止狀態(tài),確保不會出二次按鍵時輸入信號,保證了搶答者的優(yōu)先性。如有再次搶答需由主持人將S開關(guān)重新置?quot;清除"然后再進行下一輪搶答。74LS148為8線-3線優(yōu)先編碼器,表11、1為其功能表。
上面這個被多家網(wǎng)站和許多電子制作大賽組委會廣泛使用的搶答器居然有嚴重的錯誤,就是沒法鎖存,或鎖存后沒法重啟,造成這一錯誤的關(guān)鍵是主持人開關(guān)有個清零動作,這個清0動作要確保鎖存器清0,而這個電路的缺陷是清零動作不能保證存儲器一定清零,因為清零是利用基本RS觸發(fā)器的置0功能,基本RS觸發(fā)器的置 0功能要求R端一定為0,S端一定為1,這樣才能確保清零,而上述電路主持人按下清0按鈕后,不能確RS的狀態(tài)一定為01,只能保證在主持人按下清零按鍵后R端為零,所以上述電路存在嚴重缺陷,以至于有些仿真軟件不能仿真出正確的結(jié)果,改正的辦法是將清零信號“非”以后,再和148的輸出端“或”后接入基本RS觸發(fā)器的S端。上述搶答器電路經(jīng)修改后的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觸發(fā)器以便調(diào)用,即component調(diào)用語句
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;
***********************************************************************
定時電路:
由節(jié)目主持人根據(jù)搶答題的難易程度,設(shè)定一次搶答的時間,通過預置時間電路對計數(shù)器進行預置,計數(shù)器的時鐘脈沖由秒脈沖電路提供?深A置時間的電路選用十進制同步加減計數(shù)器74LS192進行設(shè)計,具體電路如上圖所示。
(3)報警電路
由555定時器和三極管構(gòu)成的報警電路如圖11、4所示。其中555構(gòu)成多諧振蕩器,振蕩頻率fo=1.43/[(RI+2R2)C],其輸出信號經(jīng)三極管推動揚聲器。PR為控制信號,當PR為高電平時,多諧振蕩器工作,反之,電路停振。
4)時序控制電路
時序控制電路是搶答器設(shè)計的關(guān)鍵,它要完成以下三項功能:
①主持人將控制開關(guān)撥到"開始"位置時,揚聲器發(fā)聲,搶答電路和定時電路進人正常搶答工作狀態(tài)。
②當參賽選手按動搶答鍵時,揚聲器發(fā)聲,搶答電路和定時電路停止工作。
③當設(shè)定的搶答時間到,無人搶答時,揚聲器發(fā)聲,同時搶答電路和定時電路停止工作。
根據(jù)上面的功能要求,設(shè)計的時序控制電路如上圖所示。圖中,門G1 的作用是控制時鐘信號CP的放行與禁止,門G2的作用是控制74LS148的輸人使能端 。圖11、4的工作原理是:主持人控制開關(guān)從"清除"位置撥到"開始"位置時,來自于圖11、2中的74LS279的輸出 1Q=0,經(jīng)G3反相, A=1,則時鐘信號CP能夠加到74LS192的CPD時鐘輸入端,定時電路進行遞減計時。同時,在定時時間未到時,則"定時到信號"為 1,門G2的輸出 =0,使 74LS148處于正常工作狀態(tài),從而實現(xiàn)功能①的要求。當選手在定時時間內(nèi)按動搶答鍵時,1Q=1,經(jīng) G3反相, A=0,封鎖 CP信號,定時器處于保持工作狀態(tài);同時,門G2的輸出 =1,74LS148處于禁止工作狀態(tài),從而實現(xiàn)功能②的要求。當定時時間到時,則"定時到信號"為0, =1,74LS148處于禁止工作狀態(tài),禁止選手進行搶答。同時, 門G1處于關(guān)門狀態(tài),封鎖 CP信號,使定時電路保持00狀態(tài)不變,從而實現(xiàn)功能③的要求。集成單穩(wěn)觸發(fā)器74LS121用于控制報警電路及發(fā)聲的時間,其工作原理請讀者自行分析。
四、實驗儀器設(shè)備
1. 數(shù)字實驗箱。
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. 其它:發(fā)光二極管2只,共陰極顯示器3只!∥、實驗內(nèi)容及方法1.組裝調(diào)試搶答器電路。
2.設(shè)計可預置時間的定時電路,并進行組裝和調(diào)試。當輸人1Hz的時鐘脈沖信號時,要求電路能進行減計時,當減計時到零時,能輸出低電平有效的定時時間到信號。
3.組裝調(diào)試報警電路。
4.完成定時搶答器的聯(lián)調(diào),注意各部分電路之間的時序配合關(guān)系。然后檢查電路各部分的功能,使其滿足設(shè)計要求。
搶答器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);--組數(shù)顯示
BP<=NOT DDD; --驅(qū)動發(fā)聲裝置工作信號輸出
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.torrancerestoration.com/f/qdq.rar