電子時鐘數(shù)字電子鐘單片機課程設(shè)計_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  附錄一:軟件設(shè)計</b></p><p><b>  中斷入口程序</b></p><p>  ORG 0000H;程序執(zhí)行開始地址</p><p>  LJMP START;跳到標號START執(zhí)行</p><p>  ORG 0003H;外中斷

2、0中斷程序入口</p><p>  RETI;外中斷0中斷返回</p><p>  ORG 000BH;定時器T0中斷程序入口</p><p>  LJMP INTT0;跳至INTTO執(zhí)行</p><p>  ORG 0013H;外中斷1中斷程序入口</p><p>  RETI

3、 ;外中斷1中斷返回</p><p>  ORG 001BH;定時器T1中斷程序入口</p><p>  LJMP INTT1;跳至INTT1執(zhí)行</p><p>  ORG 0023H;串行中斷程序入口地址</p><p>  RETI;串行中斷程序返回</p><

4、p><b>  主 程 序 </b></p><p>  START: MOV R0,#70H ;清70H-7AH共11個內(nèi)存單元</p><p>  MOV R7,#0BH </p><p>  clr P3.7;</p><p>  CLEARDISP: MOV @R0

5、,#00H ;</p><p>  INC R0 ;</p><p>  DJNZ R7,CLEARDISP ;</p><p>  MOV 20H,#00H ;清20H(標志用)</p><p>  MOV 7AH,#0AH ;放入"熄滅

6、符"數(shù)據(jù)</p><p>  MOV TMOD,#11H ;設(shè)T0、T1為16位定時器</p><p>  MOV TL0,#0B0H ;50MS定時初值(T0計時用)</p><p>  MOV TH0,#3CH ;50MS定時初值</p><p>  MOV TL1,#0B

7、0H ;50MS定時初值(T1閃爍定時用)</p><p>  MOV TH1,#3CH ;50MS定時初值</p><p>  SETB EA ;總中斷開放</p><p>  SETB ET0 ;允許T0中斷</p><p>  SETB T

8、R0 ;開啟T0定時器</p><p>  MOV R4,#14H ;1秒定時用初值(50MS×20)</p><p>  START1: LCALL DISPLAY ;調(diào)用顯示子程序</p><p>  JNB P3.7,SETMM1 ;P3.7口為0時轉(zhuǎn)時間調(diào)整程序

9、</p><p>  SJMP START1 ;P3.7口為1時跳回START1</p><p>  SETMM1: LJMP SETMM ;轉(zhuǎn)到時間調(diào)整程序SETMM</p><p><b>  1秒計時程序</b></p><p><b>  ;T0中斷服務(wù)程序</b

10、></p><p>  INTT0: PUSH ACC ;累加器入棧保護</p><p>  PUSH PSW ;狀態(tài)字入棧保護</p><p>  CLR ET0 ;關(guān)T0中斷允許</p><p>  CLR TR0 ;關(guān)閉定時器

11、T0</p><p>  MOV A,#0B7H ;中斷響應(yīng)時間同步修正</p><p>  ADD A,TL0 ;低8位初值修正</p><p>  MOV TL0,A ;重裝初值(低8位修正值)</p><p>  MOV A,#3CH ;高8位初值修正&

12、lt;/p><p>  ADDC A,TH0 ;</p><p>  MOV TH0,A ;重裝初值(高8位修正值)</p><p>  SETB TR0 ;開啟定時器T0</p><p>  DJNZ R4, OUTT0 ;20次中斷未到中斷退出</p

13、><p>  ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值</p><p>  MOV R0,#71H ;指向秒計時單元(71H-72H)</p><p>  ACALL ADD1 ;調(diào)用加1程序(加1秒操作)</p><p>  MOV A,R3

14、 ;秒數(shù)據(jù)放入A(R3為2位十進制數(shù)組合)</p><p>  CLR C ;清進位標志</p><p>  CJNE A,#60H,ADDMM ;</p><p>  ADDMM: JC OUTT0 ;小于60秒時中斷退出</p><p>

15、;  ACALL CLR0 ;大于或等于60秒時對秒計時單元清0</p><p>  MOV R0,#77H ;指向分計時單元(76H-77H)</p><p>  ACALL ADD1 ;分計時單元加1分鐘</p><p>  MOV A,R3 ;分數(shù)據(jù)放入

