找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10058|回复: 30
收起左侧

LCD1602上电后只显示第一排的方块,初始化应该没问题

  [复制链接]
ID:572374 发表于 2019-8-21 11:41 | 显示全部楼层 |阅读模式
请问大佬们,为什么液晶上电后只显示第一排的方块。初始化应该没问题,下面代码,帮帮忙,急!!!
7f25e675c13b00635740c84498d6d63.jpg

原理图

原理图

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<string.h>

  3. sbit rs=P0^7;
  4. sbit rw=P0^6;
  5. sbit en=P0^5;

  6. char t0[]="HELLO WORLD!";
  7. char t1[]="HELLO NEUSOFT!";
  8. int i;

  9. void delay(int z);
  10. void write_cmd(char cmd);
  11. void write_data(char dt);
  12. void init();

  13. void main()
  14. {
  15.         init();
  16. //        write_data('1');
  17.         for(i=0;i<strlen(t0);i++)
  18.         {
  19.                 write_data(t0[i]);
  20.                 delay(20);
  21.         }
  22.         while(1);
  23. }

  24. void init()
  25. {
  26.         write_cmd(0x38);
  27.         write_cmd(0x0c);
  28.         write_cmd(0x06);
  29.         write_cmd(0x01);
  30.         write_cmd(0x80);}

  31. void write_data(char dt)
  32. {
  33.          
  34.         rs=1;
  35.         rw=0;
  36.         P2=dt;

  37.         delay(5);
  38.         en=1;
  39.         delay(5);
  40.         en=0;
  41. }

  42. void write_cmd(char cmd)
  43. {
  44.         
  45.         rs=0;
  46.         rw=0;
  47.         P2=cmd;

  48.         delay(5);
  49.         en=1;
  50.         delay(5);
  51.         en=0;
  52. }

  53. void delay(int z)
  54. {
  55.         int x,y;
  56.         for(x=z;x>0;x--)
  57.                 for(y=110;y>0;y--);
  58. }
复制代码


回复

使用道具 举报

ID:307020 发表于 2019-8-21 12:30 | 显示全部楼层
调LCD的驱动电压试试没有?就是原理图中的电位器,管对比度的,对比度过大就会全是小方块。
回复

使用道具 举报

ID:213173 发表于 2019-8-21 12:59 | 显示全部楼层
程序没有问题只能说没有语法和逻辑问题,不代表没有时间问题。主时钟频率和延时函数对LCD1602驱动码的时序影响很大。这是典型的初始化失败的现象。
回复

使用道具 举报

ID:10193 发表于 2019-8-21 13:25 | 显示全部楼层
第一行和第二行的地址是不一样的,具体请看1602的手册
回复

使用道具 举报

ID:267330 发表于 2019-8-21 14:39 | 显示全部楼层
有显示,不过对比度调错了,调节R15
回复

使用道具 举报

