跳到主要内容

指令范例

本页面提供实用的指令编程参考表格。

指令表格格式​

字段说明
LINE程序行号,3位十六进制地址
OPCODE指令操作码,2位十六进制数(如 00、01、FF)
OP-0第一个参数(OP-00 + OP-01 组合的16位值)
OP-1第二个参数(OP-10 + OP-11 组合的16位值)
备注该行指令的功能说明
格式说明
  • LINE: 程序行地址,3位十六进制,范围 000 ~ FFF
  • OPCODE: 指令操作码,2位十六进制数(如 00、01、FF)
  • OP-0 / OP-1: 参数值,4位十六进制数
  • 未使用的参数可设为 0000
  • 程序结束标志:OPCODE=0x0F, OP-0=0000, OP-1=0000

0x00 NOP - 空指令​

空指令执行任何操作,程序无条件进入下一行。可用作占位符。

LINEOPCODEOP-0OP-1备注
0000000000000空指令,程序进入下一行
0010000000000预留空行,可供后续修改
0020000000000预留空行,可供后续修改
0030F00000000程序结束

0x01 设置数字输出​

将数字输出管脚设置为高电平或低电平。高电平点亮 LED,低电平熄灭 LED。

LINEOPCODEOP-0OP-1备注
0000100000001设置 DO0 为高电平
0010000000000空指令
0020100000000设置 DO0 为低电平
0030000000000空指令
0040100000009设置 DO[3:0] 为 高、低、低、高
0050F00000000程序结束

0x02 设置延时​

设置延时时间后,执行下一行指令。单位可以是毫秒、秒或分钟。

LINEOPCODEOP-0OP-1备注
0000100000001设置 DO0 为高电平
0010203E80000延时 1000 毫秒
0020100000000设置 DO0 为低电平
0030203E80000延时 1000 毫秒
0040F00000000程序结束

0x03 设置定时器​

设置倒计时定时器。倒计时期间寄存器 R23 被设置为 0001,计时结束后重置为 0000。

LINEOPCODEOP-0OP-1备注
0000313880000设置 5000 毫秒定时器
0010300000000检查 R23 状态
0020F00000000程序结束

0x04 条件跳转:大于立即数​

如果寄存器 R00 的值大于给定立即数,跳转到目标行。

LINEOPCODEOP-0OP-1备注
0001000000000在寄存器R00中写入数值0000
0010200010001延时1秒,便于查看结果
0021200000001寄存器R00的数值增加1
0030400080010R00是否大于8?大于则跳到010行
0040500080020R00是否小于8?小于则跳到020行
0050600080030R00是否等于8?等于则跳到030行
0060203E80000延时1000毫秒
0070E00000001返回001行循环执行
0100100FF000C点亮LED3和LED2
0110E00000001返回001行循环执行
0200100FF0003点亮LED1和LED0
0210E00000001返回001行循环执行
0300100FF0006点亮LED2和LED1
0310E00000001返回001行循环执行

0x05 条件跳转:小于立即数​

参见上方0x04示例。


0x06 条件跳转:等于立即数​

参见上方0x04示例。


0x07 条件跳转:大于寄存器值​

如果寄存器 R00 的值大于指定寄存器的值,跳转到目标行。

LINEOPCODEOP-0OP-1备注
0001000000000在寄存器R00中写入数值0000
0011000050008在寄存器R05中写入数值0008
0021200000001寄存器R00的数值增加1
0030700050010R00是否大于R05?大于则跳到010行
0040800050020R00是否小于R05?小于则跳到020行
0050900050030R00是否等于R05?等于则跳到030行
0060203E80000延时1000毫秒
0070E00000002返回001行循环执行
0100100FF0008点亮LED3
0110E00000001返回001行循环执行
0200100FF0004点亮LED2
0210E00000001返回001行循环执行
0300100FF0002点亮LED1
0310E00000001返回001行循环执行

0x08 条件跳转:小于寄存器值​

参见上方0x07示例。