16、A</p><p>  CLR C ;清進位標志</p><p>  CJNE A,#60H,ADDHH ;</p><p>  ADDHH: JC OUTT0 ;小于60分時中斷退出</p><p>  ACALL CLR0 ;大于或

17、等于60分時分計時單元清0</p><p>  MOV R0,#79H ;指向小時計時單(78H-79H)</p><p>  ACALL ADD1 ;小時計時單元加1小時</p><p>  MOV A,R3 ;時數(shù)據(jù)放入A</p><p>  CLR

18、 C ;清進位標志</p><p>  CJNE A,#24H,HOUR ;</p><p>  HOUR: JC OUTT0 ;小于12小時中斷退出</p><p>  ACALL CLR0 ;大于或等于12小時小時計時單元清0</p><

19、;p>  OUTT0: MOV 72H,76H ;中斷退出時將分、時計時單元數(shù)據(jù)移</p><p>  MOV 73H,77H ;入對應(yīng)顯示單元</p><p>  MOV 74H,78H ;</p><p>  MOV 75H,79H ;</p>&

20、lt;p>  POP PSW ;恢復(fù)狀態(tài)字(出棧)</p><p>  POP ACC ;恢復(fù)累加器</p><p>  SETB ET0 ;開放T0中斷</p><p>  RETI ;中斷返回</p>&

21、lt;p><b>  閃動調(diào)時程序 </b></p><p>  ;T1中斷服務(wù)程序,用作時間調(diào)整時調(diào)整單元閃爍指示</p><p>  INTT1: PUSH ACC ;中斷現(xiàn)場保護</p><p>  PUSH PSW ;</p>

22、<p>  MOV TL1, #0B0H ;裝定時器T1定時初值</p><p>  MOV TH1, #3CH ;</p><p>  DJNZ R2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次)</p><p>  MOV R2,#06H

23、 ;重裝0.3秒定時用初值</p><p>  CPL 02H ;0.3秒定時到對閃爍標志取反</p><p>  JB 02H,FLASH1 ;02H位為1時顯示單元"熄滅"</p><p>  MOV 72H,76H ;02H位

24、為0時正常顯示</p><p>  MOV 73H,77H ;</p><p>  MOV 74H,78H ;</p><p>  MOV 75H,79H ;</p><p>  INTT1OUT: POP PSW

25、 ;恢復(fù)現(xiàn)場</p><p>  POP ACC ;</p><p>  RETI ;中斷退出</p><p>  FLASH1: JB 01H,FLASH2 ;01H位為1時,轉(zhuǎn)小時熄滅控制</p>&l

26、t;p>  MOV 72H,7AH ;01H位為0時,"熄滅符"數(shù)據(jù)放入分</p><p>  MOV 73H,7AH ;顯示單元(72H-73H),將不顯示分數(shù)據(jù)</p><p>  MOV 74H,78H ;</p><p>  MOV

27、75H,79H ;</p><p>  AJMP INTT1OUT ;轉(zhuǎn)中斷退出</p><p>  FLASH2: MOV 72H,76H ;01H位為1時,"熄滅符"數(shù)據(jù)放入小時</p><p>  MOV 73H,77H

28、 ;顯示單元(74H-75H),小時數(shù)據(jù)將不顯示</p><p>  MOV 74H,7AH ;</p><p>  MOV 75H,7AH ;</p><p>  AJMP INTT1OUT ;轉(zhuǎn)中斷退出</p><p>  加1子 程 序 ;;</p><

29、p>  ADD1: MOV A,@R0 ;取當前計時單元數(shù)據(jù)到A</p><p>  DEC R0 ;指向前一地址</p><p>  SWAP A ;A中數(shù)據(jù)高四位與低四位交換</p><p>  ORL A,@R0 ;前一地址中數(shù)據(jù)放入A中低四位</p><

30、p>  ADD A,#01H ;A加1操作</p><p>  DA A ;十進制調(diào)整</p><p>  MOV R3,A ;移入R3寄存器</p><p>  ANL A,#0FH ;高四位變0</p><p>  MOV @R0,A ;放回前一

31、地址單元</p><p>  MOV A,R3 ;取回R3中暫存數(shù)據(jù)</p><p>  INC R0 ;指向當前地址單元</p><p>  SWAP A ;A中數(shù)據(jù)高四位與低四位交換</p><p>  ANL A,#0FH ;高四位變0</p>

