at89c51汇编语言数码管动态显示1234
时间: 2023-09-24 07:05:48 浏览: 314
以下是AT89C51汇编语言的数码管动态显示1234的代码:
```
ORG 0H ; 程序起始地址
MOV DPTR, #LUT ; 将查找表地址存入DPTR寄存器
MOV R0, #0H ; 初始化R0寄存器为0
MOV R2, #0H ; 初始化R2寄存器为0
MOV R3, #0H ; 初始化R3寄存器为0
MOV R4, #0H ; 初始化R4寄存器为0
LOOP:
MOV A, R0 ; 将R0寄存器的值存入累加器A中
MOVX A, @DPTR ; 将查找表中的值存入累加器A中
MOV P1, A ; 将累加器A中的值存入P1口,控制数码管显示
ACALL DELAY ; 延时
INC DPTR ; DPTR寄存器指向下一个查找表的地址
INC R2 ; R2寄存器自增1
CJNE R2, #4, LOOP ; 如果R2寄存器不等于4,则跳转到LOOP
INC R3 ; R3寄存器自增1
MOV R2, #0H ; R2寄存器重新赋值为0
CJNE R3, #4, LOOP ; 如果R3寄存器不等于4,则跳转到LOOP
INC R4 ; R4寄存器自增1
MOV R3, #0H ; R3寄存器重新赋值为0
CJNE R4, #4, LOOP ; 如果R4寄存器不等于4,则跳转到LOOP
SJMP LOOP ; 跳转到LOOP
DELAY:
MOV R5, #255 ; 初始化R5寄存器为255
DELAY1:
MOV R6, #255 ; 初始化R6寄存器为255
DELAY2:
DJNZ R6, DELAY2 ; R6寄存器自减1,如果不为0,则跳转到DELAY2
DJNZ R5, DELAY1 ; R5寄存器自减1,如果不为0,则跳转到DELAY1
RET ; 返回
LUT:
DB 3FH ; 数字0的编码
DB 06H ; 数字1的编码
DB 5BH ; 数字2的编码
DB 4FH ; 数字3的编码
DB 66H ; 数字4的编码
DB 6DH ; 数字5的编码
DB 7DH ; 数字6的编码
DB 07H ; 数字7的编码
DB 7FH ; 数字8的编码
DB 6FH ; 数字9的编码
```
在以上代码中,我们首先将查找表的地址存入DPTR寄存器中,然后初始化R0、R2、R3和R4寄存器为0。在LOOP标签处,我们首先将R0寄存器的值存入累加器A中,然后将查找表中对应的值存入累加器A中,将累加器A中的值存入P1口,控制数码管显示。然后我们进行一定的延时,再将DPTR寄存器指向下一个查找表的地址。当R2寄存器等于4时,我们将R2寄存器重新赋值为0,并将R3寄存器自增1。当R3寄存器等于4时,我们将R3寄存器重新赋值为0,并将R4寄存器自增1。当R4寄存器等于4时,我们将程序跳转回LOOP标签处。在DELAY标签处,我们通过循环延时的方法实现了程序的延时效果。最后,我们定义了一个查找表,将数字0到9的编码存入其中。
阅读全文