0x09 条件跳转:等于寄存器值​

参见上方0x07示例。


0x0A 高级条件跳转:寄存器比较​

将寄存器 R00 的值与指定寄存器比较,根据比较结果跳转。

LINEOPCODEOP-0OP-1备注
0001000000064向 R00 写入 100
0011000000050向 R05 写入 80
0020A000300050100
0030100000001设置 DO0 为高电平
0040F00000000程序结束
判断码
码值条件
01等于 (=)
02不等于 (≠)
03大于 (>)
04小于 (<)
05大于或等于 (≥)
06小于或等于 (≤)
07为零
08不为零

0x0B 高级条件跳转:数字输入​

根据 DI0-DI3 引脚上的数字输入信号跳转。

LINEOPCODEOP-0OP-1备注
000250000000F数字IO引脚低四位设置为输入
0010BFF0D0010四个数字输入为0101时跳转至010行
0020E00000000返回第000行重新判断
0030000000000空操作
0100100FF00F0点亮四个输出引脚上的LED
0110F00000000程序结束

0x0C 子程序调用:跳转​

调用位于指定行的子程序,使用0x0D返回。

LINEOPCODEOP-0OP-1备注
0000000000000空操作
0010C00100000调用位于010行处的子程序
0020F00000000程序结束
0030000000000空操作
0040000000000空操作
0100100FF00FF点亮全部LED
0110C00200000调用位于020行处的子程序
0120D00000000返回001行调用处
0200200010001延迟一秒
0210100FF0000熄灭全部LED
0220D00000000返回011行调用处

0x0D 子程序调用:返回​

从0x0C调用的子程序返回。

参见上方0x0C示例。


0x0E 无条件跳转​

无条件跳转到指定行。

LINEOPCODEOP-0OP-1备注
000250000000F数字IO引脚低四位设置为输入
0010BFF0D0010四个数字输入为0101时跳转至010行
0020E00000001返回第000行重新判断
0030000000000空操作
0100100FF00F0点亮四个输出引脚上的LED
0110F00000000程序结束

0x10 写入寄存器值​

向指定寄存器写入数值。

LINEOPCODEOP-0OP-1备注
00010001C03E8将03E8写入寄存器R1C
0010000000000空操作
00213001C0000R1C值低八位输出到数字端口
0030F00000000程序结束

0x11 复制寄存器值​

将一个寄存器的值复制到另一个寄存器。

LINEOPCODEOP-0OP-1备注
00010001C03E8将03E8写入寄存器R1C
00111001D001C将寄存器R1C值复制到R1D
00213001D0000R1D值低八位输出到数字端口
0030F00000000程序结束

0x12 增减寄存器值​

增加或减少指定寄存器的值,支持溢出控制。

LINEOPCODEOP-0OP-1备注
00010001CFF00将FF00写入寄存器R1C
00112001C03E8寄存器R1C值增加03E8,不允许溢出
00213001C0000R1C的低八位输出到数字端口
0030200050001延迟5秒
00412011C03E8寄存器R1C值增加03E8,允许溢出
00513001C0000R1D的低八位输出到数字端口
0060F00000000程序结束

0x13 输出寄存器值到数字端口​

将寄存器的低 8 位作为数字输出值。

LINEOPCODEOP-0OP-1备注
00010001C03E8将03E8写入寄存器R1C
00111001D001C将寄存器R1C值复制到R1D
00213001D0000R1D值低八位输出到数字端口
0030F00000000程序结束

0x14 数字输入值输入寄存器​

捕获数字输入值并保存到寄存器。

LINEOPCODEOP-0OP-1备注
00010002500FF数字IO引脚全部设置为数字输入
00114001C0000将数字输入端口值写入寄存器R1C
0020000000000空操作
0030E00000001返回第001行循环运行

0x15 位移运算​

将寄存器中的位左移或右移指定位数,支持循环模式。

LINEOPCODEOP-0OP-1备注
0001000010001将数值1写入寄存器R01
0011300010000将R01内的值写入寄存器R01
0020200010001延迟一秒
0031511010001将R01进行1bit向左循环移位操作
0040E00000001返回第001行循环运行

