跳到主要内容

灵芯伙伴-指令对照表

1. 设计思想​

灵芯伙伴是一款专为中小学电子基础教育教学定制的单片机学习套件。

本套件围绕“中小学生使用”这一核心需求,结合中国元素、国产芯片、科技感、趣味性四大特点,以 【灵】 动学习和智能 【芯】 片为基础,如 【伙伴】 一般,以定期更新的教学内容和项目挑战,陪伴学生实现技术成长。

灵芯伙伴套件以中英文结合的方式选择了自己的字母缩写:LKP,发音为 Link-P。其中:

名称含义
  • L:取自拼音 Ling(灵)保留中文名核心,象征“灵动智能”的科技感
  • K:K/X,既指创"客"也为"芯"
  • P:取自“伙伴”的拼音 HuoBan 中 “伴” 的声母变体P,同时也是英文 Partner(伙伴)的首字母
  • Link-P:“Link” 隐含 “连接科技与伙伴” 之意,与单片机 “硬件互通”的功能相呼应

2. 助记符体系定位​

本套件的指令体系分为两层,两者通过本对照表互通:

  • 助记符体系(本表):面向中小学生入门。在中文教学场景下,助记符大多取自功能名的拼音首字母(如 JT=接通、DK=断开、DYZ=大于转、SS=送数、QS=取数),便于记忆和书写,是课堂教学与范例程序的主要用语。
  • opcode 十六进制参考:面向进阶学习者(具备自学能力的大学生与开发者),直接给出机器指令集本身——操作码与操作数的完整定义,详见指令集分册。

每行程序中的指令字段(inst)既可以写助记符,也可以写对应的 opcode,两种写法一一对应:从本表可由助记符查到 opcode 并跳转到指令分册详页;从指令分册的 opcode 也可反查助记符。

3. 助记符 ↔ 指令对照表​

3.1 基础控制与跳转​

助记符指令功能
SKIP0x00空操作
YS0x02延时
DS0x03定时
DYZ0x04大于转
XYZ0x05小于转
DZ0x06等转
DDZ0x07大于等于转
XDZ0x08小于等于转
BDZ0x09不等于转
TJZ0x0A条件转
TZ0x0B端口跳转
DY0x0C调子程序
FH0x0D返回
ZY0x0E转移
JS0x0F结束
JT0x41接通
DK0x42断开
SR0x43等待屏幕输入
SSE0x44数码管扫描

3.2 寄存器操作​

助记符指令功能
FZ0x10写寄存器
RFZ0x11寄存器赋值
ZJ0x12增减寄存器
SS0x13送数
QS0x14取数
XHYW0x15移位
QF0x16位取反
WY0x17位与
WH0x18位或
WYH0x19位异或
RJIA0x1AReg-Reg 加
RJIAN0x1BReg-Reg 减
RCHENG0x1CReg-Reg 乘
RCHU0x1DReg-Reg 除
RQY0x1EReg-Reg 取余
SJS0x1F随机数
GDCZ0x20高低成字
GDJH0x21高低交换
JIA0x2AReg+立即数
JIAN0x2BReg−立即数
CHENG0x2CReg×立即数
CHU0x2DReg÷立即数
QY0x2EReg%立即数
BMQD0x30编码七段
TJYS0x32三寄存器运算

3.3 屏幕绘图与显示​

助记符指令功能
SC0x55显示数字
WZ0x56显示文字
YX0x57空心圆
YXTC0x58实心圆
JX0x59空心矩形
JXTC0x5A实心矩形
HX0x5B画线

3.4 传感器​

助记符指令功能
AD0xAD读AD通道

3.5 外设配置​

助记符指令功能
MKPZ0xC0模块配置
MKCD0xCB彩灯模块开关
PWM0xCC板载PWM占空比
WPWM0xEC外置PWM
WPL0xEF外置PWM频率

3.6 彩灯与音乐​

助记符指令功能
CD0xE4彩灯颜色
RCD0xE5寄存器组彩灯
FY0xE8发音

4. 指令详解与范例​

本节为每条助记符给出占位符定义、参数说明与功能,并附范例。带分支功能的指令各分支均有独立范例。范例表指令列写助记符,P00/P01/P10/P11 各占一列(可写 2 位十六进制数);16 位参数写在 P10P11(或 P00P01)整体上,低字节在 P11(或 P01)。空置占位符填 00。手机端可左右滑动查看完整表格。

4.1 基础控制与跳转​

(1)不等于转指令:BDZ(0x09)​

P00P01P10P11
R0R1H↑
  • 参数同DYZ(0x04)

功能:当R0≠R1时跳转到H,否则顺序执行。

范例:

行号指令P00P01P10P11效果说明
000BDZ0102000AR01≠R02 时跳转到 00A 行,否则顺序执行

(2)大于等于转指令:DDZ(0x07)​

