跳到主要内容

程序分享


📚 入门体验​

三色彩灯-顺序执行至结束​

000  41  0000  0010
001 41 0000 0011
002 41 0000 0012
003 0F 0000 0000

三色彩灯-循环执行-运行时可调整颜色​

000  41  0000  0010
001 41 0000 0011
002 41 0000 0012
003 0E 0000 0000

三色彩灯-1秒延迟-寄存器值递增-色彩组合​

000  10  0010  0001
001 12 0010 0001
002 02 0001 0001
003 13 0010 0001
004 0E 0000 0001

📚 传感器与控制​

PWM 控制彩灯亮度​

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  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  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  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 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)​

行号指令说明
000DY 0000 0080调用 080 行开始的寄存器初始化子程序
001DY 0000 00B0调用 0B0 行开始的屏幕显示(圆形+数字)子程序
002DY 0000 00A2调用 0A2 行开始的抽奖判定循环子程序
003ZY 0000 0002跳回 002 行,持续抽奖循环

寄存器初始化(080-08A)​

行号指令说明
080FZ 0000 0000R00 = 0,随机数临时存放
081FZ 0001 0014R01 = 0x14,写入数值20
082FZ 0002 0028R02 = 0x28,写入数值40
083FZ 0003 003CR03 = 0x3C,写入数值60
084FZ 0004 0050R04 = 0x50,写入数值80
085FZ 0005 0000R05 = 0,常数,用于按钮比较
086FZ 0006 0001R06 = 1,常数,用于按钮比较
087FZ 0007 0002R07 = 2,常数,用于按钮比较
088FZ 0011 0000R11 = 0,中奖计数器(累计抽奖次数)
089FZ 0012 0005R12 = 5,小于跳转阈值(用于抽奖轮数限制)
08AFH 0000 0000初始化结束,返回主程序

抽奖循环控制(090-099)​

行号指令说明
090XYZ 1112 0092如果 R11 < R12(抽奖次数未满 5 轮),跳转到 092 行继续
091FH 0000 0000达到抽奖轮数上限,返回调用者
092DY 0000 00C0调用 0C0 行开始的彩灯旋转子程序(视觉过渡)
093DY 0000 00C0再次调用彩灯旋转(延长彩灯效果)
094SJS 0000 0000生成随机数,存入 R00
095CHU 0000 028FR00 = R00 ÷ 0x028F,将随机数缩小到目标范围
096DY 0000 00D0调用 0D0 行开始的中奖等级判定子程序
097DY 0000 00B0调用 0B0 行的屏幕显示子程序(显示当前结果)
098ZJ 0011 0001R11 = R11 + 1,抽奖计数器加 1
099FH 0000 0000本轮子程序结束,返回

条件判断与状态切换(0A2-0AB)​

行号指令说明
0A2DZ 3F06 00A4比较 R06 与按键值,满足条件则跳 0A4
0A3ZY 0000 00A8无条件跳转到 0A8 行(状态 A 处理路径)
0A4DZ 3F05 00A6比较 R05 与按键值,满足条件则跳 0A6
0A5ZY 0000 00A4跳回 0A4 行(状态保持)
0A6DY 0000 0090调用 090 行开始的抽奖循环子程序
0A8DZ 3F07 00AA比较 R07 与按键值,满足条件则跳 0AA
0A9FH 0000 0000状态判定结束,返回主程序
0AAFZ 0011 0000重置 R11 = 0,清零抽奖计数器
0ABFH 0000 0000返回主程序

屏幕显示:圆形+格式化数字(0B0-0B5)​

行号指令说明
0B0FZ 0028 0210设置绘图前景色 R28 = 0x0210
0B1YXTC 8080 2000在屏幕坐标 (0x80, 0x80) 绘制实心圆形,半径 0x2000
0B2FZ 0028 FFFF设置绘图前景色 R28 = 0xFFFF(用于清除/覆盖之前的数字)
0B3SC 0000 0000格式化输出 R00 寄存器中的数字到屏幕
0B4YS 00C8 0000延时 200 毫秒
0B5FH 0000 0000显示子程序结束,返回

彩灯旋转效果(0C0-0CA)​

