編寫了一個控制程序,實現數碼管上顯示時-分-秒,通過按鍵可以設置時鐘初始值。 1.proteus中電路圖
2.代碼
見附件
3.仿真 按鍵功能說明:
數碼管初始狀態為全零,當按下開關0,數字時鐘開始計時,當按下開關1,數字時鐘清零,當按下開關2,數字時鐘的分加一,當按下開關3,數字時鐘的分減一。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)完整文檔下載(word格式 可編輯):
51hei.png (32.07 KB, 下載次數: 40)
下載附件
2020-6-12 22:26 上傳
單片機源程序如下:
- ;//數碼管顯示01234569
- ;ORG 0000H
- ;AJMP START
- ;ORG 0030H
- ;START: MOV SP,#40H
- ;S1: MOV P2,#01H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#02H
- ;MOV P0,#0F9H
- ;LCALL DELAY
- ;MOV P2,#04H
- ;MOV P0,#0A4H
- ;LCALL DELAY
- ;MOV P2,#08H
- ;MOV P0,#0B0H
- ;LCALL DELAY
- ;MOV P2,#10H
- ;MOV P0,#099H
- ;LCALL DELAY
- ;MOV P2,#20H
- ;MOV P0,#092H
- ;LCALL DELAY
- ;MOV P2,#40H
- ;MOV P0,#82H
- ;LCALL DELAY
- ;MOV P2,#80H
- ;MOV P0,#90H
- ;LCALL DELAY
- ;SJMP S1
- ;DELAY: MOV R7,#20H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
-
-
- ;//數碼管顯示00-00-00
- ;ORG 0000H
- ;AJMP START
- ;ORG 0030H
- ;START: MOV SP,#40H
- ;S1: MOV P2,#01H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#02H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#04H
- ;MOV P0,#0BFH
- ;LCALL DELAY
- ;MOV P2,#08H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#10H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#20H
- ;MOV P0,#0BFH
- ;LCALL DELAY
- ;MOV P2,#40H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;MOV P2,#80H
- ;MOV P0,#0C0H
- ;LCALL DELAY
- ;SJMP S1
- ;DELAY: MOV R7,#20H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
-
- ;ORG 0000H
- ;MOV A,#0
- ;MOV R0,A
- ;MOV R1,A
- ;MOV R2,A
- ;AJMP MAIN
- ;ORG 000BH //定時器0入口
- ;AJMP INT_T0
- ;ORG 0100H
- ;MAIN: MOV SP,#40H
- ;MOV TMOD,#01H //定時器0工作方式1
- ;MOV TL0,#78H //寫入初值
- ;MOV TH0,#0ECH
- ;SETB EA //允許
- ;SETB ET0
- ;SETB TR0 //啟動定時器0
- ;HERE: LJMP HERE
- ;ORG 0200H
- ;INT_T0: MOV A,#0
- ;INC R0
- ;CJNE R0,#100,MOVEON //不等跳轉
- ;MOV R0,A
- ;INC R1
- ;CJNE R1,#60,MOVEON
- ;MOV R1,A
- ;INC R2
- ;MOVEON: MOV TL0,#78H
- ;MOV TH0,#0ECH
- ;RETI
- ;DELAY: MOV R7,#10H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
- ;TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
- ;DB 92H,82H,0F8H,80H,90H
- ;END
- ;//定時器設計時鐘10MS
- ;ORG 0000H
- ;MOV A,#0
- ;MOV R0,A
- ;MOV R1,A
- ;MOV R2,A
- ;AJMP MAIN
- ;ORG 000BH //定時器0入口
- ;AJMP INT_T0
- ;ORG 0100H
- ;MAIN: MOV SP,#40H
- ;MOV TMOD,#01H //定時器0工作方式1
- ;MOV TL0,#78H //寫入初值
- ;MOV TH0,#0ECH
- ;SETB EA //允許
- ;SETB ET0
- ;SETB TR0 //啟動定時器0
-
- ;HERE: MOV A,R0
- ;MOV B,#10
- ;DIV AB //A中為商,B為余數
-
- ;;MOV R3,A //顯示查表
- ;MOV DPTR,#TABLE //秒的十位查表
- ;MOVC A,@A+DPTR
- ;MOV P2,#40H //位選
- ;MOV P0,A //段選
- ;LCALL DELAY
-
- ;MOV A,B //秒的個位查表
- ;MOVC A,@A+DPTR
- ;MOV P2,#80H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;MOV P2,#20H
- ;MOV P0,#0BFH
- ;LCALL DELAY
-
- ;MOV A,R1
- ;MOV B,#10
- ;DIV AB //A中為商,B為余數
- ;MOV DPTR,#TABLE
- ;MOVC A,@A+DPTR //秒
- ;MOV P2,#08H
- ;MOV P0,A
- ;LCALL DELAY
- ;MOV A,B //
- ;MOVC A,@A+DPTR
- ;MOV P2,#10H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;MOV P2,#04H
- ;MOV P0,#0BFH
- ;LCALL DELAY
-
- ;MOV A,R2
- ;MOV B,#10
- ;DIV AB //A中為商,B為余數
- ;MOV DPTR,#TABLE
- ;MOVC A,@A+DPTR //分
- ;MOV P2,#01H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;MOV A,B //
- ;MOVC A,@A+DPTR
- ;MOV P2,#02H
- ;MOV P0,A
- ;LCALL DELAY
-
- ;LJMP HERE
-
- ;ORG 0200H
- ;INT_T0: PUSH ACC
- ;MOV A,#0
- ;INC R0
- ;CJNE R0,#100,MOVEON //不等跳轉
- ;MOV R0,A
- ;INC R1
- ;CJNE R1,#60,MOVEON
- ;MOV R1,A
- ;INC R2
-
- ;MOVEON: MOV TL0,#78H
- ;MOV TH0,#0ECH
- ;POP ACC
- ;RETI
-
- ;DELAY: MOV R7,#10H
- ;DA1: MOV R6,#10
- ;DA2: DJNZ R6,DA2
- ;DJNZ R7,DA1
- ;RET
- ;TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
- ;DB 92H,82H,0F8H,80H,90H
- ;END
-
-
- //按鍵控制的時鐘
- K0 EQU P3.0
- K1 EQU P3.1
- K2 EQU P3.2
- K3 EQU P3.3
- ORG 0000H
- MOV A,#0
- MOV R0,A
- MOV R1,A
- MOV R2,A
- MOV R4,A
- AJMP MAIN
- ORG 000BH //定時器0入口
- AJMP INT_T0
- ORG 0100H
- MAIN: MOV SP,#40H
- MOV TMOD,#01H //定時器0工作方式1
- MOV TL0,#78H //寫入初值
- MOV TH0,#0ECH
- SETB EA //允許
- SETB ET0
- START: PUSH ACC
- MOV A,#0FFH
- MOV P3,A
- POP ACC
- HERE:
-
- MOV A,R0
- MOV B,#10
- DIV AB //A中為商,B為余數
- MOV DPTR,#TABLE //秒的十位查表
- MOVC A,@A+DPTR
- MOV P2,#40H //位選
- MOV P0,A //段選
- LCALL DELAY
- MOV A,B //秒的個位查表
- MOVC A,@A+DPTR
- MOV P2,#80H
- MOV P0,A
- LCALL DELAY
- MOV P2,#20H
- MOV P0,#0BFH
- LCALL DELAY
- MOV A,R1
- MOV B,#10
- DIV AB //A中為商,B為余數
- MOV DPTR,#TABLE
- MOVC A,@A+DPTR //秒
- MOV P2,#08H
- MOV P0,A
- LCALL DELAY
- MOV A,B //
- MOVC A,@A+DPTR
- MOV P2,#10H
- MOV P0,A
- LCALL DELAY
- MOV P2,#04H
- MOV P0,#0BFH
- LCALL DELAY
- MOV A,R2
- MOV B,#10
- DIV AB //A中為商,B為余數
- MOV DPTR,#TABLE
- MOVC A,@A+DPTR //分
- MOV P2,#01H
- MOV P0,A
- LCALL DELAY
- MOV A,B
- MOVC A,@A+DPTR
- MOV P2,#02H
- MOV P0,A
- LCALL DELAY
- JNB K0,KEY0
- JNB K1,KEY1
- JNB K2,KEY2
- JNB K3,KEY3
- LJMP HERE
- KEY0: LCALL DELAY10
- JNB K0,$
- MOV R0,#0
- MOV R1,#0
- MOV R2,#0
- CLR TR0
- MOV TL0,#78H
- MOV TH0,#0ECH
- AJMP START
- KEY1: LCALL DELAY10
- JNB K1,$
- SETB TR0
- AJMP START
- KEY2: LCALL DELAY10
- JNB K2,$
- INC R2
- AJMP START
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
數字時鐘.rar
(86.82 KB, 下載次數: 59)
2020-6-12 14:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|