P00P01P10P11
R0R1H↑
  • 参数同DYZ(0x04)

功能:当R0≥R1时跳转到H,否则顺序执行。

范例:

行号指令P00P01P10P11效果说明
000DDZ0102000AR01≥R02 时跳转到 00A 行,否则顺序执行

(3)断开指令:DK(0x42)​

P00P01P10P11
00N0000
  • 参数N:IO口代码,取值范围10-17,20-23
  • 10-17:对应LED0-LED7指示灯和1号端口8个引脚
  • 20-23:对应PWM0-PWM3指示灯和2号端口4个引脚
  • P00、P10、P11空置填00

功能:指定引脚输出低电平 → 对应LED指示灯熄灭。

范例:

行号指令P00P01P10P11效果说明
000DK001400001号口4脚(LED4)输出低电平→LED4 灭
001DK002100002号口1脚(PWM1)输出低电平

(4)定时指令:DS(0x03)​

P00P01P10P11
N高字节N低字节 / 寄存器模式=寄存器号MS
  • 参数与YS(0x02)完全相同:N=定时值/寄存器号,M=来源模式,S=单位码

功能:启动定时器后程序继续执行;定时到期时硬件将超时标志寄存器R23置位(R23需程序自行清0),程序可查询R23判断时间到。

⚠ 注意:非阻塞;与YS的区别:YS停住等,DS边走边计时

范例:

行号指令P00P01P10P11效果说明
000DS003C0004立即数定时:P00P01=003C(60)×单位04(10秒)=600秒后 R23 被置1,程序不等待继续运行
001DS0008FF00寄存器定时:P10=FF,P01=08→R08 的值×单位00(1ms);之后可查询 R23 判断时间到

(5)调子程序指令:DY(0x0C)​

P00P01P10P11
0000H↑
  • 参数H:子程序首行号0000-01FF,占位P10P11。P00、P01空置填00

功能:跳转到子程序首行执行,遇到FH(0x0D)返回到DY的下一行。子程序可嵌套调用,最多16层。

范例:

行号指令P00P01P10P11效果说明
000DY00000100调用以 100 行开头的子程序;子程序结尾必须是 FH
100DY00000000子程序结尾:返回到 DY 的下一行(配合上一行看)

(6)大于转指令:DYZ(0x04)​

P00P01P10P11
R0R1H↑
  • 参数R0:寄存器号00-7F
  • 参数R1:寄存器号00-7F
  • 参数H:目标行号0000-01FF(0-511),占位P10P11

功能:将两个寄存器R0与R1中的值进行比较,当R0>R1时跳转到H指定的目标行继续执行,否则顺序执行。

范例:

行号指令P00P01P10P11效果说明
000DYZ0102000AR01>R02 时跳转到 00A 行,否则顺序执行

(7)等转指令:DZ(0x06)​

P00P01P10P11
R0R1H↑
  • 参数R0:寄存器号00-7F
  • 参数R1:寄存器号00-7F
  • 参数H:行号0000-01FF,占位P10P11

功能:将两个寄存器R0与R1中的值进行比较,当R0==R1时跳转到H指定的目标行继续执行,否则顺序执行。

范例:

行号指令P00P01P10P11效果说明
000DZ0102000AR01==R02 时跳转到 00A 行,否则顺序执行

(8)返回指令:FH(0x0D)​

P00P01P10P11
00000000
  • 无参数,P00、P01、P10、P11空置填00

功能:子程序结束,返回到最近一次DY(0x0C)的下一行继续执行。

⚠ 注意:与DY配对使用

范例:

行号指令P00P01P10P11效果说明
100FH00000000子程序结尾返回;须与 DY 配对,不能单独使用

(9)结束指令:JS(0x0F)​

P00P01P10P11
00000000
  • 结束指令没有参数,P00、P01、P10、P11空置为00

功能:程序运行到该指令后终止。

⚠ 注意:警告:如果不包含终止指令,程序可能一直执行到01FF行或造成程序指针错误。

范例:

行号指令P00P01P10P11效果说明
000JS00000000程序到此终止;每个程序结尾必须有一条,否则会一直执行到 1FF 行

(10)接通指令:JT(0x41)​

P00P01P10P11
00N0000
  • 参数N:IO口代码,取值范围10-17,20-23
  • 10-17:对应LED0-LED7指示灯和1号端口8个引脚
  • 20-23:对应PWM0-PWM3指示灯和2号端口4个引脚
  • P00、P10、P11空置填00

功能:指定引脚输出高电平 → 对应LED指示灯亮起。

范例:

行号指令P00P01P10P11效果说明
000JT001400001号口4脚(LED4)输出高电平→LED4 亮
001JT002100002号口1脚(PWM1)输出高电平

(11)空操作指令:SKIP(0x00)​

P00P01P10P11
00000000
  • 无参数,P00、P01、P10、P11空置填00

