采用的單片機是89C52,用了兩個鎖存器74HC573來接入數碼管的位選和段碼引腳。
部分源碼:
Proteus工程圖:(下面的4*4按鈕、最上面的128*64LCD顯示屏和左邊的發光二極管非本次內容的必要部分,可以刪除)
三個按鈕分別對應的功能:按鈕1:在”調節時“和”調節分“中間輪換
按鈕2:時間數值+1
按鈕3:時間數值 -1
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機匯編語言源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 000BH
- LJMP INTT0
- MAIN:
- MOV R0,#70H ;70后面的12位地址清零
- MOV R7,#0CH
- INIT: MOV @R0,#00H
- INC R0
- DJNZ R7,INIT
-
- MOV 72H,#0AH
- MOV 75H,#0AH
-
- MOV TMOD,#01H
- MOV TL0,#00H
- MOV TH0,#4CH
- SETB EA
- SETB ET0
- SETB TR0
-
- START1: LCALL SCAN
- LCALL KEYSCAN
- SJMP START1
-
- ;延時1MS子程序
- DL1MS: MOV R6,#14H ;20*25*2us
- DL1: MOV R7,#19H
- DL2: DJNZ R7,DL2
- DJNZ R6,DL1
- RET
- ;延時20MS子程序
- DL20MS: MOV A,R2
- PUSH Acc
- MOV R2,#40
- DLY:MOV R4,#250
- DJNZ R4,$
- DJNZ R2,DLY
- POP Acc
- MOV R2,A
- RET
- ;數碼管顯示程序
- SCAN: MOV A,78H ;時間存入顯示緩沖區相應位置
- MOV B,#0AH
- DIV AB
- MOV 71H,A ;秒
- MOV 70H,B
- MOV A,79H
- MOV B,#0AH
- DIV AB
- MOV 74H,A ;分
- MOV 73H,B
- MOV A,7AH
- MOV B,#0AH
- DIV AB
- MOV 77H,A ;時
- MOV 76H,B
-
- MOV R1,#70H ;循環掃描顯示
- MOV R5,#7FH
- MOV R3,#08H
-
-
- SCAN1: MOV A,R5
- MOV P0,A ;位選信號
- SETB P2.7
- CLR P2.7
- MOV A,@R1
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
-
- MOV P0,A
- SETB P2.6
- CLR P2.6
- LCALL DL1MS
-
- INC R1
- MOV A,R5
- RR A
- MOV R5,A
- DJNZ R3,SCAN1
-
-
- MOV P0,#00H ;消影
- SETB P2.6
- CLR P2.6
-
- MOV P0,#0FFH
- SETB P2.7
- CLR P2.7
- RET
- TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;“0~9”,“-,_”的共陰極字段碼
-
- ;定時器/計數器T0中斷服務程序
- INTT0: PUSH Acc
- PUSH PSW
- CLR ET0
- CLR TR0
- MOV TL0,#00H
- MOV TH0,#4CH
- SETB TR0
- INC 7BH
- MOV A,7BH
- CJNE A,#14H,OUTT0 ;20*50=1s
- MOV 7BH,#00H
- INC 78H
- MOV A,78H
- CJNE A,#3CH,OUTT0 ;1s*60=1min
- MOV 78H,#00H ;秒計數器清零
- INC 79H ;分計數器+1
- MOV A,79H
- CJNE A,#3CH,OUTT0
- MOV 79H,#00H
- INC 7AH ;時計數器+1
- MOV A,7AH
- CJNE A,#18H,OUTT0
- MOV 7AH,#00H ;計到24后時計數器清零
- OUTT0:
- SETB ET0
- POP PSW
- POP Acc
- RETI
-
- ;按鍵處理程序
- KEYSCAN: CLR EA
- JNB P2.0,KEYSCAN0
- JNB P2.1,KEYSCAN1
- JNB P2.2,KEYSCAN2
- KEYOUT: SETB EA
- RET
- KEYSCAN0: LCALL DL20MS
- JB P2.0,KEYOUT
- WAIT0: JNB P2.0,WAIT0
- INC 7CH
- MOV A,7CH
- CLR ET0
- CLR TR0
- CJNE A,#03H,KEYOUT
- MOV 7CH,#00H
- SETB ET0
- SETB TR0
- SJMP KEYOUT
- KEYSCAN1: LCALL DL20MS
- JB P2.1,KEYOUT
- WAIT1: JNB P2.1,WAIT1
- MOV A,7CH
- CJNE A,#02H,KSCAN11
- INC 79H
- MOV A,79H
- CJNE A,#3CH,KEYOUT
- MOV 79H,#00
- SJMP KEYOUT
- KSCAN11: INC 7AH
- MOV A,7AH
- CJNE A,#18H,KEYOUT
- MOV 7AH,#00
- SJMP KEYOUT
- KEYSCAN2: LCALL DL20MS
- JB P2.2,KEYOUT
- WAIT2: JNB P2.2,WAIT2
- MOV A,7CH
- CJNE A,#02H,KSCAN21
- DEC 79H
- MOV A,79H
- CJNE A,#0FFH,KEYOUT
- MOV 79H,#3BH
- SJMP KEYOUT
- KSCAN21: DEC 7AH
- MOV A,7AH
- CJNE A,#0FFH,KEYOUT
- MOV 7AH,#17H
- SJMP KEYOUT
- END
復制代碼
所有資料51hei附件下載:
Proteus仿真8.13和匯編程序.7z
(64.52 KB, 下載次數: 32)
2023-1-27 17:43 上傳
點擊文件名下載附件
|