找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2262|回复: 17
打印 上一主题 下一主题
收起左侧

LCD1602采用4线控制不成功,该如何排查错误

[复制链接]
跳转到指定楼层
楼主
使用8根数据线控制没问题,但是使用4根数据线控制的时候不成功,请问有知道是什么原因的吗?连线是高四位,发送的数据也是先发的高四位后发的低四位,初始化的时候也设置成了0x28(4线控制,2行显示)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-5-23 20:43 | 只看该作者
第一步要确定LCD的主控芯片是什么型号才能继续进行下去。
回复

使用道具 举报

板凳
ID:155507 发表于 2022-5-23 20:55 | 只看该作者
哦不是,是在Lcd1602_Write_Cmd(0x28);前面又加了Lcd1602_Write_Cmd(0x32);
回复

使用道具 举报

地板
ID:161164 发表于 2022-5-24 10:51 | 只看该作者
这是成功的初始化函数



上电之后要延时15ms才初始化

发送数据之间要40us延时,如
发(高位)
延时40us
发(低位)
延时40us

发送0x01命令后要延时1.7ms
回复

使用道具 举报

5#
ID:1028584 发表于 2022-5-24 21:50 | 只看该作者
angmall 发表于 2022-5-23 20:55
哦不是,是在Lcd1602_Write_Cmd(0x28);前面又加了Lcd1602_Write_Cmd(0x32);

我也看了个帖子说是要先发0x33,0x32然后再发0x28,0x0c啥的这些,最后确实也能控制了,但是我在指令集里没有找到32和33对应的指令,这两句指令是什么意思啊,另外好像不用发33也可以
回复

使用道具 举报

6#
ID:1028584 发表于 2022-5-24 21:52 | 只看该作者
lkc8210 发表于 2022-5-24 10:51
这是成功的初始化函数

为什么初始化之前要先发个02啊,我看02是光标归位啊
回复

使用道具 举报

7#
ID:1028584 发表于 2022-5-24 21:54 | 只看该作者
Hephaestus 发表于 2022-5-23 20:43
第一步要确定LCD的主控芯片是什么型号才能继续进行下去。

手边没有实物,只能仿真。查了下,proteus中的LM016L液晶显示的主控芯片是HD44780
回复

使用道具 举报

8#
ID:161164 发表于 2022-5-24 23:51 | 只看该作者
chuangyu1897 发表于 2022-5-24 21:52
为什么初始化之前要先发个02啊,我看02是光标归位啊

由于LCD复位后默认是8线输入,
指令一定要写满8个位。
所以其实在初始化的第一条指令,
只要后4位输入“0010”(2),
就初始化设置成了4线模式

出处:<<求助:关于4线接法的LCD1602初始化函数的困惑--4楼>>
回复

使用道具 举报

9#
ID:149451 发表于 2022-5-25 06:53 | 只看该作者
chuangyu1897 发表于 2022-5-24 21:50
我也看了个帖子说是要先发0x33,0x32然后再发0x28,0x0c啥的这些,最后确实也能控制了,但是我在指令集里 ...

我用过一个4pin的驱动,它的初始化如下(注释是原文未修改,它标明了原因):
void LCD_init(void)
{
        delay(50);
        LCD_en_com(0x33);//原来1602初始化成4位数据线之前必需先初始化成8位(此时命令发送方式是8位格式,但数据线只需接4位)
        delay(10);
        LCD_en_com(0x32);//然后再改到4位线宽,这样初始化才稳定
        delay(10);
        LCD_en_com(0x28);//四线模式设置
        delay(10);
        LCD_en_com(0x0c);//显示开--对应开关显示控制指令
        delay(10);
        CLEARSCREEN;
        delay(30);
}

回复

使用道具 举报

10#
ID:824490 发表于 2022-5-25 09:17 | 只看该作者
本帖最后由 名字不是重点 于 2022-5-25 09:45 编辑
chuangyu1897 发表于 2022-5-24 21:50
我也看了个帖子说是要先发0x33,0x32然后再发0x28,0x0c啥的这些,最后确实也能控制了,但是我在指令集里 ...

你认真看一下手册就能明白,不发0x33/0x32,直接发0X28,多发2次效果也是一样的,相同功能的指令,能覆盖以前的指令。生效的是最后一条。哪怕在发0X28之前,空等40ms一样可以,只要等驱动芯片复位初始化过后,啥姿势你说了算
回复

使用道具 举报

11#
ID:824490 发表于 2022-5-25 09:39 | 只看该作者
lkc8210 发表于 2022-5-24 23:51
由于LCD复位后默认是8线输入,
指令一定要写满8个位。
所以其实在初始化的第一条指令,