功能:空操作:什么都不做,顺序执行下一行指令。

⚠ 注意:用于占位或删除某行内容

范例:

行号指令P00P01P10P11效果说明
000SKIP00000000空操作:此行什么都不做,直接执行下一行(常用于占位或临时屏蔽某行)

(12)等待输入指令:SR(0x43)​

P00P01P10P11
目标寄存器号目标寄存器号进制码进制码
  • 参数R:目标寄存器号00-7F,占位P00P01(P00填00)
  • 参数J:进制码,00=十六进制 01=十进制 02=八进制 03=二进制(非法值按十进制处理)

功能:程序运行到该指令时暂停,屏幕弹出数字输入框;用户输入确认后,数值写入目标寄存器,程序继续执行下一行。

⚠ 注意:挂起期间OLED仍可刷新

范例:

行号指令P00P01P10P11效果说明
000SR00050001屏幕弹出输入框(十进制),用户输入的数写入 R05 后程序继续
001SR00060000同上但按十六进制输入,结果写入 R06

(13)数码管扫描指令:SSE(0x44)​

P00P01P10P11
00R00N
  • 参数R:寄存器号00-7F,里面存放字形码。低8位对应1号端口10-17,可依次连接数码管管脚a,b,c,d,e,f,g,dp
  • 参数N:输出位选低4位,对应2号端口20-23
  • 本套件为共阳四位数码管,位选经PNP低电平选通:千位0E 百位0D 十位0B 个位07,全灭0F
  • P00、P10空置填00

功能:将数码段码寄存器R中存放的字形码送到指定位数码管显示。此指令专供四位数码管视觉暂留扫描。一条指令内微秒级完成灭位→换段→选位,无鬼影。

⚠ 注意:共阳段码需取反(用BMQD取P10=1生成);每位配YS 1ms,一帧4位约8ms(125Hz)。注:教材docx中"共阴07/0B/0D/0E、共阳08/04/02/01"为通用写法,与本套件电路不符

范例:

行号指令P00P01P10P11效果说明
000SSE0002000ER02 的段码送到千位(位选 0E,低电平选通)
001SSE0002000DR02 的段码送到百位(位选 0D)
002SSE0002000BR02 的段码送到十位(位选 0B)
003SSE00020007R02 的段码送到个位(位选 07);每位后配 02 0001 0000(1ms)轮扫4位

(14)条件转指令:TJZ(0x0A)​

P00P01P10P11
条件码寄存器nH↑
  • 参数M:条件码,1=等于 2=不等于 3=大于 4=小于 5=大于等于 6=小于等于 7=为0 8=非0
  • 参数n:寄存器号00-7F
  • 参数H:目标行号,占位P10P11

功能:将专用比较寄存器R0与寄存器Rn按条件码M比较,条件成立跳转到H,否则顺序执行。条件码7/8(为0/非0)只判断Rn本身。

⚠ 注意:比较的一方固定是R0,比较前先用FZ给R0赋值

范例:

行号指令P00P01P10P11效果说明
000TJZ0103000A条件码01(等于):R0==R03 时跳到 00A 行(R0 先用 FZ 赋值)
001TJZ0203000A条件码02(不等于):R0≠R03 时跳到 00A 行
002TJZ0705000A条件码07(为0):R05==0 时跳到 00A 行(只看 R05,不用 R0)
003TJZ0805000A条件码08(非0):R05≠0 时跳到 00A 行

(15)端口跳转指令:TZ(0x0B)​

P00P01P10P11
00=整端口模式整端口模式=端口号 / 单引脚模式=IO口代码H↑
  • 整端口模式(P00=00):P01=端口号(0=7个按钮 / 1=8位IO / 2=4位PWM / 3=16路AD),任一位为1则跳转
  • 单引脚模式(P00=01):P01=IO口代码(如14=1号口4脚)
  • 参数H:目标行号,占位P10P11

功能:检测端口/引脚电平,读到1则跳转到H,否则顺序执行。

⚠ 注意:读AD端口(Port3)时毫伏值>2500判为1

范例:

行号指令P00P01P10P11效果说明
000TZ0001000A整端口模式:P00=00 P01=01→Port1(8路IO)任一位读到1就跳到 00A 行
001TZ01140010单引脚模式:P00=01 P01=14→1号口4脚读到1就跳到 010 行

(16)小于等于转指令:XDZ(0x08)​

P00P01P10P11
R0R1H↑
  • 参数同DYZ(0x04)

功能:当R0≤R1时跳转到H,否则顺序执行。

范例:

行号指令P00P01P10P11效果说明
000XDZ0102000AR01≤R02 时跳转到 00A 行,否则顺序执行

(17)小于转指令:XYZ(0x05)​

P00P01P10P11
R0R1H↑
  • 参数同DYZ(0x04)