0x16 按位取反​

将寄存器中的所有位取反。

参见下方0x19示例。


0x17 按位与运算​

对两个寄存器进行按位与运算,结果存储到第一个寄存器。

参见下方0x19示例。


0x18 按位或运算​

对两个寄存器进行按位或运算,结果存储到第一个寄存器。

参见下方0x19示例。


0x19 按位异或运算​

对两个寄存器进行按位异或运算,结果存储到第一个寄存器。

LINEOPCODEOP-0OP-1备注
000100025000F数字IO引脚低四位设置为数字输入
0011000078009将数值8009写入寄存器R07
002100009FF00将数值FF00写入寄存器R09
0030BFF0E0010数字输入为0x0E则跳转至010行
0040BFF0D0020数字输入为0x0D则跳转至020行
0050BFF0B0030数字输入为0x0B则跳转至030行
0060BFF070040数字输入为0x07则跳转至040行
0070E00000000返回程序开头循环运行
0101600070000R07内的数值按位取反
0110E00000000返回程序开头循环运行
0201700070009R07与R09按位与运算并存于R07
0210E00000000返回程序开头循环运行
0301800070009R07与R09按位或运算并存于R07
0310E00000000返回程序开头循环运行
0401900070009R07与R09按位异或运算并存于R07
0410E00000000返回程序开头循环运行

0x1A 加法运算​

两个寄存器相加,结果存储到第一个寄存器。

参见下方0x1D示例。


0x1B 减法运算​

两个寄存器相减,结果存储到第一个寄存器。

参见下方0x1D示例。


0x1C 乘法运算​

两个寄存器相乘,结果存储到第一个寄存器。

参见下方0x1D示例。


0x1D 除法运算​

两个寄存器相除,结果存储到第一个寄存器。

LINEOPCODEOP-0OP-1备注
000100025000F数字IO引脚低四位设置为数字输入
0011000060020将数值0020写入寄存器R06
0021000081234将数值1234写入寄存器R08
0030BFF0E0010数字输入为0x0E则跳转至010行
0040BFF0D0020数字输入为0x0D则跳转至020行
0050BFF0B0030数字输入为0x0B则跳转至030行
0060BFF070040数字输入为0x07则跳转至040行
0070E00000000返回程序开头循环运行
0101A00080006加法计算,结果0x1254保存在R08中
0110E00000000返回程序开头循环运行
0201B00080006减法计算,结果0x1214保存在R08中
0210E00000000返回程序开头循环运行
0301C00080006乘法计算,结果0x4680保存在R08中
0310E00000000返回程序开头循环运行
0401D00080006除法计算,结果0x91保存在R08中
0410E00000000返回程序开头循环运行

0x1E 取模运算​

两个寄存器取模,结果存储到第一个寄存器。

LINEOPCODEOP-0OP-1备注
0001000060020将数值0020写入寄存器R06
0011000081234将数值1234写入寄存器R08
0020200010001延迟1秒,便于观察R08的变化
0031E00080006取余数计算,结果保存在R08中
0040F00000000程序结束

0x1F 随机数生成​

在指定寄存器中生成一个随机数。

LINEOPCODEOP-0OP-1备注
0001F00050000在R05中生成一个随机数
0010200010001延迟一秒
0020E00000000返回程序开头循环运行

0x20 字节重组​

将两个寄存器的低字节重新组合,存入第一个寄存器。

参见下方0x21示例。


0x21 字节交换​

交换寄存器的高低位字节。

LINEOPCODEOP-0OP-1备注
000100025000F数字IO引脚低四位设置为数字输入
0011000052450将数值2450写入寄存器R05
002100006FF00将数值FF00写入寄存器R06
0030BFF0E0010数字输入为0x0E则跳转至010行
0040BFF0D0020数字输入为0x0D则跳转至020行
0050E00000000返回程序开头循环运行
0102000050006重组R05和R06的低字节,存入R05
0110200010001延迟1秒便于观察寄存器结果
0120E00000000返回程序开头循环运行
0202100050000交换R05的高低字节
0210200010001延迟1秒便于观察寄存器结果
0220E00000000返回程序开头循环运行

