51单片机两位共阳数码管0-60秒表计数器,汇编语言,带有查表程序
时间: 2024-03-23 11:36:36 浏览: 157
以下是一个使用51单片机的汇编语言编写的0-60秒表计数器程序,其中使用了查表程序。
```
ORG 0
MOV P0, #0FFH ; 将P0口设为输出
MOV P1, #0 ; 将P1口设为输入
CLR C ; 清除进位标志
CLR A ; 将A寄存器清零
CLR B ; 将B寄存器清零
MOV DPTR, #TABLE ; 将数据指针指向查表程序
MAIN:
INC A ; 每隔1秒钟将A寄存器加1
CJNE A, #60, SKIP ; 如果A寄存器不等于60,跳转到SKIP
CLR A ; 如果A寄存器等于60,将其清零
INC B ; 将B寄存器加1
CJNE B, #60, SKIP ; 如果B寄存器不等于60,跳转到SKIP
CLR B ; 如果B寄存器等于60,将其清零
SETB C ; 进位标志设为1
SKIP:
ACALL DISPLAY ; 调用显示程序
SJMP MAIN ; 跳转到主循环
DISPLAY:
MOV R1, A ; 将A寄存器的值保存到R1寄存器中
MOV A, B ; 将B寄存器的值赋给A寄存器
MOV B, R1 ; 将R1寄存器的值赋给B寄存器
MOVX A, @DPTR ; 从查表程序中获取数据
MOV P0, A ; 将数据输出到P0口
INC DPTR ; 数据指针加1
CJNE A, #255, EXIT ; 如果数据不等于255,跳转到EXIT
CLR A ; 如果数据等于255,将其清零
EXIT:
RET ; 返回主程序
TABLE:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ; 存储数码管的值
DB 77H, 7CH, 39H, 5EH, 79H, 71H, 3DH, 76H, 30H, 1EH ; 存储数码管的值
DB 76H, 38H, 55H, 54H, 5CH, 73H, 67H, 50H, 6AH, 78H ; 存储数码管的值
DB 0 ; 存储结束标志
END
```
在该程序中,使用了一个查表程序来获取数码管显示的数据。该查表程序存储在`TABLE`标签中,通过`MOVX A, @DPTR`指令从中获取数据,然后输出到P0口。在主程序中,使用`INC A`和`INC B`指令每隔1秒钟将A和B寄存器加1,并使用`CJNE`指令判断是否需要进位。在进位时,将进位标志设为1,并调用显示程序。在显示程序中,将A和B寄存器的值交换,然后从查表程序中获取数据并输出到P0口。
阅读全文