跳到主要内容

特殊代码示例


按钮控制流水灯 — 暂停与方向反转​

功能要求:8 个 LED 按从右到左的顺序循环跑。按住轻触开关时流水灯立即暂停,停滞位置只有一个灯保持亮的状态,松开后流水灯从暂停位置开始反向流动。每次按轻触开关操作都会使运行方向反向,如此循环往复。

寄存器分配:

寄存器用途
R01LED灯位掩码(初始 0x0001)
R02方向标志(0x0000 = 左移/从右到左,0x0001 = 右移/从左到右)
R05延时秒数
R3E按钮状态寄存器(0x0000 = 未按,0x0001 = 按下)

助记符形式​

;=== 初始化 ===
000 FZ 0001 0001 ; R01 = 1(最右侧LED亮)
001 FZ 0002 0000 ; R02 = 0(方向:左移=从右到左)
002 FZ 0005 0001 ; R05 = 1(延时1秒)

;=== 主循环(行003)===
003 SS 0001 0000 ; 输出R01到LED
004 YS 0005 0001 ; 延时1秒
005 JFZ 0000 003E ; 复制R3E(按钮)到R00
006 TJZ 0800 0010 ; 若R00≠0(按下),跳转到暂停 010
007 JFZ 0000 0002 ; 复制R02(方向)到R00
008 TJZ 0700 000C ; 若R00==0(左移),跳转到 00C

;右移分支(方向=1,从左到右)
009 XHYW 0101 0001 ; R01循环右移1位
00A ZY 0000 0003 ; 跳转到主循环 003

;左移分支(方向=0,从右到左)
00C XHYW 1101 0001 ; R01循环左移1位
00D ZY 0000 0003 ; 跳转到主循环 003

;=== 暂停(行010)===
010 SS 0001 0000 ; 输出R01(保持LED不动)
011 YS 0005 0001 ; 延时
012 JFZ 0000 003E ; 复制R3E到R00
013 TJZ 0700 0015 ; 若R00==0(松开),跳转到反转 015
014 ZY 0000 0010 ; 否则继续等待暂停 010

;=== 反转方向(行015)===
015 JFZ 0000 0002 ; 复制R02到R00
016 TJZ 0700 0019 ; 若R00==0(原是左移),跳转到 019
;原方向=右移,改为左移
017 FZ 0002 0000 ; R02 = 0(左移)
018 ZY 0000 0003 ; 跳回主循环 003
;原方向=左移,改为右移(行019)
019 FZ 0002 0001 ; R02 = 1(右移)
01A ZY 0000 0003 ; 跳回主循环 003

指令形式​

;=== 初始化 ===
000 10 0001 0001 ; R01 = 1(最右侧LED亮)
001 10 0002 0000 ; R02 = 0(方向:左移=从右到左)
002 10 0005 0001 ; R05 = 1(延时1秒)

;=== 主循环(行003)===
003 13 0001 0000 ; 输出R01到LED
004 02 0005 0001 ; 延时1秒
005 11 0000 003E ; 复制R3E(按钮)到R00
006 0A 0800 0010 ; 若R00≠0(按下),跳转到暂停 010
007 11 0000 0002 ; 复制R02(方向)到R00
008 0A 0700 000C ; 若R00==0(左移),跳转到 00C

;右移分支(方向=1,从左到右)
009 15 0101 0001 ; R01循环右移1位
00A 0E 0000 0003 ; 跳转到主循环 003

;左移分支(方向=0,从右到左)
00C 15 1101 0001 ; R01循环左移1位
00D 0E 0000 0003 ; 跳转到主循环 003

;=== 暂停(行010)===
010 13 0001 0000 ; 输出R01(保持LED不动)
011 02 0005 0001 ; 延时
012 11 0000 003E ; 复制R3E到R00
013 0A 0700 0015 ; 若R00==0(松开),跳转到反转 015
014 0E 0000 0010 ; 否则继续等待暂停 010

;=== 反转方向(行015)===
015 11 0000 0002 ; 复制R02到R00
016 0A 0700 0019 ; 若R00==0(原是左移),跳转到 019
;原方向=右移,改为左移
017 10 0002 0000 ; R02 = 0(左移)
018 0E 0000 0003 ; 跳回主循环 003
;原方向=左移,改为右移(行019)
019 10 0002 0001 ; R02 = 1(右移)
01A 0E 0000 0003 ; 跳回主循环 003

行为说明​

操作效果
正常运行8个LED从右到左循环跑(循环左移)
按住按钮流水灯立刻暂停,只有当前LED保持亮
松开按钮方向反转——原来从右到左变为从左到右,反之亦然
再按再松方向再次反转,如此往复