0x2A 与立即数加法​

将立即数加到寄存器,结果存储到寄存器。

参见下方 0x2D 示例。


0x2B 与立即数减法​

将立即数从寄存器中减去,结果存储到寄存器。

参见下方 0x2D 示例。


0x2C 与立即数乘法​

将寄存器与立即数相乘,结果存储到寄存器。

参见下方 0x2D 示例。


0x2D 与立即数除法​

将寄存器除以立即数,结果存储到寄存器。

LINEOPCODEOP-0OP-1备注
000100025000F数字 IO 引脚低四位设置为数字输入
0011000081234将数值 1234 写入寄存器 R08
0020BFF0E0010数字输入为 0x0E 则跳转至 010 行
0030BFF0D0020数字输入为 0x0D 则跳转至 020 行
0040BFF0B0030数字输入为 0x0B 则跳转至 030 行
0050BFF070040数字输入为 0x07 则跳转至 040 行
0060E00000000返回程序开头循环运行
0102A00080020加法计算,结果 0x1254 保存在 R08 中
0110E00000000返回程序开头循环运行
0202B00080020减法计算,结果 0x1214 保存在 R08 中
0210E00000000返回程序开头循环运行
0302C00080020乘法计算,结果 0x4680 保存在 R08 中
0310E00000000返回程序开头循环运行
0402D00080020除法计算,结果 0x91 保存在 R08 中
0410E00000000返回程序开头循环运行

0x2E 与立即数取模​

将寄存器除以立即数取余,结果存储到寄存器。

LINEOPCODEOP-0OP-1备注
0000000000000空操作
0011000081234将数值 1234 写入寄存器 R08
0020200010001延迟 1 秒,便于观察 R08 的变化
0032E00080020取余数计算,结果保存在 R08 中
0040F00000000程序结束

0x30 转换寄存器为 BCD 码​

将寄存器值的低 8 位转换为七段显示 BCD 码。

LINEOPCODEOP-0OP-1备注
000C500010000启用PCA9685 PWM信号发生器
001C600010000启用DS1307 RTC时钟模块
002303E000000将寄存器R3E按十进制转换为BCD码
003EA00000190将R00按位所表示的通道PWM值设置为0x0190 (范围0x0000-0x0FFF)
0041600000000将R00内的数值按位取反
005EA000000C8将R00按位所表示的通道PWM值设置为0x00C8 (范围0x0000-0x0FFF)
0060E00000002返回002行继续执行

0x32 寄存器高级运算​

对寄存器对执行多种运算操作。

LINEOPCODEOP-0OP-1备注
00010000173E8在R01中写入数值0x73E8
0011000021024在R02中写入数值0x1024
0021000030000在R03中写入数值0x0000
0033203000102R01,R02按位与运算,结果存到R03
0043203010102R01,R02按位或运算,结果存到R03
0053203020102R01,R02按位异或运算,结果存到R03
0063203030102R01,R02求和,结果存到R03
0073203040102R01,R02求差,结果存到R03
0083203050102R01,R02求积,结果存到R03
0093203060102R01,R02求商,结果存到R03
00A3203070102R01,R02求积,结果存到R03
00B3200080102R02的值写入R01,R03不参与运算
00C32030B0102R01,R02重组,结果存到R03
00D32000C0100R01自身高低位交换
00E32030D0102R01,R02相除取余,结果存到R03
00F0F00000000程序结束

0x55 格式化文本输出​

将数值以指定格式输出到屏幕指定位置。

