找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1400|回复: 9
收起左侧

求助:LCD1602显示程序4个警告,搞不明白。

[复制链接]
ID:253767 发表于 2023-1-19 13:56 | 显示全部楼层 |阅读模式

1、警告原文:1602.c(178):warning C206: 'LCD1602Init': missing function-prototype
       译文:1602.c178):警告C206:LCD1602Unit”:缺少函数原型
函数原型是
void LCD1602Init(void)
{
  LCD1602ClearScreen( );
  LCD1602WriteCommand(LCD1602_DATA_MODE);  //显示模式设置,设置16x2显示,5x7点阵,
                                                                          //8位数据接口
  LCD1602WriteCommand(LCD1602_OPEN_SCREEN); //开显示
  LCD1602WriteCommand(LCD1602_DISP_ADDRESS); //起始显示地址
  LCD1602ClearScreen( );
}

但警告:LCD1602Unit”:缺少函数原型
而程序中并没有LCD1602Unit”这个函数。


2、*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?LCD1602CLEARSCREEN?1602
译文:***警告L16:未调用的段,覆盖过程忽略
段:?公共关系?lcd1602透明屏幕?1602


3、*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  LCD1602INIT
    MODULE:  .\Objects\1602.obj (1602)
译文:***警告L1:未解析的外部符号
    符号:LCD1602INIT
    模块:\对象\1602.obj(1602)


4、*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  LCD1602INIT
    MODULE:  .\Objects\1602.obj (1602)
    ADDRESS: 0861H
译文:***警告L2:引用未解析的外部
    符号:LCD1602INIT
    模块:\对象\1602.obj(1602)
    地址:0861H










这是一个LCD1602显示程序,其中用LS164进行IO扩展。


原程序全文如下 :
#include <reg51.h>
#include <intrins.h>
sbit        P0_4=0x84;      
sbit        P0_5=0x85;
sbit        P0_0=0x80;      
sbit        P0_1=0x81;
sbit        P0_2=0x82;

