單片機製作的6位數字鐘
時鐘的基本顯示原理:時鐘開始顯示為0時0分0秒,也就是數碼管顯示000000,然後每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分鐘加1,10秒位回0。依次類推,時鐘最大的顯示值為23小時59分59秒。這裡只要確定了1秒的定時時間, 其他位均以此為基準往上累加。 開始程序定義了秒, 十秒, 分, 十分,小時, 十小時,共6位的寄存器, 分別存在30h,31h,32h,33h,34h,35h單元,便於程序以後調用和理解。 6個數碼管分別顯示時、分、秒,一個功能鍵,可以切換調整時分秒、增加數值、熄滅節電等功能全部集一鍵。 以下是部分彙編源程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 中斷入口程序 ;; (僅供參考) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ORG 0000H ;程序執行開始地址 LJMP START ;跳到標號START執行 ORG 0003H ;外中斷0中斷程序入口 RETI ;外中斷0中斷返回 ORG 000BH ;定時器T0中斷程序入口 LJMP INTT0 ;跳至INTTO執行 ORG 0013H ;外中斷1中斷程序入口 RETI ;外中斷1中斷返回 ORG 001BH ;定時器T1中斷程序入口 LJMP INTT1 ;跳至INTT1執行 ORG 0023H ;串列中斷程序入口地址 RETI ;串列中斷程序返回 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 主 程 序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; START: MOV R0,#70H ;清70H-7AH共11個內存單元 MOV R7,#0BH ;clr P3.7 ; CLEARDISP: MOV @R0,#00H ; INC R0 ; DJNZ R7,CLEARDISP ; MOV 20H,#00H ;清20H(標誌用) MOV 7AH,#0AH ;放入"熄滅符"數據 MOV TMOD,#11H ;設T0、T1為16位定時器 MOV TL0,#0B0H ;50MS定時初值(T0計時用) MOV TH0,#3CH ;50MS定時初值 MOV TL1,#0B0H ;50MS定時初值(T1閃爍定時用) MOV TH1,#3CH ;50MS定時初值 SETB EA ;總中斷開放 SETB ET0 ;允許T0中斷 SETB TR0 ;開啟T0定時器 MOV R4,#14H ;1秒定時用初值(50MS×20) START1: LCALL DISPLAY ;調用顯示子程序 JNB P3.7,SETMM1 ;P3.7口為0時轉時間調整程序 SJMP START1 ;P3.7口為1時跳回START1 SETMM1: LJMP SETMM ;轉到時間調整程序SETMM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1秒計時程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;T0中斷服務程序 INTT0: PUSH ACC ;累加器入棧保護 PUSH PSW ;狀態字入棧保護 CLR ET0 ;關T0中斷允許 CLR TR0 ;關閉定時器T0 MOV A,#0B7H ;中斷響應時間同步修正 ADD A,TL0 ;低8位初值修正 MOV TL0,A ;重裝初值(低8位修正值) MOV A,#3CH ;高8位初值修正 ADDC A,TH0 ; MOV TH0,A ;重裝初值(高8位修正值) SETB TR0 ;開啟定時器T0 DJNZ R4, OUTT0 ;20次中斷未到中斷退出 ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值 MOV R0,#71H ;指向秒計時單元(71H-72H) ACALL ADD1 ;調用加1程序(加1秒操作) MOV A,R3 ;秒數據放入A(R3為2位十進位數組合) CLR C ;清進位標誌 CJNE A,#60H,ADDMM ; ADDMM: JC OUTT0 ;小於60秒時中斷退出 ACALL CLR0 ;大於或等於60秒時對秒計時單元清0 MOV R0,#77H ;指向分計時單元(76H-77H) ACALL ADD1 ;分計時單元加1分鐘 MOV A,R3 ;分數據放入A CLR C ;清進位標誌 CJNE A,#60H,ADDHH ; ADDHH: JC OUTT0 ;小於60分時中斷退出 ACALL CLR0 ;大於或等於60分時分計時單元清0 MOV R0,#79H ;指向小時計時單(78H-79H) ACALL ADD1 ;小時計時單元加1小時 MOV A,R3 ;時數據放入A CLR C ;清進位標誌 CJNE A,#24H,HOUR ; HOUR: JC OUTT0 ;小於24小時中斷退出 ACALL CLR0 ;大於或等於24小時小時計時單元清0 OUTT0: MOV 72H,76H ;中斷退出時將分、時計時單元數據移 MOV 73H,77H ;入對應顯示單元 MOV 74H,78H ; MOV 75H,79H ; POP PSW ;恢復狀態字(出棧) POP ACC ;恢復累加器 SETB ET0 ;開放T0中斷 RETI ;中斷返回 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 閃動調時 程 序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;T1中斷服務程序,用作時間調整時調整單元閃爍指示 INTT1: PUSH ACC ;中斷現場保護 PUSH PSW ; MOV TL1, #0B0H ;裝定時器T1定時初值 MOV TH1, #3CH ; DJNZ R2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次) MOV R2,#06H ;重裝0.3秒定時用初值 CPL 02H ;0.3秒定時到對閃爍標誌取反 JB 02H,FLASH1 ;02H位為1時顯示單元"熄滅" MOV 72H,76H ;02H位為0時正常顯示 MOV 73H,77H ; MOV 74H,78H ; MOV 75H,79H ; INTT1OUT: POP PSW ;恢復現場 POP ACC ; RETI ;中斷退出 FLASH1: JB 01H,FLASH2 ;01H位為1時,轉小時熄滅控制 MOV 72H,7AH ;01H位為0時,"熄滅符"數據放入分 MOV 73H,7AH ;顯示單元(72H-73H),將不顯示分數據 MOV 74H,78H ; MOV 75H,79H ; AJMP INTT1OUT ;轉中斷退出 FLASH2: MOV 72H,76H ;01H位為1時,"熄滅符"數據放入小時 MOV 73H,77H ;顯示單元(74H-75H),小時數據將不顯示 |