LINEOPCODEOP-0OP-1备注
000C300010000启用温湿度传感器
001110001002E将温度值R2E赋值到R01中
002100028FFFF在R28中写入数值0xFFFF配置颜色
0035500000122格式化输出R01中的数字,两位小数,输出位置(0,0)
0040203E80000延时1000毫秒
0051000280210在R28中写入数值0x0210配置颜色
0065A0000FFFF画一个填充矩形(0,0)-(255,255)
0070E00000000在R00中写入数值0x0000

0x56 显示字符串​

从连续寄存器中以指定格式显示字符。

LINEOPCODEOP-0OP-1备注
000C300010000启用温湿度传感器
0011000045465在R04中写入数值0x5465
0021000056D70在R05中写入数值0x6D70
0031000066572在R06中写入数值0x6572
0041000076174在R07中写入数值0x6174
0051000087572在R08中写入数值0x7572
006100009653A在R09中写入数值0x653A
007100028FFFF在R28中写入数值0xFFFF配置颜色
008562020040C用指定格式显示从R04开始的字符
0090203E80000延时1000毫秒
00A1000280210在R28中写入数值0x0210配置颜色
00B5A0000FFFF画一个填充矩形(0,0)-(255,255)
00C0E00000000在R00中写入数值0x0000

0x57 绘制空心圆形​

以指定圆心和半径绘制空心圆形。

参见下方0x5B示例。


0x58 绘制实心圆形​

以指定圆心和半径绘制实心圆形。

参见下方0x5B示例。


0x59 绘制空心矩形​

以指定对角顶点绘制空心矩形。

参见下方0x5B示例。


0x5A 绘制实心矩形​

以指定对角顶点绘制实心矩形。

参见下方0x5B示例。


0x5B 绘制线段​

以指定两点坐标绘制直线。

LINEOPCODEOP-0OP-1备注
000100028001F在R028中写入数值0x001F
0015720202000绘制一个空心圆形
00210002807E0在R028中写入数值0x07E0
0035870701000绘制一个实心圆形
004100028F100在R028中写入数值0xF100
0055930305580绘制一个空心矩形
00610002807FF在R028中写入数值0x07FF
0075A10102020绘制一个实心矩形
008100028FFFF在R028中写入数值0xFFFF
0095B60602020绘制一条直线
00A0E00000000返回000行

0xAD 绘图综合示例​

综合绘图程序,展示各种形状。

LINEOPCODEOP-0OP-1备注
000100028001F在R028中写入数值0x001F
0015720202000绘制一个空心圆形
00210002807E0在R028中写入数值0x07E0
0035870701000绘制一个实心圆形
004100028F100在R028中写入数值0xF100
0055930305580绘制一个空心矩形
00610002807FF在R028中写入数值0x07FF
0075A10102020绘制一个实心矩形
008100028FFFF在R028中写入数值0xFFFF
0095B60602020绘制一条直线
00A0E00000000返回000行

0xC0 启停:外围模块批量配置​

按位启用/禁用外围设备。

LINEOPCODEOP-0OP-1备注
000C00000085F启用模数转换
0010F00000000程序结束
外围设备位值
位外围设备
0ADC 模数转换
1环境传感器
2实时时钟
3颜色传感器
4外部 PWM 发生器
6全彩 LED

0xC1 启停:ADC 模块​

启用或禁用模数转换功能。

LINEOPCODEOP-0OP-1备注
000C100010000启用模数转换
001AD00010005将AD通道1的值保存到寄存器R05中
0020100FF0000熄灭所有LED
003020005FF00延时R05中的值所对应的毫秒数
0040100FF0000点亮所有LED
005020005FF00延时R05中的值所对应的毫秒数
0060E00000001返回001行

0xC3 启停:温湿度传感器​

启用温湿度传感器并显示读数。

LINEOPCODEOP-0OP-1备注
000C300010000启用温湿度传感器
001110001002E将温度值R2E赋值到R01中
002100028FFFF在R28中写入数值0xFFFF配置颜色
0035500000122格式化输出R01中的数字,两位小数
0041000280210在R28中写入数值0x0210配置颜色
0055A0000FFFF画一个填充矩形(0,0)-(255,255)
0060E00000000在R00中写入数值0x0000

