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
复制代码
秒分时。供电后,程序似乎卡住,求解
|