找回密码
 立即注册
查看: 21|回复: 6

TM1621D写入的数据包含Seg和Com吗

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-15 18:02:59
已绑定手机

1

主题

4

回帖

33

积分

新手上路

积分
33
发表于 前天 18:02 | 显示全部楼层 |阅读模式



   学习段码屏,TM1621D写入数据时调取数组元素:WriteAllData(0x0a,Smg,6);
   而数组一般是这样定义的:
   uchar code Smg[16]={0x05,0xff,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0....};
   我不懂的是:数组元素怎么定义的,  Seg和com0~com3的信息都包含了吗?
                      或者只包含了com0~com3信息,Seg地址自动递增的吗?
   简单地说, 是不懂这块程序,尤其是写数据的原理, 希望得到指导交流
回复

使用道具 举报 送花

3

主题

2058

回帖

964

积分

等待验证会员

积分
964
发表于 前天 18:03 | 显示全部楼层
TM1621D 是一款用于驱动段码液晶显示器(Segment LCD)的驱动芯片,常用于数码管、字符型LCD等显示设备。在使用 TM1621D 进行数据写入时,通常会通过 I²C 或 SPI 接口与主控芯片通信,发送配置指令和显示数据。

关于您提到的 WriteAllData(0x0a, Smg, 6); 这一行代码,以及数组 Smg[16] 的定义方式,我们来详细解释其原理及数据结构中是否包含 Seg 和 Com 信息。

一、TM1621D 数据格式概述

TM1621D 的显示数据是按照 Com(公共端) 和 Seg(段) 的组合进行控制的。每个 Com 对应若干个 Seg,组成一个像素点或一个字符。

在 TM1621D 中,显示数据以 字节 为单位进行传输,每个字节代表一组 Com 的状态。具体来说:
每个字节对应一个 Com 的输出状态;
每个 Com 可以控制多个 Seg(如 8 个 Seg);
因此,一个完整的显示数据帧通常由多个字节组成,每个字节表示一个 Com 的 Seg 状态。

例如,若系统支持 4 个 Com(Com0~Com3),则需要 4 个字节的数据来完整描述一个显示帧。

二、关于 WriteAllData(0x0a, Smg, 6); 的含义

该函数调用表示向 TM1621D 写入 6 字节的数据,其中:
0x0a 是命令地址,表示写入的是显示数据(Display Data);
Smg 是指向数据数组的指针;
6 表示要写入的数据长度(字节数)。

因此,Smg[6] 数组中应该包含 6 个字节的数据,每个字节对应一个 Com 的 Seg 状态。

三、数组 Smg[16] 的定义及其含义

您给出的数组定义如下:
  1. c
  2. uchar code Smg[16] = {0x05, 0xff, 0xc7, 0xE5, 0x6C, 0xAD, 0xaf, 0xE0};
复制代码

这个数组有 16 个元素,但实际只用了前 6 个(Smg[0] 到 Smg[5])。这意味着在 WriteAllData(0x0a, Smg, 6); 中,仅使用了数组的前 6 个字节。

四、Seg 和 Com 是否包含在数组中?

答案:是的,数组中的每个字节包含了对应的 Com 的 Seg 状态。

在 TM1621D 中,每个字节对应一个 Com 的输出,每一位代表一个 Seg 的亮灭状态。例如:
若 Com0 对应 8 个 Seg,则字节 0x05 表示 Com0 的 Seg 状态为:0b00000101(即第 0、2 位为 1,其余为 0);
同理,0xff 表示所有 Seg 都点亮(0b11111111)。

因此,数组中的每个字节代表一个 Com 的 Seg 控制信息,而不是单独的 Seg 或 Com 地址。

五、是否自动递增 Seg 地址?

在 TM1621D 中,Seg 地址是通过数据字节顺序自动递增的,也就是说,写入的第一个字节对应 Com0 的 Seg 状态,第二个字节对应 Com1,依此类推。

例如,若您有 4 个 Com(Com0~Com3),那么您需要提供 4 个字节的数据,分别对应 Com0、Com1、Com2、Com3 的 Seg 状态。

因此,在 WriteAllData 函数中,数据数组的顺序决定了 Com 的排列顺序,Seg 地址是隐含在数据顺序中的,无需额外指定。

六、总结
TM1621D 的写入数据是按 Com 顺序 逐个写入的,每个字节对应一个 Com 的 Seg 状态;
数组 Smg 中的每个字节包含该 Com 对应的所有 Seg 的亮灭状态;
在 WriteAllData(0x0a, Smg, 6); 中,Smg 前 6 个字节被写入,分别对应 6 个 Com 的 Seg 状态;
Seg 地址是通过数据顺序自动递增的,无需显式指定;
数组中 不包含 Com 地址本身,而是通过数据顺序隐含地确定 Com 的位置。

如果您进一步了解 TM1621D 的寄存器配置、扫描方式、刷新频率等,也可以继续提问,我们将为您深入解析。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-15 18:02:59
已绑定手机

1

主题

4

回帖

33

积分

新手上路

积分
33
发表于 前天 19:05 | 显示全部楼层
如果每个字节是一个com的 Seg状态, com的地址是可以通过顺序递增,但是比如TM1621D有14个Seg, 从Seg9-Seg22,超过了一个字节,怎么写代码呢?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:516
  • 最近打卡:2025-08-17 00:54:34
已绑定手机

39

主题

2397

回帖

3203

积分

荣誉版主

积分
3203
发表于 前天 19:10 | 显示全部楼层
对TM1621D显示寄存器写入的数据是映射到输出点阵的,而点阵扫描是自动完成的,无需关心seg和com的时序。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-08-15 18:02:59
已绑定手机

1

主题

4

回帖

33

积分

新手上路

积分
33
发表于 前天 20:48 | 显示全部楼层
晓*** 发表于 2025-8-15 19:10
对TM1621D显示寄存器写入的数据是映射到输出点阵的,而点阵扫描是自动完成的,无需关心seg和com的时序。 ...

版主,我不懂TM1621怎么写。百度, 论坛上也看了文章和例程。有的讲, 写数据Addr是Seg, 而dat是com0~com3. 可刚才帖子里Ai回答说, dat是一个com的多个Seg,  我不知真假了。
老师,您可否通俗易懂地告知怎么写,拿8字数码管为例吧, 数组元素怎么定义,怎么对应Seg, dat ?

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:298
  • 最近打卡:2025-08-17 00:10:35
已绑定手机

13

主题

186

回帖

1811

积分

金牌会员

积分
1811
发表于 昨天 15:32 | 显示全部楼层
往对应的地址写入相应的数据,4位数据可以连续写入,也可以一个个的写入,
这个程序就需要配合你的硬件设计来编写了。
截图202508161527465246.jpg
截图202508161528209685.jpg
截图202508161528465694.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:529
  • 最近打卡:2025-08-16 11:56:07
已绑定手机

86

主题

5942

回帖

1万

积分

超级版主

积分
10736
发表于 昨天 19:58 | 显示全部楼层
建议使用AI8H4KTLCD,不需要外挂段式LCD驱动芯片
以下是几年前写的,当时还没有AI8H4KTLCD,供参考:
截图202508161954587599.jpg
截图202508161955545521.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-17 02:30 , Processed in 0.116695 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表