指令范例
本页面提供实用的指令编程参考表格。
指令表格格式
| 字段 | 说明 |
|---|---|
| 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 - 空指令
空指令执行任何操作,程序无条件进入下一行。可用作占位符。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 00 | 0000 | 0000 | 空指令,程序进入下一行 |
001 | 00 | 0000 | 0000 | 预留空行,可供后续修改 |
002 | 00 | 0000 | 0000 | 预留空行,可供后续修改 |
003 | 0F | 0000 | 0000 | 程序结束 |
0x01 设置数字输出
将数字输出管脚设置为高电平或低电平。高电平点亮 LED,低电平熄灭 LED。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 01 | 0000 | 0001 | 设置 DO0 为高电平 |
001 | 00 | 0000 | 0000 | 空指令 |
002 | 01 | 0000 | 0000 | 设置 DO0 为低电平 |
003 | 00 | 0000 | 0000 | 空指令 |
004 | 01 | 0000 | 0009 | 设置 DO[3:0] 为 高、低、低、高 |
005 | 0F | 0000 | 0000 | 程序结束 |
0x02 设置延时
设置延时时间后,执行下一行指令。单位可以是毫秒、秒或分钟。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 01 | 0000 | 0001 | 设置 DO0 为高电平 |
001 | 02 | 03E8 | 0000 | 延时 1000 毫秒 |
002 | 01 | 0000 | 0000 | 设置 DO0 为低电平 |
003 | 02 | 03E8 | 0000 | 延时 1000 毫秒 |
004 | 0F | 0000 | 0000 | 程序结束 |
0x03 设置定时器
设置倒计时定时器。倒计时期间寄存器 R23 被设置为 0001,计时结束后重置为 0000。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 03 | 1388 | 0000 | 设置 5000 毫秒定时器 |
001 | 03 | 0000 | 0000 | 检查 R23 状态 |
002 | 0F | 0000 | 0000 | 程序结束 |
0x04 条件跳转:大于立即数
如果寄存器 R00 的值大于给定立即数,跳转到目标行。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0000 | 0000 | 在寄存器R00中写入数值0000 |
001 | 02 | 0001 | 0001 | 延时1秒,便于查看结果 |
002 | 12 | 0000 | 0001 | 寄存器R00的数值增加1 |
003 | 04 | 0008 | 0010 | R00是否大于8?大于则跳到010行 |
004 | 05 | 0008 | 0020 | R00是否小于8?小于则跳到020行 |
005 | 06 | 0008 | 0030 | R00是否等于8?等于则跳到030行 |
006 | 02 | 03E8 | 0000 | 延时1000毫秒 |
007 | 0E | 0000 | 0001 | 返回001行循环执行 |
010 | 01 | 00FF | 000C | 点亮LED3和LED2 |
011 | 0E | 0000 | 0001 | 返回001行循环执行 |
020 | 01 | 00FF | 0003 | 点亮LED1和LED0 |
021 | 0E | 0000 | 0001 | 返回001行循环执行 |
030 | 01 | 00FF | 0006 | 点亮LED2和LED1 |
031 | 0E | 0000 | 0001 | 返回001行循环执行 |
0x05 条件跳转:小于立即数
参见上方0x04示例。
0x06 条件跳转:等于立即数
参见上方0x04示例。
0x07 条件跳转:大于寄存器值
如果寄存器 R00 的值大于指定寄存器的值,跳转到目标行。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0000 | 0000 | 在寄存器R00中写入数值0000 |
001 | 10 | 0005 | 0008 | 在寄存器R05中写入数值0008 |
002 | 12 | 0000 | 0001 | 寄存器R00的数值增加1 |
003 | 07 | 0005 | 0010 | R00是否大于R05?大于则跳到010行 |
004 | 08 | 0005 | 0020 | R00是否小于R05?小于则跳到020行 |
005 | 09 | 0005 | 0030 | R00是否等于R05?等于则跳到030行 |
006 | 02 | 03E8 | 0000 | 延时1000毫秒 |
007 | 0E | 0000 | 0002 | 返回001行循环执行 |
010 | 01 | 00FF | 0008 | 点亮LED3 |
011 | 0E | 0000 | 0001 | 返回001行循环执行 |
020 | 01 | 00FF | 0004 | 点亮LED2 |
021 | 0E | 0000 | 0001 | 返回001行循环执行 |
030 | 01 | 00FF | 0002 | 点亮LED1 |
031 | 0E | 0000 | 0001 | 返回001行循环执行 |
0x08 条件跳转:小于寄存器值
参见上方0x07示例。
0x09 条件跳转:等于寄存器值
参见上方0x07示例。
0x0A 高级条件跳转:寄存器比较
将寄存器 R00 的值与指定寄存器比较,根据比较结果跳转。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0000 | 0064 | 向 R00 写入 100 |
001 | 10 | 0000 | 0050 | 向 R05 写入 80 |
002 | 0A | 0003 | 0005 | 0100 |
003 | 01 | 0000 | 0001 | 设置 DO0 为高电平 |
004 | 0F | 0000 | 0000 | 程序结束 |
| 码值 | 条件 |
|---|---|
01 | 等于 (=) |
02 | 不等于 (≠) |
03 | 大于 (>) |
04 | 小于 (<) |
05 | 大于或等于 (≥) |
06 | 小于或等于 (≤) |
07 | 为零 |
08 | 不为零 |
0x0B 高级条件跳转:数字输入
根据 DI0-DI3 引脚上的数字输入信号跳转。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 25 | 0000 | 000F | 数字IO引脚低四位设置为输入 |
001 | 0B | FF0D | 0010 | 四个数字输入为0101时跳转至010行 |
002 | 0E | 0000 | 0000 | 返回第000行重新判断 |
003 | 00 | 0000 | 0000 | 空操作 |
010 | 01 | 00FF | 00F0 | 点亮四个输出引脚上的LED |
011 | 0F | 0000 | 0000 | 程序结束 |
0x0C 子程序调用:跳转
调用位于指定行的子程序,使用0x0D返回。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 00 | 0000 | 0000 | 空操作 |
001 | 0C | 0010 | 0000 | 调用位于010行处的子程序 |
002 | 0F | 0000 | 0000 | 程序结束 |
003 | 00 | 0000 | 0000 | 空操作 |
004 | 00 | 0000 | 0000 | 空操作 |
010 | 01 | 00FF | 00FF | 点亮全部LED |
011 | 0C | 0020 | 0000 | 调用位于020行处的子程序 |
012 | 0D | 0000 | 0000 | 返回001行调用处 |
020 | 02 | 0001 | 0001 | 延迟一秒 |
021 | 01 | 00FF | 0000 | 熄灭全部LED |
022 | 0D | 0000 | 0000 | 返回011行调用处 |
0x0D 子程序调用:返回
从0x0C调用的子程序返回。
参见上方0x0C示例。
0x0E 无条件跳转
无条件跳转到指定行。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 25 | 0000 | 000F | 数字IO引脚低四位设置为输入 |
001 | 0B | FF0D | 0010 | 四个数字输入为0101时跳转至010行 |
002 | 0E | 0000 | 0001 | 返回第000行重新判断 |
003 | 00 | 0000 | 0000 | 空操作 |
010 | 01 | 00FF | 00F0 | 点亮四个输出引脚上的LED |
011 | 0F | 0000 | 0000 | 程序结束 |
0x10 写入寄存器值
向指定寄存器写入数值。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 001C | 03E8 | 将03E8写入寄存器R1C |
001 | 00 | 0000 | 0000 | 空操作 |
002 | 13 | 001C | 0000 | R1C值低八位输出到数字端口 |
003 | 0F | 0000 | 0000 | 程序结束 |
0x11 复制寄存器值
将一个寄存器的值复制到另一个寄存器。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 001C | 03E8 | 将03E8写入寄存器R1C |
001 | 11 | 001D | 001C | 将寄存器R1C值复制到R1D |
002 | 13 | 001D | 0000 | R1D值低八位输出到数字端口 |
003 | 0F | 0000 | 0000 | 程序结束 |
0x12 增减寄存器值
增加或减少指定寄存器的值,支持溢出控制。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 001C | FF00 | 将FF00写入寄存器R1C |
001 | 12 | 001C | 03E8 | 寄存器R1C值增加03E8,不允许溢出 |
002 | 13 | 001C | 0000 | R1C的低八位输出到数字端口 |
003 | 02 | 0005 | 0001 | 延迟5秒 |
004 | 12 | 011C | 03E8 | 寄存器R1C值增加03E8,允许溢出 |
005 | 13 | 001C | 0000 | R1D的低八位输出到数字端口 |
006 | 0F | 0000 | 0000 | 程序结束 |
0x13 输出寄存器值到数字端口
将寄存器的低 8 位作为数字输出值。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 001C | 03E8 | 将03E8写入寄存器R1C |
001 | 11 | 001D | 001C | 将寄存器R1C值复制到R1D |
002 | 13 | 001D | 0000 | R1D值低八位输出到数字端口 |
003 | 0F | 0000 | 0000 | 程序结束 |
0x14 数字输入值输入寄存器
捕获数字输入值并保存到寄存器。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0025 | 00FF | 数字IO引脚全部设置为数字输入 |
001 | 14 | 001C | 0000 | 将数字输入端口值写入寄存器R1C |
002 | 00 | 0000 | 0000 | 空操作 |
003 | 0E | 0000 | 0001 | 返回第001行循环运行 |
0x15 位移运算
将寄存器中的位左移或右移指定位数,支持循环模式。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0001 | 0001 | 将数值1写入寄存器R01 |
001 | 13 | 0001 | 0000 | 将R01内的值写入寄存器R01 |
002 | 02 | 0001 | 0001 | 延迟一秒 |
003 | 15 | 1101 | 0001 | 将R01进行1bit向左循环移位操作 |
004 | 0E | 0000 | 0001 | 返回第001行循环运行 |
0x16 按位取反
将寄存器中的所有位取反。
参见下方0x19示例。
0x17 按位与运算
对两个寄存器进行按位与运算,结果存储到第一个寄存器。
参见下方0x19示例。
0x18 按位或运算
对两个寄存器进行按位或运算,结果存储到第一个寄存器。
参见下方0x19示例。
0x19 按位异或运算
对两个寄存器进行按位异或运算,结果存储到第一个寄存器。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0025 | 000F | 数字IO引脚低四位设置为数字输入 |
001 | 10 | 0007 | 8009 | 将数值8009写入寄存器R07 |
002 | 10 | 0009 | FF00 | 将数值FF00写入寄存器R09 |
003 | 0B | FF0E | 0010 | 数字输入为0x0E则跳转至010行 |
004 | 0B | FF0D | 0020 | 数字输入为0x0D则跳转至020行 |
005 | 0B | FF0B | 0030 | 数字输入为0x0B则跳转至030行 |
006 | 0B | FF07 | 0040 | 数字输入为0x07则跳转至040行 |
007 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
010 | 16 | 0007 | 0000 | R07内的数值按位取反 |
011 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
020 | 17 | 0007 | 0009 | R07与R09按位与运算并存于R07 |
021 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
030 | 18 | 0007 | 0009 | R07与R09按位或运算并存于R07 |
031 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
040 | 19 | 0007 | 0009 | R07与R09按位异或运算并存于R07 |
041 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
0x1A 加法运算
两个寄存器相加,结果存储到第一个寄存器。
参见下方0x1D示例。
0x1B 减法运算
两个寄存器相减,结果存储到第一个寄存器。
参见下方0x1D示例。
0x1C 乘法运算
两个寄存器相乘,结果存储到第一个寄存器。
参见下方0x1D示例。
0x1D 除法运算
两个寄存器相除,结果存储到第一个寄存器。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0025 | 000F | 数字IO引脚低四位设置为数字输入 |
001 | 10 | 0006 | 0020 | 将数值0020写入寄存器R06 |
002 | 10 | 0008 | 1234 | 将数值1234写入寄存器R08 |
003 | 0B | FF0E | 0010 | 数字输入为0x0E则跳转至010行 |
004 | 0B | FF0D | 0020 | 数字输入为0x0D则跳转至020行 |
005 | 0B | FF0B | 0030 | 数字输入为0x0B则跳转至030行 |
006 | 0B | FF07 | 0040 | 数字输入为0x07则跳转至040行 |
007 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
010 | 1A | 0008 | 0006 | 加法计算,结果0x1254保存在R08中 |
011 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
020 | 1B | 0008 | 0006 | 减法计算,结果0x1214保存在R08中 |
021 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
030 | 1C | 0008 | 0006 | 乘法计算,结果0x4680保存在R08中 |
031 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
040 | 1D | 0008 | 0006 | 除法计算,结果0x91保存在R08中 |
041 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
0x1E 取模运算
两个寄存器取模,结果存储到第一个寄存器。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0006 | 0020 | 将数值0020写入寄存器R06 |
001 | 10 | 0008 | 1234 | 将数值1234写入寄存器R08 |
002 | 02 | 0001 | 0001 | 延迟1秒,便于观察R08的变化 |
003 | 1E | 0008 | 0006 | 取余数计算,结果保存在R08中 |
004 | 0F | 0000 | 0000 | 程序结束 |
0x1F 随机数生成
在指定寄存器中生成一个随机数。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 1F | 0005 | 0000 | 在R05中生成一个随机数 |
001 | 02 | 0001 | 0001 | 延迟一秒 |
002 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
0x20 字节重组
将两个寄存器的低字节重新组合,存入第一个寄存器。
参见下方0x21示例。
0x21 字节交换
交换寄存器的高低位字节。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0025 | 000F | 数字IO引脚低四位设置为数字输入 |
001 | 10 | 0005 | 2450 | 将数值2450写入寄存器R05 |
002 | 10 | 0006 | FF00 | 将数值FF00写入寄存器R06 |
003 | 0B | FF0E | 0010 | 数字输入为0x0E则跳转至010行 |
004 | 0B | FF0D | 0020 | 数字输入为0x0D则跳转至020行 |
005 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
010 | 20 | 0005 | 0006 | 重组R05和R06的低字节,存入R05 |
011 | 02 | 0001 | 0001 | 延迟1秒便于观察寄存器结果 |
012 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
020 | 21 | 0005 | 0000 | 交换R05的高低字节 |
021 | 02 | 0001 | 0001 | 延迟1秒便于观察寄存器结果 |
022 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
0x2A 与立即数加法
将立即数加到寄存器,结果存储到寄存器。
参见下方 0x2D 示例。
0x2B 与立即数减法
将立即数从寄存器中减去,结果存储到寄存器。
参见下方 0x2D 示例。
0x2C 与立即数乘法
将寄存器与立即数相乘,结果存储到寄存器。
参见下方 0x2D 示例。
0x2D 与立即数除法
将寄存器除以立即数,结果存储到寄存器。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0025 | 000F | 数字 IO 引脚低四位设置为数字输入 |
001 | 10 | 0008 | 1234 | 将数值 1234 写入寄存器 R08 |
002 | 0B | FF0E | 0010 | 数字输入为 0x0E 则跳转至 010 行 |
003 | 0B | FF0D | 0020 | 数字输入为 0x0D 则跳转至 020 行 |
004 | 0B | FF0B | 0030 | 数字输入为 0x0B 则跳转至 030 行 |
005 | 0B | FF07 | 0040 | 数字输入为 0x07 则跳转至 040 行 |
006 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
010 | 2A | 0008 | 0020 | 加法计算,结果 0x1254 保存在 R08 中 |
011 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
020 | 2B | 0008 | 0020 | 减法计算,结果 0x1214 保存在 R08 中 |
021 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
030 | 2C | 0008 | 0020 | 乘法计算,结果 0x4680 保存在 R08 中 |
031 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
040 | 2D | 0008 | 0020 | 除法计算,结果 0x91 保存在 R08 中 |
041 | 0E | 0000 | 0000 | 返回程序开头循环运行 |
0x2E 与立即数取模
将寄存器除以立即数取余,结果存储到寄存器。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 00 | 0000 | 0000 | 空操作 |
001 | 10 | 0008 | 1234 | 将数值 1234 写入寄存器 R08 |
002 | 02 | 0001 | 0001 | 延迟 1 秒,便于观察 R08 的变化 |
003 | 2E | 0008 | 0020 | 取余数计算,结果保存在 R08 中 |
004 | 0F | 0000 | 0000 | 程序结束 |
0x30 转换寄存器为 BCD 码
将寄存器值的低 8 位转换为七段显示 BCD 码。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C5 | 0001 | 0000 | 启用PCA9685 PWM信号发生器 |
001 | C6 | 0001 | 0000 | 启用DS1307 RTC时钟模块 |
002 | 30 | 3E00 | 0000 | 将寄存器R3E按十进制转换为BCD码 |
003 | EA | 0000 | 0190 | 将R00按位所表示的通道PWM值设置为0x0190 (范围0x0000-0x0FFF) |
004 | 16 | 0000 | 0000 | 将R00内的数值按位取反 |
005 | EA | 0000 | 00C8 | 将R00按位所表示的通道PWM值设置为0x00C8 (范围0x0000-0x0FFF) |
006 | 0E | 0000 | 0002 | 返回002行继续执行 |
0x32 寄存器高级运算
对寄存器对执行多种运算操作。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0001 | 73E8 | 在R01中写入数值0x73E8 |
001 | 10 | 0002 | 1024 | 在R02中写入数值0x1024 |
002 | 10 | 0003 | 0000 | 在R03中写入数值0x0000 |
003 | 32 | 0300 | 0102 | R01,R02按位与运算,结果存到R03 |
004 | 32 | 0301 | 0102 | R01,R02按位或运算,结果存到R03 |
005 | 32 | 0302 | 0102 | R01,R02按位异或运算,结果存到R03 |
006 | 32 | 0303 | 0102 | R01,R02求和,结果存到R03 |
007 | 32 | 0304 | 0102 | R01,R02求差,结果存到R03 |
008 | 32 | 0305 | 0102 | R01,R02求积,结果存到R03 |
009 | 32 | 0306 | 0102 | R01,R02求商,结果存到R03 |
00A | 32 | 0307 | 0102 | R01,R02求积,结果存到R03 |
00B | 32 | 0008 | 0102 | R02的值写入R01,R03不参与运算 |
00C | 32 | 030B | 0102 | R01,R02重组,结果存到R03 |
00D | 32 | 000C | 0100 | R01自身高低位交换 |
00E | 32 | 030D | 0102 | R01,R02相除取余,结果存到R03 |
00F | 0F | 0000 | 0000 | 程序结束 |
0x55 格式化文本输出
将数值以指定格式输出到屏幕指定位置。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C3 | 0001 | 0000 | 启用温湿度传感器 |
001 | 11 | 0001 | 002E | 将温度值R2E赋值到R01中 |
002 | 10 | 0028 | FFFF | 在R28中写入数值0xFFFF配置颜色 |
003 | 55 | 0000 | 0122 | 格式化输出R01中的数字,两位小数,输出位置(0,0) |
004 | 02 | 03E8 | 0000 | 延时1000毫秒 |
005 | 10 | 0028 | 0210 | 在R28中写入数值0x0210配置颜色 |
006 | 5A | 0000 | FFFF | 画一个填充矩形(0,0)-(255,255) |
007 | 0E | 0000 | 0000 | 在R00中写入数值0x0000 |
0x56 显示字符串
从连续寄存器中以指定格式显示字符。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C3 | 0001 | 0000 | 启用温湿度传感器 |
001 | 10 | 0004 | 5465 | 在R04中写入数值0x5465 |
002 | 10 | 0005 | 6D70 | 在R05中写入数值0x6D70 |
003 | 10 | 0006 | 6572 | 在R06中写入数值0x6572 |
004 | 10 | 0007 | 6174 | 在R07中写入数值0x6174 |
005 | 10 | 0008 | 7572 | 在R08中写入数值0x7572 |
006 | 10 | 0009 | 653A | 在R09中写入数值0x653A |
007 | 10 | 0028 | FFFF | 在R28中写入数值0xFFFF配置颜色 |
008 | 56 | 2020 | 040C | 用指定格式显示从R04开始的字符 |
009 | 02 | 03E8 | 0000 | 延时1000毫秒 |
00A | 10 | 0028 | 0210 | 在R28中写入数值0x0210配置颜色 |
00B | 5A | 0000 | FFFF | 画一个填充矩形(0,0)-(255,255) |
00C | 0E | 0000 | 0000 | 在R00中写入数值0x0000 |
0x57 绘制空心圆形
以指定圆心和半径绘制空心圆形。
参见下方0x5B示例。
0x58 绘制实心圆形
以指定圆心和半径绘制实心圆形。
参见下方0x5B示例。
0x59 绘制空心矩形
以指定对角顶点绘制空心矩形。
参见下方0x5B示例。
0x5A 绘制实心矩形
以指定对角顶点绘制实心矩形。
参见下方0x5B示例。
0x5B 绘制线段
以指定两点坐标绘制直线。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0028 | 001F | 在R028中写入数值0x001F |
001 | 57 | 2020 | 2000 | 绘制一个空心圆形 |
002 | 10 | 0028 | 07E0 | 在R028中写入数值0x07E0 |
003 | 58 | 7070 | 1000 | 绘制一个实心圆形 |
004 | 10 | 0028 | F100 | 在R028中写入数值0xF100 |
005 | 59 | 3030 | 5580 | 绘制一个空心矩形 |
006 | 10 | 0028 | 07FF | 在R028中写入数值0x07FF |
007 | 5A | 1010 | 2020 | 绘制一个实心矩形 |
008 | 10 | 0028 | FFFF | 在R028中写入数值0xFFFF |
009 | 5B | 6060 | 2020 | 绘制一条直线 |
00A | 0E | 0000 | 0000 | 返回000行 |
0xAD 绘图综合示例
综合绘图程序,展示各种形状。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | 10 | 0028 | 001F | 在R028中写入数值0x001F |
001 | 57 | 2020 | 2000 | 绘制一个空心圆形 |
002 | 10 | 0028 | 07E0 | 在R028中写入数值0x07E0 |
003 | 58 | 7070 | 1000 | 绘制一个实心圆形 |
004 | 10 | 0028 | F100 | 在R028中写入数值0xF100 |
005 | 59 | 3030 | 5580 | 绘制一个空心矩形 |
006 | 10 | 0028 | 07FF | 在R028中写入数值0x07FF |
007 | 5A | 1010 | 2020 | 绘制一个实心矩形 |
008 | 10 | 0028 | FFFF | 在R028中写入数值0xFFFF |
009 | 5B | 6060 | 2020 | 绘制一条直线 |
00A | 0E | 0000 | 0000 | 返回000行 |
0xC0 启停:外围模块批量配置
按位启用/禁用外围设备。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C0 | 0000 | 085F | 启用模数转换 |
001 | 0F | 0000 | 0000 | 程序结束 |
| 位 | 外围设备 |
|---|---|
| 0 | ADC 模数转换 |
| 1 | 环境传感器 |
| 2 | 实时时钟 |
| 3 | 颜色传感器 |
| 4 | 外部 PWM 发生器 |
| 6 | 全彩 LED |
0xC1 启停:ADC 模块
启用或禁用模数转换功能。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C1 | 0001 | 0000 | 启用模数转换 |
001 | AD | 0001 | 0005 | 将AD通道1的值保存到寄存器R05中 |
002 | 01 | 00FF | 0000 | 熄灭所有LED |
003 | 02 | 0005 | FF00 | 延时R05中的值所对应的毫秒数 |
004 | 01 | 00FF | 0000 | 点亮所有LED |
005 | 02 | 0005 | FF00 | 延时R05中的值所对应的毫秒数 |
006 | 0E | 0000 | 0001 | 返回001行 |
0xC3 启停:温湿度传感器
启用温湿度传感器并显示读数。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C3 | 0001 | 0000 | 启用温湿度传感器 |
001 | 11 | 0001 | 002E | 将温度值R2E赋值到R01中 |
002 | 10 | 0028 | FFFF | 在R28中写入数值0xFFFF配置颜色 |
003 | 55 | 0000 | 0122 | 格式化输出R01中的数字,两位小数 |
004 | 10 | 0028 | 0210 | 在R28中写入数值0x0210配置颜色 |
005 | 5A | 0000 | FFFF | 画一个填充矩形(0,0)-(255,255) |
006 | 0E | 0000 | 0000 | 在R00中写入数值0x0000 |
0xC4 启停:颜色检测传感器
启用颜色检测传感器并读取RGB值。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C4 | 0001 | 0000 | 启用颜色传感器 |
001 | E5 | 3101 | 0001 | 使用R31-R33的高八位作为RGB值 |
002 | 0E | 0000 | 0001 | 返回001行循环执行 |
0xC5 启停:外置PWM发生器
启用外置PWM发生器并控制PWM通道。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C5 | 0001 | 0000 | 启用外置PWM发生器 |
001 | C1 | 0001 | 0000 | 启用模数转换器 |
002 | 10 | 0000 | 0003 | 在R0中写入数值0x0003 |
003 | 10 | 0001 | 0019 | 在R1中写入数值0x0019 |
004 | AD | 0000 | 0002 | 将AD转换通道0的值赋给R02 |
005 | 1D | 0002 | 0001 | R02和R01做除法求商 |
006 | 12 | 0002 | 00C8 | R02的值增加0x00C8 |
007 | 00 | 0000 | 0000 | 空操作 |
008 | EA | 0000 | 0002 | R02的值写入按位选中的PWM通道 |
009 | 0E | 0000 | 0002 | 返回002行继续执行 |
0xC6 启停:RTC时钟模块
启用DS1307 RTC时钟模块并显示时间。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C6 | 0001 | 0000 | 启用DS1307 RTC时钟模块 |
001 | 13 | 003E | 0000 | 将R3E中的最低四位用LED显示 |
002 | 0E | 0000 | 0001 | 返回第001行 |
0xC8 设置板载PWM通道占空比
启用内置PWM并设置占空比。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C0 | 0000 | 0000 | 启用内置PWM,关闭蜂鸣器 |
001 | C8 | 0001 | 03E8 | 设置通道1的PWM值为1000 |
002 | 0E | 0000 | 0001 | 返回第001行 |
0xE4 设置 LED 颜色
使用 RGB 值设置单个 WS2812B LED 的颜色。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | E4 | 00FF | 8000 | 设置0号LED的RGB值,显示橙色 |
001 | 02 | 0001 | 0001 | 延迟1秒 |
002 | E4 | 00FF | 0000 | 设置0号LED的RGB值,显示红色 |
003 | 02 | 0001 | 0001 | 延迟1秒 |
004 | E4 | 0000 | FF00 | 设置0号LED的RGB值,显示绿色 |
005 | 02 | 0001 | 0001 | 延迟1秒 |
006 | E4 | 0000 | 00FF | 设置0号LED的RGB值,显示蓝色 |
007 | 0F | 0000 | 0000 | 程序结束 |
0xE5 读取颜色传感器
读取颜色传感器的RGB值。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C4 | 0001 | 0000 | 启用颜色传感器 |
001 | E5 | 3101 | 0001 | 使用R31-R33的高八位作为RGB值 |
002 | 0E | 0000 | 0001 | 返回001行循环执行 |
0xE8 播放音调
播放预设的三个八度音阶中的音调。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C0 | 0000 | 0800 | 切换至蜂鸣器模式 |
001 | E8 | 000F | 0001 | 三十二分音符 高音Do |
002 | E8 | 0000 | 0001 | 三十二分休止符 |
003 | E8 | 000F | 0001 | 三十二分音符 高音Do |
004 | E8 | 0011 | 0001 | 三十二分音符 高音Mi |
005 | E8 | 0013 | 0001 | 三十二分音符 高音Sol |
006 | 0F | 0000 | 0000 | 程序结束 |
| 范围 | 八度音阶 |
|---|---|
| 01~07 | 低音 Do~Si |
| 08~0E | 中音 Do~Si |
| 0F~15 | 高音 Do~Si |
| 00 | 休止符 |
| 值 | 时长 |
|---|---|
| 0000 | 六十四分音符 |
| 0003 | 十六分音符 |
| 0005 | 八分音符 |
| 0007 | 四分音符 |
| 0008 | 二分音符 |
| 0009 | 全音符 |
0xEA PCA9685寄存器通道和指定值
将值写入选定的PCA9685 PWM通道。
| LINE | OPCODE | OP-0 | OP-1 | 备注 |
|---|---|---|---|---|
000 | C5 | 0001 | 0000 | 启用外置PWM发生器 |
001 | C1 | 0001 | 0000 | 启用模数转换器 |
002 | 10 | 0000 | 0003 | 在R0中写入数值0x0003 |
003 | 10 | 0001 | 0019 | 在R1中写入数值0x0019 |
004 | AD | 0000 | 0002 | 将AD转换通道0的值赋给R02 |
005 | 1D | 0002 | 0001 | R02和R01做除法求商 |
006 | 12 | 0002 | 00C8 | R02的值增加0x00C8 |
007 | 00 | 0000 | 0000 | 空操作 |
008 | EA | 0000 | 0002 | R02的值写入按位选中的PWM通道 |
009 | 0E | 0000 | 0002 | 返回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%。 :::。