c51两个按键控制流水灯亮灭汇编语言代码
时间: 2023-11-07 14:04:48 浏览: 658
下面是基于C51单片机的两个按键控制流水灯亮灭的汇编语言代码:
```
; 定义端口
LED EQU P1
; 定义变量
delayCnt DB 0
ledStatus DB 01H
keyStatus DB 0
; 初始化程序
ORG 0000H
LJMP MAIN
; 中断服务程序
ORG 0030H
RETI
; 主程序
MAIN:
MOV LED, #00H ; 初始化LED灯状态
MOV TMOD, #01H ; 设置计时器0为模式1
MOV TH0, #3CH ; 设置计时器0的初值
MOV TL0, #0FFH
SETB TR0 ; 启动计时器0
SETB EA ; 开启总中断
LOOP:
JNB P3.4, CHECK_KEY1 ; 如果按键1未按下,则检查按键2
CLR P3.4 ; 按键1按下后,清除标志位
MOV delayCnt, #15 ; 延时计数器设置为15
CJNE ledStatus, #01H, TURN_OFF ; 如果LED为亮,则跳转到TURN_OFF
TURN_ON:
MOV LED, #01H ; LED灯亮
MOV ledStatus, #01H ; 更新LED状态
SJMP WAIT ; 等待
TURN_OFF:
MOV LED, #00H ; LED灯灭
MOV ledStatus, #00H ; 更新LED状态
WAIT:
JNB TF0, WAIT ; 等待计时器0溢出
CLR TF0 ; 清除计时器0溢出标志
DJNZ delayCnt, LOOP ; 延时计数器减1,如果不为0,则跳转到LOOP
JMP CHECK_KEY1 ; 延时结束后,跳转到检查按键1
CHECK_KEY1:
JNB P3.5, LOOP ; 如果按键2未按下,则跳转到LOOP
CLR P3.5 ; 按键2按下后,清除标志位
MOV keyStatus, #01H ; 更新按键状态
JMP LOOP
CHECK_KEY2:
JNB P3.6, LOOP ; 如果按键1未按下,则跳转到LOOP
CLR P3.6 ; 按键1按下后,清除标志位
MOV keyStatus, #02H ; 更新按键状态
JMP LOOP
```
该代码中使用了两个按键来控制LED灯的状态,按下按键1会改变LED灯的状态,按下按键2会更新按键状态。按键状态为01H表示按下了按键1,为02H表示按下了按键2。在LOOP循环中,如果按键1未被按下,则会检查按键2是否被按下;如果按键1被按下,则会执行改变LED灯状态的代码,并且在结束后跳转到检查按键1的代码;如果按键2被按下,则会更新按键状态并且跳转到LOOP循环。
阅读全文