32、<p>  MOV @R0,A ;數(shù)據(jù)放入當削地址單元中</p><p>  RET ;子程序返回</p><p><b>  清零程序 </b></p><p><b>  ;對計時單元復(fù)零用</b></p><p>  CLR0: CLR

33、 A ;清累加器</p><p>  MOV @R0,A ;清當前地址單元</p><p>  DEC R0 ;指向前一地址</p><p>  MOV @R0,A ;前一地址單元清0</p><p>  RET ;子程序

34、返回</p><p><b>  時鐘調(diào)整程序</b></p><p>  ;當調(diào)時按鍵按下時進入此程序</p><p>  SETMM: cLR ET0 ;關(guān)定時器T0中斷</p><p>  CLR TR0 ;關(guān)閉定時器T0</p><

35、p>  LCALL DL1S ;調(diào)用1秒延時程序</p><p>  JB P3.7,CLOSEDIS ;鍵按下時間小于1秒,關(guān)閉顯示(省電)</p><p>  MOV R2,#06H ;進入調(diào)時狀態(tài),賦閃爍定時初值</p><p>  SETB ET1 ;允許T1中斷&

36、lt;/p><p>  SETB TR1 ;開啟定時器T1</p><p>  SET2: JNB P3.7,SET1 ;P3.7口為0(鍵未釋放),等待</p><p>  SETB 00H ;鍵釋放,分調(diào)整閃爍標志置1</p><p>  SET4: JB

37、 P3.7,SET3 ;等待鍵按下</p><p>  LCALL DL05S ;有鍵按下,延時0.5秒</p><p>  JNB P3.7,SETHH ;按下時間大于0.5秒轉(zhuǎn)調(diào)小時狀態(tài)</p><p>  MOV R0,#77H ;按下時間小于0.5秒加1分鐘操作</p>

38、<p>  LCALL ADD1 ;調(diào)用加1子程序</p><p>  MOV A,R3 ;取調(diào)整單元數(shù)據(jù)</p><p>  CLR C ;清進位標志</p><p>  CJNE A,#60H,HHH ;調(diào)整單元數(shù)據(jù)與60比較</p>&l

39、t;p>  HHH: JC SET4 ;調(diào)整單元數(shù)據(jù)小于60轉(zhuǎn)SET4循環(huán)</p><p>  LCALL CLR0 ;調(diào)整單元數(shù)據(jù)大于或等于60時清0</p><p>  CLR C ;清進位標志</p><p>  AJMP SET4 ;跳轉(zhuǎn)到

40、SET4循環(huán)</p><p>  CLOSEDIS: SETB ET0 ;省電(LED不顯示)狀態(tài)。開T0中斷</p><p>  SETB TR0 ;開啟T0定時器(開時鐘)</p><p>  CLOSE: JB P3.7,CLOSE ;無按鍵按下,等待。</p>&

41、lt;p>  LCALL DISPLAY ;有鍵按下,調(diào)顯示子程序延時削抖</p><p>  JB P3.7,CLOSE ;是干擾返回CLOSE等待</p><p>  WAITH: JNB P3.7,WAITH ;等待鍵釋放</p><p>  LJMP START1 ;返回

42、主程序(LED數(shù)據(jù)顯示亮)</p><p>  SETHH: CLR 00H ;分閃爍標志清除(進入調(diào)小時狀態(tài))</p><p>  SETHH1: JNB P3.7,SET5 ;等待鍵釋放</p><p>  SETB 01H ;小時調(diào)整標志置1</p><p>

43、  SET6: JB P3.7,SET7 ;等待按鍵按下</p><p>  LCALL DL05S ;有鍵按下延時0.5秒</p><p>  JNB P3.7,SETOUT ;按下時間大于0.5秒退出時間調(diào)整</p><p>  MOV R0,#79H ;按下時間小于0.5秒加1

44、小時操作</p><p>  LCALL ADD1 ;調(diào)加1子程序</p><p>  MOV A,R3 ;</p><p>  CLR C ;</p><p>  CJNE A,#12H,HOUU ;計時單元數(shù)據(jù)與12比較</p>

45、<p>  HOUU: JC SET6 ;小于12轉(zhuǎn)SET6循環(huán)</p><p>  LCALL CLR0 ;大于或等于24時清0操作</p><p>  AJMP SET6 ;跳轉(zhuǎn)到SET6循環(huán)</p><p>  SETOUT: JNB P3.7,S

