求用4个数码管显示的51单片机计步器程序 用按钮来计步

 我来答
47okey
2010-11-15 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5900
采纳率:75%
帮助的人:2329万
展开全部
以前做过的一个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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式