不全是这样的。
1602的指令数据判断,从DB7-->DB0,从高位到低位,读到第一位“1”则开始:
DB7=1,则表示是<设置DDRAM地址>,而DB6~DB0则为要设置的DDRAM地址;
DB6=1,则表示是<设置CGRAM地址>,而DB5~DB0则为要设置的CGRAM地址;
DB5=1,则表示是<设置功能指令>,而DB4=1是8线,DB4=0为4线;DB3为显示多少行;DB2字体选择,DB1/DB0则无所谓了;
DB4=1,则表示是<光标设置指令>,从略。。。

所以用4线接线时,才要求必需从高4位(DB7~DB4)输入,而指令0010xxxx,“x”可以任意电平,最终都是4线接口。
回复

使用道具 举报

12#
ID:824490 发表于 2022-5-25 09:54 | 只看该作者



这是原资料。
回复

使用道具 举报

13#
ID:161164 发表于 2022-5-25 10:40 | 只看该作者
名字不是重点 发表于 2022-5-25 09:39
不全是这样的。
1602的指令数据判断,从DB7-->DB0,从高位到低位,读到第一位“1”则开始:
DB7=1,则表 ...

即是说,直接发 28 0C 06 01就会被解读成
2 //进入4线
80 //Set DDRAM 0x00
C0 //Set DDRAM 0x40
60 //Set CGRAM 0x20
10 //Set Display Shift +  Left Shift
回复

使用道具 举报

14#
ID:824490 发表于 2022-5-25 10:50 | 只看该作者
lkc8210 发表于 2022-5-25 10:40
即是说,直接发 28 0C 06 01就会被解读成
2 //进入4线
80 //Set DDRAM 0x00

你试一下
回复

使用道具 举报

15#
ID:383215 发表于 2022-5-26 14:22 | 只看该作者
lkc8210 发表于 2022-5-24 10:51
这是成功的初始化函数

按照你说的发送02、28、0c、06、01对LCD1602做4线初始化,无论如何都无法成功,这个问题我也很感兴趣,百度了一个网页,对这个问题说的很清楚,首先要初始化为8位,再改为4位,这样初始化才更稳定,结果的确如此,发送33、32、28、0c、01,立即就成功了。

由于我的LCD1602是用两片CD4094扩展的I/O口驱动,懒得拆下来用杜邦线连接,就用CD4094测试4线接口,成功之后以后只用一片CD4094就可以驱动LCD1602,结果走了弯路,折腾了一、两天,走弯路的原因是没有把低四位置1,低四位置1之后,立即成功。这个问题仅仅是我用两片CD4094驱动LCD1602才存在的问题,低四位引脚悬空就不存在这个问题,LCD1602的8位数据接口好像有上拉电阻。

LCD1602用4线驱动,一共还要6个I/O口才能驱动,意义不是很大,我用两片CD4094驱动,把oe端接电源正,只需要三个I/O口就可以驱动,相当于用标准的SPI接口驱动,比IIC的PCF8574简单,速度更快,成本也低,4线驱动,只用一片CD4094,成本更低。PCF8574是具有中断监控的双向I/O口扩展IC,价格较高,手头上正好有一片PCF8574,改天画几个板测试PCF8574、CD4094扩展4位驱动LCD1602。
4线驱动LCD1602,这个网页说的很详细https://blog.csdn.net/feinifi/article/details/122047239

回复

使用道具 举报

16#
ID:155507 发表于 2022-5-26 18:25 | 只看该作者
用片HC595扩展4位驱动LCD1602


http://www.51hei.com/bbs/forum.p ... 5491&pid=978646
回复

使用道具 举报

17#
ID:383215 发表于 2022-5-26 19:33 | 只看该作者
angmall 发表于 2022-5-26 18:25
用片HC595扩展4位驱动LCD1602

从来没有想过同时驱动两片以上的LCD1602,一片就够我用了,用习惯了CD4094,74HC595还没有用过,感觉74HC595更好布线,也用74HC595画个板,哪个好用用哪个。
回复

使用道具 举报

18#
ID:151348 发表于 2022-5-27 08:29 | 只看该作者
kmsj 发表于 2022-5-26 14:22
按照你说的发送02、28、0c、06、01对LCD1602做4线初始化,无论如何都无法成功,这个问题我也很感兴趣,百 ...

学习了,原来要先初始化为8位,再改为4位。之前一直用4线驱动1602,确实存在初始化不成功的现象,多次重启才行。有空试试你提供的方法。另外注意这个PCF8574,后缀不同,地址可能不一样
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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