46、ETOUT1 ;調(diào)時退出程序。等待鍵釋放</p><p>  LCALL DISPLAY ;延時削抖</p><p>  JNB P3.7,SETOUT ;是抖動,返回SETOUT再等待</p><p>  CLR 01H ;清調(diào)小時標志</p><p>  C

47、LR 00H ;清調(diào)分標志</p><p>  CLR 02H ;清閃爍標志</p><p>  CLR TR1 ;關(guān)閉定時器T1</p><p>  CLR ET1 ;關(guān)定時器T1中斷</p><p>  

48、SETB TR0 ;開啟定時器T0</p><p>  SETB ET0 ;開定時器T0中斷(計時開始)</p><p>  LJMP START1 ;跳回主程序</p><p>  SET1: LCALL DISPLAY ;鍵釋放等待時調(diào)用顯示程

49、序(調(diào)分)</p><p>  AJMP SET2 ;防止鍵按下時無時鐘顯示</p><p>  SET3: LCALL DISPLAY ;等待調(diào)分按鍵時時鐘顯示用</p><p>  AJMP SET4</p><p>  SET5: LCALL DISPLAY

50、 ;鍵釋放等待時調(diào)用顯示程序(調(diào)小時)</p><p>  AJMP SETHH1 ;防止鍵按下時無時鐘顯示</p><p>  SET7: LCALL DISPLAY ;等待調(diào)小時按鍵時時鐘顯示用</p><p>  AJMP SET6</p><p>  SETOUT

51、1: LCALL DISPLAY ;退出時鐘調(diào)整時鍵釋放等待</p><p>  AJMP SETOUT ;防止鍵按下時無時鐘顯示</p><p><b>  ;</b></p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>

52、<p>  ;; 顯示程序 ;;</p><p>  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p>  ; 顯示數(shù)據(jù)在70H-75H單元內(nèi),用六位LED共陽數(shù)碼管顯示,P0口輸出段碼數(shù)據(jù),P3口作</p><p>  ; 掃描控制,每個LED數(shù)碼管亮1MS時間再逐位循環(huán)。<

53、/p><p>  DISPLAY: MOV R1,#70H ;指向顯示數(shù)據(jù)首址</p><p>  MOV R5,#0FEH ;掃描控制字初值</p><p>  PLAY: MOV A,R5 ;掃描字放入A</p><p>  MOV P2,A

54、 ;從P2口輸出</p><p>  MOV A,@R1 ;取顯示數(shù)據(jù)到A</p><p>  MOV DPTR,#TAB ;取段碼表地址</p><p>  MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應(yīng)段碼</p><p>  MOV P1,A

55、 ;段碼放入P0口</p><p>  LCALL DL1MS ;顯示1MS</p><p>  INC R1 ;指向下一地址</p><p>  MOV A,R5 ;掃描控制字放入A</p><p>  JNB

56、 ACC.5,ENDOUT ;ACC.5=0時一次顯示結(jié)束</p><p>  RL A ;A中數(shù)據(jù)循環(huán)左移</p><p>  MOV R5,A ;放回R5內(nèi)</p><p>  AJMP PLAY ;跳回PLAY循環(huán)</p>&

57、lt;p>  ENDOUT: SETB P2.5 ;一次顯示結(jié)束,P2口復(fù)位</p><p>  MOV P1,#0FFH ;P0口復(fù)位</p><p>  RET ;子程序返回</p><p>  TAB: DB 3FH,06H,5BH,4FH,66H,6D

58、H,7DH,07H,7FH,6FH</p><p>  ;1MS延時程序,LED顯示程序用</p><p>  DL1MS: MOV R6,#14H</p><p>  DL1: MOV R7,#19H</p><p>  DL2: DJNZ R7,DL2</p><p>  DJNZ

59、 R6,DL1</p><p><b>  RET</b></p><p>  ;20MS延時程序,采用調(diào)用顯示子程序以改善LED的顯示閃爍現(xiàn)象</p><p>  DS20MS: ACALL DISPLAY</p><p>  ACALL DISPLAY</p><p>  ACALL

60、 DISPLAY</p><p><b>  RET</b></p><p>  ;延時程序,用作按鍵時間的長短判斷</p><p>  DL1S: LCALL DL05S</p><p>  LCALL DL05S</p><p><b> 

61、 RET</b></p><p>  DL05S: MOV R3,#20H ;8毫秒*32=0.196秒</p><p>  DL05S1: LCALL DISPLAY</p><p>  DJNZ R3,DL05S1</p><p><b>

