第一篇:多功能數(shù)字鐘設(shè)計
課程設(shè)計任務(wù)書
課程設(shè)計名稱學(xué)生姓名專業(yè)班級設(shè)計題目多功能數(shù)字鐘設(shè)計
一、課程設(shè)計目的1、綜合運(yùn)用EDA技術(shù),獨(dú)立完成一個課題的設(shè)計,考察運(yùn)用所學(xué)知識,解決實際問題的能力;
2、結(jié)合理論知識,考察閱讀參考資料、文獻(xiàn)、手冊的能力;
3、進(jìn)一步熟悉EDA技術(shù)的開發(fā)流程,掌握文件編輯、編譯、仿真、下載驗證等環(huán)節(jié)的實現(xiàn)方法和
應(yīng)用技巧;
4、鍛煉撰寫研究報告、研究論文的能力;
5、通過本實踐環(huán)節(jié),培養(yǎng)科學(xué)和嚴(yán)謹(jǐn)?shù)墓ぷ髯黠L(fēng)。
二、設(shè)計內(nèi)容、技術(shù)條件和要求
l、能進(jìn)行正常的時、分、秒計時功能,分別由6個數(shù)碼顯示24小時、60分鐘的計數(shù)器顯示。
2、能利用實驗系統(tǒng)上的按鈕實現(xiàn)“校時”、“校分”功能;
(1)按下“SA”鍵時,計時器迅速遞增,并按24小時循環(huán);
(2)按下“SB”鍵時,計時器迅速遞增,并按59分鐘循環(huán),并向“時”進(jìn)位;
(3)按下“SC”鍵時,秒清零;抖動的,必須對其消抖處理。
3、能利用揚(yáng)聲器做整點報時:
(1)當(dāng)計時到達(dá)59’50”時開始報時,頻率可為500Hz;
計滿23小時后回零;計滿59分鐘后回零。
(2)到達(dá)59’59”時為最后一聲整點報時,整點報時的頻率可定為lKHz。
4定時鬧鐘功能
5、用層次化設(shè)計方法設(shè)計該電路,用硬件描述語言編寫各個功能模塊。
6、報時功能。報時功能用功能仿真的仿真驗證,可通過觀察有關(guān)波形確認(rèn)電路設(shè)計是否正確。
三、時間進(jìn)度安排
1周:(1)完成設(shè)計準(zhǔn)備,確定實施方案;(2)完成電路文件的輸入和編譯;(4)完成功能仿真。
2周:(1)完成文件至器件的下載,并進(jìn)行硬件驗證;(2)撰寫設(shè)計說明書。
四、主要參考文獻(xiàn)
(1)譚會生、瞿遂春,《EDA技術(shù)綜合應(yīng)用實例與分析》,西安電子科技大學(xué)出版社,2004
(2)曹昕燕、周鳳臣等,《EDA技術(shù)實驗與課程設(shè)計》,清華大學(xué)出版社,2006
指導(dǎo)教師簽字:2012年9月1日
第二篇:多功能數(shù)字鐘
課程設(shè)計任務(wù)書
學(xué)生姓名:專業(yè)班級:指導(dǎo)教師:工作單位:題目:多功能數(shù)字鐘的設(shè)計與實現(xiàn)初始條件:
本設(shè)計既可以使用集成譯碼器、計數(shù)器、定時器、脈沖發(fā)生器和必要的門電路等,也可以使用單片機(jī)系統(tǒng)構(gòu)建多功能數(shù)字鐘。用數(shù)碼管顯示時間計數(shù)值。
要求完成的主要任務(wù):(包括課程設(shè)計工作量及技術(shù)要求,以及說明書撰寫等具體要求)
1、課程設(shè)計工作量:1周。
2、技術(shù)要求:
1)設(shè)計一個數(shù)字鐘。要求用六位數(shù)碼管顯示時間,格式為00:00:00。
2)具有60進(jìn)制和24進(jìn)制(或12進(jìn)制)計數(shù)功能,秒、分為60進(jìn)制計數(shù),時為24進(jìn)制(或12進(jìn)制)計數(shù)。
3)有譯碼、七段數(shù)碼顯示功能,能顯示時、分、秒計時的結(jié)果。
4)設(shè)計提供連續(xù)觸發(fā)脈沖的脈沖信號發(fā)生器,5)具有校時單元、鬧鐘單元和整點報時單元。
6)確定設(shè)計方案,按功能模塊的劃分選擇元、器件和中小規(guī)模集成電路,設(shè)計分電路,畫出總體電路原理圖,闡述基本原理。
3、查閱至少5篇參考文獻(xiàn)。按《******大學(xué)課程設(shè)計工作規(guī)范》要求撰寫設(shè)計報告書。全文用A4紙打印,圖紙應(yīng)符合繪圖規(guī)范。
時間安排:
1、年月
2、年月日,方案選擇和電路設(shè)計。
3、年月日,電路調(diào)試和設(shè)計說明書撰寫。
4、年月
指導(dǎo)教師簽名:年月日 系主任(或責(zé)任教師)簽名:年月日
第三篇:多功能數(shù)字鐘課程設(shè)計
多功能數(shù)字鐘
朱安煙
(安陽師范學(xué)院 物電學(xué)院, 河南 安陽 455002)
摘要:時鐘相比具有更高的準(zhǔn)確性和直觀性
因此得到了更加廣泛的使用。數(shù)字鐘從原理上講是一種典型的數(shù)字電路,其中
本設(shè)計采用六位LED
24小時計時方式根據(jù)數(shù)碼管動態(tài)顯示原理來進(jìn)行顯示。用晶振產(chǎn)生振蕩脈加以分頻得到所需的鐘表秒脈沖,利用純數(shù)字電路,實現(xiàn)數(shù)字電子時鐘功能,時間重置功能。此次數(shù)字鐘的理圖設(shè)計,PCB圖的制作主要是基于altium designer軟件,利用proteus7.7軟件進(jìn)行仿真,最終本設(shè)計實現(xiàn)24小時的時鐘計時、時間重置功能。
關(guān)鍵詞:LED數(shù)碼管
時序電路
邏輯電路
時鐘
校時引言
僅向。方案論證:
2.1方案一
由于是數(shù)字鐘的設(shè)計,可以用單片機(jī)AT89C51來實現(xiàn)計數(shù)功能,相對于純數(shù)字電路來講它具有功耗低、體積小、使用方便等優(yōu)點。但在大二下半學(xué)期初期,對單片機(jī)方面的內(nèi)容知識還不夠完善,加上用單片機(jī)為核心來做數(shù)字鐘還需做編程,對自身來說又是一難點。不過此法可以待以后,學(xué)習(xí)知識完善后再考慮。
2.2 方案二
繼而考慮到用原先學(xué)過的純數(shù)字電路來做,以74Ls160來做為計數(shù)的芯片,用六片分別實現(xiàn) 數(shù)字鐘的小時、分、秒、的計數(shù),并用晶振加以分頻產(chǎn)生數(shù)字鐘所需的秒脈沖。
從以上兩種方案,很容易看出,采用方案二,用此法做即可以復(fù)習(xí)回顧早期學(xué)習(xí)的數(shù)電模電知識,又避免了單片機(jī)知識不足的問題,故用此法。結(jié)果與討論
3.1.1數(shù)字鐘主要計數(shù)芯片為74ls160其引腳圖如下:
這種同步可預(yù)置十進(jìn)計數(shù)器是由四個D型觸發(fā)器和若干個門電路構(gòu)成,內(nèi)部有超前進(jìn)位,具有計數(shù)、置數(shù)、禁止、直接(異步)清零等功能。對所有觸發(fā)器同時加上時鐘,使得當(dāng)計數(shù)使能輸入和內(nèi)部門發(fā)出指令時輸出變化彼此協(xié)調(diào)一致而實現(xiàn)同步工作。這種工作方式消除了非同步(脈沖時鐘)計數(shù)器中常有的輸出計數(shù)尖峰。緩沖時鐘輸入將在時鐘輸入上升沿觸發(fā)四個觸發(fā)器。這種計數(shù)器是可全編程的,即輸出可預(yù)置到任何電平。當(dāng)預(yù)置是同步時,在置數(shù)輸入上將建立一低電平,禁止計數(shù),并在下一個時鐘之后不管使能輸入是何電平,輸出都與建立數(shù)據(jù)一致。清除是異步的(直接清零),不管時鐘輸入、置數(shù)輸入、使能輸入為何電平,清除輸入端的低電平把所有四個觸發(fā)器的輸出直接置為低電平。超前進(jìn)位電路無須另加門,即可級聯(lián)出n位同步應(yīng)用的計數(shù)器。它是借助于兩個計數(shù)使能輸入和一個動態(tài)進(jìn)位輸出來實現(xiàn)的。兩個計數(shù)使能輸入(ENP和ENT)計數(shù)時必須是高電平,且輸入ENT必須正反饋,以便使能動態(tài)進(jìn)位輸出。因而被使能的動態(tài)進(jìn)位輸出將產(chǎn)生一個高電平輸出脈沖,其寬度近似等于QA輸出高電平。此高電平溢出進(jìn)位脈沖可用來使能其后的各個串聯(lián)級。使能ENP和ENT輸入的跳變不受時鐘輸入的影響。電路有全獨(dú)立的時鐘電路。改變工作模式的控制輸入(使能ENP、ENT或清零)縱使發(fā)生變化,直到時鐘發(fā)生為止,都沒有什么影響。計數(shù)器的功能(不管使能、不使能、置數(shù)或計數(shù))完全由穩(wěn)態(tài)建立時間和保持時間所要求的條件來決定。
管腳說明: CLR:清零復(fù)位端
當(dāng)輸入為低電平時有效
CLK:時鐘信號接收端
A~D:讀入
QA~QD:輸出
ENT、ENP置一時芯片正常工作
LOAD:置數(shù)端
RCO:信號輸出端
GND:接地
Vcc:接高
工作方式:
3.1.2 7段LED數(shù)碼管
3.1.3 32.768KHZ晶振
32.768KHZ是一個標(biāo)準(zhǔn)的頻率,晶振頻率的應(yīng)用主要有以下幾個方面的參數(shù):尺寸、負(fù)載電容、頻率偏差、應(yīng)用范圍。按尺寸外形來分主要分為插件和貼片的;插件的主要有2*
6、3*
8、49s 等,貼片的就有很多種了,跟據(jù)各公司的設(shè)計可的型號有很多,例如:日本KDS晶振就有49SMD、DST310S、SM—14J、DST520、DST410S等。
3.1.4 CD4060分頻器
CD4060由一振蕩器和14級二進(jìn)制串行計數(shù)器位組成,振蕩器的結(jié)構(gòu)可以是RC或晶振電路,CR為高電平時,計數(shù)器清零且振蕩器使用無效。所有的計數(shù)器位均為主從觸發(fā)器。在CP1(和CP0)的下降沿計數(shù)器以二進(jìn)制進(jìn)行計數(shù)。在時鐘脈沖線上使用斯密特觸發(fā)器對時鐘上升和下降時間無限制 引腳功能:
/CP1:時鐘輸入端
/CP0:時鐘輸出端
/CP0:反相時鐘輸出端
Q4~Q10,Q12~Q14:計數(shù)器輸出端
/Q14:第14級計數(shù)器反相輸出端
VDD:電源正
VSS:電源負(fù)
CR:清零端 3.1.5 74ls48
功能介紹:
74LS48除了有實現(xiàn)7段顯示譯碼器基本功能的輸入(DCBA)和輸出(Ya~Yg)端外,7448還引入了燈測試輸入端(LT)和動態(tài)滅零輸入端(RBI),以及既有輸入功能又有輸出功能的消隱輸入/動態(tài)滅零輸出(BI/RBO)端。
由7448真值表可獲知7448所具有的邏輯功能:
(1)7段譯碼功能(LT=1,RBI=1)
在燈測試輸入端(LT)和動態(tài)滅零輸入端(RBI)都接無效電平時,輸入DCBA經(jīng)7448譯碼,輸出高電平有效的7段字符顯示器的驅(qū)動信號,顯示相應(yīng)字符。除DCBA = 0000外,RBI也可以接低電平,見表1中1~16行。
(2)消隱功能(BI=0)
此時BI/RBO端作為輸入端,該端輸入低電平信號時,表1倒數(shù)第3行,無論LT 和RBI輸入什么電平信號,不管輸入DCBA為什么狀態(tài),輸出全為“0”,7段顯示器熄滅。該功能主要用于多顯示器的動態(tài)顯示。
(3)燈測試功能(LT = 0)
此時BI/RBO端作為輸出端,端輸入低電平信號時,表1最后一行,與 及DCBA輸入無關(guān),輸出全為“1”,顯示器7個字段都點亮。該功能用于7段顯示器測試,判別是否有損壞的字段。
(4)動態(tài)滅零功能(LT=1,RBI=1)
此時BI/RBO端也作為輸出端,LT 端輸入高電平信號,RBI 端輸入低電平信號,若此時DCBA = 0000,表1倒數(shù)第2行,輸出全為“0”,顯示器熄滅,不顯示這個零。DCBA≠0,則對顯示無影響。該功能主要用于多個7段顯示器同時顯示時熄滅高位的零。
3.2 原理設(shè)計
整體電路設(shè)計方案:
3.2.1 振蕩電路設(shè)計
振蕩電路由振蕩器產(chǎn)生的脈沖,振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精度決定了數(shù)字鐘的精確程度,次處有555定時器和晶振兩種產(chǎn)生秒脈沖的方法:555振蕩器做振蕩源一般用于精確度要求不高的場合,由門電路組成的多諧振蕩器的振蕩周期不僅與時間常數(shù)RC有關(guān),而且還取決于門電路的閾值電壓VTH,由于VTH容易受到溫度、電源電壓及干擾的影響,因此頻率穩(wěn)定性較差,只能用于對頻率穩(wěn)定性要求不高的場合??紤]到振蕩頻率的精確度與穩(wěn)定性固采用晶振做為振蕩源來實現(xiàn)振蕩電路,得時鐘脈沖更穩(wěn)定,時間走的更準(zhǔn)37.268KHz晶振 通過cd4060分頻器進(jìn)行十四分頻得到0.5s的脈沖信號,再進(jìn)行一個SN74LS74進(jìn)行二分頻得到所需的秒脈沖信號:
3.2.2 校時電路設(shè)計
根據(jù)電路設(shè)計所知需要在分處和小時處需要校時,分別在分和時個位向十位進(jìn)位處各加一開關(guān),另一端接地并且在與地之間接100pf電容為防止按鍵抖動。
電路設(shè)計如下:
當(dāng)開關(guān)處于自然位置時分十位clk端所接為高電平,當(dāng)開關(guān)按下時則引入一低電平實其clk端有一個下降沿脈沖接入,使其產(chǎn)生了校時功能。
3.2.3顯示電路設(shè)計
顯示電路是用74ls48驅(qū)動七段共陰數(shù)碼管來作為時鐘顯示器。
電路設(shè)計如下:
3.2.4 計時電路設(shè)計
數(shù)字鐘的秒和分位都是從0到60循環(huán)計數(shù)的,所以可以用用異步清零法設(shè)計60進(jìn)制計數(shù)器作為秒和分的計數(shù)器。用異步置數(shù)法設(shè)計小時所用的24進(jìn)制計數(shù)器。秒、分位設(shè)計電路如下:
3.3 程序調(diào)試過程
在板子焊接好以后通上5V電源發(fā)現(xiàn)六Led燈只有三個能完整亮出來,其余的都不亮或是亮的不全,而且秒位不走,校時按鍵不管用。問題很多。
開始調(diào)試:
1、首先調(diào)試的是秒位為何不走,先測晶振石否起振,測量后發(fā)現(xiàn)晶振正常起振,然后從74ls160的clk端用示波器測試一下沒有脈沖信號輸入,則找74ls74的輸出口也無脈沖,以次往前推,最后測量出從74ls74輸入端有正確的脈沖輸入,輸出端卻無脈沖輸出。觀察后沒有連接錯誤,故用萬用表測vcc.end端都有正確的電平接入,再測量兩點間是否有漏焊現(xiàn)象,最后測出一處漏焊點使D端與Q端沒有接通。重新焊接后秒位正常計時。
2、秒位正常計時,但向秒的十位進(jìn)位時總是顯示從8到19,查閱資料可知,在第一個160芯片到第二個160芯片中缺一個非門,充當(dāng)延時作用,使個位計數(shù)到9再來一個脈沖下計數(shù)時再向前進(jìn)位。加上非門進(jìn)位正常了。
3、秒位向分位進(jìn)位正常,但校時按鍵不能用,且分位向十分位不能進(jìn)位,通過觀察焊接對比原理圖與pcb圖后發(fā)現(xiàn),開關(guān)接地的一端弄反了,應(yīng)是開關(guān)與接電容端相側(cè)對著的端接地。這個錯誤導(dǎo)致開關(guān)不能用,亦使分的十位端的74ls160芯片clk段一直接了地,故不能使其正常進(jìn)位。修改過后則可以正常進(jìn)位,且兩開關(guān)都能用了。
4、顯示小時位的第一個數(shù)碼管一直不亮,通過測量發(fā)現(xiàn)led數(shù)碼管沒有燒壞,能正常工作,通過對比PCB圖觀察沒有焊接錯誤,用萬用表測量則發(fā)現(xiàn)驅(qū)動次led的74ls48管沒有正常接地,連接跳線處有一虛焊,重新焊接后恢復(fù)正常。
5、但分向小時不能進(jìn)位,由示波器觀察發(fā)現(xiàn)74ls160芯片clk端無脈沖輸入,但十分位有脈沖輸出,且導(dǎo)線也導(dǎo)通了,就觀察原理圖發(fā)現(xiàn)原理圖一處錯誤,分向時進(jìn)位時是分滿60向前進(jìn)一個脈沖,故分的TC端不用再接到時的CLK端了。找到錯誤后用鑷子將板上的銅線劃段,則正常進(jìn)位了。
6、小時進(jìn)位正常但顯示的不是24進(jìn)制,顯示的是44進(jìn)制,則推測可能是跳線連接錯誤,將顯示小時的十位 74ls160芯片接B端連接成接C端了,故使其顯示44進(jìn)制,通過觀察、對比pcb圖,最后發(fā)現(xiàn)果然如此。修改過后小時為正常24進(jìn)制了。
7、最后一個數(shù)碼管有三段老是不亮,觀察連接沒有錯誤,測量焊接也正常,最后用萬用表測量發(fā)現(xiàn)芯片沒有問題,那三段不亮的數(shù)碼管燒了。
8、調(diào)試好后在后來的觀察中發(fā)現(xiàn)從秒向分進(jìn)位時有時一下進(jìn)兩位,自己找不出來原因。問過老師后,老師說是由于防抖電容所致。嘗試著將電容先劃斷試了一下就沒有那種情況了。但此時校時開關(guān)由于抖動緣故,按一下有時跳3、4個位,校時不穩(wěn)定了。結(jié)論
此數(shù)字鐘相對于機(jī)械鐘來說有低功耗,高精度,數(shù)字化顯示和不易損壞等特點。符合人們?nèi)粘<揖蛹稗k公對鐘表的要求,可以作為家居、辦公等用表。
參考文獻(xiàn)
[1] 佘新平數(shù)學(xué)電子技術(shù)基礎(chǔ) 華中科技大學(xué)出版社 2009年
[2] 許樹玲 丁電寬 王晉 電子技術(shù)及實驗 內(nèi)蒙古大學(xué)出版社2005年
[3] 佘新平數(shù)字電路設(shè)計·仿真·測試 華中大學(xué)出版社 2010年
附圖: 電路原理圖:
第四篇:多功能數(shù)字鐘的設(shè)計080707
課程設(shè)計任務(wù)書
學(xué)生姓名:專業(yè)班級:電子科學(xué)與技術(shù)0601班 指導(dǎo)教師:吳友宇工作單位:信息工程學(xué)院題目:多功能數(shù)字鐘的設(shè)計初始條件:
本設(shè)計既可以使用集成譯碼器、計數(shù)器、定時器、脈沖發(fā)生器和必要的門電路等。本設(shè)計也可以使用單片機(jī)系統(tǒng)構(gòu)建多功能數(shù)字鐘。用數(shù)碼管顯示時間計數(shù)值。
要求完成的主要任務(wù):(包括課程設(shè)計工作量及技術(shù)要求,以及說明書撰寫等具體要求)
1、課程設(shè)計工作量:1周。
2、技術(shù)要求:
① 設(shè)計一個數(shù)字鐘。要求用六位數(shù)碼管顯示時間,格式為00:00:00。
②具有60進(jìn)制和24進(jìn)制(或12進(jìn)制)計數(shù)功能,秒、分為60進(jìn)制計數(shù),時為24進(jìn)制(或12進(jìn)制)計數(shù)。
③有譯碼、七段數(shù)碼顯示功能,能顯示時、分、秒計時的結(jié)果。
④設(shè)計提供連續(xù)觸發(fā)脈沖的脈沖信號發(fā)生器,⑤具有校時單元、鬧鐘單元和整點報時單元。
⑥確定設(shè)計方案,按功能模塊的劃分選擇元、器件和中小規(guī)模集成電路,設(shè)計分電路,畫出總體電路原理圖,闡述基本原理。
3、查閱至少5篇參考文獻(xiàn)。按《武漢理工大學(xué)課程設(shè)計工作規(guī)范》要求撰寫設(shè)計報告書。全文用A4紙打印,圖紙應(yīng)符合繪圖規(guī)范。
時間安排:
1、月
2、月
2、月至月
2、月至月日,電路調(diào)試和設(shè)計說明書撰寫。
3、月
課設(shè)答疑地點:鑒主14樓電子科學(xué)與技術(shù)實驗室。
指導(dǎo)教師簽名:年月日
系主任(或責(zé)任教師)簽名:年月日
第五篇:基于VHDL的多功能數(shù)字鐘設(shè)計報告
基于VHDL的多功能數(shù)字鐘
設(shè)計報告
021215班 衛(wèi)時章 02121451
一、設(shè)計要求
1、具有以二十四小時制計時、顯示、整點報時、時間設(shè)置和鬧鐘的功能。
2、設(shè)計精度要求為1秒。
二、設(shè)計環(huán)境:Quartus II
三、系統(tǒng)功能描述
1、系統(tǒng)輸入:時鐘信號clk采用50MHz;系統(tǒng)狀態(tài)及較時、定時轉(zhuǎn)換的控制信號為k、set,校時復(fù)位信號為reset,均由按鍵信號產(chǎn)生。
2、系統(tǒng)輸出:LED顯示輸出;蜂鳴器聲音信號輸出。
3、多功能數(shù)字電子鐘系統(tǒng)功能的具體描述如下:
(一)計時:正常工作狀態(tài)下,每日按24h計時制計時并顯示,蜂鳴器無聲,逢整點報時。
(二)校時:在計時顯示狀態(tài)下,按下“k”鍵,進(jìn)入“小時”待校準(zhǔn)狀態(tài),若此時按下“set”鍵,小時開始校準(zhǔn);之后按下“k”鍵則進(jìn)入“分”待校準(zhǔn)狀態(tài);繼續(xù)按下“k”鍵則進(jìn)入“秒”待復(fù)零狀態(tài);再次按下“k”鍵數(shù)碼管顯示鬧鐘時間,并進(jìn)入鬧鐘“小時”待校準(zhǔn)狀態(tài);再次按下“k”鍵則進(jìn)入鬧鐘“分”待校準(zhǔn)狀態(tài);若再按下“k”鍵恢復(fù)到正常計時顯示狀態(tài)。若校時過程中按下“reset”鍵,則系統(tǒng)恢復(fù)到正常計數(shù)狀態(tài)。(1)“小時”校準(zhǔn)狀態(tài):在“小時”校準(zhǔn)狀態(tài)下,顯示“小時”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數(shù)。(2)“分”校準(zhǔn)狀態(tài):在“分”校準(zhǔn)狀態(tài)下,顯示“分”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數(shù)。(3)“秒”校準(zhǔn)狀態(tài):在“秒復(fù)零”狀態(tài)下,顯示“秒”的數(shù)碼管以2Hz閃爍,并以1Hz的頻率遞增計數(shù)。
(4)鬧鐘“小時”校準(zhǔn)狀態(tài):在鬧鐘“小時”校準(zhǔn)狀態(tài)下,顯示“小時”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數(shù)。
(5)鬧鐘“分”校準(zhǔn)狀態(tài):在鬧鐘“分”校準(zhǔn)狀態(tài)下,顯示“分”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數(shù)。
(三)整點報時:蜂鳴器在“59”分鐘的第“51”、“53”、“55”、“57”秒發(fā)頻率為500Hz的低音,在“59”分鐘的第“59”秒發(fā)頻率為1000Hz的高音,結(jié)束時為整點。
(四)顯示:采用掃描顯示方式驅(qū)動4個LED數(shù)碼管顯示小時、分,秒由兩組led燈以4位BCD 碼顯示。
(五)鬧鐘:鬧鐘定時時間到,蜂鳴器發(fā)出頻率為1000Hz的高音,持續(xù)時間為60秒。
四、各個模塊分析說明
1、分頻器模塊(freq.vhd)(1)模塊說明:輸入一個頻率為50MHz的CLK,利用計數(shù)器分出 1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity freq is
port
(CLK: in std_logic;
--輸入時鐘信號
q1KHz: buffer std_logic;
q500Hz: buffer std_logic;
q2Hz: buffer std_logic;
q1Hz: out std_logic);end freq;
architecture bhv of freq is begin P1KHZ:process(CLK)variable cout:integer:=0;begin
if CLK'event and CLK='1' then
cout:=cout+1;
--每來個時鐘上升沿時cout開始計數(shù) if cout<=25000 then q1KHz<='0';
--當(dāng)cout<=25000時,q1KHz輸出“0”
elsif cout<50000 then q1KHz<='1';--當(dāng)25000 else cout:=0; --輸出“1”,完成1KHz頻率輸出 end if; end if;end process; P500HZ:process(q1KHz) --q1KHz作為輸入信號,分出q500Hz variable cout:integer:=0;begin if q1KHz'event and q1KHz='1' then cout:=cout+1;if cout=1 then q500Hz<='0'; --二分頻 elsif cout=2 then cout:=0;q500Hz<='1';end if; end if;end process; P2HZ:process(q500Hz)variable cout:integer:=0;begin if q500Hz'event and q500Hz='1' then cout:=cout+1;if cout<=125 then q2Hz<='0'; elsif cout<250 then q2Hz<='1'; else cout:=0;end if; end if;end process; P1HZ:process(q2Hz)variable cout:integer:=0;begin if q2Hz'event and q2Hz='1' then cout:=cout+1;if cout=1 then q1Hz<='0'; elsif cout=2 then cout:=0;q1Hz<='1';end if; end if;end process;end bhv;(3)模塊圖: 2、控制器模塊(contral.vhd)(1)模塊說明:輸入端口k,set鍵來控制6個狀態(tài),這六個狀態(tài)分別是: 顯示計時時間狀態(tài),調(diào)計時的時、分、秒的3個狀態(tài),調(diào)鬧鈴的時、分的3個狀態(tài),reset鍵是復(fù)位鍵,用來回到顯示計時時間的狀態(tài)。(2)波形仿真圖: (3)模塊圖: 3、二選一模塊(mux21a.vhd)(1)源程序: library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity mux21a is port(a,b,s:in bit; y:out bit);end entity mux21a; architecture one of mux21a is begin process(a,b,s)begin if s='0' then y<=a; --若s=0,y輸出a,反之輸出b。else y<=b;end if;end process;end architecture one;(2)仿真波形圖: (3)模塊圖: 4、計時模塊 a.秒計時(second.vhd)(1)仿真波形圖: (2)模塊圖: b.分計時(minute.vhd)(1)仿真波形圖: (2)模塊圖: c.小時計時(hour.vhd)(1)仿真波形圖: (2)模塊圖: d.鬧鐘分計時(cntm60b.vhd)(1)仿真波形圖: (2)模塊圖: e.鬧鐘小時計時(cnth24b.vhd)(1)仿真波形圖: (2)模塊圖: 5、鬧鐘比較模塊(compare.vhd)(1)模塊說明:比較正常計數(shù)時間與鬧鐘定時時間是否相等,若相等,compout輸出“1”,反之輸出“0”。(2)仿真波形圖: (3)模塊圖: 6、報時模塊(bell.vhd)(1)模塊說明:該模塊既實現(xiàn)了整點報時的功能,又實現(xiàn)了鬧鈴的功能,蜂鳴器通過所選頻率的不同,而發(fā)出不同的聲音。(2)仿真波形圖: (3)模塊圖: 7、控制顯示模塊(show_con.vhd)(1)模塊說明:該模塊實現(xiàn)了數(shù)碼管既可以顯示正常時間,又可以顯示鬧鐘時間的功能;調(diào)時過程的定時閃爍功能也在此模塊中真正實現(xiàn)。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show_con is port(th1,tm1,ts1:in std_logic_vector(7 downto 4); th0,tm0,ts0:in std_logic_vector(3 downto 0); bh1,bm1:in std_logic_vector(7 downto 4); bh0,bm0:in std_logic_vector(3 downto 0); sec1,min1,h1: out std_logic_vector(7 downto 4); sec0,min0,h0: out std_logic_vector(3 downto 0); q2Hz,flashs,flashh,flashm,sel_show:in std_logic);end show_con; architecture rtl of show_con is begin process(th1,tm1,ts1,th0,tm0,ts0,bh1,bm1,bh0,bm0,q2Hz,flashs,flashh,flashm,sel_show) begin if sel_show='0'then if(flashh='1'and q2Hz='1')then h1<=“1111”;h0<=“1111”;--顯示小時數(shù)碼管以2Hz閃爍 min1<=tm1;min0<=tm0; sec1<=ts1;sec0<=ts0; elsif(flashm='1'and q2Hz='1')then h1<=th1;h0<=th0; min1<=“1111”;min0<=“1111”; sec1<=ts1;sec0<=ts0; elsif(flashs='1'and q2Hz='1')then h1<=th1;h0<=th0; min1<=tm1;min0<=tm0; sec1<=“1111”;sec0<=“1111”; else h1<=th1;h0<=th0; min1<=tm1;min0<=tm0; sec1<=ts1;sec0<=ts0; end if; elsif sel_show='1'then--若sel_show為“1”,數(shù)碼管顯示鬧鐘時間 if(flashh='1' and q2Hz='1')then h1<=“1111”;h0<=“1111”; min1<=bm1;min0<=bm0; sec1<=“0000”;sec0<=“0000”; elsif(flashm='1' and q2Hz='1')then h1<=bh1;h0<=bh0; min1<=“1111”;min0<=“1111”; sec1<=“0000”;sec0<=“0000”; else h1<=bh1;h0<=bh0; min1<=bm1;min0<=bm0; sec1<=“0000”;sec0<=“0000”; end if; end if; end process;end rtl;(3)模塊圖: 8、動態(tài)掃描顯示模塊(scan_led.vhd)(1)模塊說明:由4組輸入信號和輸出信號進(jìn)而實現(xiàn)了時鐘時、分的動態(tài)顯示。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity scan_led is port(clk1:in std_logic; h0:in std_logic_vector(3 downto 0); h1:in std_logic_vector(7 downto 4); min0:in std_logic_vector(3 downto 0); min1:in std_logic_vector(7 downto 4); ML:out std_logic_vector(7 downto 0); MH:out std_logic_vector(7 downto 0); HL:out std_logic_vector(7 downto 0); HH:out std_logic_vector(7 downto 0));end scan_led; architecture one of scan_led is signal cnt4:std_logic_vector(1 downto 0);signal a: std_logic_vector(3 downto 0);begin p1:process(clk1)begin if clk1'event and clk1 ='1' then cnt4<=cnt4+1; if cnt4=3 then cnt4<=“00”;end if;end if;end process p1; p2:process(cnt4,h1,h0,min1,min0)begin case cnt4 is --控制數(shù)碼管位選 when “00”=>case min0 is when “0000”=>ML<=“11000000”; when “0001”=>ML<=“11111001”; when “0010”=>ML<=“10100100”; when “0011”=>ML<=“10110000”; when “0100”=>ML<=“10011001”; when “0101”=>ML<=“10010010”; when “0110”=>ML<=“10000010”; when “0111”=>ML<=“11111000”; when “1000”=>ML<=“10000000”; when “1001”=>ML<=“10010000”; when others=>NULL; end case;when “01”=>case min1 is when “0000”=>MH<=“11000000”; when “0001”=>MH<=“11111001”; when “0010”=>MH<=“10100100”; when “0011”=>MH<=“10110000”; when “0100”=>MH<=“10011001”; when “0101”=>MH<=“10010010”; when “0110”=>MH<=“10000010”; when “0111”=>MH<=“11111000”; when “1000”=>MH<=“10000000”; when “1001”=>MH<=“10010000”; when others=>NULL; end case;when “10”=>case h0 is when “0000”=>HL<=“11000000”; when “0001”=>HL<=“11111001”; when “0010”=>HL<=“10100100”; when “0011”=>HL<=“10110000”; when “0100”=>HL<=“10011001”; when “0101”=>HL<=“10010010”; when “0110”=>HL<=“10000010”; when “0111”=>HL<=“11111000”; when “1000”=>HL<=“10000000”; when “1001”=>HL<=“10010000”; when others=>NULL; end case;when “11”=>case h1 is when “0000”=>HH<=“11000000”; when “0001”=>HH<=“11111001”; when “0010”=>HH<=“10100100”; when “0011”=>HH<=“10110000”; when “0100”=>HH<=“10011001”; when “0101”=>HH<=“10010010”; when “0110”=>HH<=“10000010”; when “0111”=>HH<=“11111000”; when “1000”=>HH<=“10000000”; when “1001”=>HH<=“10010000”; when others=>NULL; end case;when others =>null;end case;end process p2;end one;(3)模塊圖: 五、端口設(shè)定 k:button2,set:button1,reset:button0 ; Bell:SW1 用于開關(guān)蜂鳴器; 六、頂層電路圖 七、心得體會 此次的數(shù)字鐘設(shè)計重在于按鍵的控制和各個模塊代碼的編寫,雖然能把鍵盤接口和各個模塊的代碼編寫出來,并能正常顯示,但對于各個模塊的優(yōu)化設(shè)計還有一定的缺陷和不足,比如對按鍵消抖等細(xì)節(jié)處并未作出優(yōu)化。 經(jīng)過此次數(shù)字鐘的設(shè)計,我確實從中學(xué)到很多的東西。首先,通過VHDL硬件語言的學(xué)習(xí),我充分認(rèn)識到了功能模塊如何用語言實現(xiàn),讓我初步了解到了一個數(shù)字電路用硬件語言設(shè)計的方式和設(shè)計思想。其次,也讓我深深地體會到實踐的重要性,起初我學(xué)VHDL語言的時候,只是學(xué)得書本上的知識,經(jīng)過這次課程設(shè)計,通過對模塊的語言實現(xiàn),對于VHDL語言我有了更深的認(rèn)識。而且在程序錯誤的發(fā)現(xiàn)和改正的過程中,我得到了更多的收獲,也確實讓我進(jìn)步了不少。再次,當(dāng)我遇到一些問題的時候,請教老師,和同學(xué)們一起討論,令我受益頗多!最后,這個多功能數(shù)字電子鐘是自我創(chuàng)造與吸取借鑒共同作用的產(chǎn)物,是自我努力的結(jié)果。這讓我對數(shù)字電路的設(shè)計充滿了信心。雖然課程設(shè)計已經(jīng)結(jié)束,但這并不代表著我已經(jīng)真正掌握了VHDL語言,仍需繼續(xù)學(xué)習(xí)!