功能:当R0<R1时跳转到H,否则顺序执行。

范例:

行号指令P00P01P10P11效果说明
000XYZ0102000AR01<R02 时跳转到 00A 行,否则顺序执行

(18)延时指令:YS(0x02)​

P00P01P10P11
N高字节N低字节 / 寄存器模式=寄存器号MS
  • 参数N:时间数值0000-FFFF(立即数模式);寄存器号00-7F(寄存器模式)
  • 参数M:数值来源模式,00=立即数(N占P00+P01),FF=寄存器(N为寄存器号占P01)
  • 参数S:时间单位码,00-毫秒 01-10毫秒 02-100毫秒 03-秒 04-10秒 10-分(1分=60秒,1秒=1000毫秒)

功能:等待指定时间,在这个时间内单片机停止一切工作,时间到再执行下一行指令。

⚠ 注意:阻塞式延时;只需后台计时用DS(0x03)

范例:

行号指令P00P01P10P11效果说明
000YS000A0001立即数延时:P00P01=000A(10)×单位01(10ms)=延时100ms
001YS0005FF03寄存器延时:P10=FF,P01=05→R05 的值×单位03(1秒);R05=30 则延时30秒

(19)转移指令:ZY(0x0E)​

P00P01P10P11
0000H↑
  • 参数H:行号,取值范围0000-01FF(0-511),占位P10P11。P00、P01空置填00

功能:无条件跳转到指定的目标行继续执行。

范例:

行号指令P00P01P10P11效果说明
000ZY00000020无条件跳转到 020 行

4.2 寄存器运算​

(20)编码七段指令:BMQD(0x30)​

P00P01P10P11
R0R1FD
  • 参数R0:源寄存器号00-7F,存放待编码数值(0-99)
  • 参数R1:目标寄存器号00-7F
  • 参数F:段码反相标志,00=直出(配共阴)01=整体取反(配共阳)
  • 参数D:拆位方式,00=十进制拆位 01=十六进制拆位

功能:将源寄存器中的数值拆成十位和个位(或十六进制高/低半字节),分别查七段字形码表:高8位=十位段码、低8位=个位段码,写入目标寄存器(bit7=a…bit0=dp)。

⚠ 注意:结果可配合SS送1号口或SSE扫描显示

范例:

行号指令P00P01P10P11效果说明
000BMQD01020100R01=60 十进制拆位(6,0)→查段码后整体取反(共阳)→R02 高8位=十位段码 低8位=个位段码
001BMQD03040000同上但直出不取反(配共阴数码管)
002BMQD05060101按十六进制拆位(P11=01):R05=3C → 段码(3)(C),配共阳取反

(21)乘指令:CHENG(0x2C)​

P00P01P10P11
00RN↑
  • 参数R:寄存器号00-7F(0-127),128个寄存器
  • 参数N:立即数0000-FFFF,占位P10P11
  • P00空置填00

功能:将指定寄存器中的值乘以立即数,结果存回该寄存器。

范例:

行号指令P00P01P10P11效果说明
000CHENG0003000AR03 ×= 10

(22)除指令:CHU(0x2D)​

P00P01P10P11
00RN↑
  • 参数同CHENG(0x2C)

功能:将指定寄存器中的值除以立即数,商存回该寄存器。

⚠ 注意:立即数为0置异常标志

范例:

行号指令P00P01P10P11效果说明
000CHU0003000AR03 ÷= 10(整数商;立即数 0 触发异常)

(23)赋值指令:FZ(0x10)​

P00P01P10P11
00RN↑
  • 参数R:寄存器号00-7F(0-127),128个寄存器
  • 参数N:数值0000-FFFF,占位P10P11
  • P00空置填00

功能:向指定寄存器写入数值。运行结果可以在寄存器信息页面实时查看。

范例:

行号指令P00P01P10P11效果说明
000FZ000300FFR03 = 255(P10P11=00FF 为16位整体立即数)

(24)高低成字指令:GDCZ(0x20)​

P00P01P10P11
R0R0R1R1
  • 参数R0:目标寄存器号00-7F
  • 参数R1:源寄存器号00-7F

功能:将两个寄存器的低字节拼成一个16位字存入目标寄存器。

⚠ 注意:⚠双16位占位格式待上机验证

范例:

行号指令P00P01P10P11效果说明
000GDCZ00050003R05 = R05 低8位拼 R03 低8位(R05低字节在高位、R03低字节在低位)

(25)高低交换指令:GDJH(0x21)​

P00P01P10P11
R0R0R1R1
  • 参数同GDCZ(0x20)

功能:将寄存器的高8位与低8位字节交换。

⚠ 注意:⚠双16位占位格式待上机验证

范例:

行号指令P00P01P10P11效果说明
000GDJH00050005R05 高低字节交换(设 R05=1234 → 3412)

(26)加指令:JIA(0x2A)​

