求用4个数码管显示的51单片机计步器程序 用按钮来计步
1个回答
展开全部
以前做过的一个proteus仿真,汇编。4 位共阴,段选P0,位选 P2.0~P2.3 。P3.0开始键,P3.1停止键,P3.3计步输入。
;0~9999计数
STRT EQU P3.0
STP EQU P3.1
ORG 0000H
LJMP MAIN
ORG 0013H ;INT1入口
LJMP EX1INT
ORG 0100H ;主程序开始地址
MAIN: MOV 20H,#00H;千
MOV 21H,#00H;百
MOV 22H,#00H;十
MOV 23H,#00H;个
SETB EA ;开总中断
k1: LCALL DISP ;调显示子程序
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START
k2: JB STP,K1
LCALL DISP
JNB STP,STOP
AJMP K1
DISP: MOV R1,#20H ;显示偏移量
MOV R2,#04H ;显示位数
MOV DPTR,#TABLE ;数码管字符
MOV A,#0FEH ;位选数据
DISP1: MOV B,A
MOV P2,A ;位选
MOV A,@R1
MOVC A,@A+DPTR ;取字符码
MOV P0,A ;送出显示
MOV R3,#80H ;短暂延时
DJNZ R3,$
INC R1 ;指向下一位要显示的数据
MOV A,B ;取位选数据
RL A ;指向下一位
DJNZ R2,DISP1;4位没显示完则继续
RET
START: SETB EX1
SETB IT1
AJMP K1
STOP: CLR EX1
CLR IT1
AJMP K2
EX1INT: MOV R0,#23H ;个位地址
INC @R0 ;个位数加1
CJNE @R0,#0AH,IRET ;个位不为10,跳转
MOV @R0,#00H ;个位为10,则清0
DEC R0 ;指向十位
INC @R0 ;十位加1
CJNE @R0,#0AH,IRET ;十位不为10,跳转
MOV @R0,#00H ;十位为10,则清0
DEC R0 ;指向百位
INC @R0 ;百倍加1
CJNE @R0,#0AH,IRET ;百倍不为10,跳转
MOV @R0,#00H ;十位为10,则清0
DEC R0 ;指向千位
INC @R0 ;千位加1
CJNE @R0,#0AH,IRET ;千位不为10,跳转
MOV @R0,#00H
IRET: RETI
DELAY: MOV R4,#10H ;延时子程序
DJNZ R4,$
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管字符表,共阴
END
;0~9999计数
STRT EQU P3.0
STP EQU P3.1
ORG 0000H
LJMP MAIN
ORG 0013H ;INT1入口
LJMP EX1INT
ORG 0100H ;主程序开始地址
MAIN: MOV 20H,#00H;千
MOV 21H,#00H;百
MOV 22H,#00H;十
MOV 23H,#00H;个
SETB EA ;开总中断
k1: LCALL DISP ;调显示子程序
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START
k2: JB STP,K1
LCALL DISP
JNB STP,STOP
AJMP K1
DISP: MOV R1,#20H ;显示偏移量
MOV R2,#04H ;显示位数
MOV DPTR,#TABLE ;数码管字符
MOV A,#0FEH ;位选数据
DISP1: MOV B,A
MOV P2,A ;位选
MOV A,@R1
MOVC A,@A+DPTR ;取字符码
MOV P0,A ;送出显示
MOV R3,#80H ;短暂延时
DJNZ R3,$
INC R1 ;指向下一位要显示的数据
MOV A,B ;取位选数据
RL A ;指向下一位
DJNZ R2,DISP1;4位没显示完则继续
RET
START: SETB EX1
SETB IT1
AJMP K1
STOP: CLR EX1
CLR IT1
AJMP K2
EX1INT: MOV R0,#23H ;个位地址
INC @R0 ;个位数加1
CJNE @R0,#0AH,IRET ;个位不为10,跳转
MOV @R0,#00H ;个位为10,则清0
DEC R0 ;指向十位
INC @R0 ;十位加1
CJNE @R0,#0AH,IRET ;十位不为10,跳转
MOV @R0,#00H ;十位为10,则清0
DEC R0 ;指向百位
INC @R0 ;百倍加1
CJNE @R0,#0AH,IRET ;百倍不为10,跳转
MOV @R0,#00H ;十位为10,则清0
DEC R0 ;指向千位
INC @R0 ;千位加1
CJNE @R0,#0AH,IRET ;千位不为10,跳转
MOV @R0,#00H
IRET: RETI
DELAY: MOV R4,#10H ;延时子程序
DJNZ R4,$
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管字符表,共阴
END
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询