打印
[51单片机]

LCD真值表怎么编码

[复制链接]
6051|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
西门闩|  楼主 | 2018-6-17 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

上图是一个LCD的真值表,用HT1621驱动,请问这个HT1621的地址码该怎么编呢?比如我要显示

,就要写成两行(0xe0,0x05);(0x90,0x06); 其中0xe0是COM口0,1,2,0x90是COM口0,4,SEG地址段就用了10列的CBG段和11列的AD段。能不能用一个16进制数,把这两个列一次性写入?


相关帖子

沙发
mcu5i51| | 2018-6-17 17:18 | 只看该作者
7段中的分布是相同的,可以用一个字节表示一个数字,比如10,11为第10个数字位,10为低位,做好段码表,写个函数,参数为位号和段代码,位号计算后得到地址,先后顺序写入段数据

使用特权

评论回复
板凳
ayb_ice| | 2018-6-19 08:36 | 只看该作者
每两个半字节组成一个字节,也即每两个seg组成一个字节

使用特权

评论回复
地板
西门闩|  楼主 | 2018-6-19 09:40 | 只看该作者
mcu5i51 发表于 2018-6-17 17:18
7段中的分布是相同的,可以用一个字节表示一个数字,比如10,11为第10个数字位,10为低位,做好段码表,写 ...

能不能帮手举个例子?比如我要显示数字“3”,SEG段该怎么编?COM段又该怎么编?我始终想不出来

使用特权

评论回复
5
西门闩|  楼主 | 2018-6-19 09:41 | 只看该作者
ayb_ice 发表于 2018-6-19 08:36
每两个半字节组成一个字节,也即每两个seg组成一个字节

能不能帮手举个例子?比如我要显示数字“3”,SEG段该怎么编?COM段又该怎么编?我始终想不出来,看来有些笨。

使用特权

评论回复
6
ayb_ice| | 2018-6-19 11:04 | 只看该作者
西门闩 发表于 2018-6-19 09:41
能不能帮手举个例子?比如我要显示数字“3”,SEG段该怎么编?COM段又该怎么编?我始终想不出来,看来有 ...

这个简单,随便写个数据测试下就知道了
依次写8个字节数据就能知道了

比如依次写0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80这8个数据到固定地址,比如地址0,看LCD实际显示,并记录下来,你就知道了

使用特权

评论回复
7
qhtflsw| | 2018-6-19 11:13 | 只看该作者

用连续写模式。两个四位组成一个字节。

使用特权

评论回复
8
西门闩|  楼主 | 2018-6-19 14:29 | 只看该作者
ayb_ice 发表于 2018-6-19 11:04
这个简单,随便写个数据测试下就知道了
依次写8个字节数据就能知道了

i不是写数据,是写地址,SEG段就是地址段吧?“10C,10G,10B,P9,10D,10E,10F,10A”这是SEG的段码吧,也就是101+6位地址+4位数据中的地址位了。我就是想知道这8位“10C,10G,10B,P9,10D,10E,10F,10A”的SEG段怎么构成数字“3“,因为数据位我直接在COM口上输出相应高就是了

使用特权

评论回复
9
西门闩|  楼主 | 2018-6-19 14:31 | 只看该作者
qhtflsw 发表于 2018-6-19 11:13
用连续写模式。两个四位组成一个字节。

数据位明白了,主要是SEG的地址位。“10C,10G,10B,P9,10D,10E,10F,10A”这就是地址位,这8个占用两列的代码怎么构成一个数字

使用特权

评论回复
10
ayb_ice| | 2018-6-19 15:07 | 只看该作者
西门闩 发表于 2018-6-19 14:29
i不是写数据,是写地址,SEG段就是地址段吧?“10C,10G,10B,P9,10D,10E,10F,10A”这是SEG的段码吧 ...

这个要看手册,查找对应关系,还与实际硬件连线有关,还与驱动有关,

一般情况下都是先操作缓冲区,然后一次把全部缓冲区写入,这样可以先把全部真值表测出,

比如有8个字节缓冲区,全部清零等于全部不显示,全部置1等于全显,其中只有一个BIT置1对应的LCD也只显示一个段,全部测试一遍,记录下来你就明白了
参考下面的说明

无标题.png (270.86 KB )

无标题.png

使用特权

评论回复
11
qhtflsw| | 2018-6-19 15:12 | 只看该作者
西门闩 发表于 2018-6-19 14:31
数据位明白了,主要是SEG的地址位。“10C,10G,10B,P9,10D,10E,10F,10A”这就是地址位,这8个占用 ...

