TM1621D写入的数据包含Seg和Com吗
学习段码屏,TM1621D写入数据时调取数组元素:WriteAllData(0x0a,Smg,6);
而数组一般是这样定义的:
uchar code Smg={0x05,0xff,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0....};
我不懂的是:数组元素怎么定义的,Seg和com0~com3的信息都包含了吗?
或者只包含了com0~com3信息,Seg地址自动递增的吗?
简单地说, 是不懂这块程序,尤其是写数据的原理, 希望得到指导交流
TM1621D 是一款用于驱动段码液晶显示器(Segment LCD)的驱动芯片,常用于数码管、字符型LCD等显示设备。在使用 TM1621D 进行数据写入时,通常会通过 I²C 或 SPI 接口与主控芯片通信,发送配置指令和显示数据。
关于您提到的 WriteAllData(0x0a, Smg, 6); 这一行代码,以及数组 Smg 的定义方式,我们来详细解释其原理及数据结构中是否包含 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 个字节的数据,每个字节对应一个 Com 的 Seg 状态。
三、数组 Smg 的定义及其含义
您给出的数组定义如下:
c
uchar code Smg = {0x05, 0xff, 0xc7, 0xE5, 0x6C, 0xAD, 0xaf, 0xE0};
这个数组有 16 个元素,但实际只用了前 6 个(Smg 到 Smg)。这意味着在 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 的寄存器配置、扫描方式、刷新频率等,也可以继续提问,我们将为您深入解析。
[本文内容由国芯人工智能辅助生成,仅供参考] 如果每个字节是一个com的 Seg状态, com的地址是可以通过顺序递增,但是比如TM1621D有14个Seg, 从Seg9-Seg22,超过了一个字节,怎么写代码呢? 对TM1621D显示寄存器写入的数据是映射到输出点阵的,而点阵扫描是自动完成的,无需关心seg和com的时序。 晓飛飛 发表于 2025-8-15 19:10
对TM1621D显示寄存器写入的数据是映射到输出点阵的,而点阵扫描是自动完成的,无需关心seg和com的时序。 ...
版主,我不懂TM1621怎么写。百度, 论坛上也看了文章和例程。有的讲, 写数据Addr是Seg, 而dat是com0~com3. 可刚才帖子里Ai回答说, dat是一个com的多个Seg,我不知真假了。
老师,您可否通俗易懂地告知怎么写,拿8字数码管为例吧, 数组元素怎么定义,怎么对应Seg, dat ?
{:4_219:} 建议使用AI8H4KTLCD,不需要外挂段式LCD驱动芯片
以下是几年前写的,当时还没有AI8H4KTLCD,供参考:
DebugLab 发表于 2025-8-16 19:58
建议使用AI8H4KTLCD,不需要外挂段式LCD驱动芯片
以下是几年前写的,当时还没有AI8H4KTLCD,供参考:
版主,
1,能不能给一个驱动数码管的范例代码,
2,Display_LCD(6,Buff>>4); 是数据存入Buff时特意放高4位了,现在要移到低位吗? 星火前行 发表于 2025-8-18 09:25
版主,
1,能不能给一个驱动数码管的范例代码,
2,Display_LCD(6,Buff>>4); 是数据存入Buff时 ...
知道有的Mcu内置了驱动电路,我还是想对基础的也能练习搞懂 星火前行 发表于 2025-8-18 09:25
版主,
1,能不能给一个驱动数码管的范例代码,
2,Display_LCD(6,Buff>>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屏的定义和连接决定的,屏或连接方式不一样,不能直接抄代码
页:
[1]
2