P1口段選,P2口位選,P3.0-3.3調秒分時。供電后,程序似乎卡住,求解
- ORG 00H JMP MAIN
- ORG 0BH
- JMP TIM0
- MAIN:
- MOV IE,#82H ;使能定時器中斷
- MOV TMOD,#01H ;設置計數初始值,設置為4ms中斷一次
- MOV TH0,#0F0H
- MOV TL0,#60H
- MOV R0,#00H ;1秒鐘計數器,250次后為1s
- MOV 30H,#00H ;秒分時初始值00
- MOV 31H,#00H
- MOV 32H,#00H
- MOV R1,#00H ;位選累計器
- SETB TR0
- LOOP: ;按鍵設置時分秒,循環掃描按鍵,否則執行中斷程序
- JB P3.0,NOPRESS2
- CALL FILTER
- MOV A,30H
- ADD A,#01H
- DA A
- MOV 30H,A
- CJNE A,#60H,NOPRESS1;等于60則清零
- MOV 30H,#00H
- NOPRESS1:
- JNB P3.0,$
- CALL FILTER
- NOPRESS2:
- JB P3.1,NOPRESS4
- CALL FILTER
- MOV A,31H
- ADD A,#01H
- DA A
- MOV 31H,A
- CJNE A,#60H,NOPRESS3;等于60則清零
- MOV 31H,#00H
- NOPRESS3:
- JNB P3.1,$
- CALL FILTER
- NOPRESS4:
- JB P3.2,LOOP
- CALL FILTER
- MOV A,32H
- ADD A,#01H
- DA A
- MOV 32H,A
- CJNE A,#24H,NOPRESS5;等于24則清零
- MOV 32H,#00H
- NOPRESS5:
- JNB P3.2,$
- CALL FILTER
- JMP LOOP
- TIM0:
- PUSH ACC
- CJNE R0,#250,SCAN ;等于250時說明到1秒,未滿則繼續掃描顯示
- MOV A,#30H
- ADD A,#01H
- DA A
- MOV 30H,A
- CJNE A,#60H,INCSEC ;等于60時說明到一分
- MOV A,31H
- ADD A,#01H
- DA A
- MOV 31H,A
- CJNE A,#60H,INCMIN ;等于60時說明到一小時
- MOV A,32H
- ADD A,#01H
- DA A
- MOV 32H,A
- CJNE A,#24H,INCHR ;等于24說明到一天,清零時分秒寄存器
- MOV 30H,#00H
- MOV 31H,#00H
- MOV 32H,#00H
- INCSEC:
- JMP INCTIM
- INCMIN:
- MOV 30H,#00H ;滿60秒,清零秒存儲器
- JMP INCTIM
- INCHR:
- MOV 30H,#00H ;滿60分,清零分寄存器,秒存儲器
- MOV 31H,#00H
- INCTIM:
- MOV R0,#00H ;秒存儲器清零
- SCAN:
- CJNE R1,#6,DISPLAY ;6位數碼管掃描值為6,則完成一次掃描
- MOV R1,#00H ;清零掃描計數器,繼續掃描
- JMP SCAN
- DISPLAY:
- CJNE R1,#0,CHK1 ;秒低位顯示
- MOV A,30H
- ANL A,#0FH
- MOV P2,#0DFH
- JMP RELOAD
- CHK1:
- CJNE R1,#1,CHK2 ;秒高位顯示
- MOV A,30H
- SWAP A
- ANL A,#0FH
- MOV P2,#0EFH
- JMP RELOAD
- CHK2:
- CJNE R1,#2,CHK3 ;分低位顯示
- MOV A,31H
- ANL A,#0FH
- MOV P2,#0F7H
- JMP RELOAD
- CHK3:
- CJNE R1,#3,CHK4 ;分高位顯示
- MOV A,31H
- SWAP A
- ANL A,#0FH
- MOV P2,#0FBH
- JMP RELOAD
- CHK4:
- CJNE R1,#4,CHK5 ;時低位顯示
- MOV A,32H
- ANL A,#0FH
- MOV P2,#0FDH
- JMP RELOAD
- CHK5:
- CJNE R1,#5,RELOAD ;時高位顯示
- MOV A,32H
- SWAP A
- ANL A,#0FH
- MOV P2,#0FEH
- RELOAD:
- MOV P1,A ;掃描顯示
- INC R0
- INC R1
- MOV TH0,#0F0H
- MOV TL0,#60H
- POP ACC
- RETI
- FILTER:
- MOV R6,#60H
- D1: MOV R7,#248
- DJNZ R7,$
- DJNZ R6,D1
- RET
- END
復制代碼
秒分時。供電后,程序似乎卡住,求解
|