标题: 为什么我的单片机+LM016L的屏幕亮但是不显示字符呀? [打印本页]

作者: HB12345    时间: 2020-11-10 08:47
标题: 为什么我的单片机+LM016L的屏幕亮但是不显示字符呀?
下面是这个程序的c语言代码和proteus原理图,大家能看下为啥我的LM016L的屏幕亮但是不显示字符呀,我该怎么解决呢?

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="I LOVE MCU!";
uchar code table1[]="888888888";
sbit lcden=P3^4;                //液晶使能端:执行操作时为高脉冲(1),执行完后使其变为0
sbit lcdrs=P3^5;                //液晶数据命令选择端:选择命令为0,选择数据为1
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
void delay(uint x)
{
   uint i,j;
   for(i=x;i>0;i--)
       for(j=110;j>0;j--);
}

void write_com(uchar com)          //写指令(指令值的来源与作用均可在单片机课表P126找到)
{
        lcdrs=0;  //选择写命令模式
        P0=com;          //将要写的命令字送至数据总线上
        delay(5);        //延迟以待数据稳定
        lcden=1;         //让使能端为高脉冲, 执行操作
        delay(5);          //延时以待数据稳定
        lcden=0;          //使使能端为0结束高脉冲
}

void write_data(uchar date)                 //写数据(形式参数为date而不是data是因为data是关键字!)
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void init()                  //初始化函数
{
    dula=0;
        wela=0;
        lcden=0;                        //下面四个数据的值、作用的来源是单片机课表P126(如:0x38=0x00111000)
        write_com(0x38);   //设置16x2显示,5x7点阵,8位数据接口
        write_com(0x0c);   //设置开显示,不显示光标
        write_com(0x06);   //写一个字符后,地址指针加1
        write_com(0x01);   //显示清0,数据指针清0
}

void main()
{
   init();
   write_com(0x80);           //此命令是将数据指针定位在第一行第一个字处(来源是单片机课表P125页的表7.2.4:数据指针设置)
   for(num=0;num<11;num++)
   {
          write_data(table[num]);
          delay(5);
   }
   write_com(0x80+0x40);   //此命令是将数据指针定位在第二行第一个字处
   for(num=0;num<13;num++)
   {
          write_data(table1[num]);
          delay(5);
   }
   while(1);
}



proteus图.png (36.62 KB, 下载次数: 47)

proteus图.png

作者: weijoyer    时间: 2020-11-11 16:53
rw引脚不是接地的




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