seqled.asm
来自「十五个关于AT89S51的源代码」· 汇编 代码 · 共 45 行
ASM
45 行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;实例四:流水灯 sequence LEDs (《51单片机应用从零开始》 3.4小节实例)
;
;现象:P1口上的发光二极管依次发光
;
;作者:杨欣,刘长焕,张延强 电路飞翔网 eedesign@163.com
;
; http://www.circuitfly.com
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H ;起始地址
START: ;程序一开始,初始一些所需要变量,如进位CY的清0等
MOV A, #0FFH ;累加器ACC中8位全置1(FFH),发光二极管全熄灭
CLR C ;进位CY被清0,CY=0
MOV R1, #8 ;R1=8,循环8次(左移8次),用R1作计数器
LEFT: ;这是发光二极管向左"流动"的循环体
RLC A ;把进位CY在累加器ACC中从右向左轮换一位,对照矩阵理解
MOV P1, A ;输出至P0口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R1, LEFT ;R1减1,如果不为0跳回LEFT继续执行,否则执行下一行
MOV R2, #7 ;R2=7,为向右"流动"设置次数,考虑一下为什么不是8?
RIGHT: ;这是发光二极管向右"流动"的循环体
RRC A ;把进位CY在累加器ACC中从左向右轮换一位
MOV P1, A ;输出至P0口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R2, RIGHT ;是否右移了7次,如果不是则跳回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 + =
减小字号Ctrl + -
显示快捷键?