程序分享
📚 入门体验
三色彩灯-顺序执行至结束
- 助记符形式
- 指令形式
000 JT 0000 0010
001 JT 0000 0011
002 JT 0000 0012
003 JS 0000 0000
000 41 0000 0010
001 41 0000 0011
002 41 0000 0012
003 0F 0000 0000
三色彩灯-循环执行-运行时可调整颜色
- 助记符形式
- 指令形式
000 JT 0000 0010
001 JT 0000 0011
002 JT 0000 0012
003 ZY 0000 0000
000 41 0000 0010
001 41 0000 0011
002 41 0000 0012
003 0E 0000 0000
三色彩灯-1秒延迟-寄存器值递增-色彩组合
- 助记符形式
- 指令形式
000 FZ 0010 0001
001 ZJ 0010 0001
002 YS 0001 0001
003 SS 0010 0001
004 ZY 0000 0001
000 10 0010 0001
001 12 0010 0001
002 02 0001 0001
003 13 0010 0001
004 0E 0000 0001
📚 传感器与控制
PWM 控制彩灯亮度
- 助记符形式
- 指令形式
000 FZ 0000 03E8
001 FZ 002A 0000
002 FZ 002B 0080
003 FZ 002C 0100
004 ZJ 002A 0010
005 ZJ 002B 0005
006 ZJ 002C 0002
007 XYZ 002C 0001
008 ZY 0000 0004
000 10 0000 03E8
001 10 002A 0000
002 10 002B 0080
003 10 002C 0100
004 12 002A 0010
005 12 002B 0005
006 12 002C 0002
007 05 002C 0001
008 0E 0000 0004
探索声控灯
- 助记符形式
- 指令形式
000 FZ 0000 1000
001 FZ 0025 0001
002 AD 0000 002A
003 AD 0001 002D
004 DYZ 2A00 0010
005 ZY 0000 0002
010 TZ 0001 0012
011 ZY 0000 0002
012 CD 007F 7F7F
013 YS 0005 0001
014 CD 0000 0000
015 ZY 0000 0002
000 10 0000 1000
001 10 0025 0001
002 AD 0000 002A
003 AD 0001 002D
004 04 2A00 0010
005 0E 0000 0002
010 0B 0001 0012
011 0E 0000 0002
012 E4 007F 7F7F
013 02 0005 0001
014 E4 0000 0000
015 0E 0000 0002
室内温度监控
- 助记符形式
- 指令形式
000 FZ 000C 0CBC
001 RFZ 0000 002E
002 XDZ 000C 0005
003 JT 0000 0010
004 ZY 0000 0000
005 JT 0000 0012
006 ZY 0000 0000
000 10 000C 0CBC
001 11 0000 002E
002 08 000C 0005
003 41 0000 0010
004 0E 0000 0000
005 41 0000 0012
006 0E 0000 0000
模拟室内照明电路
- 助记符形式
- 指令形式
000 FZ 0002 0001
001 FZ 0003 0000
002 DZ 3F02 0004
003 ZY 0000 0002
004 DZ 3F03 0006
005 ZY 0000 0004
006 DZ 0102 0008
007 ZY 0000 0010
008 FZ 0001 0000
009 CD 0000 0000
00A ZY 0000 0002
010 FZ 0001 0001
011 CD 0011 1111
012 ZY 0000 0002
000 10 0002 0001
001 10 0003 0000
002 06 3F02 0004
003 0E 0000 0002
004 06 3F03 0006
005 0E 0000 0004
006 06 0102 0008
007 0E 0000 0010
008 10 0001 0000
009 E4 0000 0000
00A 0E 0000 0002
010 10 0001 0001
011 E4 0011 1111
012 0E 0000 0002
模拟幸运大转盘
- 助记符形式
- 指令形式
000 DY 0000 0080
001 DY 0000 00B0
002 DY 0000 00A2
003 ZY 0000 0002
080 FZ 0000 0000
081 FZ 0001 0014
082 FZ 0002 0028
083 FZ 0003 003C
084 FZ 0004 0050
085 FZ 0005 0000
086 FZ 0006 0001
087 FZ 0007 0002
088 FZ 0011 0000
089 FZ 0012 0005
08A FH 0000 0000
090 XYZ 1112 0092
091 FH 0000 0000
092 DY 0000 00C0
093 DY 0000 00C0
094 SJS 0000 0000
095 CHU 0000 028F
096 DY 0000 00D0
097 DY 0000 00B0
098 ZJ 0011 0001
099 FH 0000 0000
0A2 DZ 3F06 00A4
0A3 ZY 0000 00A8
0A4 DZ 3F05 00A6
0A5 ZY 0000 00A4
0A6 DY 0000 0090
0A8 DZ 3F07 00AA
0A9 FH 0000 0000
0AA FZ 0011 0000
0AB FH 0000 0000
0B0 FZ 0028 0210
0B1 YXTC 8080 2000
0B2 FZ 0028 FFFF
0B3 SC 0000 0000
0B4 YS 00C8 0000
0B5 FH 0000 0000
0C0 CD 00FF 0000
0C1 YS 00C8 0000
0C2 CD 00FF FF00
0C3 YS 00C8 0000
0C4 CD 0000 FF00
0C5 YS 00C8 0000
0C6 CD 00FF 00FF
0C7 YS 00C8 0000
0C8 CD 0000 00FF
0C9 YS 00C8 0000
0CA FH 0000 0000
0D0 DYZ 0001 00D3
0D1 CD 00FF 0000
0D2 FH 0000 0000
0D3 DYZ 0002 00D6
0D4 CD 00FF FF00
0D5 FH 0000 0000
0D6 DYZ 0003 00D9
0D7 CD 0000 FF00
0D8 FH 0000 0000
0D9 DYZ 0004 00DC
0DA CD 00FF 00FF
0DB FH 0000 0000
0DC CD 0000 00FF
0DD FH 0000 0000
000 0C 0000 0080
001 0C 0000 00B0
002 0C 0000 00A2
003 0E 0000 0002
080 10 0000 0000
081 10 0001 0014
082 10 0002 0028
083 10 0003 003C
084 10 0004 0050
085 10 0005 0000
086 10 0006 0001
087 10 0007 0002
088 10 0011 0000
089 10 0012 0005
08A 0D 0000 0000
090 05 1112 0092
091 0D 0000 0000
092 0C 0000 00C0
093 0C 0000 00C0
094 1F 0000 0000
095 2D 0000 028F
096 0C 0000 00D0
097 0C 0000 00B0
098 12 0011 0001
099 0D 0000 0000
0A2 06 3F06 00A4
0A3 0E 0000 00A8
0A4 06 3F05 00A6
0A5 0E 0000 00A4
0A6 0C 0000 0090
0A8 06 3F07 00AA
0A9 0D 0000 0000
0AA 10 0011 0000
0AB 0D 0000 0000
0B0 10 0028 0210
0B1 58 8080 2000
0B2 10 0028 FFFF
0B3 55 0000 0000
0B4 02 00C8 0000
0B5 0D 0000 0000
0C0 E4 00FF 0000
0C1 02 00C8 0000
0C2 E4 00FF FF00
0C3 02 00C8 0000
0C4 E4 0000 FF00
0C5 02 00C8 0000
0C6 E4 00FF 00FF
0C7 02 00C8 0000
0C8 E4 0000 00FF
0C9 02 00C8 0000
0CA 0D 0000 0000
0D0 04 0001 00D3
0D1 E4 00FF 0000
0D2 0D 0000 0000
0D3 04 0002 00D6
0D4 E4 00FF FF00
0D5 0D 0000 0000
0D6 04 0003 00D9
0D7 E4 0000 FF00
0D8 0D 0000 0000
0D9 04 0004 00DC
0DA E4 00FF 00FF
0DB 0D 0000 0000
0DC E4 0000 00FF
0DD 0D 0000 0000
主程序(000-003)
| 行号 | 指令 | 说明 |
|---|---|---|
| 000 | DY 0000 0080 | 调用 080 行开始的寄存器初始化子程序 |
| 001 | DY 0000 00B0 | 调用 0B0 行开始的屏幕显示(圆形+数字)子程序 |
| 002 | DY 0000 00A2 | 调用 0A2 行开始的抽奖判定循环子程序 |
| 003 | ZY 0000 0002 | 跳回 002 行,持续抽奖循环 |
寄存器初始化(080-08A)
| 行号 | 指令 | 说明 |
|---|---|---|
| 080 | FZ 0000 0000 | R00 = 0,随机数临时存放 |
| 081 | FZ 0001 0014 | R01 = 0x14,写入数值20 |
| 082 | FZ 0002 0028 | R02 = 0x28,写入数值40 |
| 083 | FZ 0003 003C | R03 = 0x3C,写入数值60 |
| 084 | FZ 0004 0050 | R04 = 0x50,写入数值80 |
| 085 | FZ 0005 0000 | R05 = 0,常数,用于按钮比较 |
| 086 | FZ 0006 0001 | R06 = 1,常数,用于按钮比较 |
| 087 | FZ 0007 0002 | R07 = 2,常数,用于按钮比较 |
| 088 | FZ 0011 0000 | R11 = 0,中奖计数器(累计抽奖次数) |
| 089 | FZ 0012 0005 | R12 = 5,小于跳转阈值(用于抽奖轮数限制) |
| 08A | FH 0000 0000 | 初始化结束,返回主程序 |
抽奖循环控制(090-099)
| 行号 | 指令 | 说明 |
|---|---|---|
| 090 | XYZ 1112 0092 | 如果 R11 < R12(抽奖次数未满 5 轮),跳转到 092 行继续 |
| 091 | FH 0000 0000 | 达到抽奖轮数上限,返回调用者 |
| 092 | DY 0000 00C0 | 调用 0C0 行开始的彩灯旋转子程序(视觉过渡) |
| 093 | DY 0000 00C0 | 再次调用彩灯旋转(延长彩灯效果) |
| 094 | SJS 0000 0000 | 生成随机数,存入 R00 |
| 095 | CHU 0000 028F | R00 = R00 ÷ 0x028F,将随机数缩小到目标范围 |
| 096 | DY 0000 00D0 | 调用 0D0 行开始的中奖等级判定子程序 |
| 097 | DY 0000 00B0 | 调用 0B0 行的屏幕显示子程序(显示当前结果) |
| 098 | ZJ 0011 0001 | R11 = R11 + 1,抽奖计数器加 1 |
| 099 | FH 0000 0000 | 本轮子程序结束,返回 |
条件判断与状态切换(0A2-0AB)
| 行号 | 指令 | 说明 |
|---|---|---|
| 0A2 | DZ 3F06 00A4 | 比较 R06 与按键值,满足条件则跳 0A4 |
| 0A3 | ZY 0000 00A8 | 无条件跳转到 0A8 行(状态 A 处理路径) |
| 0A4 | DZ 3F05 00A6 | 比较 R05 与按键值,满足条件则跳 0A6 |
| 0A5 | ZY 0000 00A4 | 跳回 0A4 行(状态保持) |
| 0A6 | DY 0000 0090 | 调用 090 行开始的抽奖循环子程序 |
| 0A8 | DZ 3F07 00AA | 比较 R07 与按键值,满足条件则跳 0AA |
| 0A9 | FH 0000 0000 | 状态判定结束,返回主程序 |
| 0AA | FZ 0011 0000 | 重置 R11 = 0,清零抽奖计数器 |
| 0AB | FH 0000 0000 | 返回主程序 |
屏幕显示:圆形+格式化数字(0B0-0B5)
| 行号 | 指令 | 说明 |
|---|---|---|
| 0B0 | FZ 0028 0210 | 设置绘图前景色 R28 = 0x0210 |
| 0B1 | YXTC 8080 2000 | 在屏幕坐标 (0x80, 0x80) 绘制实心圆形,半径 0x2000 |
| 0B2 | FZ 0028 FFFF | 设置绘图前景色 R28 = 0xFFFF(用于清除/覆盖之前的数字) |
| 0B3 | SC 0000 0000 | 格式化输出 R00 寄存器中的数字到屏幕 |
| 0B4 | YS 00C8 0000 | 延时 200 毫秒 |
| 0B5 | FH 0000 0000 | 显示子程序结束,返回 |
彩灯旋转效果(0C0-0CA)
| 行号 | 指令 | 说明 |
|---|---|---|
| 0C0 | CD 00FF 0000 | WS2812B LED 变色:红色亮(R=FF, G=00, B=00) |
| 0C1 | YS 00C8 0000 | 延时 200 毫秒 |
| 0C2 | CD 00FF FF00 | LED 变色:黄色亮(R=FF, G=FF, B=00) |
| 0C3 | YS 00C8 0000 | 延时 200 毫秒 |
| 0C4 | CD 0000 FF00 | LED 变色:绿色亮(R=00, G=FF, B=00) |
| 0C5 | YS 00C8 0000 | 延时 200 毫秒 |
| 0C6 | CD 00FF 00FF | LED 变色:粉色亮(R=FF, G=00, B=FF) |
| 0C7 | YS 00C8 0000 | 延时 200 毫秒 |
| 0C8 | CD 0000 00FF | LED 变色:蓝色亮(R=00, G=00, B=FF) |
| 0C9 | YS 00C8 0000 | 延时 200 毫秒 |
| 0CA | FH 0000 0000 | 彩灯旋转子程序结束,返回 |
中奖等级判定(0D0-0DD)
| 行号 | 指令 | 说明 |
|---|---|---|
| 0D0 | DYZ 0001 00D3 | 如果随机数 R00 > R01,跳转到 0D3 行(非一等奖) |
| 0D1 | CD 00FF 0000 | 一等奖:LED 红色亮(最高奖) |
| 0D2 | FH 0000 0000 | 返回 |
| 0D3 | DYZ 0002 00D6 | 如果 R00 > R02,跳转到 0D6 行(非二等奖) |
| 0D4 | CD 00FF FF00 | 二等奖:LED 黄色亮 |
| 0D5 | FH 0000 0000 | 返回 |
| 0D6 | DYZ 0003 00D9 | 如果 R00 > R03,跳转到 0D9 行(非三等奖) |
| 0D7 | CD 0000 FF00 | 三等奖:LED 绿色亮 |
| 0D8 | FH 0000 0000 | 返回 |
| 0D9 | DYZ 0004 00DC | 如果 R00 > R04,跳转到 0DC 行(非四等奖) |
| 0DA | CD 00FF 00FF | 四等奖:LED 紫色亮 |
| 0DB | FH 0000 0000 | 返回 |
| 0DC | CD 0000 00FF | 五等奖:LED 蓝色亮 |
| 0DD | FH 0000 0000 | 返回 |
用摇杆操作舵机(PCA9685)
将摇杆连接到 AD 通道,通过 PCA9685 模块控制舵机位置。摇杆的模拟值经数值映射到舵机的 PWM 通道。
- 助记符形式
- 指令形式
000 FZ 0001 000C
001 AD 0000 0000
002 RCHU 0000 0001
003 JIA 0000 0066
004 FZ 0002 0003
005 WPWM 0002 0000
006 ZY 0000 0000
000 10 0001 000C
001 AD 0000 0000
002 1D 0000 0001
003 2A 0000 0066
004 10 0002 0003
005 EC 0002 0000
006 0E 0000 0000
七段数码管显示十进制数字
通过寄存器值的七段编码转换,在数码管上显示从 0 开始递增的十进制数字。
- 助记符形式
- 指令形式
000 FZ 0001 0001
001 BMQD 0100 0000
002 QF 0000 0000
003 SS 0000 0001
004 ZJ 0001 0001
005 YS 0001 0001
006 ZY 0000 0001
000 10 0001 0001
001 30 0100 0000
002 16 0000 0000
003 13 0000 0001
004 12 0001 0001
005 02 0001 0001
006 0E 0000 0001
| 行号 | 指令 | 说明 |
|---|---|---|
| 000 | FZ 0001 0001 | 初始化显示数值 R01 = 1(从数字 1 开始) |
| 001 | BMQD 0100 0000 | 将 R01 的低 8 位转换为七段编码,结果存入 R00 |
| 002 | QF 0000 0000 | 将编码结果按位取反(适配共阳数码管) |
| 003 | SS 0000 0001 | 将 R00 的值送到数码管显示 |
| 004 | ZJ 0001 0001 | R01 的值加 1,准备显示下一个数字 |
| 005 | YS 0001 0001 | 延时一段时间,便于观察数字变化 |
| 006 | ZY 0000 0001 | 回到 001 行,继续显示下一个数字 |
📚 小风扇
引脚独立设置输出电平
- 助记符形式
- 指令形式
000 JT 0000 0010
001 DK 0000 0011
002 YS 0005 0001
003 DK 0000 0010
004 JT 0000 0011
005 YS 0001 0001
006 DK 0000 0011
007 JS 0000 0000
000 41 0000 0010
001 42 0000 0011
002 02 0005 0001
003 42 0000 0010
004 41 0000 0011
005 02 0001 0001
006 42 0000 0011
007 0F 0000 0000
引脚按位设置输出电平
- 助记符形式
- 指令形式
000 JT 0000 0010
001 YS 0005 0001
002 JT 0000 0011
003 YS 0001 0001
004 DK 0000 0010
005 DK 0000 0011
006 JS 0000 0000
000 41 0000 0010
001 02 0005 0001
002 41 0000 0011
003 02 0001 0001
004 42 0000 0010
005 42 0000 0011
006 0F 0000 0000
按钮控制的小风扇
- 助记符形式
- 指令形式
000 FZ 0025 0080
001 DK 0000 0010
002 TZ 0000 0005
003 DK 0000 0011
004 ZY 0000 0002
005 JT 0000 0011
006 ZY 0000 0002
000 10 0025 0080
001 42 0000 0010
002 0B 0000 0005
003 42 0000 0011
004 0E 0000 0002
005 41 0000 0011
006 0E 0000 0002
一键启停的小风扇
- 助记符形式
- 指令形式
000 FZ 0002 0001
001 FZ 0003 0000
002 DZ 3F02 0004
003 ZY 0000 0002
004 DZ 3F03 0006
005 ZY 0000 0004
006 DZ 0102 0008
007 ZY 0000 0010
008 FZ 0001 0000
009 DK 0000 0010
00A ZY 0000 0002
010 FZ 0001 0001
011 JT 0000 0010
012 ZY 0000 0002
000 10 0002 0001
001 10 0003 0000
002 06 3F02 0004
003 0E 0000 0002
004 06 3F03 0006
005 0E 0000 0004
006 06 0102 0008
007 0E 0000 0010
008 10 0001 0000
009 42 0000 0010
00A 0E 0000 0002
010 10 0001 0001
011 41 0000 0010
012 0E 0000 0002
📚 数值映射
用模拟输入控制风扇转速或LED亮度
- 助记符形式
- 指令形式
000 FZ 0001 0005
001 AD 0000 0000
002 SKIP 0000 0000
003 SKIP 0000 0000
004 RCHU 0000 0001
005 RFZ 002A 0000
006 ZY 0000 0000
000 10 0001 0005
001 AD 0000 0000
002 00 0000 0000
003 00 0000 0000
004 1D 0000 0001
005 11 002A 0000
006 0E 0000 0000
脉宽调制:用摇杆控制小风扇转速并使用完整取值
- 助记符形式
- 指令形式
000 FZ 0001 0005
001 AD 0000 0000
002 JIAN 0000 09A0
003 CHENG 0000 0002
004 RCHU 0000 0001
005 RFZ 002A 0000
006 ZY 0000 0000
000 10 0001 0005
001 AD 0000 0000
002 2B 0000 09A0
003 2C 0000 0002
004 1D 0000 0001
005 11 002A 0000
006 0E 0000 0000
📚 指令集
条件跳转 0x09 范例代码
- 助记符形式
- 指令形式
000 FZ 0000 0000
001 FZ 0005 0008
002 ZJ 0000 0001
003 DYZ 0005 0010
004 XYZ 0005 0020
005 DZ 0005 0030
006 YS 03E8 0000
007 ZY 0000 0002
010 JT 0000 0013
011 ZY 0000 0002
020 JT 0000 0012
021 ZY 0000 0002
030 JT 0000 0011
031 ZY 0000 0002
000 10 0000 0000
001 10 0005 0008
002 12 0000 0001
003 04 0005 0010
004 05 0005 0020
005 06 0005 0030
006 02 03E8 0000
007 0E 0000 0002
010 41 0000 0013
011 0E 0000 0002
020 41 0000 0012
021 0E 0000 0002
030 41 0000 0011
031 0E 0000 0002
📚 子程序调用
室内噪音检测系统
- 助记符形式
- 指令形式
000 FZ 0001 0BB0
001 FZ 0002 1300
002 AD 0000 0000
003 DYZ 0002 0010
004 DYZ 0001 0020
005 CD 0000 FF00
006 ZY 0000 0002
010 DY 0000 0040
011 DY 0000 0040
012 ZY 0000 0002
020 DY 0000 0030
021 DY 0000 0030
022 ZY 0000 0002
030 CD 0000 FF00
031 YS 01C4 0000
032 CD 00FF FF00
033 YS 01C4 0000
034 FH 0000 0000
040 CD 00FF 0000
041 YS 0001 0001
042 CD 00FF FF00
043 YS 0001 0001
044 CD 00FF 00FF
045 YS 0001 0001
046 FH 0000 0000
000 10 0001 0BB0
001 10 0002 1300
002 AD 0000 0000
003 04 0002 0010
004 04 0001 0020
005 E4 0000 FF00
006 0E 0000 0002
010 0C 0000 0040
011 0C 0000 0040
012 0E 0000 0002
020 0C 0000 0030
021 0C 0000 0030
022 0E 0000 0002
030 E4 0000 FF00
031 02 01C4 0000
032 E4 00FF FF00
033 02 01C4 0000
034 0D 0000 0000
040 E4 00FF 0000
041 02 0001 0001
042 E4 00FF FF00
043 02 0001 0001
044 E4 00FF 00FF
045 02 0001 0001
046 0D 0000 0000
📚 社区图书馆智能门禁系统
一个完整的社区图书馆智能门禁系统,包含:
- 双按钮控制:按钮 A 请求入馆,按钮 B 请求离馆
- 容量限制:最多容纳 10 人
- LED 指示:有空位时显示绿色,满员时显示红色
- 闸门控制:舵机自动抬杆和落杆
- 数字显示:显示当前馆内人数
寄存器映射表
| 寄存器 | 用途 |
|---|---|
| R02 | 舵机位选(常量 = 1) |
| R03 | 舵机 0° 位置(常量 = 0x0066) |
| R04 | 舵机 90° 位置(常量 = 0x0133) |
| R05 | 按钮未按下状态(常量 = 0) |
| R06 | 按钮 A 按下(常量 = 1) |
| R07 | 按钮 B 按下(常量 = 2) |
| R11 | 当前人数(0-10) |
| R12 | 最大容量(常量 = 10) |
| R28 | 显示颜色配置 |
子程序概览
| 地址 | 名称 | 描述 |
|---|---|---|
| 0x080 | Init | 寄存器初始化 |
| 0x090 | EnterCount | 入馆人数统计 |
| 0x098 | ExitCount | 离馆人数统计 |
| 0x0A2 | EnterButton | 监控按钮 A(入馆请求) |
| 0x0A8 | ExitButton | 监控按钮 B(离馆请求) |
| 0x0B0 | Display | 显示当前人数 |
| 0x0C0 | LEDControl | 根据容量设置 LED 颜色 |
| 0x0D0 | GateAction | 抬杆动作 |
- 助记符形式
- 指令形式
================== 主程序 (000-004) ==================
000 DY 0000 0080 初始化寄存器
001 DY 0000 00B0 显示初始人数(0)
002 DY 0000 00C0 更新 LED 颜色
003 DY 0000 00A2 监控按钮输入
004 ZY 0000 0001 循环返回更新显示
================== 寄存器初始化 (080-088) ==================
080 FZ 0002 0001 R02 = 1(舵机位选)
081 FZ 0003 0066 R03 = 0x0066(舵机 0° 位置)
082 FZ 0004 0133 R04 = 0x0133(舵机 90° 位置)
083 FZ 0005 0000 R05 = 0(按钮未按下)
084 FZ 0006 0001 R06 = 1(按钮 A 按下)
085 FZ 0007 0002 R07 = 2(按钮 B 按下)
086 FZ 0011 0000 R11 = 0(初始人数)
087 FZ 0012 000A R12 = 10(最大容量)
088 FH 0000 0000 返回
================== 人数统计 - 入馆 (090-093) ==================
090 DZ 1112 0092 若 R11 == R12(满员),跳转至 092
091 ZJ 0011 0001 R11 += 1(入馆一人)
092 DY 0000 00D0 调用抬杆动作(打开并关闭)
093 FH 0000 0000 返回
================== 人数统计 - 离馆 (098-09A) ==================
098 ZJ 1011 0001 R11 -= 1(离馆一人,最少为 0)
099 DY 0000 00D0 调用抬杆动作(打开并关闭)
09A FH 0000 0000 返回
================== 按钮 A - 请求入馆 (0A2-0A7) ==================
0A2 DZ 3F06 00A4 若 R3F == R06(A 按下),跳转至 0A4
0A3 ZY 0000 00A8 否则检查按钮 B
0A4 DZ 3F05 00A6 等待按钮释放(R3F == R05)
0A5 ZY 0000 00A4 循环等待释放
0A6 DY 0000 0090 处理入馆请求
0A7 FH 0000 0000 返回
================== 按钮 B - 请求离馆 (0A8-0AD) ==================
0A8 DZ 3F07 00AA 若 R3F == R07(B 按下),跳转至 0AA
0A9 FH 0000 0000 返回(无按钮按下)
0AA DZ 3F05 00AC 等待按钮释放(R3F == R05)
0AB ZY 0000 00AA 循环等待释放
0AC DY 0000 0098 处理离馆请求
0AD FH 0000 0000 返回
================== 显示当前人数 (0B0-0B5) ==================
0B0 FZ 0028 0210 R28 = 0x0210(配置显示颜色)
0B1 YXTC 8080 2000 绘制填充圆形(背景)
0B2 FZ 0028 FFFF R28 = 0xFFFF(白色文字)
0B3 SC 0000 1100 将 R11 格式化为两位小数,输出位置 (0,0)
0B4 YS 00C8 0000 延时 200 毫秒
0B5 FH 0000 0000 返回
================== LED 颜色控制 (0C0-0C4) ==================
0C0 XYZ 1112 00C3 若 R11 < R12(未满员),跳转至 0C3(绿灯)
0C1 CD 00FF 0000 显示红色,人数已满
0C2 FH 0000 0000 返回
0C3 CD 0000 FF00 显示绿色,人数未满 10 人
0C4 FH 0000 0000 返回
================== 抬杆动作 (0D0-0D3) ==================
0D0 WPWM 0002 0003 抬杆(舵机转到 90°)
0D1 YS 0001 0001 等待 1 秒
0D2 WPWM 0002 0004 落杆(舵机转到 0°)
0D3 FH 0000 0000 返回
000 0C 0000 0080
001 0C 0000 00B0
002 0C 0000 00C0
003 0C 0000 00A2
004 0E 0000 0001
080 10 0002 0001
081 10 0003 0066
082 10 0004 0133
083 10 0005 0000
084 10 0006 0001
085 10 0007 0002
086 10 0011 0000
087 10 0012 000A
088 0D 0000 0000
090 06 1112 0092
091 12 0011 0001
092 0C 0000 00D0
093 0D 0000 0000
098 12 1011 0001
099 0C 0000 00D0
09A 0D 0000 0000
0A2 06 3F06 00A4
0A3 0E 0000 00A8
0A4 06 3F05 00A6
0A5 0E 0000 00A4
0A6 0C 0000 0090
0A7 0D 0000 0000
0A8 06 3F07 00AA
0A9 0D 0000 0000
0AA 06 3F05 00AC
0AB 0E 0000 00AA
0AC 0C 0000 0098
0AD 0D 0000 0000
0B0 10 0028 0210
0B1 58 8080 2000
0B2 10 0028 FFFF
0B3 55 0000 1100
0B4 02 00C8 0000
0B5 0D 0000 0000
0C0 05 1112 00C3
0C1 E4 00FF 0000
0C2 0D 0000 0000
0C3 E4 0000 FF00
0C4 0D 0000 0000
0D0 EC 0002 0003
0D1 02 0001 0001
0D2 EC 0002 0004
0D3 0D 0000 0000
操作流程
开始
│
▼
[初始化寄存器] → 设置常量,人数 = 0
│
▼
[主循环]
│
├─► [显示人数] → 在屏幕上显示当前人数
│
├─► [LED 控制] → 绿色(人数 < 10)/ 红色(人数 == 10)
│
├─► [按钮 A 检查] → 若按下并释放:
│ ├─► 未满员 → 人数++ → [抬杆动作] → 打开/关闭闸门
│ └─► 已满员 → [抬杆动作] → 打开/关闭闸门(仍允许进入?)
│
├─► [按钮 B 检查] → 若按下并释放:
│ └─► 人数-- → [抬杆动作] → 打开/关闭闸门
│
└─► 循环返回显示
关键特性
- 消抖处理:每个按钮在处理前等待释放,防止多次触发
- 容量控制:图书馆最大容量为 10 人(R12 = 10)
- 视觉反馈:LED 在有空位时显示绿色,满员时显示红色
- 自动闸门:舵机打开(90°)持续 1 秒,然后关闭(0°)
- 数字显示:以两位数字显示当前人数
测试场景
| 操作 | 预期结果 |
|---|---|
| 按下按钮 A(人数=0) | 人数变为 1,闸门打开后关闭,LED 绿色 |
| 按下按钮 A(人数=9) | 人数变为 10,闸门打开后关闭,LED 红色 |
| 按下按钮 A(人数=10) | 闸门打开后关闭,人数保持 10,LED 红色 |
| 按下按钮 B(人数=1) | 人数变为 0,闸门打开后关闭,LED 绿色 |
| 按下按钮 B(人数=0) | 人数保持 0,闸门打开后关闭,LED 绿色 |