找回密码
 立即注册
查看: 87|回复: 10

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-18 09:25:47
已绑定手机

1

主题

7

回帖

49

积分

新手上路

积分
49
发表于 2025-8-15 18:02:59 | 显示全部楼层 |阅读模式



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

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 2025-8-15 18:03:00 | 显示全部楼层
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 的寄存器配置、扫描方式、刷新频率等,也可以继续提问,我们将为您深入解析。

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-18 09:25:47
已绑定手机

1

主题

7

回帖

49

积分

新手上路

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-08-24 00:56:18
已绑定手机

40

主题

2410

回帖

3256

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-18 09:25:47
已绑定手机

1

主题

7

回帖

49

积分

新手上路

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

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:303
  • 最近打卡:2025-08-23 00:13:14
已绑定手机

13

主题

190

回帖

1841

积分

金牌会员

积分
1841
发表于 2025-8-16 15:32:14 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-08-24 01:00:11
已绑定手机

86

主题

5979

回帖

1万

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-18 09:25:47
已绑定手机

1

主题

7

回帖

49

积分

新手上路

积分
49
发表于 6 天前 | 显示全部楼层
Debu*** 发表于 2025-8-16 19:58
建议使用AI8H4KTLCD,不需要外挂段式LCD驱动芯片
以下是几年前写的,当时还没有AI8H4KTLCD,供参考:


版主,
  1,  能不能给一个驱动数码管的范例代码,
  2,  Display_LCD(6,Buff[0]>>4); 是数据存入Buff时特意放高4位了,现在要移到低位吗?

点评

8H4K64TL-触摸按键8段数码管测试板-V1.1: https://www.stcaimcu.com/thread-12496-1-1.html 8H4K64TLCD-触摸按键段式LCD测试板-V1.1: https://www.stcaimcu.com/thread-13578-1-1.html 8H4K64TLCD-触摸按键段  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-08-18 09:25:47
已绑定手机

1

主题

7

回帖

49

积分

新手上路

积分
49
发表于 6 天前 | 显示全部楼层
星火*** 发表于 2025-8-18 09:25
版主,
  1,  能不能给一个驱动数码管的范例代码,
  2,  Display_LCD(6,Buff[0]>>4); 是数据存入Buff时 ...

知道有的Mcu内置了驱动电路,我还是想对基础的也能练习搞懂
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-08-24 01:00:11
已绑定手机

86

主题

5979

回帖

1万

积分

超级版主

积分
10832
发表于 6 天前 | 显示全部楼层
星火*** 发表于 2025-8-18 09:25
版主,
  1,  能不能给一个驱动数码管的范例代码,
  2,  Display_LCD(6,Buff[0]>>4); 是数据存入Buff时 ...

8H4K64TL-触摸按键8段数码管测试板-V1.1:
https://www.stcaimcu.com/thread-12496-1-1.html

8H4K64TL-触摸按键15段数码管测试板-V1.1:
https://www.stcaimcu.com/thread-12801-1-1.html

8H4K64TLCD-触摸按键段式LCD测试板-V1.1:
https://www.stcaimcu.com/thread-13578-1-1.html

8H4K64TLCD-触摸按键段式LCD测试板-V1.0:
https://www.stcaimcu.com/thread-9925-1-1.html

具体程序是LED / LCD屏的定义和连接决定的,屏或连接方式不一样,不能直接抄代码
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-24 04:08 , Processed in 0.171910 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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