中文摘要
數(shù)字電子鐘是隨著數(shù)字電力電子技術(shù)發(fā)展的產(chǎn)物,其利用數(shù)字電路原理來顯示秒、分、時的計時裝置。與傳統(tǒng)的機(jī)械鐘相比,它具有走時準(zhǔn)確、顯示直觀、無機(jī)械傳動裝置等優(yōu)點(diǎn),因而得到廣泛應(yīng)用。隨著單片機(jī)微機(jī)原理的發(fā)展和石英振蕩器的廣泛應(yīng)用,使得基于單片機(jī)控制的電子鐘的走時精度和可調(diào)性更具有優(yōu)勢,遠(yuǎn)超老式的機(jī)械鐘表和基于555芯片的數(shù)字電子鐘。
本設(shè)計試基于清翔電子STC89C52單片機(jī)為核心,以匯編語言作為軟件設(shè)計程序的數(shù)字顯示電子鐘,輔以必要的按鍵調(diào)整電路、復(fù)位電路、顯示電路、驅(qū)動電路,配合6位7段共陰極LED數(shù)碼管顯示實(shí)時數(shù)據(jù),按鍵可以進(jìn)行校隊(duì)調(diào)整。該數(shù)字電子鐘有時分秒顯示功能以及時間的校隊(duì)的功能。系統(tǒng)軟件設(shè)計主要實(shí)現(xiàn)參數(shù)設(shè)置、串行口數(shù)據(jù)接收、指令發(fā)送以及數(shù)據(jù)的顯示和存儲,并且實(shí)現(xiàn)鍵盤、數(shù)碼管顯示器等各模塊的功能。本次設(shè)計首先利用Proteus軟件的ISIS電子電路仿真功能和Keil匯編語言編輯功能實(shí)現(xiàn)硬件和軟件原理上的突破和功能實(shí)現(xiàn)。然后基于此又利用清翔電子STC89C52單片機(jī)實(shí)現(xiàn)由原理到實(shí)物的轉(zhuǎn)化。此次設(shè)計,深化和擴(kuò)充在單片機(jī)原理及相關(guān)課程方面的基本知識、基本理論和基本技能熟悉設(shè)計過程,了解設(shè)計步驟,掌握設(shè)計內(nèi)容,培養(yǎng)設(shè)計電路、實(shí)現(xiàn)軟件編程和編寫設(shè)計說明書能力的目的,為今后從事相關(guān)方面的實(shí)際工作打下良好基礎(chǔ)
目 錄
一、課程設(shè)計任務(wù)及要求
1.1設(shè)計基本要求
1.2 設(shè)計目的
1.3總體方案設(shè)計
1.4電子鐘的時間調(diào)整方案
二、系統(tǒng)功能描述
2.1功能說明
三、電路設(shè)計
3.1電子鐘硬件總設(shè)計電路
3.2 CPU電路
3.3 時鐘電路
3.4 驅(qū)動電路
3.5 按鍵控制電路
四、模塊設(shè)計
4.1 程序設(shè)計流程
五、調(diào)試
5.1 keil軟件仿真調(diào)試
5.2 Proteus仿真調(diào)試
5.3 實(shí)物運(yùn)行測試
六、設(shè)計體會與小結(jié)
6.1心得感悟
七、參考文獻(xiàn)
八、附錄
8.1系統(tǒng)程序
8.2電路原理圖
8.3清翔電子STC89C52原理圖
一、課程設(shè)計任務(wù)及要求1.1設(shè)計基本要求 (1)設(shè)計AT89S51的最小系統(tǒng); (2)LED顯示電路及與STC89S51接口,LED數(shù)碼塊顯示時、分、秒; (3)時鐘調(diào)整電路及與STC89S51接口; (4)電子時匯編鐘程序設(shè)計; (5)基于Proteus的電子時鐘原理及仿真實(shí)現(xiàn); (6)電子時鐘實(shí)物制作; 1.2設(shè)計目的 (1)熟悉AT89C51內(nèi)部定時器/計數(shù)器原理和應(yīng)用,把理論加以實(shí)踐; (2)了解使用單片機(jī)處理復(fù)雜邏輯的方法; (3)掌握多位數(shù)碼動態(tài)顯示的方法; (4)掌握多個按鍵的查詢和處理方法 1.3總體方案設(shè)計 (1)定時初值計算: 把定時器設(shè)為工作方式1,定時時間為62.5ms,則計數(shù)溢出16次即得時鐘計時最小單位秒。 假設(shè)使用T/C0,方式1,50ms定時,fosc=12MHz。 則初值X滿足(2^16-X)×1/12MHz×12μs =62.5ms X=3036→101111011100→0BDCH 采用中斷方式進(jìn)行溢出次數(shù)累計,計滿16次為秒計時(1秒) 從秒到分和從分到時的計時是通過累加和數(shù)值比較實(shí)現(xiàn)。 (2)電子鐘的時間顯示方案選擇: 電子鐘的時鐘時間在六位數(shù)碼管上進(jìn)行顯示,因此,在內(nèi)部RAM中設(shè)置顯示緩沖區(qū)共8個單元。 LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1 無 無 7EH 7DH 7CH 7BH 7AH 79 時十位 時個位 分十位 分個位 秒十位 秒個位 靜態(tài)顯示:所謂靜態(tài)顯示,就是當(dāng)顯示器顯示某一字符時,相應(yīng)的發(fā)光二極管恒定的導(dǎo)通或截止。該方式每一位都需要一個8 位輸出口控制。靜態(tài)顯示時較小的電流能獲得較高的亮度,且字符不閃爍。但當(dāng)所顯示的位數(shù)較多時,靜態(tài)顯示所需的I/O口太多,造成了資源的浪費(fèi)。 動態(tài)顯示:所謂動態(tài)顯示,就是一位一位的輪流點(diǎn)亮各個位,對于顯示器的每一位來說,每隔一段時間點(diǎn)亮一次。利用人的視覺暫留功能可以看到整個顯示,但必須保證掃描速度足夠快,字符才不閃爍。顯示器的亮度既與導(dǎo)通電流有關(guān),也于點(diǎn)亮?xí)r間與間隔時間的比例有關(guān)。調(diào)整參數(shù)可以實(shí)現(xiàn)較高穩(wěn)定度的顯示。動態(tài)顯示節(jié)省了I/O口,降低了能耗。 從節(jié)省I/O口和降低能耗出發(fā),本設(shè)計采用動態(tài)顯示。 1.4電子鐘的時間調(diào)整方案 電子鐘設(shè)置3個按鍵通過程序控制來完成電子鐘的時間調(diào)整。 K5鍵復(fù)位 K1鍵調(diào)整時; K2鍵調(diào)整分; K3鍵調(diào)整秒 K4鍵完成調(diào)整 本次課程設(shè)計的按鍵通過外接button開關(guān),來實(shí)現(xiàn)單片機(jī)對所選取功能查詢。根據(jù)理論知識我們知道,機(jī)械開關(guān)可能存在噪音的干擾,導(dǎo)致對高低點(diǎn)位識別錯誤,這是此方案的漏洞。最好的是外加去抖電路,例如D觸發(fā)器,或者軟件去抖。但由于按鍵的功能是對時間的加一調(diào)整,系統(tǒng)對電位識別準(zhǔn)確度要求不是很高,同時受制于實(shí)物的限制,所以本次設(shè)計仍然采用了鍵盤查詢。
二、系統(tǒng)功能描述2.1功能說明 (1)利用STC89C52單片機(jī)內(nèi)部的定時/計數(shù)器、中斷系統(tǒng)、以及按鍵鍵盤和LED顯示器等部件,設(shè)計一個單片機(jī)電子時鐘。設(shè)計的電子時鐘通過數(shù)碼管顯示,并能通過按鍵實(shí)現(xiàn)設(shè)置時間和復(fù)位控制等。 (2)此外還要實(shí)現(xiàn)對時間的調(diào)整功能,89c52的P1.0、P1.1、P1.2、P1.3、RST外接五個獨(dú)立按鍵,當(dāng)按下P1.0按鍵時,系統(tǒng)進(jìn)入調(diào)時鐘加一的顯示功能;當(dāng)按下P1.1按鍵時,系統(tǒng)進(jìn)入分鐘加一顯示的功能;當(dāng)按下P1.2按鍵時,系統(tǒng)進(jìn)入秒針加一顯示功能,當(dāng)按下P1.3按鍵時,系統(tǒng)進(jìn)入完成設(shè)置,確認(rèn)開始計時的顯示功能;當(dāng)按下RST按鍵時,實(shí)現(xiàn)對電子時鐘進(jìn)行復(fù)位的功能。 (3)整個系統(tǒng)采用應(yīng)用廣泛的AT89S52作為時鐘控制芯片,利用單片機(jī)內(nèi)部的定時器\計數(shù)器來實(shí)現(xiàn)的,它的處理過程如下:首先設(shè)定單片機(jī)內(nèi)部的一個定時器\計數(shù)器工作于定時方式,對機(jī)器周期計數(shù)形成基準(zhǔn)時間,然后用另一個定時器\計數(shù)器或軟件計數(shù)的方法對基準(zhǔn)時間計數(shù)形成秒,秒計60次形成分,分計60次形成小時,小時計24次則計滿一天,上述時分秒計滿即清零。然后通過數(shù)碼管把它們的內(nèi)容在相應(yīng)位置顯示出來即可。 (4)六位一體共陰數(shù)碼管是對實(shí)時時間以及所調(diào)整加一時間的顯示,采取的是動態(tài)顯示的方案,六位數(shù)碼管分別對應(yīng)時鐘高低位、分鐘高低位、秒鐘高低位。 (3)在使用基于Proteus設(shè)計仿真使開發(fā)了硬件和軟件上的鬧鐘提醒功能,但考慮到STC89C51實(shí)物的按鍵位置和數(shù)量的限制,所以實(shí)物并沒有鬧鐘提醒功能,在此就不過多介紹。 三、電路設(shè)計3.1電子鐘硬件總設(shè)計電路 此設(shè)計原理框圖如圖1所示,此電路包括以下六個部分:單片機(jī),按鍵,復(fù)位電路,驅(qū)動電路、晶振及顯示電路。 .2CPU電路 中央處理器(CPU)是整個單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。
1、電源類引腳 VCC(40腳):接+5 V電源正端。 VSS(20腳):接地端。 2、時鐘類引腳 XTAL1(19腳) 和XTAL2(18腳):接外部石英晶體的一端。 3、I/O口引腳 P0口(39~32腳):P0.0~P0.7統(tǒng)稱為P口。 P1口(1~8腳):P1.0~P1.7統(tǒng)稱為P1口可作為準(zhǔn)雙向I/O口使用。 P2口(21~28腳):P2.0~P2.7統(tǒng)稱為P2口,一般可作為準(zhǔn)雙向I/O口使用。 P3口(10~17腳):P3.0~P3.7統(tǒng)稱為P3口,除了充當(dāng)I/O口的功能,還有第二功能。 4、控制引腳 RST/VPP(9腳):復(fù)位引腳,引腳上出現(xiàn)2個機(jī)器周期的高電平將使單片機(jī)復(fù)位。 LE/PROG(30腳):地址鎖存允許信號。 PSEN(29角):外部存儲器讀選通信號。 EA/Vpp(31角):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令 3.2手動復(fù)位電路 如圖3.2所示,復(fù)位電路采用上電自動復(fù)位和按鍵手動復(fù)位設(shè)計在一起,主要由型號為1nF的電解電容,8.2K和220的電阻以及按鍵S3構(gòu)成,當(dāng)開關(guān)按下時引腳RST為低電平0,斷開時引腳為高電平1。 圖3.2復(fù)位電路 3.3時鐘電路 如圖3.3所示,在內(nèi)部方式時鐘電路中,必須在XTAL1和XTAL2引腳兩端跨接石英晶體振蕩器和兩個微調(diào)電容構(gòu)成振蕩電路,通常C1和C2一般取22pF,晶振的頻率取值在1.2MHz~12MHz之間。對于外接時鐘電路,要求XTAL1接地,XTAL2腳接外部時鐘,對于外部時鐘信號并無特殊要求,只要保證一定的脈沖寬度,時鐘頻率低于12MHz即可。晶體振蕩器的振蕩信號從XTAL2端送入內(nèi)部時鐘電路,它將該振蕩信號二分頻,產(chǎn)生一個兩相時鐘信號P1和P2供單片機(jī)使用。時鐘信號的周期稱為狀態(tài)時間S,它是振蕩周期的2倍,P1信號在每個狀態(tài)的前半周期有效,在每個狀態(tài)的后半周期P2信號有效。CPU就是以兩相時鐘P1和P2為基本節(jié)拍協(xié)調(diào)單片機(jī)各部分有效工作的。 
圖3.3晶振電路 3.4驅(qū)動電路 由于本次設(shè)計用到了六位一體的共陰數(shù)碼管,受制于P0口的帶負(fù)載能力,所以增加了74LS245芯片來提升帶負(fù)載能力。 圖3.41即為基于74LS245的驅(qū)動電路,圖3.42為74LS245的內(nèi)部引腳以下列出其主要功能 當(dāng)片選端/CE低電平有效時 DIR=“0”,信號由B向A傳輸;(接收) DIR=“1”,信號由A向B傳輸;(發(fā)送) 當(dāng)CE為高電平時,A、B均為高阻態(tài)。  圖3.41 74LS245內(nèi)部結(jié)構(gòu) 圖3.42驅(qū)動顯示電路3.5按鍵控制電路 如圖3.5所示,按鍵開關(guān)K1、K2、K3、K4分別接P1.0、P1.1、P1.2 P1.3端,K1、K2、K3分別選擇對時、分、秒自加,低電平有效,K4用于確認(rèn)完成時間校隊(duì),開始計時。 
圖3.5 按鍵電路 3.6 數(shù)碼管動態(tài)顯示電路
七段共陰數(shù)碼管顯示原理如圖3.61,數(shù)碼管首先從上到右,到下到左,到中間,最后到小數(shù)點(diǎn)分別標(biāo)記為a b c d e f g dp八段其中小數(shù)點(diǎn)位DP為最高位,a段為最低位,要想顯示什么字符只需要使對應(yīng)的段發(fā)光即可,一般的習(xí)慣是單片機(jī)的端口的 圖3.61七段數(shù)碼管原理 最低位接a段,次低位接b段,...最高位(如p0.7)接dp,顯示碼從高往低表示為為 dp g f e d c b a如要顯示“1”,只需要將b、c段點(diǎn)亮即可,若是共陰極,片選是低電平選中,某一段輸出高電平點(diǎn)亮,即顯示碼為00000110 即0x06,其他的依照該方法類推。 對圖3.62六位一體的共陰數(shù)碼管,某一時刻位選通其中一位,如P2口送出位信號如20H,則P2.5為1,其余位選位均為0,則最左邊的數(shù)碼管被選中;這時在字型口輸出該位要顯示的數(shù)字或字符的字型,亮1ms左右;接著位選選通另一位,其余位選關(guān)閉,字型口輸出該位要顯示的數(shù)字或字符的字型,雖然這時前一位位選已關(guān)閉,但基于眼睛的惰性,前一位顯示的數(shù)字或字型還留在眼中,依次一位位循環(huán)顯示下去,直至最后一位顯示完畢,一個動態(tài)掃描顯示結(jié)束。 由圖3.63,可見動態(tài)掃描顯示是在執(zhí)行動態(tài)掃描顯示程序的。要連續(xù)顯示必須反復(fù)的去執(zhí)行動態(tài)掃描顯示程序。一般可把動態(tài)掃描顯示編成個子程序,主程序反復(fù)去調(diào)用它。人眼的惰性有一定時間,一般10ms左右, 超過這一時間再去執(zhí)行顯示程序,它就會閃爍,所以LED的位數(shù)不能太多 
圖3.62 六位一體共陰數(shù)碼管 圖3.63為六位數(shù)碼管動態(tài)顯示原理框圖 
圖3.61 數(shù)碼管動態(tài)顯示 四、模塊設(shè)計4.1程序設(shè)計流程 電子時鐘的軟件系統(tǒng)由主程序和子程序組成,主程序程序包含初始化參數(shù)設(shè)置、按鍵處理、數(shù)碼管顯示模塊等 (1)主程序 主程序先對顯示單元和定時器/計數(shù)器初始化,然后重復(fù)調(diào)用數(shù)碼管顯示模塊和按鍵處理模塊,當(dāng)有鍵按下,則轉(zhuǎn)入相應(yīng)的功能程序。主程序執(zhí)行流程如圖4.11 圖4.11 主程序框圖
五、調(diào)試5.1keil軟件仿真調(diào)試 (1)工程參數(shù)設(shè)置 用鼠標(biāo)左鍵單擊主菜單Project一>Options forTarget'Targetl彈出工程參數(shù)設(shè)置對話框。關(guān)于工程參數(shù)設(shè)置的內(nèi)容很多,篇幅所限,這里僅介紹通常需要設(shè)置的三個參數(shù): 設(shè)置CPU型號。前面已經(jīng)進(jìn)行了設(shè)置。 在設(shè)置對話框的"Target"標(biāo)簽下"Xtal(Mhz)"處輸入單片機(jī)的晶振 (2)編譯源文件 鼠標(biāo)左鍵單擊主菜單Project一>Built target或快捷按鈕編譯文件。若有語法錯誤,輸出窗口將有相應(yīng)提示信息。 雙擊提示信息行,光標(biāo)會停留在源程序出錯處。在此次程序設(shè)計中,經(jīng)檢查發(fā)現(xiàn):程序3條LCALL指令被錯誤輸入成了LCAAL.用戶可根據(jù)提示修改源程序,然后再次編譯。注意。Keil具有語法檢查功能,源程序中正確的指令關(guān)鍵詞將變顏色,沒變色的為輸入錯誤,方便用戶查找語法錯誤。 (3)調(diào)試程序 源程序編譯通過,表明語法正確,卻并不能保證該程序能夠正確運(yùn)行。還需要對其邏輯功能進(jìn)行調(diào)試。Keil軟件具有很強(qiáng)的軟件仿真功能。 鼠標(biāo)左擊主菜單Debug一>Sta№top DebugSession子菜單或調(diào)試/編輯模式切換按鈕。進(jìn)入調(diào)試程序工作模式,軟件窗口如圖5所示。重復(fù)點(diǎn)擊該按鈕可以實(shí)現(xiàn)在編輯模式和調(diào)試模式之間進(jìn)行切換。 調(diào)試程序時的程序運(yùn)行控制按鈕從左到右依次為復(fù)位、連續(xù)運(yùn)行,暫停、單步、過程單步、執(zhí)行完當(dāng)前子程序、運(yùn)行到光標(biāo)當(dāng)前行。復(fù)位按鈕模擬芯片的復(fù)位,它將使程序回到最開頭處執(zhí)行。當(dāng)程序處于停止?fàn)顟B(tài)時復(fù)位才有效,程序處于運(yùn)行狀態(tài)時停止按鈕才有效。 5.2 Proteus仿真調(diào)試 (1)電路連接故障分析 Proteus的連線功能很強(qiáng),如可以雙擊左鍵重復(fù)上次連線,雙擊右鍵刪除連線等。在連線過程中就出現(xiàn)了本以為連接上的節(jié)點(diǎn),實(shí)際上卻沒有連接的問題,經(jīng)分析發(fā)現(xiàn)連接上的點(diǎn)會有連接點(diǎn)出現(xiàn),及時糾正了錯誤。又例如在某些不易連接且需要較長的線路連接端口,可采用網(wǎng)絡(luò)標(biāo)號連接,但在標(biāo)號連接時,要切記標(biāo)號要易于區(qū)分,相同端口的標(biāo)號一定要相同,連接過程中就有因?yàn)闃?biāo)號連接重復(fù)的問題,而導(dǎo)致數(shù)碼管顯示亂碼的問題。在調(diào)試的時候可以通過觀察仿真的電位,紅點(diǎn)為高電平、藍(lán)點(diǎn)為低電平,或者添加電位計,例如在數(shù)碼管顯示,送位選碼時就發(fā)現(xiàn)有一位未被選中,故立即調(diào)整位選碼RR程序代碼。 (2)仿真結(jié)果分析 電子時鐘主要的設(shè)計要求是能夠?qū)崿F(xiàn)時鐘的一般功能,以及包括時間的調(diào)整功能,這個基于單片機(jī)的電子時鐘基本上實(shí)現(xiàn)了上述功能,能夠通過時間調(diào)整電路對時間進(jìn)行調(diào)整以及復(fù)位,24小時計滿后能自動清零。 啟動仿真結(jié)果5.21 
圖5.21啟動仿真結(jié)果 正常計時仿真結(jié)果如圖5.22 
圖5.2 正常計時仿真結(jié)果 5.3 實(shí)物運(yùn)行測試 在確認(rèn)程序的調(diào)試和仿真結(jié)果的無誤后,根據(jù)清翔電子STC89C51所給的版本電路原理圖,進(jìn)一步調(diào)整送顯和按鍵查詢程序,根據(jù)實(shí)際情況表明,時、分、秒的調(diào)整校對功能均為正常,設(shè)置完成按鍵也能對所校對時間開啟計時,故基本功能都正常實(shí)現(xiàn)。唯一不足的是計時精度有待提高,通過走時結(jié)果的實(shí)際情況和手機(jī)走時結(jié)果發(fā)現(xiàn)大概一個小時會慢1min左右。如圖5.31上電復(fù)位運(yùn)行結(jié)果,5.32為正常走時結(jié)果 
圖5.31上電復(fù)位運(yùn)行結(jié)果 
圖5.31 正常走時結(jié)果
六、設(shè)計體會與小結(jié)6.1心得感悟 單片機(jī)作為我們主要的專業(yè)課程之一,我覺得單片機(jī)課程設(shè)計很有必要,而且很有意義。但當(dāng)拿到題目時,確實(shí)不知道怎么著手,有些迷茫,上網(wǎng)查資料,問同學(xué),在同學(xué)的幫助下,歷時一個星期,解決一個又一個的困難,終于完成任務(wù)。 在這次課程設(shè)計中,運(yùn)用到了很多以前的專業(yè)知識,雖然過去從未獨(dú)立應(yīng)用過它們,但在學(xué)習(xí)的過程中帶著問題去學(xué)我發(fā)現(xiàn)效率很高,這是我做這次課程設(shè)計的一大收獲。另外,要做好一個課程設(shè)計,就必須做到:在設(shè)計程序之前,對所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,知道該單片機(jī)內(nèi)有哪些資源;要有一個清晰的思路和一個完整的的軟件流程圖;在設(shè)計程序時,不能妄想一次就將整個程序設(shè)計好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,一個程序的完美與否不僅僅是實(shí)現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設(shè)計課程過程中遇到問題是很正常的,但我們應(yīng)該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題的課程設(shè)計結(jié)束了,但是從中學(xué)到的知識會讓我受益終身。發(fā)現(xiàn)、提出、分析、解決問題和實(shí)踐能力的提高都會受益于我在以后的學(xué)習(xí)、工作和生活中。設(shè)計過程,好比是我們?nèi)祟惓砷L的歷程,常有一些不如意,但畢竟這是第一次做,難免會遇到各種各樣的問題。在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,不能靈活運(yùn)用。 通過這次設(shè)計,我懂得了學(xué)習(xí)的重要性,了解到理論知識與實(shí)踐相結(jié)合的重要意義,學(xué)會了堅持、耐心和努力,這將為自己今后的學(xué)習(xí)和工作做出了最好的榜樣。另外,要非常感謝我的指導(dǎo)老師,是她指引我克服一個由一個的困難,讓我學(xué)會對困難無所畏懼,以及對問題的一些很重要的思考方法。 我學(xué)會對困難無所畏懼,以及對問題的一些很重要的思考方法 - ORG 0000H
- LJMP MAIN
- ORG 000BH
- LJMP SHIZ
- ORG 30H
- MAIN:MOV 79H,#00H ;秒針低位地址
- MOV 7AH,#00H ;秒針高位地址
- MOV 7BH,#00H ;分針低位地址
- MOV 7CH,#00H ;分針高位地址
- MOV 7DH,#00H ;時針低位地址
- MOV 7EH,#00H ;時針高位地址
- MOV TMOD,#01H ;定時器工作于方式1
- MOV TL0,#0DCH ;賦初值產(chǎn)生62.5ms中斷
- MOV TH0,#0BH
- MOV SP,#60H
- SETB EA ;開中斷
- SETB ET0
- SETB TR0
- MOV 30H,#10H ;16次中斷產(chǎn)生1S計時
- LED1:LCALL XIANSHI ;送顯、依此查詢是否調(diào)整時、分、秒
- JNB P3.0,L1
- T2: JNB P3.1,L2
- T3:JNB P3.2,L3
- T4:JNB P3.3,L4
- LJMP LED1 ;中斷等待
- L1:LCALL XIANSHI;查詢到時針有調(diào)整一次則送顯、關(guān)中斷、接著查詢分針
- JB P3.0,T2
- CLR EA
- CLR TR0
- LL1:LCALL XIANSHI
- JNB P3.0,LL1 ;查詢時針調(diào)整、送顯
- MOV R0,#7EH ;送時針高位地址
- LCALL DAAD1 ;調(diào)用DA十進(jìn)制調(diào)整、分離高低位
- MOV A,R2 ;判斷時針是否調(diào)整到24,若到則調(diào)用清零
- XRL A,#24H ;時針未滿24則繼續(xù)計時
- JNZ LED1
- LCALL CLR0 ;時針計滿,時針清零、送顯
- LJMP LED1
- L2:LCALL XIANSHI ;查詢到分針有調(diào)整一次則送顯、關(guān)中斷、接著查詢分針
- JB P3.1,T3
- CLR EA
- CLR TR0
- LL2:LCALL XIANSHI
- JNB P3.1,LL2 ;查詢分針調(diào)整、送顯
- MOV R0,#7CH ;送時針高位地址
- LCALL DAAD1 ;調(diào)用DA十進(jìn)制調(diào)整、分離高低位
- MOV A,R2 ;判斷分針是否調(diào)整到60,若到則調(diào)用清零
- XRL A,#60H ;分針未滿60則繼續(xù)計時
- JNZ LED1
- LCALL CLR0 ;時針計滿,時針清零、送顯
- LJMP LED1
- L3:LCALL XIANSHI ;查詢到秒針有調(diào)整一次則送顯、關(guān)中斷、接著查詢分針
- JB P3.2,T4
- CLR EA
- CLR TR0
- LL3:LCALL XIANSHI ;查詢秒針調(diào)整、送顯
- JNB P3.2,LL3 ;送時針高位地址
- MOV R0,#7AH ;調(diào)用DA十進(jìn)制調(diào)整、分離高低位
- LCALL DAAD1 ;判斷分針是否調(diào)整到60,若到則調(diào)用清零
- MOV A,R2 ;分針未滿60則繼續(xù)計時
- XRL A,#60H
- JNZ LED1
- LCALL CLR0 ;時針計滿,時針清零、送顯
- LJMP LED1
- L4:LCALL XIANSHI
- JB P3.3,TT0
- LL4:LCALL XIANSHI ;查詢是否設(shè)置完成按鈕被按下
- JNB P3.3,LL4
- SETB EA ;若時分秒確認(rèn)調(diào)整結(jié)束,則重開中斷,開始計時
- SETB TR0
- TT0:LJMP LED1
- SHIZ:PUSH PSW ;累加器和程序狀態(tài)寄存器入棧,保護(hù)
- PUSH ACC
- SETB PSW.3 ;切換工作組寄存器
- MOV TL0,#0DCH ;定時方式1初值重載
- MOV TH0,#0BH
- MOV A,30H ;累加器賦值16
- DEC A ;累加器進(jìn)入中斷一次則減一
- MOV 30H,A ;減一后A給30H
- JNZ RET0 ;判斷16*62.5ms是否到來;未到則返回等待
- MOV 30H,#10H ;若1S未來則重新賦值16給30H
- MOV R0,#7AH ;秒針地址給R0
- LCALL DAAD1 ;調(diào)用DA十進(jìn)制調(diào)整、分離高低位
- MOV A,R2 ;秒針DA調(diào)整結(jié)果送A
- XRL A,#60H ;判斷秒針是否計到60,若到60則A為0
- JNZ RET0 ;查詢累加器A是否為0,不為零送顯
- LCALL CLR0 ;累加器為0則秒針清零,向分鐘進(jìn)位
- MOV R0,#7CH ;分針地址給R0
- LCALL DAAD1 ;調(diào)用DA十進(jìn)制調(diào)整、分離分針高低位
- MOV A,R2 ;分針DA調(diào)整結(jié)果送A
- XRL A,#60H ;判斷分針是否計到60,若到60則A為0
- JNZ RET0 ;查詢累加器A是否為0,不為零送顯
- LCALL CLR0 ;累加器為0則秒針清零,向時針進(jìn)位
- MOV R0,#7EH ;時針地址給R0
- LCALL DAAD1 ;調(diào)用DA十進(jìn)制調(diào)整、分離時針高低位
- MOV A,R2 ;時針DA調(diào)整結(jié)果送A
- XRL A,#24H ;判斷時針是否計到24,若到24則A為0
- JNZ RET0 ;查詢累加器A是否為0,不為零送顯
- LCALL CLR0 ;累加器為0則時針清零
- RET0:POP ACC ;累加器和程序狀態(tài)寄存器出棧;中斷返回
- POP PSW
- RETI
- XIANSHI:MOV R5,#06H ;位選數(shù)碼管的個數(shù)
- MOV R0,#79H ;秒針低位地址
- MOV 70H,#7FH ;右移位移
- LED:MOV A,70H ;相應(yīng)指針高位送顯
- MOV P0,A ;送段碼
- SETB P2.7 ;開位選
- CLR P2.7 ;關(guān)位選
- MOV A,@R0 ;查表
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P0,A ;查表段碼送P0
- SETB P2.6 ;開段選
- CLR P2.6 ;關(guān)段選
- LCALL DLY
- MOV A,70H ;保存上個位選數(shù)碼管位置
- RR A ;右移,位選下一個數(shù)碼管
- MOV 70H,A ;取上次結(jié)果
- INC R0 ;送高位地址
- DJNZ R5,LED ;判斷動態(tài)掃描是否完成
- RET
- DAAD1:MOV A,@R0 ;送相應(yīng)指針地址
- DEC R0 ;地址減一
- SWAP A ;上一次數(shù)碼管段碼結(jié)果高低四位交換
- ORL A,@R0 ;高低四位合并
- ADD A,#01H ;加一
- DA A ;DA調(diào)整
- MOV R2,A ;保存DA調(diào)整結(jié)果給R2
- ANL A,#0FH ;分離取低位
- MOV @R0,A
- MOV A,R2
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
全部資料51hei下載地址(仿真工程+程序+word格式設(shè)計報告):
電子鐘課程設(shè)計.7z
(12.24 MB, 下載次數(shù): 179)
2019-1-17 03:52 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|