矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 7514|回复: 29

求LCD1602 四位驱动稳定代码

[复制链接]
     
发表于 2019-6-5 18:15:47 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
     
发表于 2019-6-5 18:48:15 | 显示全部楼层
xjw01老师的 LCR 电桥 程序中就有
回复 支持 反对

使用道具 举报

     
发表于 2019-6-5 19:22:17 | 显示全部楼层
是你的驱动速度有问题,延时要够长,电源电压要稳
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-6-5 19:36:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2019-6-5 19:39:34 | 显示全部楼层
矿坛铁粉 发表于 2019-6-5 19:36
7805稳压的,延迟也足够长了。

到XJW01老师帖子里,拿到后改一下就行了,好用极了。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-6-5 20:04:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2019-6-5 20:05:28 | 显示全部楼层
矿坛铁粉 发表于 2019-6-5 19:36
7805稳压的,延迟也足够长了。


这里就涉及到一个问题,1602 或者说 HD44780 的 4 位驱动原理你摸清楚了么?

一开始,HD44780 主控可能处于三种状态之一
1、8 位总线模式
2、4 位总线模式,等待输入第一个 4 位数据(高 4 位)
3、4 位总线模式,等待输入第二个 4 位数据(低 4 位)

4 位总线模式下,低 4 位悬空(默认下拉)或接地,恒为 0000,高 4 位接到总线。

开始写入第一个 4 位指令 0x03(0011)
如果主控处于 8 位总线模式,则认为写入了 00110000,此指令为设置总线为 8 位总线模式指令,因此还是 8 位总线不变
如果主控处于 4 位总线模式且等待输入第一个 4 位数据(高 4 位),那么输入了高 4 位的 0011,变为第三种状态
如果主控处于 4 位总线模式且等待输入第二个 4 位数据(低 4 位),则执行一个未知的指令(因为高 4 位不可知),变为第二种状态

然后写入第二个 4 位指令  0x03(0011)
第一状态还是不变
如果主控一开始处于状态 2,现在处于状态 3,那么写入的指令将主控至于 8 位总线模式
如果主控一开始处于状态 3,现在处于状态 2,那么写入了一个 0011 的高位指令

继续写入第三个 1 位指令 0x03(0011)
第一状态还是不变
如果主控一开始处于状态 2,在第二步中处于状态 3 并收到完整的指令变为 8 位模式,那么此时再收到高 4 位 0011 指令,则被认为收到完整的 00110000 指令,还是处于 8 位总线模式
如果主控一开始处于状态 3,在第二步中处于状态 2 并收到低 4 位指令 0011,则收到的总指令是 00110011,它还是将主控至于 8 位总线模式

至此,主控被恢复为 8 位总线模式,这是初始化 HD44780 至关重要的地方。完毕后,输入高位指令 0010,将主控至于 4 位总线模式,然后就可以按 4 位总线模式操作了。所以,总的顺序就是写入 0011,0011,0011,0010。由于写指令函数是按照 4 位总线模式编写的,总是一次写入两个 4 位(高位在前先写入,低位后写入),所以只要用写指令函数写入 0x33、0x32 就可以了。

最后写入 0x28,高位(0010)指令继续将主控至于 4 位总线模式不变,低位 1000 将主控至于 2 行、5*7 点的模式。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-6-6 17:28:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-6-8 07:31:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2019-6-8 08:15:56 | 显示全部楼层
矿坛铁粉 发表于 2019-6-8 07:31
你说的和楼上washu说的是一个事,我之前已经照做了。
我的电路是工频变压器整流后经220uf电容滤波,然后 ...

不能理解为什么用220uF电容给自己找大麻烦,用1000uF也不会差多少,那个效果差到天上去了。
回复 支持 反对

使用道具 举报

     
发表于 2019-6-8 08:25:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-6-8 10:04:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-6-8 10:07:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2019-6-8 10:27:09 | 显示全部楼层
矿坛铁粉 发表于 2019-6-8 10:07
这个说来话长,在调一个大系统的一部分,目前只接了单片机和1602,想着二者耗电都很小就暂时没焊主滤波电 ...

滤波电容的大小不但与电流有关,更多的与输入电压有关。一个芯片电流很小那是指平均值而言,其实电路中肯定有电容存在就是我们常说的分布电容,在电位跳变的过程中可能有很大的峰值电流,所以一定要有完善的滤波与考虑。完善电路肯定带来麻烦,不完善的电路会带来无穷无尽的麻烦,区别就在这里。
回复 支持 反对

使用道具 举报

     
发表于 2019-6-9 13:26:55 来自手机 | 显示全部楼层
有简单的八位驱动不用,非要费劲心机去解决四位驱动。用四位驱动1602显示屏刷新速度慢了,数字跳动时拖尾严重。为何不用IIC驱动,更节省数据线。其实用逻辑分析仪或者数字示波器很容易找到问题所在。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 05:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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