标题: 为啥lcd1602一直显示白色方块 [打印本页]

作者: 满山屁股我最叼    时间: 2025-3-3 22:44
标题: 为啥lcd1602一直显示白色方块
一直显示白色方块
程序如下
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit E=P0^7;                //1602使能引脚
                //1602读写引脚        
sbit RS=P0^6;

uchar tab1[]=" www.51hei.com  ";  //要显示什么就在这儿改
uchar tab2[]="LCD1602 test ok!";  //[size=15.5555562973022px]要显示什么就在这儿改




void delay(uint del)   //延时1ms
      {
         uint i,j;
         for(i=0;i<del;i++)
            for(j=0;j<=168;j++);
      }
//---------------------------------------------------------
void writecmd(uchar com)  
       {
         E=0;       //为什么要写这一条呢,看看时序图就清楚了
         RS=0;

         P2 = com;   
         delay(2);  //延时一下会稳定很多,后面一条也是一样的
         E=1;  
         delay(2);
         E=0;
       }
//--------------------------------------------------------
void writedata(uchar dat)  
       {
         E=0;       //为什么要写这一条呢,看看时序图就清楚了
         RS=1;

         P2 = dat;   
         delay(2);  //延时一下会稳定很多,后面一条也是一样的
         E=1;  
         delay(2);
         E=0;
       }
//-----------------------------------------------------
void init(void)              
    {
       delay(15);
       writecmd(0x38);
       delay(5);
       writecmd(0x38);
       delay(5);
       writecmd(0x38);
       writecmd(0x38);
       writecmd(0x08);
       writecmd(0x01);
       writecmd(0x06);
       writecmd(0x0c);
     }
//----------------------------------------------------------

void main()
{         
           uchar j;
           init();
           writecmd(0x80);    //告诉液晶在哪个地方显示 (设置地址指针)//80H+00
           for(j=0;j<16;j++)  //有16个字符,要循环16次
           {
            writedata(tab1[j]);
                 delay(2);
           }
           writecmd(0x80+0x40); //再设置第二行的起始位置80H+40H

           for(j=0;j<16;j++)   //有16个字符,要循环16次
           { writedata(tab2[j]);
                  delay(2);
           }
           while(1);         //让液晶显示就一直停在这里。

}

$XL7OO$Q_OGJ9]@E3B3VF]R.png (85.38 KB, 下载次数: 0)

$XL7OO$Q_OGJ9]@E3B3VF]R.png

IMG_20250303_224311.jpg (4.05 MB, 下载次数: 0)

IMG_20250303_224311.jpg

作者: 满山屁股我最叼    时间: 2025-3-3 23:26
DB接的P2口

作者: WL0123    时间: 2025-3-4 06:04
虽然这个程序写的不算好但能用,楼主测试失败可能是软件的端口配置与硬件不符。程序中1602的数据口接P2,E=P0^7;, RS=P0^6;,RW没有使用,也就是硬件中RW接地。如果楼主的学习板上RW接在某端口,必须定义RW=Px^x;并在程序中赋值RW=0;。
作者: 满山屁股我最叼    时间: 2025-3-4 13:23
WL0123 发表于 2025-3-4 06:04
虽然这个程序写的不算好但能用,楼主测试失败可能是软件的端口配置与硬件不符。程序中1602的数据口接P2,E= ...

怎么修改

作者: 阿拉丁神灯23    时间: 2025-3-4 14:26
背光那个用滑动电阻调一下阻值
作者: cccc888    时间: 2025-3-4 17:35
代码没问题,补充一点,rs e 有没有上拉。

作者: WL0123    时间: 2025-3-5 07:12
发表于 2025-3-4 13:23
怎么修改

软件都是基于硬件条件编写的,不是随便找一个程序就能用。要根据手头实际电路做相应修改,你的原理图只是最小系统,没有画出与1602的连接关系。要按实际连接关系改。具体改法在前文已经说的很清除。
作者: man1234567    时间: 2025-3-7 13:04
一问不要在短时间内多次提
作者: zpxm01    时间: 2025-3-9 19:25
背光那个可调电阻调一下阻值即可。
作者: WL0123    时间: 2025-3-10 11:43
zpxm01 发表于 2025-3-9 19:25
背光那个可调电阻调一下阻值即可。

楼主软件写的是两排都要显示,如果是能显示但对比度调整不当会是两排白色方块。这种现象是典型的1602初始化失败的反映。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1