采用外部中断编写程序控制数码管显示从00到99,S1控制加计数,S2控制减计数,汇编语言共阴极数码管
时间: 2023-08-21 21:02:38 浏览: 66
好的,这是一个比较具体的嵌入式系统编程问题,需要结合具体的硬件平台进行编写。以下是一个简单的示例程序,假设我们使用的是8051单片机,并且将数码管的8个段接口连接在P1口上,而将两个控制按键S1和S2连接在P3.0和P3.1上。
```
ORG 0H
MOV P1,#0FFH ; 初始化P1口为输出高电平,关闭数码管
MOV P3,#03H ; 初始化P3口为带上拉电阻的输入,用于读取按键状态
SETB P3.0 ; 使能P3.0口的上拉电阻
SETB P3.1 ; 使能P3.1口的上拉电阻
MOV R0,#0 ; 初始化计数器R0为0
MAIN:
MOV A,P3 ; 读取P3口的状态
CPL A ; 取反,使得按键按下时A为0
ANL A,#03H ; 屏蔽掉其他位,只保留P3.1和P3.0两个按键位
JZ MAIN ; 如果没有按键按下,则一直循环
MOV R1,#10 ; 初始化R1为10,用于后面的除法运算
CJNE A,#01H,DEC ; 如果P3.1被按下,则跳转到减计数的代码
INC:
INC R0 ; 计数器加1
CJNE R0,#100H,DISPLAY ; 如果计数器小于100,则显示当前计数值
CLR R0 ; 如果计数器达到100,则清零
DISPLAY:
MOV A,R0 ; 将计数器值读入累加器A中
DIV AB,R1 ; 将A除以R1,商存入B中,余数存入A中
ADD A,#99H ; 将商与99相加,得到数码管第一个数码的编码
MOV P1,A ; 将编码输出到P1口,显示第一个数码
MOV A,B ; 将除法的商读入累加器A中
ADD A,#99H ; 将商与99相加,得到数码管第二个数码的编码
ANL A,#0FH ; 屏蔽掉高4位的无用位
ADD A,#80H ; 将编码的最高位设置为1,打开数码管的小数点
MOV P1,A ; 将编码输出到P1口,显示第二个数码
SJMP MAIN ; 返回主程序,等待下一次按键
DEC:
DJNZ R0,DISPLAY ; 如果计数器不为0,则显示当前计数值
MOV R0,#99H ; 如果计数器为0,则将其设置为99
SJMP DISPLAY ; 跳转到显示计数值的代码
```
上述程序的基本思路是:每次进入主循环时,先读取按键状态,如果没有按键按下则一直循环,如果按下了按键,则根据按键的类型执行相应的操作。如果是加计数按键S1,则将计数器加1,如果计数器已经达到100,则清零。如果是减计数按键S2,则将计数器减1,如果计数器已经为0,则设置为99。无论是加计数还是减计数,每次计数器值发生变化时,都需要重新计算数码管的显示值,并将其输出到P1口上,实现数码管的显示。