ht1621 - 液晶屏驱动(HT1621/HT1621B)
ht1621 - 液晶屏驱动(HT1621/HT1621B)
一、概述
ht1621 液晶屏驱动库是 LuatOS 的段码液晶屏驱动库,支持 HT1621/HT1621B 等驱动芯片,提供简单的段码显示功能;
ht1621 库主要功能:
1、液晶屏初始化:支持 HT1621/HT1621B 芯片初始化;
2、段码显示:支持数字和简单字符显示;
3、背光控制:支持背光开关控制;
注意事项:
1、需要接 3 个 GPIO 引脚:CS、DATA、WR;
2、需要给 ht1621 接好供电;
二、核心示例
1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;
2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/ht1621
2.1 核心代码
-- 本核心示例演示ht1621库的基本使用流程:
-- 1、初始化ht1621液晶屏
-- 2、开启背光
-- 3、显示数字和小数点
-- HT1621液晶屏驱动 - 基于实际测试的段码映射
-- 假设连接:
-- CS引脚: GPIO29
-- DATA引脚: GPIO30
-- WR引脚: GPIO31
-- 段码映射
local segment_map = {
a = 0x80, -- 顶部横线
b = 0x08, -- 右上竖线
c = 0x02, -- 右下竖线
d = 0x01, -- 底部横线
e = 0x20, -- 左下竖线
f = 0x40, -- 左上竖线
g = 0x04, -- 中间横线
dp = 0x10 -- 小数点
}
-- 根据段码映射按位或运算生成的数字0-9的值表,可以直接使用
-- 0,1,2,3,4,5,6,7,8,9
-- 0xeb,0x0a,0xad,0x8f,0x4e,0xc7,0xe7,0x8a,0xef,0xcf
-- 清屏函数
function clear_display()
for i = 0, 11 do
ht1621.data(seg, i, 0x00)
end
end
-- 主函数
local function main()
-- 初始化HT1621
seg = ht1621.setup(29, 30, 31)
-- 打开LCD显示
ht1621.lcd(seg, true)
-- 初始化延时
sys.wait(100)
-- 清屏,调用的上面的函数
clear_display()
sys.wait(100)
-- 按位或运算,显示数字外还显示小数点
ht1621.data(seg, 0, 0xef | 0x10) -- 对应2.2效果演示,显示第一个8和电池图标
ht1621.data(seg, 2, 0xef | 0x10) -- 对应2.2效果演示,显示第二个8和冒号
ht1621.data(seg, 4, 0xef | 0x10) -- 对应2.2效果演示,显示第三个8和温度圆圈
ht1621.data(seg, 6, 0xef | 0x10) -- 对应2.2效果演示,显示第四个8和右下小数点
ht1621.data(seg, 8, 0xef | 0x10) -- 对应2.2效果演示,显示第五个8和右下小数点
ht1621.data(seg, 10, 0xef | 0x10) -- 对应2.2效果演示,显示第六个8和右下小数点
end
-- 运行主函数
sys.taskInit(main)
2.2 效果演示

2.3 真值表
真值表是使用一个段码屏的基本使用说明书,以下是示例中段码屏对应的真值表使用方法:

根据真值表可以看出段码结构与数据顺序
- 段码排列顺序:A F E P B G C D
- A:顶部横线
- F:左上竖线
- E:左下竖线
- P:小数点
- B:右上竖线
- G:中间横线
- C:右下竖线
- D:底部横线
数字显示编码示例
以显示数字"8"为例:
- 需要点亮的段:A、F、E、B、G、C、D(所有段除小数点外)
- 二进制表示:
1 1 1 0 1 1 1 1 - 十六进制值:
0xEF
使用方法:
ht1621.data(seg, addr, 0xEF) _-- 在指定地址显示数字8_
地址参数说明
ht1621.data(seg, addr, sdat) 函数中:
- 第二个参数 addr:显示地址
- 地址范围:通常为 0-11
-
调试建议:
-
如果显示不完整,可测试 12-31 的地址范围
- 不同型号的 LCD 模块地址映射可能不同
- 建议从 0 开始逐个测试以确定正确的地址对应关系
使用步骤
- 确定要显示的数字对应的段码组合
- 按照 A-F-E-P-B-G-C-D 顺序计算二进制值
- 转换为十六进制作为 sdat 参数
- 选择合适的 addr 地址参数
- 调用
ht1621.data(seg, addr, sdat)显示内容
通过这种方法,可以精确控制每个数字的显示效果,包括是否显示小数点等特殊符号。
三、常量详解
核心库常量,顾名思义是由合宙 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;
ht1621 - 液晶屏驱动(HT1621/HT1621B)核心库没有常量。
四、函数详解
4.1 ht1621.setup(pin_cs, pin_data, pin_wr, cmd_com_mode, cmd_rc, cmd_sysen)
功能
初始化 HT1621 LCD 驱动器;
注意事项
- 需要正确连接 CS、DATA、WR 三个引脚,可以使用普通 GPIO
- HT1621 本身不控制背光,只控制 LCD 段码显示
- 背光需要额外的 LED 和驱动电路
参数
pin_cs
参数含义:片选引脚;
数据类型:number;
取值范围:GPIO编号;
是否必选:必须传入此参数;
注意事项:填模块的GPIO编码;
参数示例:4
pin_data
参数含义:数据引脚;
数据类型:number;
取值范围:GPIO编号;
是否必选:必须传入此参数;
注意事项:填模块的GPIO编码;
参数示例:5
pin_wr
参数含义:WR引脚(写时钟);
数据类型:number;
取值范围:GPIO编号;
是否必选:必须传入此参数;
注意事项:填模块的GPIO编码;
参数示例:3
cmd_com_mode
参数含义:设置LCD的COM模式和偏压比例;
数据类型:number;
取值范围:0-255,默认0x52表示4个COM端子模式和设置1/3偏压;
常见设置:
0x52: 4COM, 1/3偏压(最常用)
0x50: 2COM, 1/3偏压
0x54: 6COM, 1/3偏压
0x58: 8COM, 1/3偏压
是否必选:可选传入此参数;
注意事项:必须与实际LCD屏的COM数匹配;
参数示例:0x52
cmd_rc
参数含义:内部RC振荡器;
数据类型:number;
取值范围:0-255,默认0x30;
常见设置:
0x30: 内部RC振荡器(低功耗)
0x31: 外部晶体振荡器(高精度)
是否必选:可选传入此参数;
注意事项:内部RC功耗低但精度较差;
参数示例:0x30
cmd_sysen
参数含义:系统振荡器开;
数据类型:number;
取值范围:0-255,默认0x02;
常见设置:
0x02: 开启系统振荡器
0x00: 关闭系统振荡器
是否必选:可选传入此参数;
注意事项:必须开启才能正常工作;
参数示例:0x02
返回值
local seg = ht1621.setup(pin_cs, pin_data, pin_wr, cmd_com_mode, cmd_rc, cmd_sysen)
seg
含义说明:ht1621对象;
数据类型:userdata;
取值范围:有效的ht1621对象;
注意事项:后续操作需要此对象;
返回示例:userdata
示例
-- 初始化ht1621
local seg = ht1621.setup(29, 30, 31)
_-- 使用自定义命令参数(6COM, 1/3偏压)_
local seg = ht1621.setup(29, 30, 31, 0x54, 0x30, 0x02)
4.2 ht1621.lcd(seg, onoff)
功能
LCD 显示开关(不是背光控制),通过命令控制 HT1621 的偏压发生器,当 onoff 为 true 时发送 LCD_on 命令(0x06),false 时发送 LCD_off 命令(0x04);
注意事项
- 这不是背光控制,而是控制 LCD 段码能否显示;
- 关闭后所有段码都会消失,但数据仍保存在 HT1621 内存中;
- 重新开启后会立即恢复之前的显示内容;
参数
seg
参数含义:ht1621对象;
数据类型:userdata;
取值范围:ht1621.setup返回的对象;
是否必选:必须传入此参数;
注意事项:需要先初始化;
参数示例:seg
onoff
参数含义:背光开关;
数据类型:boolean;
取值范围:true-开,false-关;
是否必选:必须传入此参数;
注意事项:暂无;
参数示例:true
返回值
无
示例
-- 开启背光
ht1621.lcd(seg, true)
-- 关闭背光
ht1621.lcd(seg, false)
4.3 ht1621.data(seg, addr, sdat)
功能
显示数据;
注意事项
在指定地址显示数据;
参数
seg
参数含义:ht1621对象;
数据类型:userdata;
取值范围:ht1621.setup返回的对象;
是否必选:必须传入此参数;
注意事项:需要先初始化;
参数示例:seg
addr
参数含义:段码地址;
数据类型:number;
取值范围:0-31根据屏幕类型最多支持31个地址,可以优先测试0-11查看段码显示位置;
是否必选:必须传入此参数;
注意事项:实际有效范围取决于LCD屏的SEG数量;
参数示例:0
sdat
参数含义:段码数据;
数据类型:number;
取值范围:0-255,可以参考2.3章节真值表计算方式;
是否必选:必须传入此参数;
注意事项:数据的每一位控制对应COM的开关状态;
参数示例:0xeb
返回值
无
示例
-- 在地址0显示数字1
ht1621.data(seg, 0, 0xeb)
-- 数字0-9的值表:
-- 0: 0xeb, 1: 0x0a, 2: 0xad, 3: 0x8f, 4: 0x4e
-- 5: 0xc7, 6: 0xe7, 7: 0x8a, 8: 0xef, 9: 0xcf
4.4 ht1621.cmd(seg, cmd)
功能
发送指令;
注意事项
向 ht1621 发送控制指令;
参数
seg
参数含义:ht1621对象;
数据类型:userdata;
取值范围:ht1621.setup返回的对象;
是否必选:必须传入此参数;
注意事项:需要先初始化;
参数示例:seg
cmd
参数含义:控制指令;
数据类型:number;
取值范围:0-255;常见命令如下:
0x00 系统振荡器关
0x02 系统振荡器开
0x04 LCD显示关
0x06 LCD显示开
0x08 看门狗禁用
0x0A 看门狗使能
0x0C 时基输出禁用
0x0E 时基输出使能
0x30 内部RC振荡器RCosc
0x31 外部32768Hz晶体
0x32 外部256kHz晶体
0x50 2COM, 1/2偏压
0x51 3COM, 1/2偏压
0x52 4COM, 1/3偏压ComMode
0x53 2COM, 1/3偏压
0x54 3COM, 1/3偏压
0x55 4COM, 1/3偏压
0x58 6COM, 1/3偏压
0x59 8COM, 1/3偏压
0x80 写控制命令前缀CTRL_cmd
0xA0 写数据命令前缀Data_cmd
是否必选:必须传入此参数;
注意事项:只有使用出现不正常时才需要修改命令配置;
参数示例:0x30
返回值
无
示例
_-- 发送命令,开启内部RC振荡器_
ht1621.cmd(seg, 0x30)
五、产品支持说明
支持 LuatOS 开发的产品是否支持 HT1621/HT1621B 段码液晶屏,可以查看选型手册中合宙 LuatOS 固件 章节对应型号是否支持 HT1621/HT1621B 段码液晶屏核心库。