P00P01P10P11
00RN↑
  • 参数R:寄存器号00-7F(0-127),128个寄存器
  • 参数N:立即数0000-FFFF,占位P10P11
  • P00空置填00

功能:将指定寄存器中的值与立即数相加,结果存回该寄存器。(对整个16位寄存器进行加法运算)

范例:

行号指令P00P01P10P11效果说明
000JIA0003000AR03 += 10(16位立即数加法)

(27)减指令:JIAN(0x2B)​

P00P01P10P11
00RN↑
  • 参数同JIA(0x2A)

功能:将指定寄存器中的值减去立即数,结果存回该寄存器。

范例:

行号指令P00P01P10P11效果说明
000JIAN0003000AR03 -= 10

(28)位取反指令:QF(0x16)​

P00P01P10P11
00R0000
  • 参数R:寄存器号00-7F
  • P00、P10、P11空置填00

功能:将指定寄存器的值按位取反(0变1,1变0)。

范例:

行号指令P00P01P10P11效果说明
000QF00030000R03 按位取反(设 R03=00FF → FF00)

(29)取数指令:QS(0x14)​

P00P01P10P11
00R00N
  • 参数R:目标寄存器号00-7F
  • 参数N:源端口号,0=7个按钮 / 1=8位IO / 2=4位PWM口 / 3=16路AD(毫伏>2500判1)
  • P00、P10空置填00

功能:读取整个端口的状态存入指定寄存器。读1号口时自动转为输入方向(上拉),供外部器件驱动。

⚠ 注意:与SS(0x13)配对:SS写端口,QS读端口

范例:

行号指令P00P01P10P11效果说明
000QS00050000读 Port0(7个按钮的按下状态位图)→ R05
001QS00060001读 Port1 → R06;读前 8 脚自动转输入方向(上拉)
002QS00070003读 Port3(16路AD,每路毫伏值>2500 记1)→ R07

(30)取余指令:QY(0x2E)​

P00P01P10P11
00RN↑
  • 参数同CHENG(0x2C)

功能:将指定寄存器中的值除以立即数,余数存回该寄存器。

⚠ 注意:立即数为0置异常标志

范例:

行号指令P00P01P10P11效果说明
000QY0003000AR03 %= 10(结果 0~9,常用于拆个位)

(31)寄存器乘指令:RCHENG(0x1C)​

P00P01P10P11
00R000R1
  • 参数同RJIA(0x1A)

功能:将目标寄存器的值乘以源寄存器的值,结果存回目标寄存器(R0 *= R1)。

范例:

行号指令P00P01P10P11效果说明
000RCHENG00030004R03 ×= R04

(32)寄存器除指令:RCHU(0x1D)​

P00P01P10P11
00R000R1
  • 参数同RJIA(0x1A)

功能:将目标寄存器的值除以源寄存器的值,商存回目标寄存器(R0 /= R1)。

⚠ 注意:除数为0置异常标志

范例:

行号指令P00P01P10P11效果说明
000RCHU00030004R03 ÷= R04(整数商;R04=0 触发异常)

(33)寄存器赋值指令:RFZ(0x11)​

P00P01P10P11
00R000R1
  • 参数R0:目标寄存器号00-7F
  • 参数R1:源寄存器号00-7F
  • P00、P10空置填00

功能:将源寄存器R1中的值复制到目标寄存器R0中。

范例:

行号指令P00P01P10P11效果说明
000RFZ00040003R04 = R03(把源 R03 复制到目标 R04)

(34)寄存器加指令:RJIA(0x1A)​

P00P01P10P11
00R000R1
  • 参数R0:目标寄存器号00-7F
  • 参数R1:源寄存器号00-7F
  • P00、P10空置填00

功能:将目标寄存器的值加上源寄存器的值,结果存回目标寄存器(R0 += R1)。

⚠ 注意:1B~1E同构

范例:

行号指令P00P01P10P11效果说明
000RJIA00030004R03 += R04

(35)寄存器减指令:RJIAN(0x1B)​

P00P01P10P11
00R000R1
  • 参数同RJIA(0x1A)

功能:将目标寄存器的值减去源寄存器的值,结果存回目标寄存器(R0 -= R1)。

范例:

行号指令P00P01P10P11效果说明
000RJIAN00030004R03 -= R04

(36)寄存器取余指令:RQY(0x1E)​

P00P01P10P11
00R000R1
  • 参数同RJIA(0x1A)

功能:将目标寄存器的值除以源寄存器的值,余数存回目标寄存器(R0 %= R1)。

⚠ 注意:除数为0置异常标志

范例:

行号指令P00P01P10P11效果说明
000RQY00030004R03 %= R04(余数存回 R03)

(37)随机数指令:SJS(0x1F)​

P00P01P10P11
RR0000
  • 参数R:目标寄存器号00-7F,占位P00P01(P00填00)
  • P10、P11空置填00

