关于keil编译1602的错误

我从网上下载了LCD1602液晶显示块的程序,然后添加到为我的工程之后(我学的工程设计LCD1602 DS1302数字时钟),编译就出现了如果所示的错误,有没有大神知道这个怎么搞。我的使用的是51单片机图片说明

应该是你的头文件出错了吧,这些变量都没有定义。感觉是头文件的问题。你添加的文件是LCD1602.c,可是你mian函数里的头文件编写的是LCD1602.h

图片说明
点击option for target 把头文件路径加进去

LCD1602 的接口确定定义好了吗?

图片说明

下面是1602的程序:
#include "LCD1602.h"
#include "reg52.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

还有吗,1602的驱动代码可能有问题

把代码发过来,我给你调好 2031182047@qq.com

看上去头文件没有找到

报错没有定义,你的驱动程序不全,应该是没有都文件

头文件有问题,不仅要有头文件lcd.c还需要有lcd.h