第一篇:課程設(shè)計數(shù)字電子鬧鐘
數(shù) 字 鬧 鐘 的 設(shè) 計
數(shù)字鬧鐘的設(shè)計與制作
一、設(shè)計任務(wù)與要求
設(shè)計并制作一個帶有可定時起鬧的數(shù)字鐘
1.有“時”、“分”十進制顯示,“秒”使用發(fā)光二極管閃爍表示
2.以24小時為一個計時周期
3.走時過程中能按預設(shè)的定時時間(精確到小時)啟動鬧鐘,以發(fā)光二極管閃爍表示,啟鬧時間為3s~10s
二、實驗儀器及主要器件
5V電源
1臺 面包板
1塊 74LS163
6片 74LS00
5片 74LS138
2片 CD4511
4片 LM555
1片 74LS123
1片 LED共陰極顯示器
4片 電阻
若干 電容
3個 導線
15米
三、設(shè)計原理方案
系統(tǒng)構(gòu)成
1、標準時間源
l)標準時間源即秒信號發(fā)生器)可采用LM555構(gòu)成多諧振蕩器,調(diào)整電阻可改變頻率,使之產(chǎn)生1Hz的脈沖信號(即T=1S)
LM555管腳排列及電路
T=0.7(RA+2RB)C
T=1S,C=220uF
計算得RA+2RB≈6.5K
取RA=1.5K,RB=2.4K
2.計時部分:時計數(shù)單元一般為24進制計數(shù)器,其輸出為兩位8421BCD碼形式;分計數(shù)和秒計數(shù)單元為60進制計數(shù)器,其輸出也為8421BCD碼。
模60計數(shù)器采用異步方式
如秒計數(shù)器:分成個位和十位,個位模十,十位模六。個位從0000計數(shù)到1001,利用置數(shù)端將個位從0000重新開始計數(shù),同時將1001信號作為一個CP脈沖信號傳給十位,讓十位開始從0000開始計數(shù)。以此規(guī)律開始計數(shù),直到十位計數(shù)到5,個位計數(shù)到9時,通過十位的置數(shù)端將十位清零,重新開始計數(shù),并將此信號作為一個CP脈沖信號傳給分計數(shù)器。
模24計數(shù)器電路
模24計數(shù)器采用同步方式, 使用兩片74LS163芯片,cp脈沖均由分計數(shù)器提供.第一片制成模10計數(shù)器,將1001信號提取出來后給與清零端。第二片芯片制成模為3的計數(shù)器,原數(shù)據(jù)ABCD給予0000信號.將第一片芯片的0011信號與第二片芯片的0010信號提取出來給與第一片芯片的置數(shù)端與第二片芯片的清零端,上升沿過來之后,兩片芯片同時清零
3、定時起鬧部分
l)正點起鬧,不要求分)使用2片74LS138,分別選出小時的十位和個位)小時十位為0~2,3-8譯碼器只使用前2個輸入端,小時個位為0~9,3-8譯碼器只有3個輸入端,會丟失幾個時間點:8點、9點、18點、19點。)還應(yīng)控制起鬧時間的長短,用74LS123構(gòu)成單穩(wěn)態(tài)觸發(fā)器
起鬧部分框圖
控制起鬧時間長短:T=0.28RC(1+0.7k/R)采用2片74LS138,將控制十位的3-8譯碼器的A2端作為控制個位3-8譯碼器的最高位,這樣就可以滿足小時個位為0-9??刂剖坏?-8譯碼器的A1,A0一起控制十位從0-2變化。
4、完整的鬧鐘電路圖(ewb設(shè)計圖)
電路安裝要求
1.布局合理
2.導線橫平豎直,且不要從集成塊上跳線
3.導線緊貼面包板,連接可靠
4.交叉線盡可能少
調(diào)試方法:
(1)采用逐級調(diào)試的方法
1.確保秒信號正常
2.調(diào)試秒計數(shù)器
3.調(diào)試分計數(shù)器,可將秒信號作為分計數(shù)器的CP脈沖
4.調(diào)試小時計數(shù)器,可將秒信號作為小時計數(shù)器的CP脈沖
5.調(diào)試鬧鐘電路
(2)將秒信號發(fā)生電路中的電容換成比較小的電容,這樣使得分信號的脈沖周期比較短
五、設(shè)計和調(diào)試過程中出現(xiàn)的問題及解決方法
1)將秒信號接入示波器,與標準信號對比,出現(xiàn)誤差,但在允許范圍之內(nèi)。
2)插上電源后發(fā)現(xiàn)秒信號和分信號的信號紊亂,分信號和秒信號同步計數(shù)。于是我們對秒的模六十進行單脈沖及示波器的檢測,在檢查秒信號個位(模十計數(shù)器)時發(fā)現(xiàn),14腳信號正確,而13,12,11腳信號紊亂。后進行接線檢查,發(fā)現(xiàn)有線是虛接,再修改后,13腳信號恢復正常,而12,11腳依舊紊亂。因查不出原因,而后對分信號進行檢查。由于分秒計數(shù)器所采用的模六十一致,而分信號正常,故排除模六十計數(shù)器設(shè)計有誤。將分信號的器件替換控制秒信號的器件,秒信號依舊有誤,故排出器件問題。最后進行檢測面包板狀況,出現(xiàn)了讓人崩潰的狀況,面包板上控制秒信號個位的163芯片2腳所在的一縱列5個孔全部與地相連。我們不得不改變布局,進行避讓。修改后,分秒模六十計數(shù)器正常。
3)剛接通電源時,小時計數(shù)器十位顯示7,后給予清零信號后顯示恢復正常。將秒脈沖接到小時計數(shù)器的個位CP端,在進位時發(fā)現(xiàn)23:00時不能同時清零。對模二十四的設(shè)計進行分析發(fā)現(xiàn)采用的清零端為異步,后經(jīng)過改造改成同步清零,清零正常。
4)在檢測CD4511驅(qū)動電路的過程中發(fā)現(xiàn)數(shù)碼管不能正常顯示的狀況,經(jīng)檢驗發(fā)現(xiàn)主要是由于接觸不良的問題,其中包括線的接觸不良和芯片的接觸不良,在實驗過程中,數(shù)碼管有幾段二極管時隱時現(xiàn),有時會消失。用5V電源對數(shù)碼管進行檢測,一端接地,另一端接觸每一段二極管,發(fā)現(xiàn)二極管能正常顯示的,在檢測過程中發(fā)現(xiàn)有幾根線有時能接通,有時不能接通,把接觸不好的線重新接過后發(fā)現(xiàn)能正常顯示了。其次是由于芯片接觸不良的問題,當檢查到線路完全正確,并且確保導線沒有問題時,我們推測器件有問題,其解決方法為把CD4511的芯片拔出,根據(jù)面包板孔的的狀況重新調(diào)整其引腳,使其正對于孔,再用力均勻地將芯片插入面包板中,此后發(fā)現(xiàn)能正常顯示。
5)在檢查分信號到小時信號的進位是否正常時發(fā)現(xiàn)有時顯示正常,有時顯示不穩(wěn)定。一時找不到問題,經(jīng)過討論發(fā)現(xiàn)CP脈沖重疊造成顯示不穩(wěn)定。
6)在制作起鬧部分電路的過程中,發(fā)現(xiàn)鬧鐘能完成基本功能,但無法在8,9,18,19點起鬧。通過分析和設(shè)計,我們采用卡諾圖化簡將輸入信號接到功能腳的方法,到達在特殊時間起鬧的目的。
至此,數(shù)字鬧鐘的調(diào)試全部結(jié)束并達到要求。
六、心得體會
本次數(shù)字鐘設(shè)計要求我們將理論付諸實踐,在實踐中進一步鞏固理論知識,最終當我們看到自己設(shè)計好的數(shù)字鬧鐘時,我們激動萬分。
首先,我們從沒有將以前學的各種知識整合到一起,所以這種有點綜合性的課設(shè)就要求我們在熟悉每個工作部分的同時,能把他們有機的結(jié)合起來。
第二,在模六十和模二十四的計數(shù)器的設(shè)計中,要求我們對各個芯片的各引腳的功能很熟悉。在這個過程中,我們進一步的熟悉的每個器件的用途和功能,尤其是4511和74LS123,這兩種芯片之前我們都沒有接觸過。
第三,我們在設(shè)計的過程中使用了EWB軟件,由于電路復雜,交叉線較多,所以就要求我們在連接過程中細心的完成接線,并巧妙的布局使得面包板上的線不交叉。
第四,當我們連接好線路以后,在調(diào)試的過程中我們借助于示波器,借助于低頻信號發(fā)生器的單脈沖,一步步的排查錯誤,在此過程中更深一步的熟悉的了解了示波器和低頻信號發(fā)生器的使用方法。
第五,在整個課設(shè)中要求我們有良好的心理狀態(tài),尤其是面對連線復雜的面包板。我們必須冷靜分析問題,解決問題。
第六,本次課設(shè)是一個團體的活動,我們在這次課設(shè)中體會了團隊精神。
最后,感謝老師給我們一次實踐動手的機會,讓我們得到了提升。我期待今后能有更多的機會參與這些課題的制作!
第二篇:EDA課程設(shè)計 數(shù)字時鐘(鬧鐘)
課 程 設(shè) 計 說 明 書
題目: 鬧鐘
學院(系): 年級專業(yè): 學 號: 學生姓名: 指導教師: 教師職稱:
共 16 頁
第 1 頁
目 錄
第1章 摘要…………………………………………………………………………………1 第2章 設(shè)計方案……………………………………………………………………………
2.1 VHDL簡介…………………………………………………………………………… 2.2 設(shè)計思路…………………………………………………………………………… 第3章 模塊介紹…………………………………………………………………………… 第4章 Verilog HDL設(shè)計源程序………………………………………………………… 第5章 波形仿真圖………………………………………………………………………… 第6章 管腳鎖定及硬件連線……………………………………………………………… 心得體會 ……………………………………………………………………………………17 參考文獻 ……………………………………………………………………………………18
共 16 頁
第 2 頁
第一章 摘要
在當今社會,數(shù)字電路產(chǎn)品的應(yīng)用在我們的實際生活中顯得越來越重要,與我們的生活聯(lián)系愈加緊密,例如計算機、儀表、電子鐘等等,使我們的生活工作較以前的方式更加方便、完善,帶來了很多的益處。
在此次EDA課程,我的設(shè)計課題是鬧鐘,使用VHDL語言進行編程完成。報告書主要由設(shè)計方案、模塊介紹、設(shè)計源程序、仿真波形圖和管腳鎖定及硬件連線四部分組成。設(shè)計方案主要介紹了我對于設(shè)計課題的大致設(shè)計思路,之后各個部分將會詳細介紹設(shè)計組成及程序。
共 16 頁
第 3 頁
第二章 設(shè)計方案 §2.1 VHDL簡介
數(shù)字電路主要是基于兩個信號(我們可以簡單的說是有電壓和無電壓),用數(shù)字信號完成對數(shù)字量進行算術(shù)運算和邏輯運算的電路我們稱之為數(shù)字電路,它具有邏輯運算和邏輯處理等功能,數(shù)字電路可分為組合邏輯電路和時序邏輯電路。
EDA技術(shù),就是以大規(guī)模可編程邏輯器件為設(shè)計載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達方式,以計算機、大規(guī)??删幊踢壿嬈骷拈_發(fā)軟件及實驗開發(fā)系統(tǒng)為設(shè)計工具,通過有關(guān)的開發(fā)軟件,自動完成用軟件的方式設(shè)計的電子系統(tǒng)到硬件系統(tǒng)的邏輯編譯、邏輯化簡、邏輯分割、邏輯綜合及優(yōu)化、邏輯布局布線、邏輯仿真,直至完成對于特定目標芯片的適配編譯、邏輯映射、編程下載等工作,最終形成集成電子系統(tǒng)或?qū)S眉尚酒囊婚T新技術(shù)。
利用EDA技術(shù)進行電子系統(tǒng)的設(shè)計,具有以下幾個特點:① 用軟件的方式設(shè)計硬件;② 用軟件方式設(shè)計的系統(tǒng)到硬件系統(tǒng)的轉(zhuǎn)換是由有關(guān)的開發(fā)軟件自動完成的;③ 設(shè)計過程中可用有關(guān)軟件進行各種仿真;④ 系統(tǒng)可現(xiàn)場編程,在線升級;⑤ 整個系統(tǒng)可集成在一個芯片上,體積小、功耗低、可靠性高。因此,EDA技術(shù)是現(xiàn)代電子設(shè)計的發(fā)展趨勢。
EDA技術(shù)伴隨著計算機、集成電路、電子系統(tǒng)設(shè)計的發(fā)展,經(jīng)歷了計算機輔助設(shè)計(Computer Assist Design,簡稱CAD)、計算機輔助工程設(shè)計(Computer Assist Engineering Design,簡稱CAE)和電子設(shè)計自動化(Electronic Design Automation,簡稱EDA)三個發(fā)展階段。
常用的硬件描述語言有VHDL、Verilog、ABEL。
EDA技術(shù)是隨著集成電路和計算機技術(shù)的飛速發(fā)展應(yīng)運而生的一種高級、快速、有效的電子設(shè)計自動化工具。它是為解決自動控制系統(tǒng)設(shè)計而提出的,從70年代經(jīng)歷了計算機輔助設(shè)計(CAD),計算機輔助工程(CAE),電子系統(tǒng)設(shè)計自動化(ESDA)3個階段。前兩個階段的EDA產(chǎn)品都只是個別或部分的解決了電子產(chǎn)品設(shè)計中的工程問題;第三代EDA工具根據(jù)工程設(shè)計中的瓶
共 16 頁
第 4 頁
頸和矛盾對設(shè)計數(shù)據(jù)庫實現(xiàn)了統(tǒng)一管理,并提出了并行設(shè)計環(huán)境概念,提供了獨立于工藝和廠家的系統(tǒng)級的設(shè)計工具。EDA關(guān)鍵技術(shù)之一就是采用硬件描述語言對硬件電路進行描述,且具有系統(tǒng)級仿真和綜合能力。目前應(yīng)用比較廣泛的硬件描述語言就是Verilog HDL。Verilog HDL簡介
Verilog HDL是目前大規(guī)模集成電路設(shè)計中最具代表性、使用最廣泛的硬件描述語言之一。具有如下特點:
(1)能夠在不同的抽象層次上,如系統(tǒng)級、行為級、RTL級、門級和開關(guān)級,對設(shè)計系統(tǒng)進行精確而簡練的描述。
(2)能夠在每個抽象層次的描述上對設(shè)計進行仿真驗證,及時發(fā)現(xiàn)及時發(fā)現(xiàn)可能存在的錯誤,縮短設(shè)計周期,并保存整個設(shè)計過程的正確性。
(3)由于代碼描述與工藝過程實現(xiàn)無關(guān),便于設(shè)計標準化,提高設(shè)計的可重用性。如國有C語言的編程基礎(chǔ)經(jīng)驗,只需很短的時間就能學會和掌握Verilog HDL,因此,Verilog HDL可以作為學習HDL設(shè)計方法的入門和基礎(chǔ)。
§2.2 設(shè)計思路
一、設(shè)計要求
1、設(shè)計簡易的一分鐘鬧鐘;
2、可手動輸入定時時間(0~59s),如30s;
3、兩個動態(tài)數(shù)碼管上跟蹤顯示時間的變化:如30,29,28……到了指定時間蜂鳴器發(fā)出5s的提示音;
4、采用2個動態(tài)數(shù)碼管顯示時間;
5、用蜂鳴器發(fā)出提示音;
6、撥碼開關(guān)設(shè)置定時時間。
二、設(shè)計思路
根據(jù)上述的設(shè)計要求,整個系統(tǒng)大致包括如下幾個組成部分:它包括以下幾個組成
共 16 頁
第 5 頁
部分:1)顯示屏,由2個七段動態(tài)數(shù)碼管組成,用于顯示當前設(shè)置的鬧鐘時間并進行跟蹤顯示;2)6個撥碼開關(guān),用于輸入鬧鐘時間;3)復位鍵,確定新的鬧鐘時間設(shè)置,或顯示已設(shè)置的鬧鐘時間;4)蜂鳴器,在當前時鐘時間與鬧鐘時間相同時,發(fā)出報警聲。
共 16 頁
第 6 頁
第三章 模塊介紹
一、計時模塊
此模塊共有6個撥碼開關(guān)作為輸入信號,當開關(guān)無輸入時,都處于低電平狀態(tài),D5、D4、D3、D2、D1和D0是并行數(shù)據(jù)輸入端,CRN是異步復位輸入端,LDN是預置控制輸入端。當開關(guān)有輸入時,會產(chǎn)生一個六位的二進制輸出信號num,此信號表示動作的開關(guān)序號,它是作為動態(tài)顯示模塊的輸入信號。
二、數(shù)碼顯示模塊
這個模塊有兩個輸入信號和兩個輸出信號。其中一個是信號輸入模塊的輸出num作為輸入,另外一個是時鐘輸入端,作為掃描數(shù)碼管的頻率信號,采用1024HZ的中高頻信號。輸出信號為SS0、SS1、SS2,是動態(tài)數(shù)碼管的片選段。
三、報警模塊
報警模塊共有兩個輸入信號ET和CLK1,一個輸出信號COUT。當從信號輸入模塊檢測到有開關(guān)輸入時,ET信號已置1,CLK上升沿到來時,程序?qū)OUT置1,蜂鳴器發(fā)出時間為10s的報警信號,時間到達后,跳出循環(huán),蜂鳴器停止報警。
四、頂層模塊
頂層模塊的作用是將各個模塊組合到一起,從而實現(xiàn)最終的功能。其輸入即為各個模塊的輸入,一個時鐘信號,還有6個撥碼開關(guān)的輸入,其輸出為數(shù)碼管顯示和報警器。
共 16 頁
第 7 頁
第四章Verilog HDL設(shè)計源程序
一、計時模塊
module counter(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,Q,OC);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN;output[5:0] Q;output OC;reg OC;reg[5:0] Q;reg[5:0] Q_TEMP;reg[3:0] NUM;always@(posedge CLK or negedge CRN)begin
if(~CRN)Q_TEMP=6'b000000;else if(~LDN)begin Q_TEMP={D5,D4,D3,D2,D1,D0};NUM=4'b0000;end else if(Q_TEMP<6'b111100&&Q_TEMP>6'b000000)begin if(NUM<4'b1000&&NUM>=4'b0000)NUM=NUM+1;else NUM=4'b0001;if(NUM==4'b1000)Q_TEMP=Q_TEMP-1;end
共 16 頁
第 8 頁
else Q_TEMP=6'b000000;end always begin
if(Q_TEMP==6'b000000&&LDN)OC=1'b1;else OC=1'b0;Q=Q_TEMP;end endmodule
二、數(shù)碼顯示模塊
module showtime(A,Q,CLKM,SS0,SS1,SS2);input[5:0] A;input CLKM;output[6:0] Q;output SS0,SS1,SS2;reg[6:0] Q;reg SS0,SS1,SS2;reg M;reg[5:0] B;reg[5:0] C;always@(posedge CLKM)begin M=M+1;end always begin
共 16 頁
第 9 頁
if(A<='b001001)begin B=A;C=0;end else if(A>'b001001&&A<='b10011)begin B=A-10;C=1;end else if(A>'b10011&&A<='b11101)begin B=A-20;C=2;end else if(A>'b11101&&A<='b100111)begin B=A-30;C=3;end else if(A>'b100111&&A<='b110001)begin B=A-40;C=4;end else if(A>'b110001&&A<='b111011)
共 16 頁
第 10 頁
begin B=A-50;C=5;end else if(A=='b111100)begin B=0;C=6;end if(M=='b1)begin SS0=1;SS1=0;SS2=0;case(B)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;'b000111:Q='b0000111;'b001000:Q='b1111111;'b001001:Q='b1101111;default:Q='b0111111;endcase end
共 16 頁
第 11 頁
else if(M=='b0)begin SS0=0;SS1=0;SS2=0;case(C)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;default:Q='b0111111;endcase end end endmodule
三、報警模塊
module speaker(CLK1,ET,COUT);input CLK1,ET;output COUT;reg COUT;reg[5:0] TEMP;always@(posedge CLK1)begin
if(~ET)TEMP=6'b000000;else if(TEMP<6'b101001&&TEMP>=6'b000000)TEMP=TEMP+1;
共 16 頁
第 12 頁
else TEMP=6'b101001;end always begin if(TEMP<6'b101001&&TEMP!=6'b000000)COUT=1'b1;else COUT=1'b0;end endmodule
四、頂層模塊 module timer(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,COUT,LED,SS0,SS1,SS2,CLKM);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,CLKM;output[6:0] LED;output COUT,SS0,SS1,SS2;wire X6;wire[5:0] X;counter u1(.LDN(LDN),.D5(D5),.D4(D4),.D3(D3),.D2(D2),.D1(D1),.D0(D0),.CLK(CLK),.CRN(CRN),.Q(X[5:0]),.OC(X6));showtime u2(.A(X[5:0]),.Q(LED[6:0]),.CLKM(CLKM),.SS0(SS0),.SS1(SS1),.SS2(SS2));speaker u3(.CLK1(CLK1),.ET(X6),.COUT(COUT));endmodule
共 16 頁
第 13 頁
第五章 波形仿真圖
一、計時模塊波形仿真圖
二、報警模塊波形仿真圖
三、頂層模塊波形仿真圖
共 16 頁
第 14 頁
第六章 管腳鎖定及硬件連線
一、管腳鎖定
CLK>chip=timer;Input Pin=75 CLKM>chip=timer:Input Pin=83 CLK1> chip=timer;Input Pin=85 COUT> chip=timer;Output Pin=38 CRN> chip=timer;Input Pin=39 DO> chip=timer;Input Pin=53 D1> chip=timer;Input Pin=47 D2> chip=timer;Input Pin=46 D3> chip=timer;Input Pin=45 D4> chip=timer;Input Pin=44 D5> chip=timer;Input Pin=41 LDN> chip=timer;Input Pin=40 LED0> chip=timer;Output Pin=173 LED1> chip=timer;Output Pin=174 LED2> chip=timer;Output Pin=175 LED3> chip=timer;Output Pin=176 LED4> chip=timer;Output Pin=177 LED5> chip=timer;Output Pin=179 LED6> chip=timer;Output Pin=187 SSO> chip=timer;Output Pin=191 SS1> chip=timer;Output Pin=192 SS2> chip=timer;Output Pin=193 引線說明:撥碼開關(guān)使用數(shù)字開關(guān)組A,需外接引線。
共 16 頁
第 15 頁
心得體會
通過這次設(shè)計,初步對EDA有一個了解。
出于沒有學習過這門課程,所以再課程設(shè)計開始時對于EDA就是一無所知。課程設(shè)計之初是做了一個簡單的培訓,關(guān)于軟件和硬件的設(shè)計,算是入門訓練吧。通過前兩天的課程講解,我對其有了初步的了解。之后就開始按照指導書中的例題就行練習,仿真,有進一步的掌握后就開始了自己的課程設(shè)計。由于我C++程序設(shè)計知識不扎實,所以導致這次軟件設(shè)計困難重重,也讓我明白了在這個領(lǐng)域知識的串聯(lián)是非常普遍的,學好學扎實是我們必須要做到的要求。
通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能提高自己的實際動手能力。在設(shè)計的過程中,可以說得是困難重重,但這畢竟第一次做,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處。
在此還需要感謝鄭兆兆老師和呂宏詩老師耐心的指導與幫助,使課設(shè)能夠更加順利的完成。
共 16 頁
第 16 頁
參考文獻
1、閻石主編.《數(shù)字電子技術(shù)基礎(chǔ)》(第五版).高等教等育出版社.2006.5,168-175頁 ;
2、李國麗、朱維勇、何劍春主編 《EDA與數(shù)字系統(tǒng)設(shè)計》(第2版).機械工業(yè)出版社.2009.3,105-146頁
共 16 頁
第 17 頁
第三篇:微機原理課程設(shè)計電子鬧鐘
電子鐘設(shè)計
1任務(wù)要求
1.1顯示位置:屏幕中央.1.2日期顯示格式“時:分:秒.1.312/24時制可調(diào).1.4在顯示屏上顯示提示語“CURRENT TIME IS:”和當前時間.2工作原理
1時鐘起始時間的設(shè)置
先調(diào)用DOS操作系統(tǒng)模塊9,在顯示屏上顯示提示語“TIME SYSTEM IS:”,輸入時制12或24后,顯示“CURRENT TIME IS:”,再調(diào)用DOS操作系統(tǒng)模塊10,提示要輸入時鐘的起始時間,輸入時間的格式是“時:分:秒”。輸入的時間以字符串形式存放在已定義的存儲器緩存區(qū)內(nèi),繼而調(diào)用TRAN1轉(zhuǎn)換子程序和MUL10乘10子程序,將存放在存儲器緩存區(qū)內(nèi)的ASCII字符轉(zhuǎn)換為壓縮BCD碼,并將時、分、秒的值放在寄存器CH、DH、DL中。
2延時程序
調(diào)用延時TIME延時中斷服務(wù)程序,累加到存放秒值的寄存器DL中,并進行十進制調(diào)整。在累加的過程中,不斷地對時、分、秒值進行比較,秒不能等于60,分不能等于60,時不能等于24。秒等于限制值時,則使秒值為0分值加1;分等于限制值時,則使分值為0時值加1;時等于限制值時,則使時值為0;時、分、秒值都不超過限制值時,就轉(zhuǎn)顯示屏輸出。
3時間顯示
調(diào)用DOS操作系統(tǒng)模塊9,可用來顯示存儲器內(nèi)字符串。由于顯示的字符必須為ASCII碼,因為要調(diào)用TRAN2轉(zhuǎn)換子程序?qū)⒓拇嫫鰿H、DH、DL內(nèi)壓縮BCD碼字符串轉(zhuǎn)換成ASCII字符串,字符串最后以字符“$”結(jié)束,并按時、分、秒的順序送存儲器緩沖區(qū)內(nèi)。調(diào)用DOS操作系統(tǒng)模塊9,(DS:DX)應(yīng)指向字符串首址。程序一旦進入運行,就將不間斷地在顯示屏顯示時間,要想程序停止運行,可同時在鍵盤按下CTRL和BREAK二鍵。
4程序堆圖 5程序清單
DATA SEGMENT BUFFER DB 10;設(shè)置輸入字符串用緩沖區(qū) DB ? DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$' CT DB 'CURRENT TIME IS:$' PM DB 'PM $' AM DB 'AM $' KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR DB ? DAT ENDS STA SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?)TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H;設(shè)置1CH中斷
MOV AL,1CH
INT 21H
;段地址放入ES,偏移地址放入BX
MOV KEEPIP,BX
;保偏移地址存
MOV KEEPCS,ES
;保存段地址
PUSH DS
MOV DX,OFFSET TIME
MOV AX,SEG TIME
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;設(shè)置中斷功能調(diào)用
INT 21H
POP DS
MOV DX,OFFSET TS
;DOS功能模塊,顯示字符串
MOV AH,9
INT 21H
MOV AH,1
;DOS功能模塊,從鍵盤輸入字符
INT 21H
MOV AH,1
INT 21H
MOV SR,AL
MOV DL,0AH
;”換行“
MOV AH,2
INT 21H
MOV DL,0DH
;”回車“
MOV AH,2
INT 21H
MOV DX,OFFSET CT
;DOS功能模塊,顯示字符串,提示從鍵盤輸入
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,10
;DOS功能模塊,從鍵盤輸入字符串到緩沖區(qū)
INT 21H
MOV BX,OFFSET BUFFER+2
CALL TRAN1
;將輸入的ASCII碼轉(zhuǎn)換為BCD碼
INC BX
INC BX
CALL TRAN1
INC BX
INC BX
CALL TRAN1
MOV BX,OFFSET BUFFER+2
MOV AL,[BX]
CALL MUL10
;將BCD碼轉(zhuǎn)換為壓縮的BCD碼
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DL,AL AGAIN: PUSH CX
MOV CX,18
STI
;開中斷 W:
CMP CX,0
JNE W
CLI
POP CX
MOV AL,DL
ADD AL,1
;”秒“加1
DAA
MOV DL,AL
CMP AL,60H
;”秒“與60比較
JNE DISPY
;小于60S,轉(zhuǎn)顯示程序
MOV DL,0
;等于60S, ”秒“值為0,”分“+1
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
;”分“于60比較
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
MOV AL, SR
CMP AL,32H
JNE NEXT
JMP DISPY NEXT: MOV AL,CH
MOV HOUR,CH
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: CALL IOCLR
CALL IOSET1
CALL STAR
CALL IOSET2
CALL STAR
CALL IOSET
MOV BX,OFFSET BUFFER
MOV AL,SR
CMP AL,32H
JNE NEXT2
CALL AD12
MOV AL,HOUR
JMP NEXT1 NEXT2: MOV AL,CH
;”時“值轉(zhuǎn)換成ASCII碼
NEXT1: CALL TRAN2
;將壓縮BCD碼轉(zhuǎn)換成ASCII碼
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
;”分“值轉(zhuǎn)換成ASCII碼
CALL TRAN2
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
;”秒“值轉(zhuǎn)換成ASCII碼
CALL TRAN2
INC BX
MOV AL,'$'
;顯示字符串結(jié)束碼
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET BUFFER
MOV AH,9
;DOS功能模塊,顯示字符串
INT 21H
POP DX
POP CX
POP BX
JMP AGAIN
CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
RET START ENDP MUL10 PROC
;將BCD碼轉(zhuǎn)換為壓縮的BCD碼
ADD AL,AL
DAA
MOV CL,AL
ADD AL,AL
DAA
ADD AL,AL
DAA
ADD AL,CL
DAA
MOV CL,AL
INC BX
MOV AL,[BX]
ADD AL,CL
RET MUL10 ENDP TRAN1 PROC
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
RET TRAN1 ENDP TRAN2 PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET TRAN2 ENDP IOCLR PROC
PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV AX,0600H
MOV BH,02
SUB CX,CX
MOV DX,184FH
INT 10H
;ASCII碼轉(zhuǎn)換成BCD碼
;將壓縮BCD碼轉(zhuǎn)換成ASCII碼;調(diào)用BIOS,清除全屏幕
POP AX
POP BX
POP DX
POP CX
RET IOCLR ENDP TIME
PROC
DEC CX
IRET TIME
ENDP
PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H
調(diào)用BIOS,設(shè)置屏幕光標在中央
;POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR
6設(shè)計時遇到的問題及解決方法
在課程設(shè)計中遇到的最大的困難是如何利用軟、硬件配合的方式產(chǎn)生中斷,對中斷向量表的裝載還比較模糊,對中斷的初始化、具體設(shè)置、中斷返回還不是很清楚,程序設(shè)計一度陷入停滯狀態(tài),不知如何是好.于是我又重新翻閱了我們的學習課本,也就是電子工業(yè)出版社的《微機原理與接口技術(shù)(基于16位機)》,重點研究了第9章《中斷》,通過對這一章的學習,我終于對中斷有了詳細的認識,在設(shè)計程序時也容易了很多。
設(shè)中斷服務(wù)程序入口地址為TIME,則相應(yīng)的程序如下:
??
KEEPIP DW 0
;設(shè)置內(nèi)存緩沖區(qū),用于暫存 KEEPCS DW 0
;DOS的中斷矢量
??
;在主程序的初始化部分,先取出DOS的中斷矢量并加以保存,然后裝入需要的中斷矢量
MOV AH,35H
;取出DOS的中斷矢量,并送ES:BX
MOV AL,1CH
INT 21H
MOV KEEPIP,BX
;保存DOS的中斷矢量
MOV KEEPCS,ES
PUSH DS;保護DS
MOV DX,OFFSET TIME
;將中斷矢量取代
MOV AX,SEG TIME
;DOS的中斷矢量
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;設(shè)置中斷功能調(diào)用
INT 21H
POP DS
;恢復DS ??
AGAIN: PUSH CX
MOV CX,18
STI
;開中斷 W:
CMP CX,0
JNE W
CLI ??
TIME
PROC
DEC CX
IRET TIME
ENDP ??
;在程序結(jié)尾處,用以下程序恢復DOS的中斷矢量 CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI 7新增功能及實現(xiàn)方法
7.112時制時顯示AM或PM
??
AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP ??
7.2綠色顯示時間
??
IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP ??
7.3在數(shù)字上下方各顯示一行個數(shù)同小時數(shù)的”=“ ??
IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP ?? 8心得體會
這是我第一次用匯編語言來設(shè)計一個小程序,歷時一周終于完成,其間有不少感觸。首先就是借鑒.魯迅先生曾說過要”拿來“,對,在這次課程設(shè)計中,就要”拿來"不少子程序,比如將ASCII碼轉(zhuǎn)換成BCD碼,將BCD碼轉(zhuǎn)換成壓縮BCD碼,將壓縮BCD碼轉(zhuǎn)換成ASCII碼等,這些子程序的設(shè)計是固定的,因此可以直接從指導資料中調(diào)用,至于設(shè)置光標的子程序,只需要修改幾個參數(shù)就可以,這大大方便了我的設(shè)計,為我節(jié)省了很多的時間。還有就是指導老師提供的資料很重要.這次課程設(shè)計的大部分程序,都可以在李老師提供的資料中找到,這對我的程序設(shè)計很有幫助,從這些資料中,我可以看出這個時鐘程序的基本流程,修改一些程序就可以實現(xiàn)這個時鐘的基本功能,添加一些程序就可以實現(xiàn)這個時鐘的附加功能,可以說,如果沒有李老師提供的源程序,我將面臨很大的困難。文章引用自:
第四篇:嵌入式電子鬧鐘時鐘課程設(shè)計
#include
sbit rs=P2^5;//液晶位定義 sbit lcden=P2^7;sbit s1=P2^0;//時間功能切換按鍵 sbit s2=P2^1;//按鍵加 sbit s3=P2^3;//按鍵減
sbit s4=P2^4;//鬧鐘功能切換鍵 sbit rst=P1^5;//ds1302引腳定義 sbit io=P1^6;sbit sclk=P1^7;sbit beep=P3^0;//蜂鳴器
uchar num,count,shi,fen,miao,s1num,s2num, year,month,day,week,flag,flag1,year1,month1, day1,week1,shi1,fen1,miao1,year2,month2, day2,week2,shi2,fen2,miao2,year5,month5, day5,week5,shi5,fen5,miao5,wk,ashi,afen;//參數(shù)定義
uchar code table[]=“20--”;//液晶固定顯示 uchar code table1[]=“ : : 00:00”;/* uchar time_dat[7]={12,1,6,6,12,59,59};//年周月日時分秒 uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};*/ void write_com(uchar com);//液晶寫指令函數(shù) void write_data(uchar date);//液晶寫數(shù)據(jù)函數(shù)
void write_ds1302(uchar add,uchar dat);//ds1302芯片寫指令函數(shù) void set_rtc();//ds1302時間設(shè)置函數(shù) void time_pros();//ds1302進制轉(zhuǎn)換函數(shù) void read_rtc();//ds1302讀時間函數(shù) void alarm();//鬧鐘函數(shù)
void delay(uint z)//延時函數(shù) { uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void init()//初始化 { lcden=0;flag=0;flag1=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);//液晶固定顯示,第一行 for(num=0;num<14;num++){ write_data(table[num]);delay(5);}
write_com(0x80+0x40);//液晶顯示第二行 for(num=0;num<20;num++){ write_data(table1[num]);delay(5);} }
void write_com(uchar com)//1602液晶寫指令 { rs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}
void write_data(uchar date)//1602液晶寫寫數(shù)據(jù) { rs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}
void write_sfm(uchar add,uchar date)//時分秒 { uchar shi3,ge;shi3=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi3);write_data(0x30+ge);}
void write_nyr(uchar ad,uchar date)//年月日 { uchar shi4,ge2;shi4=date/10;ge2=date%10;write_com(0x80+ad);write_data(0x30+shi4);write_data(0x30+ge2);}
void write_week(uchar wk)//星期按西方星期設(shè)置{ write_com(0x80+11);switch(wk){ case 1: write_data('S');delay(5);write_data('U');delay(5);write_data('N');break;
case 2: write_data('M');delay(5);write_data('O');delay(5);write_data('N');break;
case 3: write_data('T');
星期天為第一天 delay(5);write_data('U');delay(5);write_data('E');break;
case 4: write_data('W');delay(5);write_data('E');delay(5);write_data('D');break;
case 5: write_data('T');delay(5);write_data('H');delay(5);write_data('U');break;
case 6: write_data('F');delay(5);write_data('R');delay(5);write_data('T');break;
case 7: write_data('S');delay(5);write_data('A');delay(5);write_data('T');break;
} }
void keyscan()//{ if(s1==0){ delay(5);
按鍵函數(shù) if(s1==0){ write_com(0x0f);s1num++;//記錄按鍵次數(shù) flag=1;flag1=1;while(!s1);
switch(s1num)//光標閃爍點定位 { case 1:write_com(0x80+0x40+6);//秒 break;
case 2:write_com(0x80+0x40+3);//分 break;
case 3:write_com(0x80+0x40+0);//時 break;
case 4:write_com(0x80+11);//星期 break;case 5:write_com(0x80+8);//日 break;
case 6:write_com(0x80+5);//月 break;
case 7:write_com(0x80+2);//年 break;
case 8:s1num=0;write_com(0x0c);//設(shè)置開顯示光標不顯示 關(guān)閉時間設(shè)置
set_rtc();flag=0;break;}
} }
if(s1num!=0)//按鍵加減 { if(s2==0)//加按鍵函數(shù) { delay(10);if(s2==0){
while(!s2);switch(s1num)//根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié) { case 1: miao++;//秒加 if(miao==60)miao=0;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen++;// if(fen==60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi++;// if(shi==24)shi=0;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week++;// if(week==8)week=1;write_week(week);write_com(0x80+11);break;
case 5: day++;// if(day==32)day=1;write_nyr(8,day);write_com(0x80+8);break;
case 6: month++;//分加 時加 星期加日加 月加
if(month==13)month=1;write_nyr(5,month);write_com(0x80+5);break;
case 7: year++;//年加 if(year==100)year=0;write_nyr(2,year);write_com(0x80+2);break;
}
}
}
if(s3==0)//減按鍵函數(shù)同上 { delay(10);if(s3==0){ while(!s3);switch(s1num)//根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié) { case 1: miao--;if(miao==-1)miao=59;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen--;if(fen==-1)fen=59;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi--;if(shi==-1)shi=23;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week--;if(week==-1)week=7;write_week(week);write_com(0x80+11);break;
case 5: day--;if(day==-1)day=31;write_nyr(8,day);write_com(0x80+8);break;
case 6: month--;if(month==-1)month=12;write_nyr(5,month);write_com(0x80+5);break;
case 7: year--;if(year==-1)year=99;write_nyr(2,year);write_com(0x80+2);break;
}
} }
}
if(s4==0)// { delay(5);
鬧鐘按鍵 if(s4==0){ write_com(0x0f);//光標閃爍 s2num++;//記錄按鍵次數(shù) flag=1;while(!s4);switch(s2num)//光標閃爍點定位 { case 1:write_com(0x80+0x40+13);//分 break;
case 2:write_com(0x80+0x40+10);//時 break;
case 3:write_com(0x0c);//關(guān)閉鬧鐘設(shè)置 flag=0;s2num=0;break;
}
} }
if(s2num!=0)//鬧鐘設(shè)置 { if(s2==0)//鬧鐘加 { delay(10);if(s2==0){ while(!s2);switch(s2num)//根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié) { case 1: afen++;if(afen==60)afen=0;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi++;if(ashi==24)ashi=0;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
if(s3==0)//鬧鐘減 { delay(10);if(s3==0){ while(!s3);switch(s2num)//根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié) { case 1: afen--;if(afen==-1)afen=59;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi--;if(ashi==-1)ashi=23;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
} }
void wirte_ds1302_byte(uchar dat)//ds1302字節(jié)寫 { uchar i;for(i=0;i<8;i++){ sclk=0;io=dat&0x01;dat=dat>>1;sclk=1;} }
void write_ds1302(uchar add,uchar dat)//ds1302寫函數(shù) { rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);wirte_ds1302_byte(dat);rst=0;io=1;sclk=1;}
uchar read_ds1302(uchar add)//ds1302{ uchar i,value;rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);for(i=0;i<8;i++){ value=value>>1;sclk=0;if(io){ value=value|0x80;} sclk=1;} rst=0;_nop_();// 空操作 sclk=0;_nop_();
讀函數(shù) sclk=1;io=1;return value;}
void set_rtc()//ds1302時間設(shè)置 { write_ds1302(0x8e,0x00);//關(guān)寫保護
year1=year/10;//轉(zhuǎn)換為十六進制 year=year%10;year=year+year1*16;write_ds1302(0x8c,year);
week1=week/10;week=week%10;week=week+week1*16;write_ds1302(0x8a,week);
month1=month/10;month=month%10;month=month+month1*16;write_ds1302(0x88,month);
day1=day/10;day=day%10;day=day+day1*16;write_ds1302(0x86,day);
shi1=shi/10;shi=shi%10;shi=shi+shi1*16;write_ds1302(0x84,shi);
fen1=fen/10;fen=fen%10;fen=fen+fen1*16;write_ds1302(0x82,fen);
miao1=miao/10;miao=miao%10;miao=miao+miao1*16;write_ds1302(0x80,miao);
write_ds1302(0x8e,0x80);//開寫保護 flag1=0;}
void read_rtc()//從ds1302中讀時間 { year2=read_ds1302(0x8d);week2=read_ds1302(0x8b);month2=read_ds1302(0x89);day2=read_ds1302(0x87);shi2=read_ds1302(0x85);fen2=read_ds1302(0x83);miao2=read_ds1302(0x81);}
void time_pros()//進制 {
year5=year2/16;year2=year2%16;year2=year2+year5*10;
month5=month2/16;month2=month2%16;month2=month2+month5*10;
day5=day2/16;day2=day2%16;day2=day2+day5*10;
shi5=shi2/16;shi2=shi2%16;shi2=shi2+shi5*10;
fen5=fen2/16;fen2=fen2%16;fen2=fen2+fen5*10;
miao5=miao2/16;miao2=miao2%16;miao2=miao2+miao5*10;
從ds1302中讀出的時間轉(zhuǎn)換為十
}
void display()//顯示函數(shù) { write_sfm(6,miao2);write_com(0x80+0x40+6);
write_sfm(3,fen2);write_com(0x80+0x40+3);
write_sfm(0,shi2);write_com(0x80+0x40+0);
write_week(week2);write_com(0x80+11);
write_nyr(8,day2);write_com(0x80+8);
write_nyr(5,month2);write_com(0x80+5);
write_nyr(2,year2);write_com(0x80+2);
if((ashi==shi2)&&(afen==fen2)){ alarm();} }
void alarm()// 鬧鐘 { beep=0;delay(1000);beep=1;} void main()//主函數(shù) { init();//初始化 while(1){ keyscan();//按鍵函數(shù)
if(flag==0){ keyscan();read_rtc();time_pros();display();}
} }
第五篇:數(shù)字電子時鐘課程設(shè)計2
數(shù)字電子時鐘課程設(shè)計
題目:
數(shù)字電子時鐘課程設(shè)計
目錄
一、設(shè)計任務(wù)及設(shè)計要求…………………………………………(3)
二、設(shè)計方案論證
…………………………..………….(3)1.總體方案及框圖 2.各部分論證
三、單元電路設(shè)計…………………………………………………(4)1.振蕩器 ………………………………………………………(4)2.秒、分、時計數(shù)器…………………………………………(5)
3.顯示譯碼/驅(qū)動器和LED七段數(shù)碼顯示管……………….(6)
4.分頻器……………………………………………………(7)5.報時電路…………………………………………………(9)
四、總體電路設(shè)計及原理………………………………………(13)
五、元器件明細表………………………………………………(10)
六、心得體會……………………………………………………(11)
七、參考文獻……………………………………………………(11)
一、設(shè)計任務(wù)及設(shè)計要求 1.設(shè)計任務(wù)
數(shù)字電子鐘的邏輯電路 2.設(shè)計要求
(1)由晶振電路產(chǎn)生1HZ的校準秒信號。
(2)設(shè)計一個有“時”、“分”、“秒”(23小時59分59秒)顯示切且具有校時、校分、校秒的功。
(3)整點報時功能。要求整點差10秒開始每隔1秒鳴叫一次,共五次,每次持續(xù)時間為一秒,前五次為500赫茲的聲音,最后依次為1000赫茲的聲音。(4)用中小規(guī)模集成電路組成電子鐘,并在實驗箱上進行組裝和調(diào)試。(5)劃出框圖和邏輯電路圖,寫出設(shè)計,實驗總結(jié)報告。
二、設(shè)計方案論證
數(shù)字鐘原理框圖如圖1所示,電路一般包括以下幾個部分:振蕩器、分頻器、譯碼顯示電路、時分秒計數(shù)器、校時電路、報時電路。
圖一
對于各個部分而言
數(shù)字鐘計時的標準信號應(yīng)該是頻率相當穩(wěn)定的1HZ秒脈沖,所以要設(shè)置標準時間源。?
數(shù)字鐘計時周期是24小時,因此必須設(shè)置24小時計數(shù)器,他應(yīng)由模為60的秒計數(shù)器和分計數(shù)器及模為24的時計數(shù)器組成,秒、分、時由七段數(shù)碼管顯示。?
為使數(shù)字鐘走時與標準時間一致,校時電路是必不可少的。設(shè)計中采用開關(guān)控制校時直接用秒脈沖先后對“時”“分”“秒”計數(shù)器進行校時操作。?
能進行整點報時。在從59分50秒開始,每隔2秒鐘發(fā)出一次低音“嘟”的信號,連續(xù)五次,最后一次要求最高音“嘀”的信號,此信號結(jié)束即達到正點。?
三、單元電路設(shè)計 1.各獨立功能部件的設(shè)計(1)、振蕩器 振蕩器是計時器的核心,其作用是產(chǎn)生一個標準頻率的脈沖信號振蕩頻率的精度和 穩(wěn)定度決定了數(shù)字鐘的質(zhì)量。第一種方 案采用石英晶體振蕩器,如圖二。使用 振蕩頻率為32768HZ的石英晶體和反 向器構(gòu)成一個穩(wěn)定性極好、精度較高 的時間信號源。改變電容C可以
圖 二
石英晶體振蕩器
振蕩器的頻率進行微調(diào),再通過一個反相器,輸出32768HZ的方波將此方波的頻率進行15次二分頻后,在輸出端剛好可得到頻率為1HZ的脈沖信號。
第二種方案如圖三采用集成電路555定時器與RC組成的多諧振蕩器。輸出的脈沖頻率為fS=1/[(R1+2R2)C1ln2]=1KHZ,周期T=1/fS=1ms。若參數(shù)選擇:R1=R2=10K歐姆,C1=47uF時,可以得到秒脈沖信號。
圖三 方波信號發(fā)生器
附555定時器的功能表 輸
出 輸
出
閥值輸入(v11)觸發(fā)輸入(v12)復位(RD)輸出(VO)發(fā)電管T × × 0 0 導通
<2/3VCC <1/3VCC 1 1 截止 >2/3VCC >1/3VCC 1 0 導通 <2/3VCC >1/3VCC 1 不變 不變
(2)秒、分、時計數(shù)器
U1到U6 六個74LS161構(gòu)成數(shù)字鐘的秒、分、時計數(shù)器。
U1、U2共同構(gòu)成秒計數(shù)器,它由兩個74LS161構(gòu)成六--十進制的計數(shù)器,如圖四。U1作為秒個位十進制計數(shù)器,它的復位輸入RD、和置位輸入LD都接低電平,秒信號脈沖作為計數(shù)脈沖輸入到CP1端,輸出端C控制U2秒十位計數(shù)器的計數(shù)脈沖輸入。Q1、Q2、Q3、Q4作為秒個位的計時值送至秒個位七段顯示譯碼/驅(qū)動器。?
U2作為秒十位六進制計數(shù)器,它的計數(shù)脈沖輸入受到秒個位U1的控制,其計數(shù)器使能端EP、ET與U1的輸出端C相連接。當U2計數(shù)器計到0011,即清零信號到復位輸入端時,Q1、Q2、Q3、Q4輸出的都是零。Q1、Q2、Q3、Q4作為秒十位的計時值送至秒十位七段顯示譯碼/驅(qū)動器。U3、U4分別構(gòu)成分個位十進制和分十位六進制計數(shù)器,如圖四。U3、U4與U1、U2的連接方法相似。當計數(shù)器輸出為01011001狀態(tài),U3(U1)、U4(U2)的LD端同時為“0”,使計數(shù)器立即返回到00000000狀態(tài)。這樣就構(gòu)成了六十進制計數(shù)器。?
圖四 六十進制計數(shù)器
U5、U6共同構(gòu)成時計數(shù)器,它由兩個74LS161構(gòu)成六十進制的計數(shù)器?
如圖五。U5作為時十位計數(shù)器,它的復位輸入RD、和置位輸入LD都接低電平,時信號脈沖作為計數(shù)脈沖輸入到CP1端,輸出端C控制U6秒十位計數(shù)器的計數(shù)脈沖輸入。Q1、Q2、Q3、Q4作為秒個位的計時值送至秒個位七段顯示譯碼/驅(qū)動器。當計數(shù)器輸出為00100100狀態(tài),U5、U6的LD端同時為“0”,使計數(shù)器立即返回到00000000狀態(tài)。這樣就構(gòu)成了二十四進制計數(shù)器。
U12
圖五
二十四進制計數(shù)器
(3)顯示譯碼/驅(qū)動器和LED七段數(shù)碼顯示管
六個74LS248集成電路構(gòu)成數(shù)字鐘的七段數(shù)碼顯示管顯示譯碼/驅(qū)動器。74LS248七段顯示譯碼器輸出高電平有效,將8421BCD碼譯成七段(a、b、c、d、e、f、g)輸出,用以直接驅(qū)動LED七段數(shù)碼顯示對應(yīng)的十進制數(shù)。74LS248的顯示功能:
顯示功能見功能表的上半部分。[DCBA]是二進制碼輸入,要正確的執(zhí)行顯示功能,有關(guān)的功能端必須接合適的邏輯電平,這些功能端的作用隨后介紹。對于0~9輸入,[DCBA]相當BCD8421碼。當超過9以后,譯碼器仍然有字型輸出,具體見圖六。當[DCBA]=1111時,數(shù)碼管熄滅。實驗時要在筆劃段電極串聯(lián)電阻,以保護LED數(shù)碼管。表1 中規(guī)模顯示譯碼器74LS248的功能表 十進制
或功能 輸
入
輸
出
D
C
B
A
a
b
c
d
e
f
g 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 H H H H H H H H H H H H H H H H H ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ′
′ L
L L
L L
L L
L L
H L
L L
H H
L H
H L
L
L
H
L
H L
H
H
L L
H
H
H H H H H H H H H H H H H H H H H
H
H
H
H
H
H
L
L
H
H
L
L
L
L
H
H
L
H
H
L
H
H
H
H
H
L
L
H
L
H
H
L
L
H
H
H
L
H
H
L
H
H
H
L
H
H
H
H
H
H
H
H
L
L
L
L
圖六 74LS248顯示字型與輸入的對應(yīng)關(guān)系
如圖七,六個LED七段數(shù)碼顯示管利用不同發(fā)光段組合的方式顯示不同數(shù)碼,都采用+5V電源作為每段發(fā)光二極管的驅(qū)動電源。需要發(fā)光的段為高電平,不發(fā)光的段為低電平。設(shè)計中采用共陰極數(shù)碼管,每段發(fā)光二極管的正向降壓,隨顯示光的顏色有所不同,通常約2V~3V,點亮電流在5~10mA。六個LED七段數(shù)碼顯示管分別顯示秒個位、十位;分個位、十位;時個位、十位的計數(shù)十進制數(shù)
圖七 顯示譯碼/驅(qū)動器和數(shù)碼顯示管(4)分頻器
分頻器電路是由三個74LS90構(gòu)成,如圖八。74LS90是異步十進制計數(shù)器,它由一個一位二進制計數(shù)器和一個異步五進制計數(shù)器組成。將QA與CP2相連,計數(shù)脈沖由CP1端輸入,輸出由QA~QD引出,即得到十進制計數(shù)器。只有在復位輸入R0(1)= R0(2)=0和置位輸入S9(1)= S9(2)=0時,才能夠在計數(shù)脈沖(下降沿)作用下實現(xiàn)二—五—十進制加計算。因為要對輸入的脈沖進行三次10分頻,三片74LS90的復位輸入R0(1)、R0(2)和置位輸入S9(1)、S9(2)都接低電平。振蕩器輸出的方波脈沖計數(shù)器作為U1的CP1端的輸入時鐘脈沖,U1的QD端的輸出脈沖作為U2的CPA端的輸入時鐘脈沖,U2的QD端的輸出脈沖作為U3的CP1端的輸入時鐘脈沖,U3的QD端的輸出脈沖fO=fS/103???????=1HZ,即為秒信號方波脈沖,成為秒、分、時計數(shù)器的計數(shù)脈沖和時間校準信號。
將JK觸發(fā)器的J、K端都接在高電平,Qn+1=JQn+KQn=Qn,每輸入一個時鐘脈沖后,觸發(fā)器翻轉(zhuǎn)一次,觸發(fā)器處于計數(shù)狀態(tài)。經(jīng)過觸發(fā)器的二分頻,Q端輸出為500HZ的脈沖作為低音脈沖。
經(jīng)過U1、U2計數(shù)器的二次十分頻,輸出的脈沖頻率為10HZ,作為秒校時脈沖。
圖八
分頻器 附74LS90二—五—十進制計數(shù)器功能圖 復位輸入 置位輸入 輸出
R0(1)R0(2)S9(1)S9(2)QA QB QC QD H H L × L L L L H H × L L L L L × × H H H L L H L × L × 計數(shù) L × × L 計數(shù) × L L × 計數(shù) × L × L 計數(shù)
JK觸發(fā)器的功能表 J K Qn Qn+1 說明 0 0 0 0 輸出狀態(tài)不變 1
0 1 0 0 輸出狀態(tài)與J端狀態(tài)相同
0 0 0 1 輸出狀態(tài)與K端狀態(tài)相同
1 1 0 1 每輸入一個脈沖輸出狀態(tài)改變一次
0
(五)報時電路
整點報時電路要求在每個整點發(fā)出音響,因此需要對每個整點進行時間譯碼,以其輸出驅(qū)動音響控制電路。如圖九。
若要在每一整點發(fā)出五低音、一高音報時,需要對59分50秒到59分59秒進行時間譯碼。QD4~QA4是分十位輸出,QD3~QA3是分個位輸出,QD2~QA2是秒十位輸出,QD1~QA1秒個位輸出。在59分時,A= QC4 QA4 QD3 QA3=1;在50秒時,B= QC2 QA2=1;秒個位為0、2、4、6、8秒時,QA1=0,C= QA1=1;因而F1=ABC= QC4QA4 QD3 QA3 QC2 QA2 QA1僅在59分50秒、52秒、54秒、56秒、58秒時等于1,故可以用F1作低音的控制信號。當計數(shù)器每計到59分59秒時,A= QC4 QA4 QD3QA3=1,D= QC2 QA2 QD1 QA1=1,此時F2=AD=1。把F2接至JK觸發(fā)器控制端J端,CP端加秒脈沖,則再計1秒到達整點時F3=1,故可用F3作一次高音控制信號。
用F1控制5次低音、F3控制高音,經(jīng)音響放大器放大,每當“分”和“秒”計數(shù)器累計到59分50、52、54、56、58秒發(fā)出頻率為500HZ的五次低音,0分0秒時發(fā)出頻率為1000HZ的一次高音,每次音響的時間均為一秒鐘,實現(xiàn)了整點報時的功能。
圖九
整點報時電路
四、原理圖(見最后一頁)
五、元器件明細表
序號 元器件名稱 型號規(guī)格 數(shù)量(個)備注 U0 集成定時器 5G555定時器 1 構(gòu)成多諧振蕩器 U1~U6 同步加法計數(shù)器 74161 6 構(gòu)成模加法計數(shù)器 U7~U9 異步十進制計數(shù)器 74LS90 3 構(gòu)成分頻器
U10 七端顯示譯碼器 74LS248 6 分別顯示秒、分、時的數(shù)字 U11~U12 與非門 多輸入與非門 2 U13 J-K觸發(fā)器
C1、C2 電容C1=C2=104pf R1 R2 電阻R1 =2K、R2=5.1K R、R` 電阻R=1k,R`=47 U14 U20 門器件 非門 1
U15~U19 門器件 與門 6 多輸入與門 U21~U23 門器件 與非門 3 多輸入與非門 U24 觸發(fā)器 J-K觸發(fā)器 1 U25 晶體三級管 U26 喇叭實現(xiàn)鬧鈴
六、設(shè)計體會
在整個課程設(shè)計完后,總的感覺是:有收獲。以前上課都是上一些最基本的東西,而現(xiàn)在卻可以將以前學的東西作出有實際價值的東西。在這個過程中,我的確學得到很多在書本上學不到的東西,如:如何利用現(xiàn)有的元件組裝得到設(shè)計要求,如何找到錯誤的原因,如何利用計算機來畫圖等等。但也遇到了不少的挫折,有時遇到了一個錯誤怎么找也找不到原因所在,找了老半天結(jié)果卻是芯片的管腳接錯了,有時更是忘接電源了。在學習中的小問題在課堂上不可能犯,在動手的過程中卻很有可能犯。特別是在接電路時,一不小心就會犯錯,而且很不容易檢查出來。但現(xiàn)在回過頭來看,還是挺有成就感的。
七、參考文獻
姚福安.電子電路設(shè)計與實踐.山東科學技術(shù)出版社第一版.2002 楊志亮.電路原理圖設(shè)計技術(shù).西北工業(yè)大學出版社第一版.2003 閻石.數(shù)字電子技術(shù)基礎(chǔ)..高等教育出版社第四版.1998 童詩白.模擬電子技術(shù)基礎(chǔ).高等教育出版社第三版.2001 康華光.電子技術(shù)基礎(chǔ).高等教育出版社.2002 蘇止麗.數(shù)字電子電路實驗.武漢理工大學.2003 陳明義.電子技術(shù)課程設(shè)計使用教程 中南大學出版社第一版.2002
回答者: 命途多舛0913-一
級
2008-1-5 21:54
數(shù)字電子時鐘課程設(shè)計
題目: 數(shù)字電子時鐘課程設(shè)計
目 錄
一、設(shè)計任務(wù)及設(shè)計要求…………………………………………(3)
二、設(shè)計方案論證 …………………………..………….(3)
1.總體方案及框圖
2.各部分論證
三、單元電路設(shè)計…………………………………………………(4)
1.振蕩器 ………………………………………………………(4)
2.秒、分、時計數(shù)器…………………………………………(5)
3.顯示譯碼/驅(qū)動器和LED七段數(shù)碼顯示管……………….(6)
4.分頻器……………………………………………………(7)
5.報時電路…………………………………………………(9)
四、總體電路設(shè)計及原理………………………………………(13)
五、元器件明細表………………………………………………(10)
六、心得體會……………………………………………………(11)
七、參考文獻……………………………………………………(11)
一、設(shè)計任務(wù)及設(shè)計要求
1.設(shè)計任務(wù)
數(shù)字電子鐘的邏輯電路
2.設(shè)計要求
(1)由晶振電路產(chǎn)生1HZ的校準秒信號。
(2)設(shè)計一個有“時”、“分”、“秒”(23小時59分59秒)顯示切且具有校時、校分、校秒的功。
(3)整點報時功能。要求整點差10秒開始每隔1秒鳴叫一次,共五次,每次持續(xù)時間為一秒,前五次為500赫茲的聲音,最后依次為1000赫茲的聲音。
(4)用中小規(guī)模集成電路組成電子鐘,并在實驗箱上進行組裝和調(diào)試。
(5)劃出框圖和邏輯電路圖,寫出設(shè)計,實驗總結(jié)報告。
二、設(shè)計方案論證
數(shù)字鐘原理框圖如圖1所示,電路一般包括以下幾個部分:振蕩器、分頻器、譯碼顯示電路、時分秒計數(shù)器、校時電路、報時電路。
圖一
對于各個部分而言
數(shù)字鐘計時的標準信號應(yīng)該是頻率相當穩(wěn)定的1HZ秒脈沖,所以要設(shè)置標準時間源。?
數(shù)字鐘計時周期是24小時,因此必須設(shè)置24小時計數(shù)器,他應(yīng)由模為60的秒計數(shù)器和分計數(shù)器及模為24的時計數(shù)器組成,秒、分、時由七段數(shù)碼管顯示。?
為使數(shù)字鐘走時與標準時間一致,校時電路是必不可少的。設(shè)計中采用開關(guān)控制校時直接用秒脈沖先后對“時”“分”“秒”計數(shù)器進行校時操作。? 能進行整點報時。在從59分50秒開始,每隔2秒鐘發(fā)出一次低音“嘟”的信號,連續(xù)五次,最后一次要求最高音“嘀”的信號,此信號結(jié)束即達到正點。?
三、單元電路設(shè)計
1.各獨立功能部件的設(shè)計
(1)、振蕩器
振蕩器是計時器的核心,其作用是產(chǎn)生一個標準頻率的脈沖信號振蕩頻率的精度和
穩(wěn)定度決定了數(shù)字鐘的質(zhì)量。第一種方
案采用石英晶體振蕩器,如圖二。使用
振蕩頻率為32768HZ的石英晶體和反
向器構(gòu)成一個穩(wěn)定性極好、精度較高的時間信號源。改變電容C可以
圖 二 石英晶體振蕩器
振蕩器的頻率進行微調(diào),再通過一個反相器,輸出32768HZ的方波將此方波的頻率進行15次二分頻后,在輸出端剛好可得到頻率為1HZ的脈沖信號。
第二種方案如圖三采用集成電路555定時器與RC組成的多諧振蕩器。輸出的脈沖頻率為fS=1/[(R1+2R2)C1ln2]=1KHZ,周期T=1/fS=1ms。若參數(shù)選擇:R1=R2=10K歐姆,C1=47uF時,可以得到秒脈沖信號。
圖三 方波信號發(fā)生器
附555定時器的功能表
輸 出 輸 出
閥值輸入(v11)觸發(fā)輸入(v12)復位(RD)輸出(VO)發(fā)電管T × × 0 0 導通
<2/3VCC <1/3VCC 1 1 截止
>2/3VCC >1/3VCC 1 0 導通
<2/3VCC >1/3VCC 1 不變 不變
(2)秒、分、時計數(shù)器
U1到U6 六個74LS161構(gòu)成數(shù)字鐘的秒、分、時計數(shù)器。
U1、U2共同構(gòu)成秒計數(shù)器,它由兩個74LS161構(gòu)成六--十進制的計數(shù)器,如圖四。U1作為秒個位十進制計數(shù)器,它的復位輸入RD、和置位輸入LD都接低電平,秒信號脈沖作為計數(shù)脈沖輸入到CP1端,輸出端C控制U2秒十位計數(shù)器的計數(shù)脈沖輸入。Q1、Q2、Q3、Q4作為秒個位的計時值送至秒個位七段顯示譯碼/驅(qū)動器。?
U2作為秒十位六進制計數(shù)器,它的計數(shù)脈沖輸入受到秒個位U1的控制,其計數(shù)器使能端EP、ET與U1的輸出端C相連接。當U2計數(shù)器計到0011,即清零信號到復位輸入端時,Q1、Q2、Q3、Q4輸出的都是零。Q1、Q2、Q3、Q4作為秒十位的計時值送至秒十位七段顯示譯碼/驅(qū)動器。
U3、U4分別構(gòu)成分個位十進制和分十位六進制計數(shù)器,如圖四。U3、U4與U1、U2的連接方法相似。當計數(shù)器輸出為01011001狀態(tài),U3(U1)、U4(U2)的LD端同時為“0”,使計數(shù)器立即返回到00000000狀態(tài)。這樣就構(gòu)成了六十進制計數(shù)器。?
圖四 六十進制計數(shù)器
U5、U6共同構(gòu)成時計數(shù)器,它由兩個74LS161構(gòu)成六十進制的計數(shù)器? 如圖五。U5作為時十位計數(shù)器,它的復位輸入RD、和置位輸入LD都接低電平,時信號脈沖作為計數(shù)脈沖輸入到CP1端,輸出端C控制U6秒十位計數(shù)器的計數(shù)脈沖輸入。Q1、Q2、Q3、Q4作為秒個位的計時值送至秒個位七段顯示譯碼/驅(qū)動器。當計數(shù)器輸出為00100100狀態(tài),U5、U6的LD端同時為“0”,使計數(shù)器立即返回到00000000狀態(tài)。這樣就構(gòu)成了二十四進制計數(shù)器。
U12 圖五 二十四進制計數(shù)器
(3)顯示譯碼/驅(qū)動器和LED七段數(shù)碼顯示管
六個74LS248集成電路構(gòu)成數(shù)字鐘的七段數(shù)碼顯示管顯示譯碼/驅(qū)動器。74LS248七段顯示譯碼器輸出高電平有效,將8421BCD碼譯成七段(a、b、c、d、e、f、g)輸出,用以直接驅(qū)動LED七段數(shù)碼顯示對應(yīng)的十進制數(shù)。74LS248的顯示功能:
顯示功能見功能表的上半部分。[DCBA]是二進制碼輸入,要正確的執(zhí)行顯示功能,有關(guān)的功能端必須接合適的邏輯電平,這些功能端的作用隨后介紹。對于0~9輸入,[DCBA]相當BCD8421碼。當超過9以后,譯碼器仍然有字型輸出,具體見圖六。當[DCBA]=1111時,數(shù)碼管熄滅。實驗時要在筆劃段電極串聯(lián)電阻,以保護LED數(shù)碼管。
表1 中規(guī)模顯示譯碼器74LS248的功能表
圖六 74LS248顯示字型與輸入的對應(yīng)關(guān)系
如圖七,六個LED七段數(shù)碼顯示管利用不同發(fā)光段組合的方式顯示不同數(shù)碼,都采用+5V電源作為每段發(fā)光二極管的驅(qū)動電源。需要發(fā)光的段為高電平,不發(fā)光的段為低電平。設(shè)計中采用共陰極數(shù)碼管,每段發(fā)光二極管的正向降壓,隨顯示光的顏色有所不同,通常約2V~3V,點亮電流在5~10mA。六個LED七段數(shù)碼顯示管分別顯示秒個位、十位;分個位、十位;時個位、十位的計數(shù)十進制數(shù)
圖七 顯示譯碼/驅(qū)動器和數(shù)碼顯示管
(4)分頻器
分頻器電路是由三個74LS90構(gòu)成,如圖八。74LS90是異步十進制計數(shù)器,它由一個一位二進制計數(shù)器和一個異步五進制計數(shù)器組成。將QA與CP2相連,計數(shù)脈沖由CP1端輸入,輸出由QA~QD引出,即得到十進制計數(shù)器。只有在復位輸入R0(1)= R0(2)=0和置位輸入S9(1)= S9(2)=0時,才能夠在計數(shù)脈沖(下降沿)作用下實現(xiàn)二—五—十進制加計算。因為要對輸入的脈沖進行三次10分頻,三片74LS90的復位輸入R0(1)、R0(2)和置位輸入S9(1)、S9(2)都接低電平。振蕩器輸出的方波脈沖計數(shù)器作為U1的CP1端的輸入時鐘脈沖,U1的QD端的輸出脈沖作為U2的CPA端的輸入時鐘脈沖,U2的QD端的輸出脈沖作為U3的CP1端的輸入時鐘脈沖,U3的QD端的輸出脈沖fO=fS/103???????=1HZ,即為秒信號方波脈沖,成為秒、分、時計數(shù)器的計數(shù)脈沖和時間校準信號。
將JK觸發(fā)器的J、K端都接在高電平,Qn+1=JQn+KQn=Qn,每輸入一個時鐘脈沖后,觸發(fā)器翻轉(zhuǎn)一次,觸發(fā)器處于計數(shù)狀態(tài)。經(jīng)過觸發(fā)器的二分頻,Q端輸出為500HZ的脈沖作為低音脈沖。
經(jīng)過U1、U2計數(shù)器的二次十分頻,輸出的脈沖頻率為10HZ,作為秒校時脈沖。
圖八 分頻器
附74LS90二—五—十進制計數(shù)器功能圖
復位輸入 置位輸入 輸出 R0(1)R0(2)S9(1)S9(2)QA QB QC QD H H L × L L L L H H × L L L L L × × H H H L L H L × L × 計數(shù)
L × × L 計數(shù)
× L L × 計數(shù)
× L × L 計數(shù)
JK觸發(fā)器的功能表
J K Qn Qn+1 說明
0 0 0 0 輸出狀態(tài)不變1
0 1 0 0 輸出狀態(tài)與J端狀態(tài)相同0 0 0 1 輸出狀態(tài)與K端狀態(tài)相同1 1 0 1 每輸入一個脈沖輸出狀態(tài)改變一次0
(五)報時電路
整點報時電路要求在每個整點發(fā)出音響,因此需要對每個整點進行時間譯碼,以其輸出驅(qū)動音響控制電路。如圖九。
若要在每一整點發(fā)出五低音、一高音報時,需要對59分50秒到59分59秒進行時間譯碼。QD4~QA4是分十位輸出,QD3~QA3是分個位輸出,QD2~QA2是秒十位輸出,QD1~QA1秒個位輸出。在59分時,A= QC4 QA4 QD3 QA3=1;在50秒時,B= QC2 QA2=1;秒個位為0、2、4、6、8秒時,QA1=0,C= QA1=1;因而F1=ABC= QC4QA4 QD3 QA3 QC2 QA2 QA1僅在59分50秒、52秒、54秒、56秒、58秒時等于1,故可以用F1作低音的控制信號。
當計數(shù)器每計到59分59秒時,A= QC4 QA4 QD3QA3=1,D= QC2 QA2 QD1 QA1=1,此時F2=AD=1。把F2接至JK觸發(fā)器控制端J端,CP端加秒脈沖,則再計1秒到達整點時F3=1,故可用F3作一次高音控制信號。
用F1控制5次低音、F3控制高音,經(jīng)音響放大器放大,每當“分”和“秒”計數(shù)器累計到59分50、52、54、56、58秒發(fā)出頻率為500HZ的五次低音,0分0秒時發(fā)出頻率為1000HZ的一次高音,每次音響的時間均為一秒鐘,實現(xiàn)了整點報時的功能。
圖九 整點報時電路
四、原理圖(見最后一頁)
五、元器件明細表
序號 元器件名稱 型號規(guī)格 數(shù)量(個)備注
U0 集成定時器 5G555定時器 1 構(gòu)成多諧振蕩器 U1~U6 同步加法計數(shù)器 74161 6 構(gòu)成模加法計數(shù)器
U7~U9 異步十進制計數(shù)器 74LS90 3 構(gòu)成分頻器
U10 七端顯示譯碼器 74LS248 6 分別顯示秒、分、時的數(shù)字
U11~U12 與非門 多輸入與非門 2 U13 J-K觸發(fā)器 1
C1、C2 電容 2 C1=C2=104pf R1 R2 電阻 2 R1 =2K、R2=5.1K R、R` 電阻 2 R=1k,R`=47 U14 U20 門器件 非門 1
U15~U19 門器件 與門 6 多輸入與門
U21~U23 門器件 與非門 3 多輸入與非門
U24 觸發(fā)器 J-K觸發(fā)器 1 U25 晶體三級管 1 U26 喇叭 1 實現(xiàn)鬧鈴
六、設(shè)計體會
在整個課程設(shè)計完后,總的感覺是:有收獲。以前上課都是上一些最基本的東西,而現(xiàn)在卻可以將以前學的東西作出有實際價值的東西。在這個過程中,我的確學得到很多在書本上學不到的東西,如:如何利用現(xiàn)有的元件組裝得到設(shè)計要求,如何找到錯誤的原因,如何利用計算機來畫圖等等。但也遇到了不少的挫折,有時遇到了一個錯誤怎么找也找不到原因所在,找了老半天結(jié)果卻是芯片的管腳接錯了,有時更是忘接電源了。在學習中的小問題在課堂上不可能犯,在動手的過程中卻很有可能犯。特別是在接電路時,一不小心就會犯錯,而且很不容易檢查出來。但現(xiàn)在回過頭來看,還是挺有成就感的。