功能:生成一个随机数(低16位)写入指定寄存器。

范例:

行号指令P00P01P10P11效果说明
000SJS00050000R05 = 随机数(每次执行结果不同)

(38)送数指令:SS(0x13)​

P00P01P10P11
00R00N
  • 参数R:寄存器号00-7F(0-127),128个寄存器
  • 参数N:输出端口号,取值范围01-02
  • 01:LED0-LED7 引脚代码10-17
  • 02:PWM0-PWM3 引脚代码20-23
  • P00、P10空置填00

功能:将寄存器的值送到指定端口。

⚠ 注意:固件实际支持端口号00-06(4-6=PCA9685模块0-2);写1号口自动恢复输出方向并立即刷新硬件

范例:

行号指令P00P01P10P11效果说明
000SS00050001R05 整体值送到 Port1(8路LED逐位点亮,如 R05=0F 则 LED0~3 亮)
001SS00060002R06 整体值送到 Port2(4路,只用低4位)
002SS00070004R07 整体值送到 PCA9685 模块0(16通道逐位输出)

(39)三寄存器运算指令:TJYS(0x32)​

P00P01P10P11
R0YR1R2
  • 参数R0:目标寄存器号00-7F
  • 参数Y:运算码,0=与 1=或 2=异或 3=加 4=减 5=乘 6=除 7=按位反 8=写 9=移位 10=拷贝 11=拼字节 12=字节交换 13=取余
  • 参数R1/R2:源寄存器号00-7F

功能:三寄存器运算:R0 = R1(运算码Y)R2,如Y=3时R0=R1+R2。

范例:

行号指令P00P01P10P11效果说明
000TJYS05030607运算码03(加):R05 = R06 + R07
001TJYS05000607运算码00(与):R05 = R06 & R07
002TJYS05080600运算码08(写):R05 = R06

(40)位或指令:WH(0x18)​

P00P01P10P11
00R000R1
  • 参数同WY(0x17)

功能:将目标寄存器与源寄存器按位或,结果存回目标寄存器(R0 |= R1)。

范例:

行号指令P00P01P10P11效果说明
000WH00030004R03 |= R04(按位或,结果存回 R03)

(41)位与指令:WY(0x17)​

P00P01P10P11
00R000R1
  • 参数R0:目标寄存器号00-7F
  • 参数R1:源寄存器号00-7F
  • P00、P10空置填00

功能:将目标寄存器与源寄存器按位与,结果存回目标寄存器(R0 &= R1)。

⚠ 注意:18/19同构

范例:

行号指令P00P01P10P11效果说明
000WY00030004R03 &= R04(按位与,结果存回 R03)

(42)位异或指令:WYH(0x19)​

P00P01P10P11
00R000R1
  • 参数同WY(0x17)

功能:将目标寄存器与源寄存器按位异或,结果存回目标寄存器(R0 ^= R1)。

范例:

行号指令P00P01P10P11效果说明
000WYH00030004R03 ^= R04(按位异或,结果存回 R03)

(43)循环移位指令:XHYW(0x15)​

P00P01P10P11
NR00M
  • 参数N:移动模式,00-右移 01-循环右移 10-左移 11-循环左移
  • 参数R:寄存器号00-7F(0-127),128个寄存器
  • 参数M:移动位数00-0F
  • P10空置填00

功能:将指定寄存器存储值向左或向右移位指定位数。

⚠ 注意:移位数>0F不执行

范例:

行号指令P00P01P10P11效果说明
000XHYW00030004模式00 右移:R03 右移4位(设 R03=8001 → 0800)
001XHYW01030004模式01 循环右移:移出的低位绕回高位
002XHYW10030004模式10 左移:R03 左移4位
003XHYW11030004模式11 循环左移:移出的高位绕回低位

(44)增减寄存器指令:ZJ(0x12)​

P00P01P10P11
模式码RN↑
  • 参数M:模式码,00=加·禁止溢出 01=加·允许溢出 10=减·禁止溢出 11=减·允许溢出
  • 参数R:寄存器号00-7F
  • 参数N:增减量0000-FFFF,占位P10P11

功能:将指定寄存器的值增加或减少N。禁止溢出时:加法上限0xFFFF、减法下限0。

范例:

行号指令P00P01P10P11效果说明
000ZJ0003000A模式00:R03 += 10,加法禁溢出(最大到 FFFF 为止)
001ZJ0103000A模式01:R03 += 10,加法许溢出(超过 FFFF 回绕)
002ZJ1003000A模式10:R03 -= 10,减法禁溢出(最小到 0 为止)
003ZJ1103000A模式11:R03 -= 10,减法许溢出(小于 0 回绕)

4.3 屏幕绘图​

(45)线段指令:HX(0x5B)​