/*******************************************
*        大量宏定义,便于代码移植和阅读
*******************************************/
#define NOP()          _nop_()
#define HIGH              1
#define LOW                0
#define LS164_DATA(x)         {if((x))P0_4=1;else P0_4=0;}
#define LS164_CLK(x)         {if((x))P0_5=1;else P0_5=0;}
#define LCD1602_LINE1         0
#define  LCD1602_LINE2         1
#define  LCD1602_LINE1_HEAD     0x80
#define  LCD1602_LINE2_HEAD     0xC0
#define  LCD1602_DATA_MODE     0x38
#define  LCD1602_OPEN_SCREEN    0x0C
#define  LCD1602_DISP_ADDRESS   0x80
#define  LCD1602_RS(x)         {if ( (x) ) P0_0=1; else P0_0=0;}    //RS引脚控制
#define  LCD1602_RW(x)         {if ( (x) ) P0_1=1; else P0_1=0;}    //RW引脚控制
#define  LCD1602_EN(x)         {if ( (x) ) P0_2=1; else P0_2=0;}    //EN引脚控制
#define  LCD1602_PORT         LS164Send                           //发送数据
/*******************************************
*函数名称:DelayNus
*输    入:t延时时间
*输    出:无
*说    明:微秒级延时
*******************************************/
void DelayNus(unsigned int t)
{
  unsigned int d=0;
  d=t;
  do
  {
                NOP();
        }
        while(--d>0);
}
/*******************************************
*函数名称:LS164Send
*输    入:byte写发送的字节
*输    出:无
*说    明:74LS164发送数据
*******************************************/
void LS164Send(unsigned char byte)
{
unsigned char j;
for(j=0;j<=7;j++)
{
if (byte&(1<<(7-j)))
{
LS164_DATA(HIGH);
}
else
{
LS164_DATA(LOW);
}
LS164_CLK(LOW);
LS164_CLK(HIGH);
}
}
/*******************************************
*函数名称: LCD1602WriteByte
*输            入:byte要写入的字节
*输     出:无
*说     明:LCD1602写字节
*******************************************/
void LCD1602WriteByte(unsigned char byte)
{
LCD1602_PORT(byte);
LCD1602_RS(HIGH);
LCD1602_RW(LOW);
LCD1602_EN(LOW);
DelayNus(50);
LCD1602_EN(HIGH);
}
/*******************************************
*函数名称:LCD1602WriteCommand
*输    入:command要写入的命令
*输    出:无
*说    明:LCD1602写命令
*******************************************/
void LCD1602WriteCommand(unsigned char command)
{
LCD1602_PORT(command);
LCD1602_RS(LOW);
LCD1602_RW(LOW);
LCD1602_EN(LOW);
DelayNus(50);
LCD1602_EN(HIGH);
}
/*******************************************
*函数名称:LCD1602SetXY
*输    入:x横坐标y纵坐标
*输    出:无
*说    明:LCD1602设置坐标
*******************************************/
void LCD1602SetXY(unsigned char x,unsigned char y)
{
unsigned char address;
if(y==LCD1602_LINE1)
{
address=LCD1602_LINE1_HEAD+x;
}
else
{
address=LCD1602_LINE2_HEAD+x;
}
LCD1602WriteCommand(address);
}
/*******************************************
*函数名称:LCD1602PrintfString
*输    入:x横坐标y纵坐标s字符串
*输    出:无
*说    明:LCD1602打印字符串
*******************************************/
void LCD1602PrintfString(unsigned char x,unsigned char y,unsigned char *s)
{
LCD1602SetXY(x,y);
while(s && *s)
{
LCD1602WriteByte(*s);
s++;
}
}
/*******************************************
*函数名称:LCD1602ClearScreen
*输    入:无
*输    出:无
*说    明:LCD1602清屏
*******************************************/
void LCD1602LM016LClearScreen(void)
{
LCD1602WriteCommand(0x01);
DelayNus(50);
}
/*******************************************
*函数名称:LCD1602Init
*输    入:无
*输    出:无
*说    明:LCD1602初始化
/ *******************************************
void LCD1602Init(void)
{
LCD1602ClearScreen( );
LCD1602WriteCommand(LCD1602_DATA_MODE);  //显示模式设置,设置16x2显示,5x7点阵,
//8位数据接口
LCD1602WriteCommand(LCD1602_OPEN_SCREEN); //开显示
LCD1602WriteCommand(LCD1602_DISP_ADDRESS); //起始显示地址
LCD1602ClearScreen( );
}
/*******************************************
*函数名称:PortInit
*输    入:无
*输    出:无
*说    明:I/O口初始化
*******************************************/
void PortInit(void)
{
P0=P1=P2=P3=0xFF;
    }
/*******************************************
*函数名称:main
*输    入:无
*输    出:无
*说    明:函数主体
*******************************************/
void main(void)
{
PortInit( );
LCD1602Init();
LCD1602PrintfString(0,LCD1602_LINE1,"0123456789");
LCD1602PrintfString(0,LCD1602_LINE2,"ABCDEFGHIJ");
while(1)
{
;     //空操作
}
}


LCD1602

LCD1602
回复

使用道具 举报