你现在LCD的PIN脚相对应的原理图接到1621的哪个口?
1-4接COM0-3,5-15接SEG。地址0就是SEG0。依次类推。
比如你PIN10接1621的SEG0,PIN11接到SEG1,分别对应要点亮LCD上的10C,10G,10B,P9,10D,10E,10F,10A
,要让数码10显示一个数字3,那么必须点亮10A,10B,10C,10D,10G。
程序里面地址0就是由SEG0SEG1组成的八个字节。
10C,10G,10B,P9,10D,10E,10F,10A依次对应BIT0-BIT7(0X01-0X80)
写数字3就是10010111,即0X97
即把数据0X97写进入地址0X00处。如果你是SEG2SEG3组成的八个字节,地址就是0x02。

使用特权

评论回复
12
西门闩|  楼主 | 2018-6-19 15:20 | 只看该作者
qhtflsw 发表于 2018-6-19 15:12
你现在LCD的PIN脚相对应的原理图接到1621的哪个口?
1-4接COM0-3,5-15接SEG。地址0就是SEG0。依次类推。 ...

多谢!虽然还没完全明白,但是细想一下,可能就会明白,再次感谢!

使用特权

评论回复
13
西门闩|  楼主 | 2018-6-19 15:21 | 只看该作者
ayb_ice 发表于 2018-6-19 15:07
这个要看手册,查找对应关系,还与实际硬件连线有关,还与驱动有关,

一般情况下都是先操作缓冲区,然后 ...

非常感谢这么耐心地解答,再细想一下,可能会明白码段的关系

使用特权

评论回复
14
qhtflsw| | 2018-6-19 15:26 | 只看该作者
西门闩 发表于 2018-6-19 15:20
多谢!虽然还没完全明白,但是细想一下,可能就会明白,再次感谢!

COM口芯片已经帮你对应到地址了。
你考虑的是点亮哪一段SEG就行了。
你真不会写,参考一下附件。然后自己写一下就明白了。

官方HT1621B驱动程序C语言.pdf

408.74 KB, 阅读权限: 20

HT1621C语言模板

使用特权

评论回复
15
西门闩|  楼主 | 2018-6-19 15:34 | 只看该作者
qhtflsw 发表于 2018-6-19 15:26
COM口芯片已经帮你对应到地址了。
你考虑的是点亮哪一段SEG就行了。
你真不会写,参考一下附件。然后自己 ...

使用特权

评论回复
16
山东电子小菜鸟| | 2018-6-19 21:35 | 只看该作者
COM1-4是段码地址,

使用特权

评论回复
17
西门闩|  楼主 | 2018-6-20 09:30 | 只看该作者

SEG xx才是段码地址吧?COM是位地址吧?

使用特权

评论回复
评论
山东电子小菜鸟 2018-6-20 13:43 回复TA
嗯 就是向SEG地址写COM数据 
18
西门闩|  楼主 | 2018-6-20 10:49 | 只看该作者
qhtflsw 发表于 2018-6-19 15:12
你现在LCD的PIN脚相对应的原理图接到1621的哪个口?
1-4接COM0-3,5-15接SEG。地址0就是SEG0。依次类推。 ...

“把数据0X97写进入地址0X00处。如果你是SEG2SEG3组成的八个字节,地址就是0x02。”如果我是用SEG4,SEG5组成一个字节,地址是不是该0x04?那么地址0x01,0x03之类的单数就不用了?芯片自动略过?

我现在是LCD的9,10脚对应接1621的SEG5,SEG6,按你的意思写了一下,但都要写成传递两次(segdisplay(0xe0,0x05)和segdisplay(0x90,0x06);),不能一次搞定,按照你的说法,这个SEG地址是多少?

使用特权

评论回复
19
qhtflsw| | 2018-6-20 14:28 | 只看该作者
西门闩 发表于 2018-6-20 10:49
“把数据0X97写进入地址0X00处。如果你是SEG2SEG3组成的八个字节,地址就是0x02。”如果我是用SEG4,SEG5 ...

不是自动跳过,用连续写的模式,地址会自动+1,看我之前给你截的图就知道了。
你不用连续写的模式就可以用单数地址的,你需要仔细看下规格书,看完是很烦,不用看完只看你需要的那一部分就好了。
你最终效果还是显示数字。两次和一次有什么区别,关键显示对了就行了。你可以再想想如何优化。
凡事靠问虽然快,下次你还是不懂的,刚开始我也是像你这么过来的,建议你仔细看一遍规格书。
别人教给你的只能是思路,你吸收完转化成自己的,就是你自己的思想了,写程序还是得靠自己多去测试多去想。我之前有个项目也是用到1621,具体思路就是把它封装好。类似数码管的数字显示,用宏定义封装好0-9的数字,函数写好,直接调用就行了。

使用特权

评论回复
20
ddllxxrr| | 2018-6-20 14:52 | 只看该作者
只要找到对应的a,b,c,d,e,f,点的对应位置,自已编写就可以。为1为显示,为0为不显

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

288

帖子

1

粉丝