关于keil编译1602的错误 5C

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

10个回答

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

qq_42339492
qq_42339492 头文件的问题
一年多之前 回复
weixin_41892710
jeo3 回复yujunkan: LCD1602的那几个接口确定定义好了吗?
接近 2 年之前 回复
yujunkan
yujunkan 我也认为是头文件的问题,我点h文件也添加了,还是不行
接近 2 年之前 回复
weixin_42238795
weixin_42238795 应该还差死循环while(1)
接近 2 年之前 回复

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

yujunkan
yujunkan 大神,是添加头文件的文件夹吗
接近 2 年之前 回复

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

yujunkan
yujunkan 1602的文件我是从网上下载下来的,应该不会有问题吧
接近 2 年之前 回复

图片说明

yujunkan
yujunkan 回复weixin_41892710: 那应该改成什么呢,求指教,谢谢
接近 2 年之前 回复
weixin_41892710
jeo3 回复yujunkan: 头文件错了,不是这个
接近 2 年之前 回复
yujunkan
yujunkan 主函数中头文件是这样的
接近 2 年之前 回复

下面是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

yujunkan
yujunkan 回复weixin_41892710: 谢谢你了,解决我的问题
接近 2 年之前 回复
weixin_41892710
jeo3 前面要定义 sbit LCD1602_E=P0^7; sbit LCD1602_RS=P0^6; sbit LCD1602_RW=P0^5;
接近 2 年之前 回复
weixin_41892710
jeo3 前面定义加上 sbit LCD1602_E=P0^5;
接近 2 年之前 回复

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

yujunkan
yujunkan 就是1602驱动代码的问题
接近 2 年之前 回复

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

看上去头文件没有找到

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问