lcd屏幕只显示一排黑格,仿真没问题

这是lcd程序

#include"lcd.h"

 

/*******************************************************************************

* 函 数 名 : Lcd1602_Delay1ms

* 函数功能 : 延时函数,延时1ms

* 输 入 : c

* 输 出 : 无

* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。

*******************************************************************************/

 

void Lcd1602_Delay1ms(uint c) //误差 0us

{

    uchar a,b;

 for (; c>0; c--)

 {

   for (b=199;b>0;b--)

   {

     for(a=1;a>0;a--);

   }      

 }

     

}

 

/*******************************************************************************

* 函 数 名 : LcdWriteCom

* 函数功能 : 向LCD写入一个字节的命令

* 输 入 : com

* 输 出 : 无

*******************************************************************************/

#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时

void LcdWriteCom(uchar com) //写入命令

{

 LCD1602_E = 0; //使能

 LCD1602_RS = 0; //选择发送命令

 LCD1602_RW = 0; //选择写入

 

 LCD1602_DATAPINS = com; //放入命令

 Lcd1602_Delay1ms(1); //等待数据稳定

 

 LCD1602_E = 1; //写入时序

 Lcd1602_Delay1ms(5); //保持时间

 LCD1602_E = 0;

}

#else 

void LcdWriteCom(uchar com) //写入命令

{

 LCD1602_E = 0; //使能清零

 LCD1602_RS = 0; //选择写入命令

 LCD1602_RW = 0; //选择写入

 

 LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改

 Lcd1602_Delay1ms(1);

 

 LCD1602_E = 1; //写入时序

 Lcd1602_Delay1ms(5);

 LCD1602_E = 0;

 

// Lcd1602_Delay1ms(1);

 LCD1602_DATAPINS = com << 4; //发送低四位

 Lcd1602_Delay1ms(1);

 

 LCD1602_E = 1; //写入时序

 Lcd1602_Delay1ms(5);

 LCD1602_E = 0;

}

#endif

/*******************************************************************************

* 函 数 名 : LcdWriteData

* 函数功能 : 向LCD写入一个字节的数据

* 输 入 : dat

* 输 出 : 无

*******************************************************************************/     

#ifndef LCD1602_4PINS     

void LcdWriteData(uchar dat) //写入数据

{

 LCD1602_E = 0; //使能清零

 LCD1602_RS = 1; //选择输入数据

 LCD1602_RW = 0; //选择写入

 

 LCD1602_DATAPINS = dat; //写入数据

 Lcd1602_Delay1ms(1);

 

 LCD1602_E = 1; //写入时序

 Lcd1602_Delay1ms(5); //保持时间

 LCD1602_E = 0;

}

#else

void LcdWriteData(uchar dat) //写入数据

{

 LCD1602_E = 0; //使能清零

 LCD1602_RS = 1; //选择写入数据

 LCD1602_RW = 0; //选择写入

 

 LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改

 Lcd1602_Delay1ms(1);

 

 LCD1602_E = 1; //写入时序

 Lcd1602_Delay1ms(5);

 LCD1602_E = 0;

 

 LCD1602_DATAPINS = dat << 4; //写入低四位

 Lcd1602_Delay1ms(1);

 

 LCD1602_E = 1; //写入时序

 Lcd1602_Delay1ms(5);

 LCD1602_E = 0;

}

#endif

/*******************************************************************************

* 函 数 名 : LcdInit()

* 函数功能 : 初始化LCD屏

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/     

#ifndef LCD1602_4PINS

void LcdInit() //LCD初始化子程序

{

  LcdWriteCom(0x38); //开显示

 LcdWriteCom(0x0c); //开显示不显示光标

 LcdWriteCom(0x06); //写一个指针加1

 LcdWriteCom(0x01); //清屏

 LcdWriteCom(0x80); //设置数据指针起点

}

#else

void LcdInit() //LCD初始化子程序

{

 LcdWriteCom(0x32); //将8位总线转为4位总线

 LcdWriteCom(0x28); //在四位线下的初始化

 LcdWriteCom(0x0c); //开显示不显示光标

 LcdWriteCom(0x06); //写一个指针加1

 LcdWriteCom(0x01); //清屏

 LcdWriteCom(0x80); //设置数据指针起点

}

#endif

 

解决了吗,我也是相同的问题,不知道怎么办

你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

您可以点击问题下方的【编辑】,进行补充修改问题。