62、  RET</b></p><p>  END ;程序結(jié)束</p><p><b>  整點報時程序:</b></p><p><b>  ORG 0000H</b></p><p>  LJMP START</p><

63、;p><b>  ORG 000BH</b></p><p>  INC 20H ;中斷服務(wù),中斷計數(shù)器加1</p><p>  MOV TH0,#0D8H</p><p>  MOV TL0,#0EFH ;形

64、成10毫秒中斷</p><p><b>  RETI</b></p><p>  START:SETB P1.3</p><p>  JB P0.3,$ </p><p>  MOV SP,#50H</p><p>  MOV TH0,#0D8H</p><p>  MOV

65、 TL0,#0EFH</p><p>  MOV TMOD,#01H</p><p>  MOV IE,#82H</p><p><b>  MUSIC0:</b></p><p><b>  NOP</b></p><p>  MOV DPTR,#DAT

66、 ;表頭地址送DPTR</p><p>  MOV 20H,#00H ;中斷計數(shù)器清0</p><p>  MOV B,#00H ;表序號清0</p><p><b>  MUSIC1:</b>

67、;</p><p><b>  NOP</b></p><p><b>  CLR A</b></p><p>  MOVC A,@A+DPTR ;查表取代碼</p><p>  JZ END0

68、 ;是00H,則結(jié)束</p><p>  CJNE A,#0FFH,MUSIC5</p><p>  LJMP MUSIC3</p><p><b>  MUSIC5:</b></p><p><b>  NOP</b></p><p><b>  M

69、OV R6,A</b></p><p><b>  INC DPTR</b></p><p><b>  MOV A,B</b></p><p>  MOVC A,@A+DPTR ;取節(jié)拍代碼送R7</p><p><b>  

70、MOV R7,A</b></p><p>  SETB TR0 ;啟動計數(shù)</p><p><b>  MUSIC2:</b></p><p><b>  NOP</b></p><p><b>  CPL P

71、1.3</b></p><p><b>  MOV A,R6</b></p><p><b>  MOV R3,A</b></p><p><b>  LCALL DEL</b></p><p><b>  MOV A,R7</b></p

72、><p>  CJNE A,20H,MUSIC2 ;中斷計數(shù)器(20H)=R7否?;不等,則繼續(xù)循環(huán)</p><p>  MOV 20H,#00H ;等于,則取下一代碼</p><p><b>  INC DPTR</b></p>

73、<p><b>  ; INC B</b></p><p>  LJMP MUSIC1</p><p><b>  MUSIC3:</b></p><p><b>  NOP</b></p><p>  CLR TR0

74、 ;休止100毫秒</p><p>  MOV R2,#0DH</p><p><b>  MUSIC4:</b></p><p><b>  NOP</b></p><p>  MOV R3,#0FFH</p><p><b>  LCALL

75、 DEL</b></p><p>  DJNZ R2,MUSIC4</p><p><b>  INC DPTR</b></p><p>  LJMP MUSIC1</p><p><b>  END0:</b></p><p><b>  NOP<

76、;/b></p><p>  MOV R2,#64H </p><p>  LJMP START ;報時結(jié)束,返回</p><p><b>  MUSIC6:</b></p><p>  MOV R3,#00H</p><p>&

77、lt;b>  LCALL DEL</b></p><p>  DJNZ R2,MUSIC6</p><p>  LJMP MUSIC0</p><p><b>  DEL:</b></p><p><b>  NOP</b></p><p><b>

78、;  DEL3: </b></p><p>  MOV R4,#02H</p><p><b>  DEL4: </b></p><p><b>  NOP</b></p><p>  DJNZ R4,DEL4</p><p><b>  NOP<

79、/b></p><p>  DJNZ R3,DEL3</p><p><b>  RET</b></p><p><b>  NOP</b></p><p><b>  DAT:</b></p><p>  db 26h,20h,20h,20h,2

80、0h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h</p><p>  db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h</p><p>  db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h

81、,20h</p><p>  db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h</p><p>  db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h</p><p>  db 2bh,20h,30h,

82、10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h</p><p>  db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h</p><p>  db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20

83、h,20h,20h</p><p>  db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h</p><p>  db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h</p><p>  db 18h,20h

84、,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h</p><p>  db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h</p><p>  db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,4

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論