跳转至

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 开始逐个测试以确定正确的地址对应关系

使用步骤

  1. 确定要显示的数字对应的段码组合
  2. 按照 A-F-E-P-B-G-C-D 顺序计算二进制值
  3. 转换为十六进制作为 sdat 参数
  4. 选择合适的 addr 地址参数
  5. 调用 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表示4COM端子模式和设置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 段码液晶屏核心库。