ID:290170 发表于 2019-8-21 14:42 | 显示全部楼层
void main() {         init(); //        write_data('1');          for(i=0;i<strlen(t0);i++)         {                 write_data(t0[i]);                 delay(20);         }         while(1); }
回复

使用道具 举报

ID:290170 发表于 2019-8-21 14:43 | 显示全部楼层
你程序只让第一行显示 第二行当然不会显示啦
回复

使用道具 举报

ID:572374 发表于 2019-8-21 18:26 | 显示全部楼层
wj_yuq 发表于 2019-8-21 12:30
调LCD的驱动电压试试没有?就是原理图中的电位器,管对比度的,对比度过大就会全是小方块。

调过了,都拧坏了还是一样...
回复

使用道具 举报

ID:572374 发表于 2019-8-21 18:28 | 显示全部楼层
gb302 发表于 2019-8-21 13:25
第一行和第二行的地址是不一样的,具体请看1602的手册

这个我知道,我是想让第一行显示hello world,我在模拟电路上试过是可以的,但是用在这就不行了
回复

使用道具 举报

ID:572374 发表于 2019-8-21 18:29 | 显示全部楼层
999994 发表于 2019-8-21 14:42
void main() {         init(); //        write_data('1');          for(i=0;i

??请问你这是什么意思,看不懂...
回复

使用道具 举报

ID:572374 发表于 2019-8-21 18:30 | 显示全部楼层
999994 发表于 2019-8-21 14:43
你程序只让第一行显示 第二行当然不会显示啦

这个当然知道鸭,我代码就是只让第一行显示hello world
回复

使用道具 举报

ID:572374 发表于 2019-8-21 18:30 | 显示全部楼层
本帖最后由 Conlin不喝饮料 于 2019-8-21 18:47 编辑
wulin 发表于 2019-8-21 12:59
程序没有问题只能说没有语法和逻辑问题,不代表没有时间问题。主时钟频率和延时函数对LCD1602驱动码的时序 ...

不是很懂...能再准确的说一下吗,请问我应该怎么样初始化...
回复

使用道具 举报

ID:235543 发表于 2019-8-21 20:33 | 显示全部楼层
将第一行程序显示位置的代码改一下,放到第二行试一试
回复

使用道具 举报

ID:531987 发表于 2019-8-21 22:12 | 显示全部楼层
你会不会是插反了。。。,我有块一样的板
回复

使用道具 举报

ID:531987 发表于 2019-8-21 22:12 | 显示全部楼层
1602反过来插试试
回复

使用道具 举报

ID:531987 发表于 2019-8-21 22:15 | 显示全部楼层
而且这个板数码管跟1602不能同时用,用的时候要拔跳线帽的
回复

使用道具 举报

ID:56665 发表于 2019-8-22 08:58 | 显示全部楼层
1602插反了不会烧,但是输入电流会变大,模块发热,这是我曾经碰到过的。
回复

使用道具 举报

ID:572374 发表于 2019-8-22 09:03 | 显示全部楼层
107056 发表于 2019-8-21 22:12
你会不会是插反了。。。,我有块一样的板

没有,我也试过反着插,你有没有测试程序,能不能发给我
回复

使用道具 举报

ID:572374 发表于 2019-8-22 09:04 | 显示全部楼层
107056 发表于 2019-8-21 22:15
而且这个板数码管跟1602不能同时用,用的时候要拔跳线帽的

对,不能同时使用
回复

使用道具 举报

ID:572374 发表于 2019-8-22 09:09 | 显示全部楼层
107056 发表于 2019-8-21 22:12
1602反过来插试试

你是反着插的吗,你的可以用吗?我太难了
回复

使用道具 举报

ID:214223 发表于 2019-8-22 09:43 | 显示全部楼层
最好和你的数码管分开使用,不然会有影响的
回复

使用道具 举报

ID:572374 发表于 2019-8-22 13:35 | 显示全部楼层
Host 发表于 2019-8-22 09:43
最好和你的数码管分开使用,不然会有影响的

这个数码管关不了,他有一些管口和液晶共用
回复

使用道具 举报

ID:531987 发表于 2019-8-22 15:38 | 显示全部楼层
Conlin不喝饮料 发表于 2019-8-22 13:35
这个数码管关不了,他有一些管口和液晶共用

你J1跳线帽拔了数码管跟1602应该就不会共用了
回复

使用道具 举报

ID:366214 发表于 2019-8-23 14:57 | 显示全部楼层
我说一下自己的看法啊,lcd1602不都是先写命令,然后再写数据的吗,main函数里面你没有写命令,你可以试一下,然后你确定了你的开发板与那个图是对应的吗
回复

使用道具 举报

ID:572374 发表于 2019-9-4 14:22 | 显示全部楼层
韦孟祥 发表于 2019-8-23 14:57
我说一下自己的看法啊,lcd1602不都是先写命令,然后再写数据的吗,main函数里面你没有写命令,你可以试一 ...

命令已经在初始化函数里面写了噢,这个图也是对的,我要裂开来了....
回复

使用道具 举报

ID:572374 发表于 2019-9-4 14:35 | 显示全部楼层
107056 发表于 2019-8-22 15:38
你J1跳线帽拔了数码管跟1602应该就不会共用了

拔了跳线帽确实数码管没显示了,但是液晶还是只是上电状态...太难了
回复

使用道具 举报

ID:575597 发表于 2020-12-1 11:44 | 显示全部楼层
同样的问题,想问问你解决了吗= =
回复

使用道具 举报

ID:517951 发表于 2020-12-2 09:10 | 显示全部楼层
初始化代码没有执行到1602就会导致第一行显示全黑,需要检查RW,E,rs,P2是否与单片机引脚可靠连接,且51单片机的P0口必须要有上拉10k电阻,3条控制信号线接到了P0上了,没有10K电阻就会有问题。
回复

使用道具 举报

ID:429356 发表于 2020-12-2 09:51 | 显示全部楼层
你这是调的过亮了。
回复

使用道具 举报

ID:839796 发表于 2020-12-13 23:16 | 显示全部楼层
同样问题,想问问解决了没
回复

使用道具 举报

ID:859795 发表于 2020-12-14 00:45 来自手机 | 显示全部楼层
volarge current is low, repair your IC
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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