用8051单片机汇编语言采用外部中断编写程序控制数码管显示从00到99,S1控制加计数,S2控制减计数
时间: 2023-08-22 19:05:08 浏览: 165
单片机 数码管计数显示
好的,我可以为您解答这个问题。以下是代码示例:
```
ORG 0000H
MOV P0, #0FFH ; 设置P0口为输出
MOV P2, #0FFH ; 设置P2口为输入
MOV TMOD, #01H ; 设置定时器模式为模式1
MOV TH0, #3CH ; 设置定时器初值为3CH
MOV TL0, #0B0H ; 设置定时器初值为0B0H
SETB ET0 ; 开启定时器0中断
SETB EA ; 开启总中断
MAIN:
JNB P2.0, ADD ; 判断S1是否按下,如果按下则跳转到ADD
JNB P2.1, SUB ; 判断S2是否按下,如果按下则跳转到SUB
JMP MAIN ; 如果S1和S2都没有按下,则一直循环
ADD:
INC R1 ; R1存储计数器的值
CJNE R1, #100, DISP ; 如果计数器的值小于100,则跳转到DISP
CLR R1 ; 如果计数器的值等于100,则将计数器清零
SJMP DISP ; 跳转到DISP
SUB:
DJNZ R1, DISP ; 如果计数器的值不为0,则将计数器减1并跳转到DISP
MOV R1, #99 ; 如果计数器的值为0,则将计数器设置为99
JMP DISP ; 跳转到DISP
DISP:
MOV A, R1 ; 将计数器的值存储到累加器A中
DIV AB, #10 ; 将累加器A中的值除以10,商存储到B中,余数存储到A中
MOV P0, #0FFH ; 将P0口设置为高电平
MOV P0, #0FEH ; 将P0口设置为低电平
MOV P1, A ; 将余数存储到P1口
ACALL DELAY ; 延时一段时间
MOV P0, #0FFH ; 将P0口设置为高电平
MOV P0, #0FDH ; 将P0口设置为低电平
MOV P1, B ; 将商存储到P1口
ACALL DELAY ; 延时一段时间
RET
DELAY:
MOV R2, #01H ; 设置延时初值
AGAIN:
MOV R3, #0FFH ; 设置延时计数初值
HERE:
DJNZ R3, HERE ; 延时计数
DJNZ R2, AGAIN ; 延时循环
RET
END
```
代码中使用了外部中断来响应S1和S2按键事件,使用计数器R1来存储显示的数字,使用定时器0来产生延时,使用P0口来控制数码管的显示。在ADD和SUB标签中分别对计数器进行加1和减1的操作,然后跳转到DISP标签进行数码管的显示。DELAY子程序用于实现延时操作。
希望这个程序能够帮助到您。
阅读全文