四位数码管实现计数功能(汇编)
单片机源程序如下:
- KEY BIT P3.2
- QIANWEI EQU 70H ; 千位
- BAIWEI EQU 71H ; 百位
- SHIWEI EQU 72H ; 十位
- GEWEI EQU 73H ; 个位
- ORG 0000H
- LJMP MAIN
- MAIN:
- MOV P3,# 0FFH
- MOV P0,# 00H ; A-G-DP
- MOV P2,# 0FFH ;控制位P2.3-P2.0
- MOV QIANWEI,#0
- MOV BAIWEI,#0
- MOV SHIWEI,#0
- MOV GEWEI,#0
- CLR 20H ;标志位,高位为0标志
- LOOP:
- LCALL KEYSET
- LCALL display
- LJMP LOOP
- KEYSET:
- JB P3.2,FH
- LCALL DELAY10MS ;防抖
- JNB P3.2,$
- INC GEWEI
- MOV A,GEWEI
- CJNE A,#10,FH
- MOV GEWEI,#0
- INC SHIWEI
- MOV A,SHIWEI
- CJNE A,#10,FH
- MOV SHIWEI,#0
- INC BAIWEI
- MOV A,BAIWEI
- CJNE A,#10,FH
- MOV BAIWEI,#0
- ;千位加
- ;INC QIANWEI
- ;MOV A,QIANWEI
- ;CJNE A,#10,FH
- ;MOV QIANWEI,#0
- FH:
- RET
- display: ;显示程序
- MOV DPTR,#ledNum
- MOV A,QIANWEI
- JNZ Q1
- SETB 20H
- MOV A,#10
- Q1:
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.0
- ACALL DELAY30MS
- SETB P2.0
- MOV DPTR,#ledNum
- MOV A,BAIWEI
- JNZ Q2; 百位为0,则执行下一步
- JNB 20H, Q2; 位20H为1,表示千位为0,执行下一步
- MOV A,#10
- LJMP Q21
- Q2:
- CLR 20H
- Q21:
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.1
- ACALL DELAY30MS
- SETB P2.1
- MOV DPTR,#ledNum
- MOV A,SHIWEI
- JNZ Q3; 十位为0,则执行下一步
- JNB 20H, Q3; 位20H为1,表示百位和千位都为0,执行下一步
- MOV A,#10
- Q3:
- CLR 20H
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.2
- ACALL DELAY30MS
- SETB P2.2
- MOV DPTR,#ledNum
- MOV A,GEWEI
- MOVC A,@A+DPTR
- MOV P0,A
- CLR P2.3
- ACALL DELAY30MS
- SETB P2.3
- RET
- DELAY30MS: ;误差 0us
- MOV R7,# 01H
- DL1:
- MOV R6,# 26H
- DL0:
- MOV R5,# 82H
- DJNZ R5,$
- DJNZ R6, DL0
- DJNZ R7, DL1
- RET
- DELAY10MS: ;误差 0us
- MOV R7,# 01H
- DL2:
- MOV R6,# 26H
- DL3:
- MOV R5,# 82H
- DJNZ R5,$
- DJNZ R6, DL3
- DJNZ R7, DL2
- RET
- ledNum: ; 共阴
- DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 00H
- ;0123456789
- END ;必须编写在最后,结束
复制代码
|