ID:155507 发表于 2023-1-21 12:50 | 显示全部楼层
给你改了,对比一下就知道哪里错了。

  1. //这是一个LCD1602显示程序,其中用LS164进行IO扩展。

  2. //原程序全文如下 :
  3. #include <reg51.h>
  4. #include <intrins.h>
  5. sbit        P0_4=0x84;      
  6. sbit        P0_5=0x85;
  7. sbit        P0_0=0x80;      
  8. sbit        P0_1=0x81;
  9. sbit        P0_2=0x82;

  10. /*******************************************
  11. *        大量宏定义,便于代码移植和阅读
  12. *******************************************/
  13. #define NOP()          _nop_()
  14. #define HIGH              1
  15. #define LOW                0
  16. #define LS164_DATA(x)         {if((x))P0_4=1;else P0_4=0;}
  17. #define LS164_CLK(x)         {if((x))P0_5=1;else P0_5=0;}
  18. #define LCD1602_LINE1         0
  19. #define  LCD1602_LINE2         1
  20. #define  LCD1602_LINE1_HEAD     0x80
  21. #define  LCD1602_LINE2_HEAD     0xC0
  22. #define  LCD1602_DATA_MODE     0x38
  23. #define  LCD1602_OPEN_SCREEN    0x0C
  24. #define  LCD1602_DISP_ADDRESS   0x80
  25. #define  LCD1602_RS(x)         {if ( (x) ) P0_0=1; else P0_0=0;}    //RS引脚控制
  26. #define  LCD1602_RW(x)         {if ( (x) ) P0_1=1; else P0_1=0;}    //RW引脚控制
  27. #define  LCD1602_EN(x)         {if ( (x) ) P0_2=1; else P0_2=0;}    //EN引脚控制
  28. #define  LCD1602_PORT         LS164Send                           //发送数据
  29. /*******************************************
  30. *函数名称:DelayNus
  31. *输    入:t延时时间
  32. *输    出:无
  33. *说    明:微秒级延时
  34. *******************************************/
  35. void DelayNus(unsigned int t)
  36. {
  37.   unsigned int d=0;
  38.   d=t;
  39.   do
  40.   {
  41.     NOP();
  42.   }
  43.   while(--d>0);
  44. }
  45. /*******************************************
  46. *函数名称:LS164Send
  47. *输    入:byte写发送的字节
  48. *输    出:无
  49. *说    明:74LS164发送数据
  50. *******************************************/
  51. void LS164Send(unsigned char byte)
  52. {
  53.         unsigned char j;
  54.         for(j=0;j<=7;j++)
  55.         {
  56.                 if (byte&(1<<(7-j)))
  57.                 {
  58.                         LS164_DATA(HIGH);
  59.                 }
  60.                 else
  61.                 {
  62.                         LS164_DATA(LOW);
  63.                 }
  64.                 LS164_CLK(LOW);
  65.                 LS164_CLK(HIGH);
  66.         }
  67. }
  68. /*******************************************
  69. *函数名称: LCD1602WriteByte
  70. *输            入:byte要写入的字节
  71. *输     出:无
  72. *说     明:LCD1602写字节
  73. *******************************************/
  74. void LCD1602WriteByte(unsigned char byte)
  75. {
  76.         LCD1602_PORT(byte);
  77.         LCD1602_RS(HIGH);
  78.         LCD1602_RW(LOW);
  79.         LCD1602_EN(LOW);
  80.         DelayNus(50);
  81.         LCD1602_EN(HIGH);
  82. }
  83. /*******************************************
  84. *函数名称:LCD1602WriteCommand
  85. *输    入:command要写入的命令
  86. *输    出:无
  87. *说    明:LCD1602写命令
  88. *******************************************/
  89. void LCD1602WriteCommand(unsigned char command)
  90. {
  91.         LCD1602_PORT(command);
  92.         LCD1602_RS(LOW);
  93.         LCD1602_RW(LOW);
  94.         LCD1602_EN(LOW);
  95.         DelayNus(50);
  96.         LCD1602_EN(HIGH);
  97. }
  98. /*******************************************
  99. *函数名称:LCD1602SetXY
  100. *输    入:x横坐标y纵坐标
  101. *输    出:无
  102. *说    明:LCD1602设置坐标
  103. *******************************************/
  104. void LCD1602SetXY(unsigned char x,unsigned char y)
  105. {
  106.         unsigned char address;
  107.         if(y==LCD1602_LINE1)
  108.         {
  109.                 address=LCD1602_LINE1_HEAD+x;
  110.         }
  111.         else
  112.         {
  113.                 address=LCD1602_LINE2_HEAD+x;
  114.         }
  115.         LCD1602WriteCommand(address);
  116. }
  117. /*******************************************
  118. *函数名称:LCD1602PrintfString
  119. *输    入:x横坐标y纵坐标s字符串
  120. *输    出:无
  121. *说    明:LCD1602打印字符串
  122. *******************************************/
  123. void LCD1602PrintfString(unsigned char x,unsigned char y,unsigned char *s)
  124. {
  125.         LCD1602SetXY(x,y);
  126.         while(s && *s)
  127.         {
  128.                 LCD1602WriteByte(*s);
  129.                 s++;
  130.         }
  131. }
  132. /*******************************************
  133. *函数名称:LCD1602ClearScreen
  134. *输    入:无
  135. *输    出:无
  136. *说    明:LCD1602清屏
  137. *******************************************/
  138. void LCD1602LM016LClearScreen(void)
  139. {
  140.         LCD1602WriteCommand(0x01);
  141.         DelayNus(50);
  142. }
  143. /*******************************************
  144. *函数名称:LCD1602Init
  145. *输    入:无
  146. *输    出:无
  147. *说    明:LCD1602初始化
  148. *******************************************/ //<------- 这里少了/
  149. void LCD1602Init(void)
  150. {
  151.         LCD1602ClearScreen( );
  152.         LCD1602WriteCommand(LCD1602_DATA_MODE);  //显示模式设置,设置16x2显示,5x7点阵,
  153.         //8位数据接口
  154.         LCD1602WriteCommand(LCD1602_OPEN_SCREEN); //开显示
  155.         LCD1602WriteCommand(LCD1602_DISP_ADDRESS); //起始显示地址
  156.         LCD1602ClearScreen( );
  157. }
  158. /*******************************************
  159. *函数名称:PortInit
  160. *输    入:无
  161. *输    出:无
  162. *说    明:I/O口初始化
  163. *******************************************/
  164. void PortInit(void)
  165. {
  166.         P0=P1=P2=P3=0xFF;
  167. }
  168. /*******************************************
  169. *函数名称:main
  170. *输    入:无
  171. *输    出:无
  172. *说    明:函数主体
  173. *******************************************/
  174. void main(void)
  175. {
  176.         PortInit();
  177.         LCD1602Init();
  178.         LCD1602PrintfString(0,LCD1602_LINE1,"0123456789");
  179.         LCD1602PrintfString(0,LCD1602_LINE2,"ABCDEFGHIJ");
  180.         while(1)
  181.         {
  182.                 ;     //空操作
  183.         }
  184. }

