51单片机查表法实现流水灯越来越慢汇编语言代码
时间: 2023-06-12 09:05:04 浏览: 102
以下是51单片机汇编语言代码实现流水灯(查表法),并且每次循环灯闪烁速度减慢一半:
```
org 0h
mov TMOD,#01h ; 设置定时器0为模式1
mov TH0,#0FEh ; 定时器初值
mov TL0,#0h
setb TR0 ; 启动定时器0
mov DPTR,#table; 设置数据指针指向查找表
mov R0,#00h ; 初始为第0个灯亮
loop:
mov A,R0
movc A,@A+DPTR ; 从查找表中取出灯的亮灭状态
mov P1,A ; 放到P1口输出
acall delay ; 延时,使灯亮起来
mov P1,#00h ; 关闭灯
acall delay ; 延时,使灯灭
inc R0 ; 下一个灯
cjne R0,#06h,loop ; 循环6次,也就是6个灯
mov R0,#00h ; 循环完毕,重新从第0个灯开始
sjmp slow_down ; 灯闪烁速度减慢一半
delay:
mov R1,#0FFh ; 延时计数器初值
delay_loop:
djnz R1,delay_loop ; 循环延时
ret
slow_down:
mov R2,#0FFh ; 等待计数器初值
slow_down_loop:
djnz R2,slow_down_loop ; 循环等待
djnz R2,slow_down_loop ; 再次循环等待,使灯闪烁速度减慢一半
sjmp loop ; 回到循环开始,继续闪烁
table:
db 0FEh, 0FDh, 0FBh, 0F7h, 0EFh, 0DFh ; 查找表,表示6个灯的亮灭状态
ret
end
```
代码中使用了一个查找表,表示6个灯的亮灭状态。每次循环从查找表中取出下一个灯的亮灭状态,并且通过P1口输出到LED灯上。通过延时来控制灯的亮灭时间,从而实现流水灯效果。同时,通过一个计数器来控制每次循环灯闪烁速度减慢一半。
阅读全文