eda電子秒錶課程設計
⑴ 單片機電子秒錶課程設計
高估我啦,你上csdn上找找把
⑵ 電子秒錶課程設計
我已經把我上學期做的秒錶設計報告發到你的郵箱了,希望對你有所幫助~
請採納答案,支持我一下。
⑶ EDA用Verilog HDL語言描述電子秒錶設計(包括代碼)
1. 「分分:秒秒」計數器設計<br> 我們要實現「分分:秒秒」顯示的電子秒錶,需要設計計數頻率為 的<br> 計數器。因為「分分:秒秒」的結構對應有4個十進制數字(個位的秒,十位的<br> 秒,個位的分,十位的分),如果採用統一計數再分別求出「分分:秒秒」 對應<br> 的4個十進制數字進行解碼顯示,則求解對應的4個十進制數字的過程難於用硬<br> 件實現。在此,我們將每個顯示的值分別進行計數,即分別針對個位的秒、十位<br> 的秒、個位的分、十位的分設計對應的計數器,其中個位的秒計數頻率為1Hz,<br> 其從0到9計數,當從9回到0時,向前進一位,使得十位的秒進行計數加1。<br> 35<br> 十位的秒從0到5計數,當從5回到0時,向前進一位,使得個位的分進行計數<br> 加1。個位的分從0到9計數,當從9回到0 時,向前進一位,使得十位的分進<br> 行計數加1。十位的分則從0 到5計數,計數到5時,又回到0。<br> 2. 掃描顯示技術<br> 因為4位數碼管的段控制輸入是復用的,要分別顯示不同的計數數值,需要<br> 使用動態掃描顯示技術,其電路結構如圖61 所示。首先,以掃描顯示的頻率進<br> 行2比特寬的模4計數,然後由其值從4個數碼管的待顯示值輸入中選擇對應的<br> 一個經解碼後連接到公共的段控制輸入端,同時將計數值經2到4解碼後輸出到<br> 對應數碼管位的公共端,點亮對應的數碼管。雖然各數碼管位是輪流顯示,每個<br> 數碼管位上的數字是斷續的顯示,只要掃描的頻率夠快,由於人眼的視覺殘余效<br> 應,就可以看到各數碼管位上穩定的數字顯示值。這和我們使用的電視、顯示器<br> 的顯示原理是一樣的。參考液晶顯示器的刷新頻率,經驗證,在每秒鍾掃描60<br> 幀的時候,各數碼管位上即能得到穩定的數字顯示,此時,對應計數時鍾的等效<br> 頻率為240Hz。我們可以參考實驗四的圖47,再做一個等效分頻計數器,通過<br> 產生的後級時鍾使能信號將20MHz的時鍾等效分頻到240Hz。<br> 圖 61 掃描顯示電路結構<br> 3. 冒號點的處理<br> 數碼管中間的時間分隔冒號點(對應為左邊第2個數碼管位的DP點)每秒<br> 鍾閃爍一次,其頻率為1Hz,只需要輸出1Hz,占空比為50%的周期信號即可。<br> 其他數碼管位的點號不需要顯示,對應的DP 點輸出低電平無效信號即可。這4<br> 個信號 所示的顯示切換計數值進行4 選1 選擇後接到數碼管上公共的<br> DP控制端。<br> 在實驗四中,我們為了得到1Hz的主功能計數頻率,前面利用precnt<br> 進行了等效分頻計數,其一個完整的計數周期即為1s,對應產生的使能信號en<br> 頻率即為1Hz,但我們在此不能直接使用en 的信號,因為其占空比只有<br> 1/20000000,肉眼無法看到其閃爍的效果。為得到占空比為50%的1Hz信號,我<br> 們可以通過對precnt 的計數值進行比較得出,只需要在precnt 計數周期內一半的<br> 時間輸出1,一半的時間輸出0 即可,例如,當precnt>25'd9999999 時輸出0,<br> 否則輸出1,此時即可得到占空比為50%的1Hz信號。<br> 4. 總體設計<br> 總體設計只需要將時鍾電路、復位電路、按鍵電路、數碼管電路等組合起來,<br> 綜合使用時鍾使能的同步設計技術、按鍵處理技術、掃描顯示技術、「分分:秒<br> 秒」計數器設計技術及冒號點的處理技術即可。
⑷ EDA課程設計——數字電子鍾
1、基本要求:能利用現有的硬體系統設計一個至少能顯示分、秒的控制電路。分和秒均用兩位數碼管指示,並具有調時、復位功能;
2、擴展要求:能同時顯示小時(兩位數碼管)並能調節小時功能;具有鬧鍾定時功能。
3、設計方法:採用模塊化描述方法,可分為分頻模塊、調時控制模塊、數碼顯示模塊、復位等模塊,每個模塊既可以編輯成獨立的HDL文件或GDF文件,也可以作為HDL程序中的一個進程模塊,最後進行系統模擬加以驗證,在此基礎上下載到硬體上進行現場測試。
4、輸入、輸出埠描述:輸入信號——時鍾信號clk、復位信號clr、時間設置鍵set、時間上調鍵tup、時間下調鍵tdown;輸出信號——掃描式七段數碼管段選輸出端led[7..0]、位選輸出端ctrlbit[3..0]。
我來幫他解答
2011-6-1 17:06
滿意回答
設計原理
計數時鍾由模為60的秒計數器模塊、模為60的分計數模塊、模為24的小時計數器模塊、指示燈與報警器的模塊、分/小時設定模塊及輸出顯示模塊等組成。秒計數器模塊的進位輸出為分計數器模塊的進位輸入,分計數器模塊的進位輸出為小時計數器模塊的進位輸入。其中秒計數器模塊中應有分鍾的設定,分計數器模塊中應有小時的設定。
內容
設計一個計數時鍾,使其具有24小時計數功能。通過「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意引線插孔可設置小時和分鍾的值,並具有整點報時的功能。
電路原理圖
模塊說明:計數時鍾由60秒計數器模塊XSECOND、60分計數器模塊XMINUTE、24小時計數器模塊XHOUR等六個模塊構成。秒計數器模塊的進位輸出為分計數器模塊的進位輸入,分計數器模塊中有小時的設定。通過SW1、SW2、SW3、SW4可設定小時和分鍾的值,並具有整點報時的功能。
輸入信號:SETMIN為分鍾設置信號;SETHOUR為小時設置信號;RESET為全局復位信號;CLK為全局時鍾信號;CKDSP為數碼管動態掃描信號。
輸出信號:SPEAK為蜂鳴器報時信號;LAMP[2..0]為指示燈信號;A~G為數碼管七個段位信號;SS[2..0]為數碼管段位解碼控制信號。
說明與電路連線
指示燈信號LAMP2~LAMP0為獨立擴展下載板上CPLD器件的第11、10、9腳,內部已連接並已鎖定,無需外接連線。
蜂鳴器報時信號SPEAK為獨立擴展下載板CPLD器件的第31腳,內部已連接並已鎖定,無需外接連線。
撥碼開關SW1~SW7內部已連接並已鎖定,無需外接連線。
數碼管七個段位信號A~G為獨立擴展下載板上CPLD器件的第86、87、88、89、90、92、93腳,應接數碼管段位引線接線組KPL_AH,從左到右依次對應的A、B、C、D、E、F、G引線插孔。
數碼管段位解碼控制信號SS0、SS1、SS2為獨立擴展下載板上CPLD器件的第68、69、70腳,為數碼管的位選掃描信號,分別接信號接線組DS1-8A(T)的SS0、SS1、SS2引線插孔(即在電源引線插孔組GND孔處)。
復位信號RESET為獨立擴展下載板上CPLD器件的第71腳,應接「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意一個插孔。
小時設置信號SETHOUR為獨立擴展下載板CPLD器件的第73腳,應接「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意一個插孔。
分鍾設置信號SETMIN為獨立擴展下載板上CPLD器件的第74腳,應接「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意一個插孔。
時鍾信號CLK為獨立擴展下載板上CPLD器件的183腳(即GCLK2),應接時鍾信號接線組「CLOCK(T)」的「FRQ(21)」引線插孔。
數碼管動態掃描信號CKDSP為獨立擴展下載板上CPLD器件的79腳(即GCLK1),應接時鍾信號接線組「CLOCK(T)」的「FRQ(11)」引線插孔。
參考源程序
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xsecond is
port (
clk: in STD_LOGIC;
clkset: in STD_LOGIC;
setmin: in STD_LOGIC;
reset: in STD_LOGIC;
secout: out STD_LOGIC_VECTOR (6 downto 0);
enmin: out STD_LOGIC
);
end xsecond;
architecture xsecond_arch of xsecond is
signal sec : std_logic_vector(6 downto 0);
signal emin : std_logic;
signal sec1 : std_logic;
begin
-- <<enter your statements here>>
process(reset,sec,emin,setmin,clkset)
begin
if reset='0' then
enmin<='0';
secout<="0000000";
sec1<='1';
else
sec1<='0';
secout<=sec;
if clkset='1' and clkset'event then
if setmin='0' then
enmin<='1';
else
enmin<=emin;
end if;
end if;
end if;
end process;
process(clk,sec1)
alias lcount : std_logic_vector(3 downto 0) is sec(3 downto 0);
alias hcount : std_logic_vector(2 downto 0) is sec(6 downto 4);
begin
if sec1='1' then
sec<="0000000";
else
if (clk='1' and clk'event) then
if lcount=9 then
lcount<="0000";
if hcount/=5 then
hcount<=hcount+1;
emin<='0';
else
hcount<="000";
emin<='1';
end if;
else
lcount<=lcount+1;
emin<='0';
end if;
end if;
end if;
end process;
end xsecond_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xminute is
port (
clkmin: in STD_LOGIC;
reset: in STD_LOGIC;
sethour: in STD_LOGIC;
clk: in STD_LOGIC;
minout: out STD_LOGIC_VECTOR (6 downto 0);
enhour: out STD_LOGIC
);
end xminute;
architecture xminute_arch of xminute is
signal min : std_logic_vector(6 downto 0);
signal ehour : std_logic;
signal min1 : std_logic;
begin
-- <<enter your statements here>>
process(reset,clk,sethour,min,ehour)
begin
if reset='0' then
enhour<='0';
minout<="0000000";
min1<='0';
else
min1<='1';
minout<=min;
if clk='1' and clk'event then
if sethour='0' then
enhour<='1';
else
enhour<=ehour;
end if;
end if;
end if;
end process;
process(clkmin,min1)
alias lcountm : std_logic_vector(3 downto 0) is min(3 downto 0);
alias hcountm : std_logic_vector(2 downto 0) is min(6 downto 4);
begin
if min1='0' then
min<="0000000";
else
if (clkmin='1' and clkmin'event) then
if lcountm=9 then
lcountm<="0000";
if hcountm/=5 then
hcountm<=hcountm+1;
ehour<='0';
else
hcountm<="000";
ehour<='1';
end if;
else
lcountm<=lcountm+1;
ehour<='0';
end if;
end if;
end if;
end process;
end xminute_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xhour is
port (
clkhour: in STD_LOGIC;
reset: in STD_LOGIC;
hourout: out STD_LOGIC_VECTOR (5 downto 0)
);
end xhour;
architecture xhour_arch of xhour is
signal hour : std_logic_vector(5 downto 0);
begin
-- <<enter your statements here>>
process(reset,clkhour,hour)
alias lcount : std_logic_vector(3 downto 0) is hour(3 downto 0);
alias hcount : std_logic_vector(1 downto 0) is hour(5 downto 4);
begin
if reset='0' then
hourout<="000000";
hour<="000000";
else
if (clkhour='1' and clkhour'event) then
if lcount=9 then
lcount<="0000";
hcount<=hcount+1;
else
if hour="100011" then
hour<="000000";
else
lcount<=lcount+1;
end if;
end if;
end if;
hourout<=hour;
end if;
end process;
end xhour_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xalert is
port (
clk: in STD_LOGIC;
d_in: in STD_LOGIC_VECTOR (6 downto 0);
speak: out STD_LOGIC;
d_out: out STD_LOGIC_VECTOR (2 downto 0)
);
end xalert;
architecture xalert_arch of xalert is
type state is (s1,s2,s3,s4);
signal next_state,current_state : state;
begin
-- <<enter your statements here>>
process(clk,current_state,d_in)
begin
if d_in/="0000000" then
speak<='0';
next_state<=s1;
current_state<=s1;
d_out<="000";
else
if clk='1' and clk'event then
speak<='1';
current_state<=next_state;
end if;
case current_state is
when s1 =>
d_out<="000";
next_state<=s2;
when s2 =>
d_out<="001";
next_state<=s3;
when s3 =>
d_out<="010";
next_state<=s4;
when s4 =>
d_out<="100";
next_state<=s1;
when others =>
d_out<="000";
null;
end case;
end if;
end process;
end xalert_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xsettime is
port (
hour: in STD_LOGIC_VECTOR (5 downto 0);
min: in STD_LOGIC_VECTOR (6 downto 0);
sec: in STD_LOGIC_VECTOR (6 downto 0);
reset: in STD_LOGIC;
clk: in STD_LOGIC;
sel: out STD_LOGIC_VECTOR (2 downto 0);
d_out: out STD_LOGIC_VECTOR (3 downto 0)
);
end xsettime;
architecture xsettime_arch of xsettime is
signal sel1 : std_logic_vector(2 downto 0);
begin
-- <<enter your statements here>>
process(clk,reset,sel1,hour,min,sec)
begin
if reset='0' then
sel<="000";
d_out<="0000";
sel1<="000";
else
if (clk='1' and clk'event) then
if sel1<5 then
sel1<=sel1+1;
else
sel1<="000";
end if;
end if;
sel<=sel1;
case sel1 is
when "000" =>
d_out(3)<='0';
d_out(2)<='0';
d_out(1)<=hour(5);
d_out(0)<=hour(4);
when "001" =>
d_out<=hour(3 downto 0);
when "010" =>
d_out(3)<='0';
d_out(2)<=min(6);
d_out(1)<=min(5);
d_out(0)<=min(4);
when "011" =>
d_out<=min(3 downto 0);
when "100" =>
d_out(3)<='0';
d_out(2)<=sec(6);
d_out(1)<=sec(5);
d_out(0)<=sec(4);
when "101" =>
d_out<=sec(3 downto 0);
when others =>
null;
end case;
end if;
end process;
end xsettime_arch;
library IEEE;
use IEEE.std_logic_1164.all;
entity xdeled is
port (
d_in: in STD_LOGIC_VECTOR (3 downto 0);
a: out STD_LOGIC;
b: out STD_LOGIC;
c: out STD_LOGIC;
d: out STD_LOGIC;
e: out STD_LOGIC;
f: out STD_LOGIC;
g: out STD_LOGIC
);
end xdeled;
才五分啊,太少了吧
哥剛的
⑸ EDA課程設計——數字電子鍾 設計一個電子時鍾,要求可以顯示時、分、秒,用戶可以設置時間。 擴展功能:秒
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity code is
port( clk: in std_logic;--電路工作時的時鍾信號
clk1: in std_logic;--鬧鈴產生需要的時鍾信號
k: in std_logic;--高電平表示輸入1
led: out std_logic;--輸入正確時亮
led1: out std_logic;--輸入錯誤時亮
reset: in std_logic;-- 按下時復位
want: in std_logic;--是否修改密碼
alarm: out std_logic;--輸出鬧鈴聲
show: out std_logic_vector(3 downto 0));--提示作用
end;
architecture a of code is
signal temp: std_logic_vector(3 downto 0);--輸入一位加1
signal code: std_logic_vector(7 downto 0);--儲存密碼
signal getcode: std_logic_vector(7 downto 0);--儲存修改後的密碼
signal counter: std_logic_vector(3 downto 0);--計數
signal allow: std_logic;--是否允許修改密碼
signal ring:std_logic;--是否接通鬧鈴
begin
process(clk)
begin
if ring='1' then
alarm<=clk1;--鬧鈴接通
else
alarm<='0';--鬧鈴截至
end if;
if reset='1' then--按下reset後,密碼歸為初始密碼
getcode<="00000000";--初始密碼
counter<="0000";--內部計數
code<="11001000";--密碼
led<='0';
led1<='0';
allow<='0';
elsif clk'event and clk='1' then--輸入clk脈沖,則接收1位密碼
getcode<=getcode(6 downto 0)&k;--將這1位密碼並入getcode中的最後一位
if counter="1000" then--輸入為8位數碼時比較
if code=getcode then
led<='1';--正確燈亮
led1<='0';
ring<='0';
allow<='1';--允許修改密碼
elsif allow='1' and want='1' then--如果允許輸入且想輸入
code<=getcode;--輸入新密碼
led<='0';
led1<='0';
else
allow<='0';
led<='0';
led1<='1';--錯誤燈亮
ring<='1';--鬧鈴響
end if;
counter<="0000";--重新計數
else
counter<=counter+1; --累加
temp<=temp+1;--為防止泄露密碼,特別設置
end if;
end if;
show <= temp;
end process;
end;
⑹ EDA用VHDL語言描述電子秒錶設計
這樣的問題需要自己解決,不能所有的東西都找網路。自己沒有學好對自己沒有一點好處!建議還是自己去好好學習下!
⑺ EDA—VHDL—設計一個倒計時電子秒錶
初始計時25s通過tatb可以對倒計時進行設置0~99sqaqb輸出到顯示
後面接個解碼器就可以顯示ldn是調節有效位en為開始倒計時按鍵
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJSQIS
PORT(CLR,LDN,EN,CLK:INSTD_LOGIC;
TA,TB,KK:INBIT;
QA:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
QB:OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJSQ;
ARCHITECTUREARTOFJSQIS
SIGNALDA:STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALDB:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(TA,CLR)IS
BEGIN
IFCLR='1'THEN
DA<="0000";
ELSE
IFTA'EVENTANDTA='1'THEN
DA<=DA+'1';
IFDA>="1001"THENDA<="0000";
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(TB,CLR)
BEGIN
IFCLR='1'THEN
DB<="0000";
ELSE
IFTB'EVENTANDTB='1'THEN
DB<=DB+'1';
IFDB>="1001"THENDB<="0000";
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)IS
VARIABLETMPA:STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLETMPB:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFCLR='1'THENTMPA:="0101";TMPB:="0010";
ELSIFCLK'EVENTANDCLK='1'THEN
IFLDN='1'THENTMPA:=DA;TMPB:=DB;
ELSIF(EN='1'ANDKK='0')THEN
IFTMPA="0000"THEN
TMPA:="1001";
IFTMPB="0000"THENTMPB:="0010";
ELSETMPB:=TMPB-1;
ENDIF;
ELSETMPA:=TMPA-1;
ENDIF;
ENDIF;
ENDIF;
QA<=TMPA;QB<=TMPB;
ENDPROCESS;
ENDARCHITECTUREART;