版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 第1章 緒論</b></p><p><b> 1. 設(shè)計要求</b></p><p> ?。?)系統(tǒng)可以按“秒”進(jìn)行計時。</p><p> ?。?)數(shù)字時鐘可以顯示小時(00-23)、分鐘(00-59)和秒(00-59)。</p><p> ?。?)可通過按鍵K
2、1來選擇設(shè)置“小時”、“分鐘”和“秒”。設(shè)置時可通過“加”和“減”按鍵(K2、K3)來調(diào)整時間;設(shè)置過程中時鐘停止計時。</p><p> (4)無鍵按下三秒后,自動進(jìn)入時鐘的計時程序。</p><p><b> 2. 設(shè)計方案</b></p><p> 采用AT89C51芯片作為硬件核心,其內(nèi)部采用Flash ROM,具有4KB ROM
3、 存儲空間,能于3V的超低壓工作,本系統(tǒng)的計時方案是利用單片機(jī)內(nèi)部的定時/計數(shù)器進(jìn)行中斷定時, 配合軟件延時實現(xiàn)對時、分、秒的計時。</p><p> 整個系統(tǒng)的控制方案是:上電后系統(tǒng)自動進(jìn)入時間顯示,從00:00:00 開始計時。按下P1.0鍵,進(jìn)入調(diào)秒狀態(tài),時鐘停止計時;按P1.1或P1.2鍵可進(jìn)行加1或減1操作;繼續(xù)按P1.0鍵可分別進(jìn)行分位、時調(diào)整;無鍵按下3秒鐘后退出調(diào)整狀態(tài),自動進(jìn)入時鐘的計時和顯示
4、。</p><p> 整個系統(tǒng)的硬件原理框圖如圖1.1,它采用的是AT89C51單片機(jī),只用了P1口。為了簡化硬件電路,LED顯示采用了動態(tài)掃描的方式實現(xiàn), LED采用共陽極數(shù)碼管,驅(qū)動電流由三極管9012提供。為了提高計數(shù)精度,所采用的晶振頻率為12MHz。</p><p><b> 第2章 硬件設(shè)計</b></p><p><b
5、> 1 單片機(jī)的選擇</b></p><p> 本課程選用AT89C51型號的單片機(jī)。 AT89C51 是美國ATMEL 公司生產(chǎn)的低電壓,高性能CMOS8 位單片機(jī),片內(nèi)含4k bytes 的可反復(fù)擦寫的只讀程序存 儲器(PEROM)和128 bytes 的隨機(jī)存取數(shù)據(jù)存儲器(RAM ),器件采用ATMEL 公司的高密度、非易失性存儲技術(shù)生產(chǎn), 兼容標(biāo)準(zhǔn)MCS-51 指令系統(tǒng),片內(nèi)置通用
6、8 位 央處理器(CPU)和Flash 存儲單元,功能強(qiáng)大AT89C51 單片機(jī)可為您提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。</p><p><b> 主要性能參數(shù):</b></p><p> ·與MCS-51 產(chǎn) 指令系統(tǒng)完全兼容 </p><p> ·4k 字節(jié)可重擦寫Flash 閃速存儲器 <
7、;/p><p> ·1000 次擦寫周期 </p><p> ·全靜態(tài)操作:0Hz-24MHz </p><p> ·三級加密程序存儲器 </p><p> ·128×8 字節(jié)內(nèi)部RAM </p><p> ·32 個可編程I /O 口線 </p
8、><p> ·2 個16 位定時/計數(shù)器</p><p><b> 2. 顯示方案</b></p><p> 由于系統(tǒng)要顯示的內(nèi)容較簡單,顯示量不多,所以選用數(shù)碼管既方便又經(jīng)濟(jì)。LED有共陰極和共陽極兩種。如圖2.2所示。</p><p> 二極管的陰極連接在一起,通常此公共陰極接地,而共陽極則將發(fā)光二極管
9、的陽極連接在一起,接入+5V的電壓。一位顯示器由8個發(fā)光二極管組成,其中7個發(fā)光二極管構(gòu)成字型“8”的各個筆劃(段)a~g,另一個小數(shù)點(diǎn)為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管施加一定的正向電壓時,該段筆劃即亮;不加電壓則暗。為了保護(hù)各段LED不被損壞,需外加限流電阻。</p><p> 圖2.2 LED數(shù)碼管結(jié)構(gòu)原理圖</p><p> 眾所周知,LED顯示數(shù)碼管通常由硬件7段譯碼集成電
10、路,完成從數(shù)字到顯示碼的譯碼驅(qū)動。本系統(tǒng)采用軟件譯碼,以減小體積,降低成本和功耗,軟件譯碼的另一優(yōu)勢還在于比硬件譯碼有更大的靈活性。所謂軟件譯碼,即由單片機(jī)軟件完成從數(shù)字到顯示碼的轉(zhuǎn)換。從LED數(shù)碼管結(jié)構(gòu)原理可知,為了顯示字符,要為LED顯示數(shù)碼管提供顯示段碼,組成一個“8”字形字符的7段,再加上1個小數(shù)點(diǎn)位,共計8段,因此提供給LED數(shù)碼管的顯示段碼為1個字節(jié)。各段碼位與顯示段的對應(yīng)關(guān)系如表2.2。</p><p&
11、gt; 表2.2 各段碼位的對應(yīng)關(guān)系</p><p> 需說明的是當(dāng)用數(shù)據(jù)口連接LED數(shù)碼管a~dp引腳時,不同的連接方法,各段碼位與顯示段有不同的對應(yīng)關(guān)系。通常數(shù)據(jù)口的D0位與a段連接,D1位與b段連接,……D7位與dp段連接,如表1所示,表2.3為用于LED數(shù)碼管顯示的十六進(jìn)制數(shù)和空白字符與P的顯示段碼。</p><p> 根據(jù)AT89C2051單片機(jī)灌電流能力強(qiáng),拉電流能力弱的
12、特點(diǎn),我們選用共陽數(shù)碼管。將AT89C2051的P1.0~P1.7分別與共陽數(shù)碼管的a~g及dp相連,高電平的位對應(yīng)的LED數(shù)碼管的段暗,低電平的位對應(yīng)的LED數(shù)碼管的段亮,這樣,當(dāng)P0口輸出不同的段碼,就可以控制數(shù)碼管顯示不同的字符。例如:當(dāng)P0口輸出的段碼為1100 0000,數(shù)碼管顯示的字符為0。</p><p> 表2.3 LED顯示段碼</p><p> 注:(1)本表所列各
13、字符的顯示段碼均為小數(shù)點(diǎn)不亮的情況。</p><p> ?。?)“空白”字符即沒有任何顯示。</p><p> 數(shù)碼管顯示器有二種工作方式,即靜態(tài)顯示方式和動態(tài)掃描顯示方式。為節(jié)省端口及降低功耗,本系統(tǒng)采用動態(tài)掃描顯示方式。動態(tài)掃描顯示方式需解決多位LED數(shù)碼管的“段控”和“位控”問題,本電路的“段控”(即要顯示的段碼的控制)通過P0口實現(xiàn);而每一位的公共端,即LED數(shù)碼管的“位控”,則
14、由P3口控制。這種連接方式由于多位字段線連在一起,因此,要想顯示不同的內(nèi)容,必然要采取輪流顯示的方式,即在某一瞬間,只讓其中的某一位的字位線處于選通狀態(tài),其它各位的字位線處于斷開狀態(tài),同時字段線上輸出這一位相應(yīng)要顯示字符的字段碼。在這一瞬時,只有這一位在顯示,其他幾位則暗。在本系統(tǒng)中,字位線的選通與否是通過PNP三極管的導(dǎo)通與截止來控制,即三極管處于“開關(guān)”狀態(tài)。</p><p><b> 第3章
15、軟件設(shè)計</b></p><p><b> 主程序</b></p><p> 主程序功能主要是初始化、正?,F(xiàn)實時間和判斷功能轉(zhuǎn)換鍵。流程圖如圖3.1所示。</p><p> 圖3.1 主程序流程圖</p><p> 2. 定時器T0中斷服務(wù)程序</p><p> 定時器T0用
16、于時間計時。定時溢出中斷周期可設(shè)為50ms,中斷進(jìn)入后,時鐘計時累計20次(即1s)時,對秒計數(shù)單元進(jìn)行加1操作。時鐘計數(shù)單元在定義的6個單元70H~75H中, 70H~71H 存放秒數(shù)據(jù), 72H~73H存放分?jǐn)?shù)據(jù), 74H~75H存放時數(shù)據(jù)。最大計時值為23小時59分59秒。在計數(shù)單元中采用十進(jìn)制BCD碼計數(shù),秒、分、時之間滿60進(jìn)位。</p><p><b> 顯示子程序</b>&l
17、t;/p><p> 數(shù)碼管顯示的數(shù)據(jù)放在內(nèi)存單元70H~75H中,其中70H~71H存放秒數(shù)據(jù), 72H~73H]存放分?jǐn)?shù)據(jù), 74H~75H存放時數(shù)據(jù),每一單元內(nèi)均為十進(jìn)制BCD碼。由于采用軟件動態(tài)掃描實現(xiàn)數(shù)據(jù)顯示功能,顯示用的十進(jìn)制BCD碼數(shù)據(jù)的對應(yīng)段碼存放在ROM表中,顯示時,先取出70H~75H中的某一地址中的數(shù)據(jù),然后查表得對應(yīng)的顯示段碼從P0口輸出,P2口將對應(yīng)的數(shù)碼管位選中供電,就能顯示該地址單元的數(shù)
18、據(jù)值。 </p><p> 定時器T1中斷服務(wù)程序</p><p> 進(jìn)行時間調(diào)整是,正在被調(diào)整的時間以閃爍的形式表現(xiàn),定時器T1用于產(chǎn)生閃爍的時間間隔,每隔0.3s閃爍一次。</p><p><b> 調(diào)時功能程序</b></p><p> 通過按鍵K1來選擇設(shè)置“小時”、“分鐘”和“秒”。</p>
19、<p> 通過“加”和“減”按鍵(K2、K3)來調(diào)整時間</p><p><b> 6.延時程序</b></p><p> 因為系統(tǒng)是動態(tài)顯示,為了確保系統(tǒng)在有效顯示時間范圍內(nèi)必須執(zhí)行顯示程序,所以使用延時程序。</p><p><b> 7. 結(jié)論</b></p><p>
20、 這次課程設(shè)計項目雖然是最簡單的數(shù)字時鐘設(shè)計,但用的技術(shù)和知識是源于課本又遠(yuǎn)遠(yuǎn)高于課本的,比如說AT89C51基本操作知識,匯編語言方面的知識等。</p><p> 我負(fù)責(zé)的是軟件設(shè)計的時間設(shè)置以及T1中斷部分,運(yùn)用到了按鍵部分以及定時器/計數(shù)器部分的知識。通過這次自己編寫程序,使我擺脫了以往單純的理論知識學(xué)習(xí)狀態(tài),并且在和實際設(shè)計的結(jié)合鍛煉了我的綜合運(yùn)用所學(xué)的專業(yè)基礎(chǔ)知識。不過在這次課設(shè)中我也遇到了不少問題,
21、實際操作時才發(fā)現(xiàn)課堂知識和實際運(yùn)用還是有差距的,不過最終還是在老師或同學(xué)的幫助下一個一個解決了。</p><p> 通過這次對課程設(shè)計,我也認(rèn)識到自己對單片機(jī)應(yīng)用方面的知識的貧乏,對于書本上的很多理論知識還不能靈活運(yùn)用,有很多我們掌握的知識在等著我去學(xué)習(xí),我會在以后的學(xué)習(xí)生活中彌補(bǔ)我所缺少的知識。同時還從中學(xué)到了一件很重要的東西,那就是如何從理論到實踐的轉(zhuǎn)化。此次的課程設(shè)計給我奠定了一個實踐基礎(chǔ),我會在以后的學(xué)
22、習(xí),生活中磨練自己,使自己掌握更多的技術(shù)能力。</p><p><b> 8.參考文獻(xiàn)</b></p><p> [1]楊忠義.單片機(jī)課程設(shè)計指導(dǎo).北京:清華大學(xué)出版社,2009.201~217</p><p> [2]靳達(dá).單片機(jī)應(yīng)用系統(tǒng)開發(fā)實例導(dǎo)航.北京:人民郵電出版社,2004.1~37</p><p>
23、[3]南建輝.MCS-51單片機(jī)原理及應(yīng)用實例.北京:清華大學(xué)出版社,2004.92~117</p><p> [4]劉海成.單片機(jī)及應(yīng)用系統(tǒng)設(shè)計原理與實踐.北京:北京航天航空大學(xué)出版社,2009.129~180</p><p><b> 附錄</b></p><p> ORG 0000H</p><p>
24、 AJMP MAINT ;轉(zhuǎn)主程序</p><p><b> NOP</b></p><p> ORG 000BH</p><p> AJMP INT01 ;轉(zhuǎn)定時器T0中斷程序</p><p><b> NOP</b></p><
25、p> ORG 001BH</p><p> AJMP INT11 ;轉(zhuǎn)定時器T1中斷程序</p><p><b> NOP</b></p><p> MAINT: MOV R0,#7FH ;00H~7FH單元清零</p><p><b> CLR
26、 A</b></p><p> WZ1: MOV @R0,A</p><p> DJNZ R0,WZ1</p><p> MOV SP,#30H ;置堆棧指針</p><p> MOV 5AH,#0AH ;放入“熄滅符”數(shù)據(jù)</p><p> MOV
27、TMOD,#11H ;設(shè)T0,T1為16位定時器</p><p> MOV TL0,#0B0H ;置50 ms定時初值</p><p> MOV TH0,#3CH</p><p> MOV TL1,#0B0H</p><p> MOV TH1,#3CH</p><p> SETB
28、EA ;開中斷</p><p> SETB ET0 ;允許T0中斷</p><p> SETB TR0 ;啟動T0</p><p> MOV R4,#14H ;用于產(chǎn)生1 s定時</p><p> MAINT1: LCALL XS
29、ZCX ;調(diào)用顯示子程序</p><p> JNB P1.0,SJTZ0 ;功能鍵按下,進(jìn)入調(diào)時程序</p><p> SJMP MAINT</p><p> ******T0中斷服務(wù)程序******</p><p> INT01: PUSH ACC
30、 ;保護(hù)現(xiàn)場</p><p><b> PUSH PSW</b></p><p> CLR ET0 ;關(guān)T0中斷</p><p> CLR TR0 ;關(guān)定時器T0</p><p> MOV A,#0B7H
31、;修正中斷響應(yīng)時間</p><p> ADD A,TL0</p><p> MOV TL0,A</p><p> MOV A,#3CH</p><p> ADDC A,TH0</p><p> SETB TR0 ;啟動定時器T0</p><p
32、> DJNZ R4,INT0U ;20次中斷未到退出中斷</p><p> AD1: MOV R4,#14H ;R4重新賦值</p><p> MOV R0,#51H ;指向秒計時單元(50H,51H)</p><p> LCALL ADD1
33、;調(diào)用加1 s程序</p><p> MOV A,R3 ;秒數(shù)據(jù)放入A</p><p> CLR C ;清進(jìn)位標(biāo)志</p><p> CJNE A,#60H,AD2 ;小于60 s嗎</p><p> AD2: JC INT0U
34、 ;小于60 s退出中斷</p><p> CLR A ;大于或等于60 s,清秒計數(shù)單元</p><p> MOV @R0,A</p><p><b> DEC R0</b></p><p> MOV @R0,A</p&g
35、t;<p> MOV R0,#57H ;指向分計時單元 (56H,57H)</p><p> ACALL ADD1 ;調(diào)用加1 min程序</p><p> MOV A,R3 ;分?jǐn)?shù)據(jù)放入A</p><p><b> CLR C</b&
36、gt;</p><p> CJNE A,#60H,AD3 ;小于60 min嗎</p><p> AD3: JC INT0U ;小于60 min退出中斷</p><p> CLR A ;大于或等于60 min,清分計數(shù)單元</p>
37、<p> MOV @R0,A</p><p><b> DEC R0</b></p><p> MOV @R0,A</p><p> MOV R0,#59H ;指向小時計時單元 (58H,59H)</p><p> ACALL ADD1
38、 ;調(diào)用加1 h程序</p><p> MOV A,R3 ;小時數(shù)據(jù)放入A</p><p><b> CLR C</b></p><p> CJNE A,#24H,AD4 ;小于24 h嗎</p><p> AD4: JC INT0U
39、 ;小于24 h退出中斷</p><p> CLR A ;大于或等于24 h清小時計數(shù)單元</p><p><b> MOV @R0,A</b></p><p><b> DEC R0</b></p><p> MOV
40、 @R0,A</p><p> INT0U: MOV 52H,56H ;中斷退出時將分、時計時單元數(shù)</p><p> MOV 53H,57H ;據(jù)移入對應(yīng)顯示單元</p><p> MOV 54H,58H</p><p> MOV 55H,59H</p&g
41、t;<p> POP PSW ;恢復(fù)現(xiàn)場</p><p><b> POP ACC</b></p><p> SETB ET0 ;開放T0中斷</p><p> RETI ;中斷返回</p><
42、p> ******顯示子程序******</p><p> XSZCX: MOV R1,#50H ;顯示數(shù)據(jù)首址</p><p> MOV R5,#0FEH ;掃描控制字初值</p><p> MAXY: MOV A,R5 ;掃描控制字送A</p><
43、;p> MOV P2,A ;輸出掃描控制字</p><p> MOV A,@R1 ;取顯示數(shù)據(jù)</p><p> MOV DPTR,#ABC ;取段碼表首地址</p><p> MOVC A,@A+DPTR ;取對應(yīng)段碼</p><p>
44、MOV P1,A ;P1口輸出段碼</p><p> LCALL YS1MS ;延時1 ms</p><p> INC R1 ;顯示地址增1</p><p> MOV A,R5 ;掃描控制字送A</p><
45、;p> JNBACC.5,ENDOUT ;ACC.5為0時一次顯示結(jié)束</p><p> RL A ;控制字左移</p><p> MOV R5,A ;制字送回R5中</p><p> AJMP MAXY ;循環(huán)顯示下一個數(shù)據(jù)
46、</p><p> ENDOUT: MOV P2,#0FFH ;一次顯示結(jié)束,P2口復(fù)位</p><p> MOV P1,#0FFH ;P1口復(fù)位</p><p> RET ;子程序返回 </p><p> ****** T1中斷服
47、務(wù)程序******</p><p> INT11: PUSH ACC ;中斷保護(hù)現(xiàn)場</p><p> PUSH PSW</p><p> MOV TL1,#0B0H ;裝定時器T1初值</p><p> MOV TH1,#3CH </p><p&
48、gt; DJNZ R2,INT1U ;0.3 s未到退出中斷</p><p> MOV R2,#06H ;重裝0.3 s定時用初值</p><p> CPL 02H ;0.3 s定時到,對閃爍標(biāo)志取反</p><p> JB 02H,CCC1 ;02H
49、位為1時顯示單元“熄滅”</p><p> MOV 52H,56H ;02H位為0時顯示正常</p><p> MOV 53H,57H</p><p> MOV 54H,58H</p><p> MOV 55H,59H</p><p> INT1U: POP PSW
50、 ;恢復(fù)現(xiàn)場</p><p><b> POP ACC</b></p><p> RETI ;退出中斷</p><p> INT0U: POP PSW ;恢復(fù)狀態(tài)字(出棧)</p><p> PO
51、P ACC ;恢復(fù)累加器</p><p> RETI ;中斷返回</p><p> ******時鐘時間調(diào)整程序******</p><p> SET0: LCALL XSZCX ;通過調(diào)用顯示時間程序延時消抖動</p><p>
52、 JNBP1.0,SJTZ1</p><p> SJMP MAINT1 ;功能鍵沒有按下,顯示時間</p><p> SET1: CLR ET0 ;關(guān)閉定時器T0中斷</p><p> CLR TR0 ;關(guān)閉定時器T0</p><p> M
53、OV R2,#06H ;進(jìn)入調(diào)時狀態(tài),置閃爍定時初值</p><p> SETB ET1 ;允許T1中斷</p><p> SETB TR1 ;啟動T1</p><p> SET2: JNB P1.0,SET1 ;P1.0端為0(鍵未釋放),等待</p
54、><p> CLR 01H ;置調(diào)分標(biāo)志位為1</p><p> SET4: JB P1.0,SET3 ;等待鍵按下</p><p> JNB P1.0,HOUR ;有鍵按下,進(jìn)入調(diào)小時狀態(tài)</p><p> JB P1.0,SET10 ;等待鍵
55、按下</p><p> JNB P1.0,MINUTE ;有鍵按下,進(jìn)入調(diào)分狀態(tài)</p><p> JB P1.0,SET12 ;等待鍵按下</p><p> JNB P1.0,SECOND ;有鍵按下,進(jìn)入調(diào)秒狀態(tài)</p><p> MOV A,R3 ;取要調(diào)整的
56、單元數(shù)據(jù)</p><p><b> CLR C</b></p><p> KMTES: SETB ET0 ;省電狀態(tài),開T0中斷</p><p> SETB TR0 ;啟動T0(開時鐘)</p><p> KMA: JB P1.0,$
57、 ;無按鍵按下,等待</p><p> LCALL XSZCX ;通過調(diào)用顯示時間程序延時消抖動</p><p> JB P1.1,KMA ;是干擾返回等待</p><p> KMA1: JNB P1.0,$ ;等待鍵釋放</p><p> L
58、JMP MAINT1 ;返回主程序,顯示時間</p><p> HOUR: JNB P1.0,SET5 ;等待鍵釋放</p><p> SETB 01H ;置調(diào)小時標(biāo)志位</p><p> SET6: JB P1.0,SET9 ;等待鍵按下</p>
59、<p> LCALL TM3s ;有鍵按下延時3秒</p><p> LCALL XSZCX ;消抖</p><p> JNB P1.0,STOP ;按下時間大于3秒,退出調(diào)整狀態(tài)</p><p> MOV R0,#70H ;小于3秒,調(diào)整小時</p>&
60、lt;p> JB P1.1, SET3 ;等待鍵按下</p><p> JNB P1.1, ADD1 ;P1.1按下,調(diào)時間加1子程序</p><p> JB P1.2, SET3 ;等待鍵按下</p><p> JNB P1.2,SUB-H ;P1.2按下,調(diào)小時減1子程序
61、 </p><p> MOV A,R3</p><p><b> CLR C</b></p><p> CJNE A,#24H,BJ24 ;計時單元與24比較</p><p> BJ24: JC SET6, ;小于24轉(zhuǎn)SET6循環(huán)</p>
62、<p> CLR A ;大于或等于24,則清零</p><p> MOV @R0,A</p><p> DEC R0</p><p> MOV @R0,A</p><p> AJMP SET6 ;轉(zhuǎn)SET6循環(huán)</p>&
63、lt;p> MINUTE: JNB P1.0,SET10 ;等待鍵釋放</p><p> SETB 01H ;置調(diào)分鐘標(biāo)志位</p><p> SET7: JB P1.0,SET11 ;等待鍵按下</p><p> LCALL TM3s ;有鍵按下延時
64、3秒</p><p> LCALL XSZCX ;消抖</p><p> JNB P1.0,STOP ;按下時間大于3秒,退出調(diào)整狀態(tài)</p><p> MOV R0,#70H ;小于3秒,調(diào)整分鐘</p><p> JB P1.1,SET11 ;等待
65、鍵按下</p><p> JNB P1.1, ADD1 ;P1.1按下,調(diào)時間加1子程序</p><p> JB P1.2, SET11 ;等待鍵按下</p><p> JNB P1.2,SUB-M ;P1.2按下,調(diào)分減1子程序 </p><p> MOV A,R3&
66、lt;/p><p><b> CLR C</b></p><p> CJNE A,#60H,BJ601 ;計時單元與60比較</p><p> BJ601: JC SET7, ;小于24轉(zhuǎn)SET7循環(huán)</p><p> CLR A
67、 ;大于或等于24,則清零</p><p> MOV @R0,A</p><p> DEC R0</p><p> MOV @R0,A</p><p> AJMP SET7 ;轉(zhuǎn)SET7循環(huán)</p><p> SECOND:JNB P1.0,SET12
68、 ;等待鍵釋放</p><p> SETB 01H ;置調(diào)秒鐘標(biāo)志位</p><p> SET8: JB P1.0,SET13 ;等待鍵按下</p><p> LCALL TM3s ;有鍵按下延時3秒</p><p> LCALL XSZCX
69、 ;消抖</p><p> JNB P1.0,STOP ;按下時間大于3秒,退出調(diào)整狀態(tài)</p><p> MOV R0,#70H ;小于3秒,調(diào)整分鐘</p><p> JB P1.1,SET13 ;等待鍵按下</p><p> JNB P1.1, ADD1
70、 ;P1.1按下,調(diào)時間加1子程序</p><p> JB P1.2, SET13 ;等待鍵按下</p><p> JNB P1.2,SUB-S ;P1.2按下,調(diào)時間減1子程序 </p><p> MOV A,R3</p><p><b> CLR C</b&g
71、t;</p><p> CJNE A,#60H,BJ602 ;計時單元與60比較</p><p> BJ602: JC SET8, ;小于24轉(zhuǎn)SET8循環(huán)</p><p> CLR A ;大于或等于24,則清零</p><p> MOV @R0,
72、A</p><p> DEC R0</p><p> MOV @R0,A</p><p> AJMP SET8 ;轉(zhuǎn)SET8循環(huán)</p><p> OUT: JNB P1.0,SETOUT1 ;退出調(diào)時狀態(tài),等待鍵釋放</p><p> LCALL
73、XSZCX ;通過調(diào)用顯示程序延時消抖動</p><p> JNB P1.0,SETOUT ;是抖動,返回SETOUT等待</p><p> MOV 20H,#00H ;清調(diào)時標(biāo)志位</p><p> CLR TR1 ;關(guān)閉T1</p><p&g
74、t; CLR ET1 ;關(guān)T1中斷</p><p> SETB TR0 ;啟動T0</p><p> SETB ET0 ;開T0中斷</p><p> LJMP MAINT1 ;返回主程序</p>
75、<p> SET1: LCALL XSZCX ;鍵釋放等待時,調(diào)用顯示子程序</p><p> AJMP SET2 ;防止此時無時鐘顯示 </p><p> SET3: LCALL XSZCX ;等待調(diào)小時按鍵時時鐘顯示用</p><p>
76、AJMP SET4 ;調(diào)時等待</p><p> SET5: LCALL XSZCX ;鍵釋放等待時調(diào)用顯示程序(調(diào)小時)</p><p> AJMP SETHH ;防止鍵按下時無時鐘顯示</p><p> SET9: LCALL XSZCX
77、 </p><p> AJMP SET6</p><p> SET10: LCALL XSZCX ;鍵釋放等待時調(diào)用顯示程序(調(diào)分鐘)</p><p> AJMP SETHH ;防止鍵按下時無時鐘顯示</p><p> SET11: LCALL XSZC
78、X </p><p> AJMP SET7</p><p> SET12: LCALL XSZCX ;鍵釋放等待時調(diào)用顯示程序(調(diào)秒鐘)</p><p> AJMP SETHH ;防止鍵按下時無時鐘顯示</p><p> SET13: LCA
79、LL XSZCX </p><p> AJMP SET8</p><p> SETOUT1:LCALL XSZCX</p><p> AJMP OUT</p><p> ****** 加1子程序******</p><p> ADD1: MOV A,@R0
80、 ;取出現(xiàn)計時數(shù)據(jù)放入A</p><p> DEC R0 ;指向前一單元</p><p> SWAP A ;A中高4位與低4位互換</p><p> ORL A,@R0 ;前一單元中數(shù)據(jù)放入A中低4位</p><
81、;p> ADD A,#01H ;A加1</p><p> DA A ;十進(jìn)制調(diào)整</p><p> MOV R3,A ;移入R3寄存器</p><p> ANL A,#0FH ;高4位變0</p>
82、<p> MOV @R0,A ;放回前一地址單元</p><p> MOV A,R3 ;取回R3中暫存數(shù)據(jù) </p><p> INC R0 ;指向當(dāng)前地址單元</p><p> SWAP A
83、;A中高4位與低4位互換</p><p> ANL A,#0FH ;高4位變0</p><p> MOV @R0, A ;數(shù)據(jù)存入當(dāng)前地址單元</p><p> RET ;子程序返回</p><p> ****** 時減1子
84、程序******</p><p> SUB-H: MOV A,@R0 ;取當(dāng)前計時單元數(shù)據(jù)到A</p><p> DEC R0 ;指向前一地址</p><p> SWAP A ;A中數(shù)據(jù)高4位與低4位交換</p><p>
85、 ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低4位</p><p> JZ SUB-H1 ;00減1為23(小時)</p><p> DEC A ;A減1操作</p><p> SUB-H11: MOV R3,A
86、 ;移入R3寄存器</p><p> ANL A,#0FH ;高4位變0</p><p> CLR C ;清進(jìn)位標(biāo)志</p><p> SUBB A,#0FH; ;時個位是否大于9</p><p> SUB-H111: JC
87、 SUB-H110 </p><p> MOV @R0,#09H ;大于等于0AH,為9</p><p> SUB-H10: MOV A,R3 ;取回R3中暫存數(shù)據(jù)</p><p> INC R0 ;指向當(dāng)前地址單元</p><p>
88、 SWAP A ;A中數(shù)據(jù)高4位與低4位交換</p><p> ANL A,#0FH ;高4位變0</p><p> MOV @R0,A ;時十位數(shù)據(jù)放入</p><p> RET ; 子程序返回</p><
89、;p> SUB-H1: MOV A,#23H</p><p> AJMP SUB-H11</p><p> SUB-H110: MOV A,R3 ;時個位小于0A不處理</p><p> ANL A,#0FH ;高4位變0</p><p> MOV
90、 @R0,A ;時個位數(shù)據(jù)放入</p><p> AJMP SUB-H10</p><p> ******分減1子程序******</p><p> SUB-M: MOV A,@R0 ;取當(dāng)前計時單元數(shù)據(jù)到A</p><p> DEC R0 ;
91、指向前一地址</p><p> SWAP A ;A中數(shù)據(jù)高4位與低4位交換</p><p> ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低4位</p><p> JZ SUB-M1 </p><p> DEC A
92、 ;A減1操作</p><p> SUB-M11: MOV R3,A ;移入R3寄存器</p><p> ANL A,#0FH ;高4位變0</p><p> CLR C ;清進(jìn)位標(biāo)志</p><p> SUBB A,#0AH;
93、 </p><p> SUB-M111: JC SUB-M110 </p><p> MOV @R0,#09H ;大于等于0AH,為9</p><p> SUB-M10: MOV A,R3 ;取回R3中暫存數(shù)據(jù)</p><p> INC R0
94、 ;指向當(dāng)前地址單元</p><p> SWAP A ;A中數(shù)據(jù)高4位與低4位交換</p><p> ANL A,#0FH ;高4位變0</p><p> MOV @R0,A ;數(shù)據(jù)放入當(dāng)前地址單元中</p><p> RET
95、 ; 子程序返回</p><p> SUB-M1: MOV A,#59H</p><p> AJMP SUB-M11</p><p> SUB-M110: MOV A,R3 ;移入R3寄存器</p><p> ANL A,#0FH
96、 ;高4位變0</p><p> MOV @R0,A </p><p> AJMP SUB-M10</p><p> ****** 秒減1子程序******</p><p> SUB-S: MOV A,@R0 ;取當(dāng)前計時單元數(shù)據(jù)到A</p><p>
97、; DEC R0 ;指向前一地址</p><p> SWAP A ;A中數(shù)據(jù)高4位與低4位交換</p><p> ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低4位</p><p> JZ SUB-S1 </p><p&g
98、t; DEC A ;A減1操作</p><p> SUB-S11: MOV R3,A ;移入R3寄存器</p><p> ANL A,#0FH ;高4位變0</p><p> CLR C ;清進(jìn)位標(biāo)志</p><p
99、> SUBB A,#0BH; </p><p> SUB-S111: JC SUB-S110 </p><p> MOV @R0,#09H ;大于等于0AH,為9</p><p> SUB-S10: MOV A,R3 ;取回R3中暫存數(shù)據(jù)</p><p&
100、gt; INC R0 ;指向當(dāng)前地址單元</p><p> SWAP A ;A中數(shù)據(jù)高4位與低4位交換</p><p> ANL A,#0FH ;高4位變0</p><p> MOV @R0,A ;數(shù)據(jù)放入當(dāng)前地址單元中</p
101、><p> RET ; 子程序返回</p><p> SUB-S1: MOV A,#14H</p><p> AJMP SUB-S11</p><p> SUB-S110: MOV A,R3 ;移入R3寄存器</p><p&g
102、t; ANL A,#0FH ;高4位變0</p><p> MOV @R0,A </p><p> AJMP SUB-S10</p><p> ******延時子程序******</p><p> TM1ms: MOV R6, #14H ;延時1 ms子程序&l
103、t;/p><p> TM1: MOV R7,#19H</p><p> TM2: DJNZ R7,YS2</p><p> DJNZ R6,YS1</p><p><b> RET</b></p><p> TM3s: LCALL TM05s ;延時3
104、s子程序</p><p> LCALL TM05s</p><p> LCALL TM05s</p><p> LCALL TM05s</p><p> LCALL TM05s</p><p> LCALL TM05s</p><p><b> RET</b
105、></p><p> TM05s: MOV R3,#51H ;延時0.5 s子程序</p><p> YS05s1:LCALLXSZCX</p><p> DJNZ R3,YS05s1</p><p><b> RET</b></p><p> TAB:DB
106、 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH</p><p><b> END</b></p><p><b> 目錄</b></p><p><b> 第1章 緒論1</b></p><p><b>
107、; 1. 設(shè)計要求1</b></p><p><b> 2. 設(shè)計方案1</b></p><p> 第2章 硬件設(shè)計2</p><p> 1 單片機(jī)的選擇2</p><p><b> 2. 顯示方案2</b></p><p> 第3章 軟
108、件設(shè)計5</p><p><b> 1.主程序5</b></p><p> 2. 定時器T0中斷服務(wù)程序5</p><p> 3.顯示子程序5</p><p> 4.定時器T1中斷服務(wù)程序6</p><p> 5.調(diào)時功能程序6</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)數(shù)字時鐘課程設(shè)計報告
- 單片機(jī)課程設(shè)計---單片機(jī)數(shù)字時鐘
- 單片機(jī)課程設(shè)計--數(shù)字時鐘
- 單片機(jī)數(shù)字時鐘課程設(shè)計
- 單片機(jī)課程設(shè)計--數(shù)字時鐘
- 單片機(jī)課程設(shè)計(數(shù)字時鐘)
- 單片機(jī)課程設(shè)計報告---基于單片機(jī)的數(shù)字時鐘設(shè)計
- 單片機(jī)課程設(shè)計---單片機(jī)數(shù)字時鐘.doc
- 單片機(jī)課程設(shè)計數(shù)字時鐘
- 單片機(jī)數(shù)字時鐘控制課程設(shè)計
- 單片機(jī)課程設(shè)計--基于單片機(jī)的數(shù)字時鐘設(shè)計
- 課程設(shè)計-單片機(jī)基于單片機(jī)的數(shù)字時鐘設(shè)計
- 單片機(jī)課程設(shè)計數(shù)字時鐘
- 數(shù)字時鐘的課程設(shè)計--基于單片機(jī)的數(shù)字時鐘
- 單片機(jī)課程設(shè)計---數(shù)字時鐘的設(shè)計
- 數(shù)字電子時鐘-單片機(jī)課程設(shè)計
- 多功能數(shù)字時鐘 單片機(jī)課程設(shè)計
- 單片機(jī)課程設(shè)計-單片機(jī)課程設(shè)計---電子時鐘
- 單片機(jī)數(shù)字時鐘課程設(shè)計--單片機(jī)多功能電子鐘設(shè)計
- 課程設(shè)計---基于51單片機(jī)的數(shù)字時鐘
評論
0/150
提交評論