矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 矿坛铁粉

求LCD1602 四位驱动稳定代码

[复制链接]
     
 楼主| 发表于 2019-6-9 18:52:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2019-6-10 10:20:59 | 显示全部楼层
清风碧雪 发表于 2019-6-9 13:26
有简单的八位驱动不用,非要费劲心机去解决四位驱动。用四位驱动1602显示屏刷新速度慢了,数字跳动时拖尾严重。为何不用IIC驱动,更节省数据线。 ...


胡扯!

1、HD44780 写一次数据最小时间是 1us,也就是说同样一个显示数据,8 位总线需要 1us 写入,4 位需要 2us 而已。哪怕写完 1602 的 32 个显示位,也就是 64us,1 秒可以写 15625 次,远高于液晶本身的刷新率。

所以 4 位总线模式根本不会导致“显示屏刷新速度慢了,数字跳动时拖尾严重”问题,拖尾就是液晶本身特性,用 8 位总线也一样。

2、IIC 总线速度最高 400k,即使不考虑地址问题,写一个 8 位数据需要 10 个时钟周期,也就也是 40k 的速度,写完 1602 的 32 个显示位就是 1.6ms,一秒钟只能写 62.5 次,速度远低于 4 位总线模式。

3、我前面说过,HD44780 初次上电时,主控可能处于 1、8 位总线模式;2、4 位总线,输入高 4 位;3、4 位总线,输入低 4 位 的三种状态之一,因此即使使用 8 位总线模式,也必须解决这个问题,确保可靠将 HD44780 复位到 8 位总线模式才行,不存在 8 位总线模式更简单的区别。

结论是你根本没用过 HD44780 的 1602 LCD,只凭想象胡扯!
回复 支持 反对

使用道具 举报

     
发表于 2019-7-21 01:21:10 | 显示全部楼层
washu 发表于 2019-6-10 10:20
胡扯!

1、HD44780 写一次数据最小时间是 1us,也就是说同样一个显示数据,8 位总线需要 1us 写入, ...

您试试,即使在八位输入数据状态下,使能高低电平变化不延时毫秒级,1602会正常显示?另外1602液晶屏未必都用HD47780,手册上给出的都是us级,但实际用单片机控制时,就不是那么回事了。1602在八位状态下对读取时序要求还低些,差点都能工作。四位数据输入或读取时,使能端高低电平变化延时差1ms都不能正常工作。别总那手册上数据说事,不同厂家的1602还是有很大差异的。看过本坛有关1602四线时的讨论,那根本就是扯,这几天有闲工夫特意验证了一下所谓通用版的1602四线输入控制,用了STC15W408AS 20引脚的单片机一组I/O口来控制,只用到了七个,还剩余一个,效果还可以,但显示速度没有八位输入数据时快,主要是两次写入数据间隔需要延时几毫秒,这个原因拖累了显示速度,不过结果还可以接受。另外很多书上对于1602功能设置指令的DL数据接口宽度标志是高电平还是低电平是有错误的,对于四位状态只设置成0X28这没错,但前面还需加一条指令才可以。
回复 支持 反对

使用道具 举报

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

使用道具 举报

     
发表于 2019-10-4 21:54:59 | 显示全部楼层
胡扯不胡扯从程序的延时就可以看出四线与八线速度上的差别,如果单纯从显示来说,四线时可以满足显示要求,这要看程序怎么编写,硬件如何链接。如果数据与控制用不同组的I/O口控制,刷新速度或许您感觉不出来。比较一下才会知道。
回复 支持 反对

使用道具 举报

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

使用道具 举报

     
发表于 2019-10-5 12:16:14 | 显示全部楼层
控制端使能我都延时1微妙,程序运行妥妥的
回复 支持 反对

使用道具 举报

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

使用道具 举报

     
发表于 2019-10-5 16:12:44 | 显示全部楼层
矿坛铁粉 发表于 2019-10-5 15:09
我没有做忙检测,开始我是延30几个微妙,发现有的屏会花,延到40到目前还没发现问题。手册里说不做忙检测 ...

控制芯片1us是没有问题的,写液晶需要等待时间的,估计没加足时间引起花屏的
回复 支持 反对

使用道具 举报

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

使用道具 举报

     
发表于 2019-10-5 16:29:21 | 显示全部楼层
矿坛铁粉 发表于 2019-10-5 16:15
对,就是写显存,延不到40微秒有时候花,控制没事儿。
  1. /***********************************************************************
  2. *        1602写指令或写数据
  3. *        write_rs=0写命令,write_re=1写数据
  4. ***********************************************************************/
  5. void write_com_data(unsigned char write_rs,unsigned char dat)       
  6. {
  7.         if(write_rs==0)
  8.         port &=~ (1<<rs);        //写命令
  9.         else
  10.         port |= (1<<rs);        //写数据
  11.         _delay_us(1);
  12.         port &= 0xf0;                //清4位数据总线
  13.         port |= (dat>>4);        //输出高4位
  14.         port |= (1<<e);                //e=1
  15.         _delay_us(1);       
  16.         port &=~ (1<<e);        //e=0

  17.         port &= 0xf0;
  18.         port |= (dat&0x0f);        //输出低4位
  19.         port |= (1<<e);                //e=1
  20.         _delay_us(1);       
  21.         port &=~ (1<<e);        //e=0
  22.         _delay_us(50);
  23. }
复制代码

这是我的程序。

对的,这样想法就统一了,小于30us开始出现花屏,我保险用了50us延时,太大1602刷新一次时间过长,其实Proteus仿真也能看出问题
回复 支持 反对

使用道具 举报

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

使用道具 举报

     
发表于 2019-10-5 16:45:15 | 显示全部楼层
矿坛铁粉 发表于 2019-10-5 16:32
要说图形屏能看出4线比8线慢我信,1602这种字符屏,全屏刷新一次也传输不了多少数据,即便是用51也慢不到 ...

对,不管是 4 位还是 8 位模式,其实这个 40us 延迟卡在这里,所以速度都是差不多的 写完一个 1602 大概都是 1 毫秒多,不管 4 位还是 8 位模式。

而且,1 毫秒多可以写完一个 1602,这个速度人眼根本分辨不过来

btw. 我说那个不是用巫妖写 1602,而是有人用巫妖做了一个 HD44780 指令兼容的 1602(或者 1201)...当然屏幕不是 LCD,是 VFD 或别的玩意那种。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

蒙公网安备 15040402000005号

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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