用AT89C51编写程序,采用8255和8个数码管,要求循环动态显示数字19491001。
时间: 2023-11-18 22:03:36 浏览: 248
以下是基于AT89C51芯片和8255芯片的程序,实现循环动态显示数字19491001在8个数码管上:
```assembly
;AT89C51和8255芯片动态显示数字程序
;8个数码管采用共阳极显示
;晶振频率为11.0592MHz
org 0
mov SP, #40h ;初始化堆栈指针
mov P1, #0FFh ;P1口设置为输出,初始为高电平
mov P2, #0 ;P2口设置为输出,初始为低电平
mov P3, #0 ;P3口设置为输入,初始为低电平
mov TMOD, #01h ;设置定时器0为模式1,16位自动重装载
mov TH0, #0 ;定时器0计数值为0
mov TL0, #0 ;定时器0计数值为0
mov IE, #82h ;开启定时器0中断和总中断
setb TR0 ;启动定时器0
mov DPTR, #number_table ;DPTR指向数码管显示表格
mov R0, #0 ;R0为计数器,初始为0
loop:
mov A, R0 ;将计数器值存入累加器中
mov R1, #0 ;清空R1寄存器
div AB, #10 ;将累加器值除以10,商存入A中,余数存入B中
add A, #30h ;将商转换为ASCII码
mov R1, A ;将A值存入R1
mov A, B ;将余数存入A中
add A, #30h ;将余数转换为ASCII码
mov R2, A ;将A值存入R2
mov A, R0 ;将计数器值存入A中
add A, #30h ;将计数器值转换为ASCII码
mov R3, A ;将A值存入R3
mov A, #0 ;将0存入A中
mov P2, A ;清空P2口
mov P1, #0FFh ;设置P1口为输出,初始为高电平
mov A, R1 ;将R1中的值存入A中
orl A, #10000000b ;将A的最高位设置为1,即点亮第一个数码管的小数点
mov P1, A ;将A值存入P1口,点亮第一个数码管
acall delay_1ms ;延时1ms
mov P1, #0FFh ;清空P1口
mov A, R2 ;将R2中的值存入A中
orl A, #10000000b ;将A的最高位设置为1,即点亮第二个数码管的小数点
mov P1, A ;将A值存入P1口,点亮第二个数码管
acall delay_1ms ;延时1ms
mov P1, #0FFh ;清空P1口
mov A, R3 ;将R3中的值存入A中
orl A, #10000000b ;将A的最高位设置为1,即点亮第三个数码管的小数点
mov P1, A ;将A值存入P1口,点亮第三个数码管
acall delay_1ms ;延时1ms
mov P1, #0FFh ;清空P1口
inc R0 ;计数器加1
cjne R0, #9, loop ;如果计数器不等于9,则跳转到loop标签处
mov R0, #0 ;计数器清零
sjmp loop ;跳转到loop标签处
number_table:
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h, 7fh, 6fh ;数码管显示表格,从0到9依次为:3fh、06h、5bh、4fh、66h、6dh、7dh、07h、7fh、6fh
delay_1ms: ;1ms延时函数
mov R5, #10h
loop_1:
mov R6, #9
loop_2:
djnz R6, loop_2
djnz R5, loop_1
ret
end
```
程序中使用了一个数码管显示表格,从0到9依次为:3fh、06h、5bh、4fh、66h、6dh、7dh、07h、7fh、6fh,将数字转换为对应的ASCII码后,从数码管显示表格中查找对应的值,然后将其输出到8个数码管上,同时控制小数点的显示。
程序中还使用了一个延时函数,用于控制数码管的动态显示速度。在循环中,将计数器的值从0到9循环输出,当计数器的值为9时,清零计数器并继续循环,实现循环动态显示数字19491001。
阅读全文
相关推荐















