51单片机流水灯汇编闪烁一秒,按下p3.3口的按钮后,八个灯全亮两秒,全灭两秒,后恢复正常
时间: 2023-08-05 15:03:27 浏览: 99
以下是51单片机流水灯汇编代码,实现闪烁一秒:
```
ORG 0H
START:
MOV P1, #0FFH ; 设置P1口为输出模式,初始为全亮
SETB P3.3 ; 设置P3.3口为输入模式,用于接收按键输入
CLR P1.0 ; 灯1亮
MOV R7, #5 ; 计时器设为5
LOOP:
ACALL DELAY ; 延时
RLC P1 ; 左移一位,产生流水灯效果
DJNZ R7, LOOP; 计时器减1,如果不为0则继续循环
CLR P1.7 ; 灯8灭
MOV R7, #10 ; 计时器设为10,用于计时2秒
WAIT:
JB P3.3, LIGHTS_ON ; 判断P3.3口是否被按下,如果是则跳转到全亮状态
ACALL DELAY ; 延时
DJNZ R7, WAIT ; 计时器减1,如果不为0则继续循环
CJNE P1, #0FFH, LOOP ; 判断P1口是否全亮,如果不是则跳转到流水灯状态
SJMP START ; 如果全灭,则跳转到初始状态
LIGHTS_ON:
MOV P1, #0FFH ; 设置P1口为输出模式,全亮状态
MOV R7, #20 ; 计时器设为20,用于计时2秒
WAIT2:
JB P3.3, LOOP ; 判断P3.3口是否被按下,如果是则跳转到流水灯状态
ACALL DELAY ; 延时
DJNZ R7, WAIT2; 计时器减1,如果不为0则继续循环
CLR P1 ; 灯全灭
MOV R7, #20 ; 计时器设为20,用于计时2秒
WAIT3:
JB P3.3, LOOP ; 判断P3.3口是否被按下,如果是则跳转到流水灯状态
ACALL DELAY ; 延时
DJNZ R7, WAIT3; 计时器减1,如果不为0则继续循环
SJMP LOOP ; 跳转到流水灯状态
DELAY:
MOV R6, #255 ; 初始化R6寄存器为255
D1: MOV R5, #255 ; 初始化R5寄存器为255
D2: DJNZ R5, D2 ; R5减1,如果不为0则继续循环
DJNZ R6, D1 ; R6减1,如果不为0则继续循环
RET
END
```
需要注意的是,以上代码只是一种实现方法,具体的实现方式可能会因为硬件和软件的不同而有所不同,需要根据具体情况进行修改。
阅读全文