0xC4 启停:颜色检测传感器​

启用颜色检测传感器并读取RGB值。

LINEOPCODEOP-0OP-1备注
000C400010000启用颜色传感器
001E531010001使用R31-R33的高八位作为RGB值
0020E00000001返回001行循环执行

0xC5 启停:外置PWM发生器​

启用外置PWM发生器并控制PWM通道。

LINEOPCODEOP-0OP-1备注
000C500010000启用外置PWM发生器
001C100010000启用模数转换器
0021000000003在R0中写入数值0x0003
0031000010019在R1中写入数值0x0019
004AD00000002将AD转换通道0的值赋给R02
0051D00020001R02和R01做除法求商
00612000200C8R02的值增加0x00C8
0070000000000空操作
008EA00000002R02的值写入按位选中的PWM通道
0090E00000002返回002行继续执行

0xC6 启停:RTC时钟模块​

启用DS1307 RTC时钟模块并显示时间。

LINEOPCODEOP-0OP-1备注
000C600010000启用DS1307 RTC时钟模块
00113003E0000将R3E中的最低四位用LED显示
0020E00000001返回第001行

0xC8 设置板载PWM通道占空比​

启用内置PWM并设置占空比。

LINEOPCODEOP-0OP-1备注
000C000000000启用内置PWM,关闭蜂鸣器
001C8000103E8设置通道1的PWM值为1000
0020E00000001返回第001行

0xE4 设置 LED 颜色​

使用 RGB 值设置单个 WS2812B LED 的颜色。

LINEOPCODEOP-0OP-1备注
000E400FF8000设置0号LED的RGB值,显示橙色
0010200010001延迟1秒
002E400FF0000设置0号LED的RGB值,显示红色
0030200010001延迟1秒
004E40000FF00设置0号LED的RGB值,显示绿色
0050200010001延迟1秒
006E4000000FF设置0号LED的RGB值,显示蓝色
0070F00000000程序结束

0xE5 读取颜色传感器​

读取颜色传感器的RGB值。

LINEOPCODEOP-0OP-1备注
000C400010000启用颜色传感器
001E531010001使用R31-R33的高八位作为RGB值
0020E00000001返回001行循环执行

0xE8 播放音调​

播放预设的三个八度音阶中的音调。

LINEOPCODEOP-0OP-1备注
000C000000800切换至蜂鸣器模式
001E8000F0001三十二分音符 高音Do
002E800000001三十二分休止符
003E8000F0001三十二分音符 高音Do
004E800110001三十二分音符 高音Mi
005E800130001三十二分音符 高音Sol
0060F00000000程序结束
音调值
范围八度音阶
01~07低音 Do~Si
08~0E中音 Do~Si
0F~15高音 Do~Si
00休止符
音符时长值
值时长
0000六十四分音符
0003十六分音符
0005八分音符
0007四分音符
0008二分音符
0009全音符

0xEA PCA9685寄存器通道和指定值​

将值写入选定的PCA9685 PWM通道。

LINEOPCODEOP-0OP-1备注
000C500010000启用外置PWM发生器
001C100010000启用模数转换器
0021000000003在R0中写入数值0x0003
0031000010019在R1中写入数值0x0019
004AD00000002将AD转换通道0的值赋给R02
0051D00020001R02和R01做除法求商
00612000200C8R02的值增加0x00C8
0070000000000空操作
008EA00000002R02的值写入按位选中的PWM通道
0090E00000002返回002行继续执行
参数说明
OP-0指定寄存器,其中的值用于按位选择通道
OP-1指定寄存器,其中的值用于设置占空比
特别说明

占空比为12bit,取值范围0000-0FFF。假设R00内的值为0x0003,则外置PWM模块的通道0和通道1将被配置占空比;假设R02内的值为0x01FF,则PWM通道0和通道1的占空比被设置为0x1FF,此时占空比约为(1FF)16/(FFF)16 = 511/4095 ≈ 12.5%。 :::。