复制代码
回复

使用道具 举报

ID:69115 发表于 2023-1-21 13:56 | 显示全部楼层
第150行的注释/号错了 应该放在行尾,
回复

使用道具 举报

ID:69115 发表于 2023-1-21 13:57 | 显示全部楼层
/*******************************************
*函数名称:LCD1602Init
*输    入:无
*输    出:无
*说    明:LCD1602初始化
/ *******************************************  (/号应该放在行尾)
void LCD1602Init(void)
回复

使用道具 举报

ID:1059013 发表于 2023-1-21 14:31 | 显示全部楼层
警告不影响运行,每次都忽略的
回复

使用道具 举报

ID:161164 发表于 2023-1-21 16:09 | 显示全部楼层
2023-01-21_160834.png
回复

使用道具 举报

ID:253767 发表于 2023-1-22 08:06 | 显示全部楼层
angmall 发表于 2023-1-21 12:50
给你改了,对比一下就知道哪里错了。

谢谢,马虎了。
回复

使用道具 举报

ID:253767 发表于 2023-1-22 08:07 | 显示全部楼层
xiexugang 发表于 2023-1-21 13:56
第150行的注释/号错了 应该放在行尾,

谢谢,马虎了。
回复

使用道具 举报

ID:253767 发表于 2023-1-22 08:08 | 显示全部楼层
fishafish 发表于 2023-1-21 14:31
警告不影响运行,每次都忽略的

是的,还可以运行。
回复

使用道具 举报

ID:253767 发表于 2023-1-22 08:16 | 显示全部楼层

谢谢指出。这个地方,是因为找不到LCD1602,而图上用的是M016L,程序运行不通,就将程序中LCD1602全部改为M016L,改后结果没变化,就又将M016L又全部改为LCD1602。该处是由于马虎给漏掉了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表