大师们,请教一下,我在单片机c语言编译时出现零错误,一警告“L16”是怎么回事,下面是要编译的程序

#include<reg52.h>
#include<intrins.h>
sbit RS = P1^0; //定义端口
sbit RW = P1^1;
sbit EN = P2^5;
sbit DU = P2^0;
sbit WE = P2^1;

#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1

#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
void cmg88()//关数码管,点阵函数
{
DU=1;
P0=0X00;
DU=0;
}
void DelayUs2x(unsigned char t)
{
while(--t);
}

void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}

bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}

void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy()); //忙则等待
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}

void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); //忙则等待
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}

void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
写入字符函数
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函数
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/
LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/
}

/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
cmg88();//关数码管,点阵函数
LCD_Init();
LCD_Clear();//清屏
while (1)
{
LCD_Write_String(1,1,"湖北文理学院");
LCD_Write_String(2,1," www.hbuas.edu.cn");
while(1);
}
}

第1个回答  推荐于2017-07-16
警告一般都是你语法有点错误,或者有时候不一定是你预想的情况。
不是错误有时候可以不理,但是最好还是知道,追问

后续实验要求程序生成Hex文件,编译不通过没法生成

第2个回答  2012-12-23
你把错误的警告截图下来追问

麻烦你看看
Build target 'Target 1'
compiling 广告.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_LCD_WRITE_CHAR?广告
Program Size: data=9.0 xdata=0 code=303
creating hex file from "广告"...
"广告" - 0 Error(s), 1 Warning(s).

追答

存在没有被调用的函数,无关紧要

追问

可是无法生成hex文件啊,烧写要用

追答

怎么会无法生成HEX呢?这里不是“creating hex file from "广告"..”了么
有了这句话,然后下面没有说target not created 的话就一定编译生成了HEX,你好好找找。

追问

是生成了,可能之前没有好好查找,对了,LED怎么只能显示网址呢,“湖北文理学院”字样无法显示

追答

首先,不是LED,你的是LCD吧,其次,你要看是字符型LCD还是点阵型LCD,字符型的只能显示ascii字符,点阵型的如果带有字库的,就可以显示汉字,没有字库的需要自己建立字库,建议买带字库的,价钱贵不了几块钱,但是编程序时特别省事

本回答被提问者采纳

...一警告“L16”是怎么回事,下面是要编译的程序
警告一般都是你语法有点错误,或者有时候不一定是你预想的情况。不是错误有时候可以不理,但是最好还是知道,

单片机c语言WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCE...
这是指有变量或者代码块没用被用到 一般L16的警告可以忽略的,对程序没有影响的 但编译时的warning:unreferenced local variable这个是你代码有错误了 你这代码写的太乱了,没有格式,也没备注,看着太累 你发到我邮箱abc3844@126.com,顺便告诉我实现的功能是什么 我帮你修改下 ...

单片机C编译时出现*** WARNING L16: UNCALLED SEGMENT, IGNORED F...
可能是运算超出范围。

单片机c语言 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY...
是的,你没有调用,因为你调用错了,应该写为:led(p[i]);

单片机编译出错: WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY...
错误在最后 for(y=540;y>0;y--) .你忽略了一件事情,单片机单字节只有8位,所以y最大应该是256,如果你想最加长,只能再加一条for代码了。

单片机C语言 WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY...
把第二个main 函数中的num 变量定义插入到第一个main的变量定义中,然后把第二个main 函数中while(1)中的函数插入到第一个main 函数的while(1)中的else前面 注意格式和大括号以及分号移植的时候的完整性

单片机C语言WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCE...
程序没问题 不会出现你说的这个警告 这个警告是说定义了却没有使用 不过你的程序里没有~~

Keil调试程序编译时显示 *** WARNING L16: UNCALLED SEGMENT, IGNORED F...
仔细看编译对话框的内容,我也遇到过类似的是拼写写错导致报错,display中的l和a顺序调换导致错误;函数拼写错误,调用时又写成正确的,导致报错定义的函数没有被调用。查找方法*(参考图片中标注):搜索编译对话框中的SEGMENT提示内容dispaly,并参考SYMBOL下提示的比对查找display。WARNING L16: UNCALLED ...

keil c51已经破解,编译时为什么还出现RESTRICTED VERSION WITH 0800H...
前两个警告( WARNING L16)是指LCD_DSP_CHAR、YUNSUAN这两段子程序没有被调用 最后一个(FATAL ERROR L250)是指你程序生成的代码已经超过了芯片的容量了 根据以上提示你写的程序基本上没有错误,建议把前两个警告提示的程序注释或删除掉,再试下看生成的代码(就最后code=xxxx那一段)是否已经超出...

c51的keil3中出现的警告,请问单片机的高手们是哪里出现问题了
MULTIPLE CALL TO SEGMENT :该函数可能会在中断服务程序和主程序中同时被调用。这个警告要注意。如主程序调用该函数还没有推出就进入中断程序,在中端程序再次被调用,可能会出现逻辑错误。UNRESOLVED EXTERNAL SYMBOL:引用其它文件的函数、变量产生的错误,可能是声明不正确或者函数、变量不存在 REFERENCE ...

相似回答