1、警告原文:1602.c(178):warning C206: 'LCD1602Init': missing function-prototype
译文:1602.c(178):警告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)
{
; //空操作
}
}
|