AT89C52单片机汇编语言数码管动态显示1234
时间: 2023-09-24 10:05:48 浏览: 257
以下是AT89C52单片机汇编语言数码管动态显示1234的代码:
```
ORG 0H ;程序起始地址
MOV P0,#11111110B ;使最右边的数码管工作
MOV R0,#0AH ;将数字10赋值给R0
MOV P1,#0FFH ;P1口设置为输出
MOV DPTR,#TABLE ;将数据指针指向数字表
MOVX A,@DPTR ;将数字表中的数值读入A寄存器
MOV P1,A ;将A寄存器的值输出到P1口
ACALL DELAY ;调用延时函数
MOV P1,#0FFH ;关闭P1口
MOV A,R0 ;将R0寄存器中的数值读入A寄存器
INC A ;A寄存器加1
CJNE A,#0BH,LOOP ;如果A寄存器不等于11,则跳转到LOOP
MOV A,#0AH ;将数字10赋值给A寄存器
MOV R0,A ;将A寄存器的值赋值给R0寄存器
MOV P0,#11111101B ;使最右边的数码管工作
MOVX A,@DPTR ;将数字表中的数值读入A寄存器
MOV P1,A ;将A寄存器的值输出到P1口
ACALL DELAY ;调用延时函数
MOV P1,#0FFH ;关闭P1口
LOOP: ;循环开始
MOV P0,#11111110B ;使最右边的数码管工作
MOVX A,@DPTR ;将数字表中的数值读入A寄存器
MOV P1,A ;将A寄存器的值输出到P1口
ACALL DELAY ;调用延时函数
MOV P1,#0FFH ;关闭P1口
MOV A,R0 ;将R0寄存器中的数值读入A寄存器
INC A ;A寄存器加1
CJNE A,#0BH,LOOP ;如果A寄存器不等于11,则跳转到LOOP
MOV A,#0AH ;将数字10赋值给A寄存器
MOV R0,A ;将A寄存器的值赋值给R0寄存器
MOV P0,#11111101B ;使右数第二个数码管工作
MOVX A,@DPTR ;将数字表中的数值读入A寄存器
MOV P1,A ;将A寄存器的值输出到P1口
ACALL DELAY ;调用延时函数
MOV P1,#0FFH ;关闭P1口
SJMP LOOP ;跳转到LOOP循环
DELAY: ;延时函数
MOV R1,#0FFH ;将R1寄存器赋值为255
DELAY2: ;循环开始
DJNZ R1,DELAY2 ;倒计时
RET ;返回主程序
TABLE: ;数字表
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,40H
```
该程序使用了一个数字表,可以根据需要添加或修改数字表中的数值来实现不同的显示效果。程序通过循环控制数码管的显示,并使用延时函数来控制数码管的刷新速度。
阅读全文