P00P01P10P11
X0Y0X1Y1
  • 参数X0/Y0:起点坐标
  • 参数X1/Y1:终点坐标

功能:以画笔色画一条线段。

范例:

行号指令P00P01P10P11效果说明
000HX0A0A3228从(10,10)到(50,40)画一条线段

(46)空心矩形指令:JX(0x59)​

P00P01P10P11
X0Y0X1Y1
  • 参数X0/Y0:左上角坐标
  • 参数X1/Y1:右下角坐标

功能:以画笔色画一个空心矩形。

范例:

行号指令P00P01P10P11效果说明
000JX0A0A3232左上角(10,10) 右下角(50,50) 画空心矩形

(47)实心矩形指令:JXTC(0x5A)​

P00P01P10P11
X0Y0X1Y1
  • 参数同JX(0x59)

功能:以画笔色画一个实心矩形。宽=X1-X0,高=Y1-Y0。

范例:

行号指令P00P01P10P11效果说明
000JXTC0A0A3232同上画实心矩形(宽40 高40)

(48)显示数字指令:SC(0x55)​

P00P01P10P11
XYR低4位=小数位n
  • 参数X/Y:显示位置坐标
  • 参数R:源寄存器号00-7F
  • 参数n:小数位数(显示值=寄存器值/10ⁿ)

功能:在屏幕指定位置显示寄存器数值,支持小数格式化显示。

⚠ 注意:⚠P11小数位格式待上机验证

范例:

行号指令P00P01P10P11效果说明
000SC0A140300在坐标(0A,14)显示 R03 的值(P11低4位=0 无小数)
001SC0A200402在坐标(0A,20)显示 R04÷100(P11低4位=2 → 2位小数)

(49)显示文字指令:WZ(0x56)​

P00P01P10P11
XYR字符数
  • 参数X/Y:显示位置坐标
  • 参数R:起始寄存器号00-7F,显示R[n]起连续内存中的ASCII字符
  • 参数S:字符数,最多16

功能:在屏幕指定位置显示寄存器内存中的ASCII文字。

范例:

行号指令P00P01P10P11效果说明
000WZ0A140503在坐标(0A,14)显示 R05 起连续 3 字节的 ASCII 字符

(50)空心圆指令:YX(0x57)​

P00P01P10P11
圆心X圆心Y半径00
  • 参数X/Y:圆心坐标
  • 参数Rad:半径
  • P11空置填00

功能:以画笔色在屏幕上画一个空心圆。

范例:

行号指令P00P01P10P11效果说明
000YX20200014圆心(32,32) 半径 20 画空心圆

(51)实心圆指令:YXTC(0x58)​

P00P01P10P11
圆心X圆心Y半径00
  • 参数同YX(0x57)

功能:以画笔色在屏幕上画一个实心圆。

范例:

行号指令P00P01P10P11效果说明
000YXTC20200014圆心(32,32) 半径 20 画实心圆

4.4 传感器​

(52)读AD通道指令:AD(0xAD)​

P00P01P10P11
00C00R
  • 参数C:ADS1115通道号00-0F(0-15)
  • 参数R:目标寄存器号00-7F
  • P00、P10空置填00

功能:将ADS1115指定通道的采样值读入指定寄存器。采样由系统周期自动刷新,本指令读取缓存值而非即时转换。

⚠ 注意:需先开启ADS模块

范例:

行号指令P00P01P10P11效果说明
000AD00030007把 ADS1115 通道3 的缓存值(毫伏)读入 R07(需先开 ADS 模块)

4.5 外设配置​

(53)彩灯模块开关指令:MKCD(0xCB)​

P00P01P10P11
00S0000
  • 参数S:01=使能彩灯模块,00=关闭
  • P00、P10、P11空置填00

功能:开启或关闭WS2812B全彩灯模块。使用彩灯指令(CD/RCD)前必须先开启。

⚠ 注意:同类开关:ADS/BME/TCS/PCA/DS1307 为无助记符指令(0xC1/0xC3/0xC4/0xC5/0xCA)

范例:

行号指令P00P01P10P11效果说明
000MKCD00010000开启 WS2812B 彩灯模块(用 CD/RCD 前必须先开)
001MKCD00000000关闭彩灯模块

(54)模块配置指令:MKPZ(0xC0)​

P00P01P10P11
0000M↑
  • 参数M:16位开关位图0000-FFFF,占位P10P11。位定义:bit0=ADS1115 bit1=BME280 bit2=DS1307 bit3=TCS颜色 bit4=PCA9685 bit6=WS2812B bit8=OLED bit9=Husky bit11=旋律
  • P00、P01空置填00

功能:一次性配置多个模块的开关状态:位图某位为1开启对应模块,为0关闭对应模块。

⚠ 注意:位定义同寄存器R34

范例:

行号指令P00P01P10P11效果说明
000MKPZ00000105位图0105:开 ADS(bit0)+DS1307(bit2)+OLED(bit8),位图里为0的模块全部关闭
001MKPZ00000000位图0000:全部模块关闭

(55)板载PWM占空比指令:PWM(0xCC)​

P00P01P10P11
00=单通道单通道=通道号0-3D↑
  • 参数C:单通道模式(P00≠FF)填通道号0-3;位选模式(P00=FF)填通道位掩码(如05=CH1+CH3)
  • 参数D:占空比0000-FFFF,占位P10P11
  • 通道对应:CH1=PB4 CH2=PB3 CH3=PB0 CH4=PB1

功能:设置板载PWM通道的占空比。占空比<1000才写入。

⚠ 注意:旋律(MELODY/MIDI)占用期间不重配引脚

范例:

行号指令P00P01P10P11效果说明
000PWM000101F4单通道:CH1 占空比=500(P00≠FF,P01=通道号)
001PWMFF0501F4位掩码:P00=FF,P01=05(b0101)→CH1 和 CH3 占空比同时=500

(56)外置PWM频率指令:WPL(0xEF)​

P00P01P10P11
MMF↑
  • 参数M:PCA9685模块号0/1/2,占位P00P01
  • 参数F:PWM频率(Hz)0000-FFFF,占位P10P11

功能:设置指定PCA9685模块的PWM频率。

⚠ 注意:副作用:设置后通道刷新暂停,直到下一条WPWM

范例:

行号指令P00P01P10P11效果说明
000WPL00000064模块0 的 PWM 频率设为 100Hz

(57)外置PWM指令:WPWM(0xEC)​

P00P01P10P11
nnVV
  • 参数n:掩码寄存器起始号00-7F,R[n]/R[n+1]/R[n+2]分别为模块0/1/2的16通道位掩码
  • 参数V:占空比寄存器号00-7F

功能:按掩码批量设置PCA9685外置PWM模块的通道占空比:掩码为1的通道输出R[V]的占空比。一条指令可刷新全部48通道。

⚠ 注意:需先开启PCA模块;同类旧指令0xEA为死码已删除

范例:

行号指令P00P01P10P11效果说明
000WPWM0010000F掩码取 R10/R11/R12(模块0/1/2),占空比取 R15;掩码为1的通道一起输出

4.6 彩灯音乐​

(58)彩灯颜色指令:CD(0xE4)​

P00P01P10P11
NRGB
  • 参数N:LED编号00-0B(板载最多12颗)
  • 参数R/G/B:三基色亮度,各00-FF(0-255)

功能:设置指定WS2812B彩灯的颜色。彩灯处于熄灭态时自动转为点亮。

⚠ 注意:需先MKCD开启模块;四个占位符各放一个参数

范例:

行号指令P00P01P10P11效果说明
000CD02FF8000LED2 = 橙色(P00=灯号 02,P01=红FF,P10=绿80,P11=蓝00)
001CD00FF0000LED0 = 纯红色

(59)发音指令:FY(0xE8)​

P00P01P10P11
SY00T
  • 参数S:升降号,00=本位 01=升半音♯ 02=降半音♭
  • 参数Y:高4位=八度(0-2),低4位=音名(1=C 2=D 3=E 4=F 5=G 6=A 7=B),越界为休止
  • 参数T:时值档0-9,对应 0→31ms 1→62 2→94 3→125 4→187 5→250 6→375 7→500 8→1000 9→2000ms
  • ⚠时值档必须写在P11,P10恒填00

功能:板载蜂鸣器发出一个指定音高、指定时值的音。播放期间临时占用PA1蜂鸣器,播完自动归还PB3 PWM。

⚠ 注意:⚠若把时值档误写P10(如0500)会导致全曲静音;教学常用档:3=125ms 5=250ms 7=500ms

范例:

行号指令P00P01P10P11效果说明
000FY00150007G4(八度1音名5)本位音,时值档7=500ms
001FY01050003G♯3(P00=01升半音),档3=125ms
002FY02010005C♭5(P00=02降半音,八度2音名1),档5=250ms
003FY00000003音名0越界=休止符(静音125ms,可用于节奏停顿)

(60)寄存器组彩灯指令:RCD(0xE5)​

P00P01P10P11
nHN0N1
  • 参数n:起始寄存器号00-7F,R[n]/R[n+1]/R[n+2]分别为R/G/B
  • 参数H:取字节位,00=取寄存器低8位 / 其他=取高8位
  • 参数N0:起始LED编号
  • 参数N1:LED数量

功能:用寄存器组中的颜色批量设置连续多颗彩灯的颜色。熄灭态自动转点亮。

范例:

行号指令P00P01P10P11效果说明
000RCD10010006取 R10~R12 高字节作 R/G/B,填充 LED0 起 6 颗
001RCD10000003P01=00 取低字节:R10~R12 低字节作颜色,填充 LED0 起 3 颗