📄 qscode.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;实例:快速启动quick start(STK 0707学习板)
;
;现象:8发光二极管向两个方向流动后数字8在6位七段数码管之间流动一次后循环
;
;作者:杨欣,刘长焕,张延强 电路飞翔网 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 ;输出至P1口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R1, LEFT ;R1减1,如果不为0跳回LEFT继续执行,否则执行下一行
MOV R2, #7 ;R2=7,为向右"流动"设置次数,考虑一下为什么不是8?
RIGHT: ;这是发光二极管向右"流动"的循环体
RRC A ;把进位CY在累加器ACC中从左向右轮换一位
MOV P1, A ;输出至P1口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R2, RIGHT ;是否右移了7次,如果不是则跳回RIGHT继续执行
LEDDIS:
MOV P0, #00H ;P0清0
MOV P2, #8 ;P2口输出显示数据8
MOV R2, #6 ;R2=6,为6位七段数码管计数器
MOV A, #00H ;A=00H,七段数码管选通起始地址
SETB C ;CY=1
NEXT:
RLC A ;把进位CY在累加器ACC中从右向左轮换一位
MOV P0, A ;输出至P0口
CALL DELAY ;调延时子程序,延时200ms
DJNZ R2,NEXT ;是否右移了6次,如果不是则跳回NEXT继续执行
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 + -