行号指令说明
0C0CD 00FF 0000WS2812B LED 变色:红色亮(R=FF, G=00, B=00)
0C1YS 00C8 0000延时 200 毫秒
0C2CD 00FF FF00LED 变色:黄色亮(R=FF, G=FF, B=00)
0C3YS 00C8 0000延时 200 毫秒
0C4CD 0000 FF00LED 变色:绿色亮(R=00, G=FF, B=00)
0C5YS 00C8 0000延时 200 毫秒
0C6CD 00FF 00FFLED 变色:粉色亮(R=FF, G=00, B=FF)
0C7YS 00C8 0000延时 200 毫秒
0C8CD 0000 00FFLED 变色:蓝色亮(R=00, G=00, B=FF)
0C9YS 00C8 0000延时 200 毫秒
0CAFH 0000 0000彩灯旋转子程序结束,返回

中奖等级判定(0D0-0DD)​

行号指令说明
0D0DYZ 0001 00D3如果随机数 R00 > R01,跳转到 0D3 行(非一等奖)
0D1CD 00FF 0000一等奖:LED 红色亮(最高奖)
0D2FH 0000 0000返回
0D3DYZ 0002 00D6如果 R00 > R02,跳转到 0D6 行(非二等奖)
0D4CD 00FF FF00二等奖:LED 黄色亮
0D5FH 0000 0000返回
0D6DYZ 0003 00D9如果 R00 > R03,跳转到 0D9 行(非三等奖)
0D7CD 0000 FF00三等奖:LED 绿色亮
0D8FH 0000 0000返回
0D9DYZ 0004 00DC如果 R00 > R04,跳转到 0DC 行(非四等奖)
0DACD 00FF 00FF四等奖:LED 紫色亮
0DBFH 0000 0000返回
0DCCD 0000 00FF五等奖:LED 蓝色亮
0DDFH 0000 0000返回

用摇杆操作舵机(PCA9685)​

将摇杆连接到 AD 通道,通过 PCA9685 模块控制舵机位置。摇杆的模拟值经数值映射到舵机的 PWM 通道。

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  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
行号指令说明
000FZ 0001 0001初始化显示数值 R01 = 1(从数字 1 开始)
001BMQD 0100 0000将 R01 的低 8 位转换为七段编码,结果存入 R00
002QF 0000 0000将编码结果按位取反(适配共阳数码管)
003SS 0000 0001将 R00 的值送到数码管显示
004ZJ 0001 0001R01 的值加 1,准备显示下一个数字
005YS 0001 0001延时一段时间,便于观察数字变化
006ZY 0000 0001回到 001 行,继续显示下一个数字

📚 小风扇​

引脚独立设置输出电平​

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  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  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  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  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  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  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  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显示颜色配置

子程序概览​

地址名称描述
0x080Init寄存器初始化
0x090EnterCount入馆人数统计
0x098ExitCount离馆人数统计
0x0A2EnterButton监控按钮 A(入馆请求)
0x0A8ExitButton监控按钮 B(离馆请求)
0x0B0Display显示当前人数
0x0C0LEDControl根据容量设置 LED 颜色
0x0D0GateAction抬杆动作
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 检查] → 若按下并释放:
│ └─► 人数-- → [抬杆动作] → 打开/关闭闸门
│
└─► 循环返回显示

关键特性​

  1. 消抖处理:每个按钮在处理前等待释放,防止多次触发
  2. 容量控制:图书馆最大容量为 10 人(R12 = 10)
  3. 视觉反馈:LED 在有空位时显示绿色,满员时显示红色
  4. 自动闸门:舵机打开(90°)持续 1 秒,然后关闭(0°)
  5. 数字显示:以两位数字显示当前人数

测试场景​

操作预期结果
按下按钮 A(人数=0)人数变为 1,闸门打开后关闭,LED 绿色
按下按钮 A(人数=9)人数变为 10,闸门打开后关闭,LED 红色
按下按钮 A(人数=10)闸门打开后关闭,人数保持 10,LED 红色
按下按钮 B(人数=1)人数变为 0,闸门打开后关闭,LED 绿色
按下按钮 B(人数=0)人数保持 0,闸门打开后关闭,LED 绿色