8255七段数码管键盘循环显示00-99汇编代码
时间: 2023-09-21 16:06:01 浏览: 105
### 回答1:
以下是8255七段数码管键盘循环显示00-99的汇编代码:
```
ORG 100h ; 程序起始地址
MOV AL, 00h ; AL寄存器存储当前数字的个位
MOV AH, 00h ; AH寄存器存储当前数字的十位
DISPLAY:
CALL SHOW_NUM ; 显示当前数字
CALL READ_KEY ; 读取键盘输入
CMP AL, 09h ; 判断个位是否为9,如果是则进位
JNZ NOT_9
INC AH
NOT_9:
INC AL ; 个位加1
CMP AH, 09h ; 判断十位是否为9,如果是则归零
JNZ NOT_90
MOV AH, 00h
NOT_90:
CMP AL, 99h ; 判断是否达到99,如果是则重置为00
JNZ DISPLAY
MOV AL, 00h
JMP DISPLAY
SHOW_NUM:
PUSH AX ; 保护现场
MOV DL, AL ; DL寄存器存储个位数字
CALL DISP_NUM ; 调用显示数字子程序
POP AX ; 恢复现场
PUSH AX
MOV DL, AH ; DL寄存器存储十位数字
CALL DISP_NUM ; 调用显示数字子程序
POP AX
RET
DISP_NUM:
PUSH AX ; 保护现场
PUSH DX
MOV AH, 02h ; AH寄存器存储系统调用号
MOV BH, 00h ; BH寄存器存储页面号
MOV BL, 07h ; BL寄存器存储颜色属性
INT 10h ; 调用BIOS中断显示数字
POP DX
POP AX
RET
READ_KEY:
MOV AH, 00h ; AH寄存器存储系统调用号
INT 16h ; 调用BIOS中断读取键盘输入
RET
END
```
此程序使用8255控制七段数码管的显示,通过键盘输入实现数字的循环显示。首先将当前数字的个位和十位存储到AL和AH寄存器中,然后显示当前数字并等待键盘输入。如果个位为9,则进位,如果十位为9,则归零。如果达到99,则重置为00。最后通过BIOS中断显示数字和读取键盘输入。
### 回答2:
下面是一段用8255控制七段数码管键盘循环显示00-99的汇编代码:
```assembly
ORG 100H ; 程序入口地址
MOV AL, 00H ; 将00存入AL寄存器
MOV AH, 6H ; 将6H存入AH寄存器,作为延时控制的计数器
MOV DX, 77H ; 将77H(SEVEN_SEG)存入DX寄存器,作为七段数码管的地址
LOOP_DISPLAY:
OUT DX, AL ; 将AL中的数发送到七段数码管显示
CALL DELAY ; 调用延时子程序
INC AL ; AL寄存器自增1
CMP AL, 99H ; 比较AL与99H的值
JBE LOOP_DISPLAY ; 如果AL小于等于99H,继续循环显示
;延时子程序
DELAY:
MOV CX, 2000 ; 设置延时次数
LOOP_DELAY:
NOP ; 空指令,用于增加延时时间
LOOP LOOP_DELAY ; 继续循环延时
RET ; 返回调用的指令
END
```
此程序使用8255进行控制,将操作数存入AL寄存器,并将数字数据送往DX寄存器所对应的七段数码管显示。然后通过调用延时子程序实现数码管的循环显示。程序从00逐渐自增,直到大于99时停止循环。延时子程序使用CX计数器进行延时控制,循环指令实现延时次数的循环。
### 回答3:
下面是一个使用8255七段数码管键盘进行循环显示00到99的汇编代码:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
DIGIT_TABLE DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
DB 40H, 77H, 7CH, 39H, 5EH, 79H, 71H, 3DH, 76H, 30H
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AL, 00H ; 初始化数字为00
MOV DX, 00H ; 用于计数
DISPLAY:
CALL SHOW_DIGIT ; 显示当前数字
INC AL ; 数字递增
INC DX ; 计数器递增
CMP DX, 100H ; 判断计数器是否达到100
JNE DISPLAY ; 如果计数器未达到100,则继续循环显示数字
MOV AH, 4CH ; 程序结束
INT 21H
MAIN ENDP
SHOW_DIGIT PROC
PUSH BX
PUSH CX
PUSH DX
MOV CX, 10H ; 计数器,用于确定数字的位数
LOOP_DISPLAY:
MOV BX, AX ; 将数字存储在BX中
AND BX, 0FH ; 获取个位数字
MOV DL, DIGIT_TABLE[BX] ; 从数字表中获取数码管控制码
OUT 24H, DL ; 将数码管控制码写入端口24H,以显示个位数字
ROR AX, 4 ; 将数字右移4位,获取十位数字
LOOP LOOP_DISPLAY
POP DX
POP CX
POP BX
RET
SHOW_DIGIT ENDP
END MAIN
```
这段代码首先定义了一个数字表DIGIT_TABLE,其中存储了0到9的数码管控制码。然后在主程序中,使用AL寄存器初始化数字为00,使用DX寄存器作为计数器。在DISPLAY循环中,调用SHOW_DIGIT过程来显示当前数字,并且递增AL和DX寄存器。当计数器DX达到100时,程序结束。通过OUT指令将数码管控制码写入端口24H,以显示相应的数字。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)