簡易數(shù)字鐘設計 數(shù)電實驗考試
實驗七數(shù)字鐘的設計(考試)
時間:17周周三下午1點開始~!
一、要求:設計一個有60進制、24進制(或12進制)計數(shù)功能并通過譯碼器及七段數(shù)碼
管顯示的電路。
二、功能要求:在連續(xù)脈沖的觸發(fā)下,秒、分為60進制,時為24進制(或12進制)計數(shù),
并且要求有譯碼顯示。三、步驟:
1、設計出有6位計數(shù)、譯碼、顯示的電路圖。2、闡述設計電路的工作原理。
3、按設計電路的在實驗箱上構成實物。
4、進行功能測試,驗證其正確性,做結論、總結。四、設備及器件
數(shù)字電路實驗箱、2-5-10進制計數(shù)器、譯碼器、七段數(shù)碼管等。
74LS90引腳圖及引腳功能
74LS90計數(shù)器是一種中規(guī)模二一五進制計數(shù)器,管腳引線如圖3.6-1,功能表如表3.6-1所示。
表3.6-17490功能表
復位輸入R1R2S1S2HHL×HH×L××HHXL×LL×L×L××L×LL×QDQCQBQALLLLLLLLHLLH計數(shù)計數(shù)計數(shù)計數(shù)輸出A.將輸出QA與輸入B相接,構成8421BCD碼計數(shù)器;B.將輸出QD與輸入A相接,構成5421BCD碼計數(shù)器;C.表中H為高電平、L為低電平、×為不定狀態(tài)。
74LS90邏輯電路圖如圖3.6-1所示,它由四個主從JK觸發(fā)器和一些附加門電路組成,整個電路可分兩部分,其中FA觸發(fā)器構成一位二進制計數(shù)器;FD、FC、FB構成異步五進制計數(shù)器,在74LS90計數(shù)器電路中,設有專用置“0”端R1、R2和置位(置“9”)端S1、S2。
74LS90具有如下的五種基本工作方式:
(1)五分頻:即由FD、FC、和FB組成的異步五進制計數(shù)器工作方式。(2)十分頻(8421碼):將QA與CK2聯(lián)接,可構成8421碼十分頻電路。
(3)六分頻:在十分頻(8421碼)的基礎上,將QB端接R1,QC端接R2。其計數(shù)順序為000~101,當?shù)诹鶄脈沖作用后,出現(xiàn)狀態(tài)QCQBQA=110,利用QBQC=11反饋到R1和R2的方式使電路置“0”。
(4)九分頻:QA→R1、QD→R2,構成原理同六分頻。
(5)十分頻(5421碼):將五進制計數(shù)器的輸出端QD接二進制計數(shù)器的脈沖輸入端CK1,即可構成5421碼十分頻工作方式。
此外,據(jù)功能表可知,構成上述五種工作方式時,S1、S2端最少應有一端接地;構成五分頻和十分頻時,R1、R2端亦必須有一端接地。
實驗電路圖:
擴展閱讀:數(shù)電實驗 數(shù)字鐘
數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
數(shù)字鐘
簡介:
這是一個以EPM7128SLC84-15為軟件載體,數(shù)碼管作顯示器件,蜂鳴器作提示器件,擁有4個按鍵的電子鐘。它能夠正常計時,支持12小時和24小時兩種計時方式,同時允許用戶手動調時和設置整點報時。
在正常計時狀態(tài)下,用戶可以選擇12或24小時的計時方式,也可以設置或取消整點報時的功能(蜂鳴器作整點報時的提示設備)。同時,數(shù)碼管會有相應的顯示來指示當前電子鐘的設置。
當用戶通過按鍵進入校時狀態(tài)時,閃爍的一位數(shù)便是當前調節(jié)的數(shù);用戶可以通過按鍵選擇要調的位,并對選擇位的數(shù)字進行修改。(具體按鍵的功能說明請查閱軟件編寫部分三、2)
該電子鐘的軟件部分用VHDL編寫,編譯環(huán)境采用的是MAX+plusII.主要分為分頻、按鍵防抖動、模式控制、計時校時、顯示輸出五個模塊。(具體設計見軟件編寫部分四)
由于時間有限、作者才疏,紕漏在所難免,敬請老師指正。
關鍵字:
顯示模塊的刷新率:=顯示模塊的輸入時鐘頻率/數(shù)碼管的個數(shù);防抖動模塊的基準頻率:
按鍵操作會產(chǎn)生上升沿,只有當兩個上升沿發(fā)生在不同的基準周期時才被看作是兩次按鍵;正常計時的基準頻率:1Hz
時鐘狀態(tài):即mode,分為正常計時(mode=0)和校時(mode=1)兩個狀態(tài);12/24hour:即tm,tm=1為12小時制;tm=0為24小時制;選擇位:在校時操作時,用戶操作的當前位,可以是時分秒的低位或高位,從硬件顯示上看,就是在校時狀態(tài)下,閃爍的那一位。
硬件支持部分
硬件EPM7128SLC84-15面包板數(shù)碼管蜂鳴器按鍵電阻數(shù)量118144
軟件設計部分
數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
一、設計要求
設計并制作一臺能顯示時、分、秒的數(shù)字鐘。1、可手動校時,能分別進行時、分的校正;2、12小時(含上下午顯示)、24小時計時制可手動選擇;3、選做:整點報時。
4、選做:鬧鈴功能,當計時計到預定時間時,蜂鳴器發(fā)出鬧鈴信號,鬧鈴時間為1秒,可提前終止鬧鈴。
5、選做:自擬其它功能。二、程序編寫方案比較與選擇
方案一:
將所有功能設計好,程序結構制定完備后,將代碼寫入一個或幾個文件里。
出發(fā)點:數(shù)字鐘不是非常大的程序,該方案增大了軟件的集成度與專用性,減少了處理過程中的中轉信號或變量所占用的空間;方案二:
將程序模塊化,各模塊提供相應的接口,一個模塊一個文件。
出發(fā)點:1)考慮到EPM7128SLC84-15的空間問題,有些功能可能會因其容量的限制而被撤銷,如果將代碼一次性寫在一個文件里,在刪除某些功能時,必將會牽扯到一些共用信號或變量的賦值問題。
2)模塊化的程序便于調試
比較:方案一適合于程序設計完成后,(使用專用芯片)投入批量生產(chǎn)前的集成階段;方案二更適合于開發(fā)、編寫階段;故選擇方案二。三、總體設計
1.總體思路
1)軟件功能設計
1)實現(xiàn)基本功能正常計時,手動校時(能分別進行時、分的校正)2)實現(xiàn)基本附加功能12/24小時制的手動選擇,采用12小時制時有上下
午標記;
3)根據(jù)資源占用狀況選擇實現(xiàn)選擇功能整點報時,鬧鈴等2)對外設的說明:
1)8個數(shù)碼管
左一指示整點報時是否設置,若已設置則中間的一橫會亮,否則不亮;左二指示12小時制下的上下午,以字母A、P表示剩下的六個從左向右依次為時分秒的高低位2)4個按鍵
Key1:模式選擇按鍵,使時鐘狀態(tài)在正常計時和校時狀態(tài)之間變換;Key2:功能1:校時狀態(tài)下,選擇用戶想要操作的位;功能2:正常計時狀態(tài)下,設置或取消整點報時共能;Key3:校時狀態(tài)下,按一次給當前選擇位的數(shù)字加一;Key4:在正常計時狀態(tài)下,選擇12/24小時制;3)一個蜂鳴器
在整點報時功能設置的狀態(tài)下,在整點時刻鳴叫一秒。
3)程序結構設計
數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
Clk分頻模塊Clk1Clk2Clk0按鍵輸入防抖動模塊脈沖時間處理模塊顯示待顯示內容模塊顯示輸出
2.細化模塊
1)總輸入輸出:
Input:keyx(x=1~4)功能在上一小節(jié)中已說明
output:時分復用的選擇信號SEL[7..0]:選擇對哪個數(shù)碼管進行控制
段選擇信號F[7..0]控制某數(shù)碼管的那些段顯亮。
2)分頻模塊細化:三個模塊(fenpinx)分別產(chǎn)生ck0,ck1,ck2,用途如上;3)防抖動模塊細化:在每個按鍵后加一個防抖動模塊(fangdoudong)(一共4個);4)時間處理模塊細化:模式控制(modectrl)和計時校時(clock_mode0);5)顯示模塊:提供相應借口,輸出塊選擇、段選擇信號。
四、
具體模塊設計
1.分頻模塊:(EPM7128SLC84-15的時鐘頻率為1Mhz)
數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
FENPIN0:將clk(1MHz)分頻得到ck0(1kHz),用作顯示模塊的刷新率;FENPIN1:將ck0(1kHz)分頻得到ck1(20Hz),用作防抖動模塊的基準頻率;FENPIN2:將ck1(20Hz)分頻得到ck2(1Hz),用作正常計時的基準頻率;Input:待分頻信號output:分頻后的信號(fi>fo)
基本原理:通過對輸入信號上升沿個數(shù)的計數(shù),周期性地翻轉輸出信號,從而實現(xiàn)對輸入信號的分頻。程序代碼如下:
FENPIN0libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;--必要的庫文件
entityfenpin0is
port(clk:instd_logic;--輸入cpo:outstd_logic);--輸出端口end;
architectureaoffenpin0is
signalcp:std_logic;--針對輸出的信號begin
process(clk)
variablei1:integerrange0to50;
variablei2:integerrange0to10;--i1max*i2max來計算多少個原周期就是半個新周期begin
if(clk"eventandclk="1")theni1:=i1+1;if(i1=50)theni1:=0;i2:=i2+1;if(i2=10)theni2:=0;cp數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
port(clk:instd_logic;--待分頻的輸入cpo:outstd_logic);--輸出端口end;
architectureaoffenpin1is
signalcp:std_logic;--針對輸出的信號begin
process(clk)
variablei:integerrange0to24;begin
if(clk"eventandclk="1")thenif(i=24)theni:=0;
cp數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
endif;
endprocess;cpo數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
Input:kx:按鍵x產(chǎn)生的脈沖;
Output:mode-輸出對時鐘狀態(tài)(計時or校時)的選擇信號0為計時,1為校時tm-輸出選擇12/24制式的信號;0為24hour;1為12hourock-輸出選擇整點報時的選擇信號;0-無整點報時;1-有整點報時程序代碼如下:libraryieee;
useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;--必要的庫文件
entitymodectrlis
port(k1:instd_logic;--按鍵1產(chǎn)生的脈沖輸入k4:instd_logic;--按鍵4產(chǎn)生的脈沖輸入k2:instd_logic;--按鍵2產(chǎn)生的脈沖輸入k1out,k4out:outintegerrange0to1;
--k1out控制計時校時的模式選擇;k4out控制12/24hour制式選擇ock:outstd_logic--正點報時選擇);
endmodectrl;
architectureaofmodectrlis
signalk1o,k4o:integerrange0to1;--針對k1out,k4out的信號signalko:std_logic:="0";--針對ock的信號begin
p1:--k1按一次k1out在0,1之間變一次process(k1)begin
if(k1"eventandk1="1")thenk1o數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
process(k4)begin
if(k4"eventandk4="1")thencasek4oiswhen0=>k4ok4o數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
所以在校時狀態(tài)下,將p1的時鐘頻率改為1kHz,這個頻率遠遠高于手動按鍵的極限頻率,所以可以及時將改動的時間信號傳遞給顯示模塊,使得顯示的數(shù)字連續(xù)變動。并且1kHz是顯示模塊的刷新率控制信號,直接拿來使用避免了在此分頻,減少了模塊的資源占用量。2)對12/24小時制的說明
12小時制:AM00:00:00---AM11:59:59;PM12:00:00---PM11:59:5924小時制:00:00:00---23:59:59注:12小時制的一個細節(jié):晚上的12點稱0點,且為am;中午的12點是12點pm。
程序代碼如下:libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;--調用需要的庫文件
entityclock_mode0is--計時與校時模塊port(ck,ck1k:instd_logic;
--ck:f=1Hz用于正常計時ck1k:f=1kHz高于手動按鍵的極限頻率,使得時間在進行校準時--變化連續(xù)
k2,k3:instd_logic;
--k2:校時選位按鍵,可依次選擇秒、分、時的高低位,k3:在校時進程中對當前選擇位加1mode:inintegerrange0to1;--時鐘處于什么狀態(tài)0:計時;1:校時
tm:inintegerrange0to1;--計時采取的是哪種方式1:12hour;0:24hourock:instd_logic;--整點報時是否設置1-設置狀態(tài)0-取消狀態(tài)
hourh:outintegerrange0to2;--小時高位hourl:outintegerrange0to9;--小時低位minh:outintegerrange0to5;--分鐘高位minl:outintegerrange0to9;--分鐘低位sech:outintegerrange0to5;--秒高位secl:outintegerrange0to9;--秒低位
bee:outstd_logic;--蜂鳴器輸出:1-鳴叫;0-不鳴叫
ampm:outstd_logic;--上下午指示輸出:1-下午;0-上午--下面的輸出在本模塊中為校時設計shan:outstd_logic;
--(通知顯示模塊)選擇位是否閃爍:不閃爍狀態(tài)-賦值為"1";閃爍狀態(tài)-賦值為ck;position:outintegerrange0to5--(通知顯示模塊)現(xiàn)在對哪一位進行校準);
--shan使得時鐘處于校時狀態(tài)時選擇位閃爍end;
architectureaofclock_mode0issignalhh1,hh2:integerrange0to2;signalhl1,hl2:integerrange0to9;
數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
signalmh1,mh2:integerrange0to5;signalml1,ml2:integerrange0to9;signalsh1,sh2:integerrange0to5;signalsl1,sl2:integerrange0to9;--對上面12個信號的說明
--hh:時高位hl:時低位mh:分高位ml:分低位sh:秒高位sl:秒低位--后綴:1-該信號為計時進程設計2-該信號為校時進程設計signalclk:std_logic;--計時進程的時鐘signalap:std_logic;--上下午指示信號
signalpos:integerrange0to5;--選擇位指示信號
begin
--對以下5個進程的說明:--p0o:對p1的時鐘clk賦值
--p0:判斷當前時鐘狀態(tài)并對閃爍指示輸出shan賦值
--p1:整個模塊(clock_mode0)的核心;既是正常計時進程,又負責模塊輸出(正確的信號to--輸出端口)
--p2:在校時狀態(tài)下,判斷選位信號k2是否有上升沿以對選位輸出position作修改--p3:校時進程p0o:processbegin
casemodeis
when0=>clkclk數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
when1=>
hh1數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
when3=>hourh數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
minl數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
if(ml2=9)thenml2數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
elsehh2casehh2iswhen0=>hh2hh2null;endcase;endcase;--結束對時低位的判斷endcase;--結束對選擇位的判斷endif;--endthecontrolof"mode=1"endif;--endthecontrolofk3endprocess;enda;
5.顯示模塊
Input:ck0:刷新率控制信號(刷新率=fck0/數(shù)碼管的個數(shù)=1000/8=125Hz穩(wěn)定)num0num5對應秒低位、秒高位、分低位、分高位、時低位、時高位信號;pos[2..0]為校時的選擇位輸入tm為12(1)/24(0)小時制選擇輸入;shan為選擇位閃爍控制信號;ock為整點報時設置與(1)否(0)輸入;ampm:上(0)下(1)午狀態(tài)輸入;output:F為數(shù)碼管段選擇信號;SEL為時分復用的選擇信號。程序代碼如下:libraryieee;
useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;--必要的庫文件
entitydisplay1isport(clk:inbit;
數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
num5:inintegerrange0to2;--hourhighnum4:inintegerrange0to9;--hourlownum3:inintegerrange0to5;--minutehignnum2:inintegerrange0to9;--minutelownum1:inintegerrange0to5;--secondhighnum0:inintegerrange0to9;--secondlowpos:inintegerrange0to5;--校時狀態(tài)下的選擇位tm:inintegerrange0to1;--12(1)or24(0)制式指示shan:instd_logic;--閃爍指示ock:instd_logic;--正點報時是(1)否(0)設置指示ampm:instd_logic;--上(0)下(1)午指示f:outstd_logic_vector(7downto0);--控制一個數(shù)碼管哪段亮的段選擇輸出sel:outstd_logic_vector(7downto0)--時分復用的選擇信號);end;
architecturebofdisplay1is
functionnumtodis(num:inintegerrange0to9)returnstd_logic_vectoris--譯碼函數(shù)variablefig:std_logic_vector(7downto0);begin
casenumis
WHEN0=>fig:="01111110";WHEN1=>fig:="00011000";WHEN2=>fig:="01101101";WHEN3=>fig:="00111101";WHEN4=>fig:="00011011";WHEN5=>fig:="00110111";WHEN6=>fig:="01110111";WHEN7=>fig:="00011100";WHEN8=>fig:="01111111";WHEN9=>fig:="00111111";endcase;--完成0-9的譯碼return(fig);endnumtodis;
signali:integerrange0to7;begin
p1:--以一個變量i來指示現(xiàn)在對那個數(shù)碼管進行操作process(clk)begin
if(clk"eventandclk="1")theni數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
p2:process
variabledis:std_logic_vector(7downto0);--針對段選擇輸出的變量variablenum:integerrange0to9;--用來提取時分秒輸入的中間變量begin
CASEiIS
WHEN0=>selselselselselselselseldis:=numtodis(1);when2=>dis:=numtodis(2);when3=>dis:=numtodis(3);when4=>dis:=numtodis(4);when5=>dis:=numtodis(5);when6=>dis:=numtodis(6);when7=>dis:=numtodis(7);when8=>dis:=numtodis(8);when9=>dis:=numtodis(9);
數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
endcase;endif;
if(shan="0")thenif(pos=i)thendis:="00000000";endif;endif;
--在校時狀態(tài)下shan是1Hz的方波
--對于選擇位指示的數(shù)碼管shan為1時亮,shan為0則不亮
if(i=2ori=4)thendis(7):="1";
endif;--只有用來顯示分低位和時低位的數(shù)碼管的小數(shù)點要亮,用來區(qū)分時分秒
f數(shù)字電路與邏輯設計綜合實驗題目數(shù)字鐘0213106班代聞19號
感謝老師孜孜不倦的教誨!
友情提示:本文中關于《簡易數(shù)字鐘設計 數(shù)電實驗考試》給出的范例僅供您參考拓展思維使用,簡易數(shù)字鐘設計 數(shù)電實驗考試:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。