📄 ctrlleds.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;实例五:流水控制灯 controllable LEDs (《51单片机应用从零开始》 4.2小节实例)
;
;现象:P1口上的发光二极管发光,当按下按键S6或S7时,发光二极管向左或向右流动
;
;作者:杨欣,刘长焕,张延强 电路飞翔网 eedesign@163.com
;
; http://www.circuitfly.com
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
START: ;这部分是系统的初始化部分
MOV A,#0FFH ; 累加器ACC中8位全置1(FFH),发光二极管全熄灭
CLR C ; 进位CY被清0,CY=0
MOV R1,#8 ; R1=8,循环8次(左/右移8次)
MOV P1,#00H ; 8支发光二极管全亮
MOV P2, A ; P2作输入口,先将其各位置1(参考3.1小节)
WAIT_A: ;这是循环等待按钮A按下的程序
JB P2.4,WAIT_B ;如果按钮S7没有按下,查询按钮S6有没有按下
JMP LEFT ;如果按下按钮S7,就执行向左流动的程序
WAIT_B: ;这是循环等待按钮B按下的程序
JB P2.5,WAIT_A ;如果按钮S6没有按下,返回继续查询按钮S7有没有按下
JMP RIGHT ;如果按下按钮S6,就执行向右流动程序
LEFT: ;这是流水灯向左流动的程序
RLC A ;把进位CY=0在累加器ACC中从右向左移一位,对照矩阵理解
MOV P1,A ;输出至P1口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R1,LEFT ;R1减1,如果不为0跳回LEFT继续左移,否则执行下一行
JMP START ;向左流动完成后,跳回初始状态,全亮,并等待按下按钮
RIGHT: ;这是流水灯向右流动的程序
RRC A ;把进位CY=0在累加器ACC中从左向右移一位
MOV P1,A ;输出至P1口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R1,RIGHT ;是否右移了8次,如果不是则跳回RIGHT继续右移
JMP START ;向右流动完成后,跳回初始状态,全亮,并等待按下按钮
DELAY: ;延时200ms的子程序
MOV R3,#20
D1:
MOV R4,#20
D2:
MOV R5,#248
DJNZ R5,$ ;R5减1,如果不为0,就执行本行
DJNZ R4,D2
DJNZ R3,D1
RET ;子程序结束标志,返回主程序
END ;程序结束点
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -