|
1、警告原文:1602.c(178):warning C206: 'LCD1602Init': missing function-prototype
譯文:1602.c(178):警告C206:“LCD1602Unit”:缺少函數(shù)原型
函數(shù)原型是:
void LCD1602Init(void)
{
LCD1602ClearScreen( );
LCD1602WriteCommand(LCD1602_DATA_MODE); //顯示模式設置,設置16x2顯示,5x7點陣,
//8位數(shù)據(jù)接口
LCD1602WriteCommand(LCD1602_OPEN_SCREEN); //開顯示
LCD1602WriteCommand(LCD1602_DISP_ADDRESS); //起始顯示地址
LCD1602ClearScreen( );
}
但警告:“LCD1602Unit”:缺少函數(shù)原型
而程序中并沒有“LCD1602Unit”這個函數(shù)。
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 //發(fā)送數(shù)據(jù)
/*******************************************
*函數(shù)名稱:DelayNus
*輸 入:t延時時間
*輸 出:無
*說 明:微秒級延時
*******************************************/
void DelayNus(unsigned int t)
{
unsigned int d=0;
d=t;
do
{
NOP();
}
while(--d>0);
}
/*******************************************
*函數(shù)名稱:LS164Send
*輸 入:byte寫發(fā)送的字節(jié)
*輸 出:無
*說 明:74LS164發(fā)送數(shù)據(jù)
*******************************************/
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);
}
}
/*******************************************
*函數(shù)名稱: LCD1602WriteByte
*輸 入:byte要寫入的字節(jié)
*輸 出:無
*說 明:LCD1602寫字節(jié)
*******************************************/
void LCD1602WriteByte(unsigned char byte)
{
LCD1602_PORT(byte);
LCD1602_RS(HIGH);
LCD1602_RW(LOW);
LCD1602_EN(LOW);
DelayNus(50);
LCD1602_EN(HIGH);
}
/*******************************************
*函數(shù)名稱: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);
}
/*******************************************
*函數(shù)名稱: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);
}
/*******************************************
*函數(shù)名稱: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++;
}
}
/*******************************************
*函數(shù)名稱:LCD1602ClearScreen
*輸 入:無
*輸 出:無
*說 明:LCD1602清屏
*******************************************/
void LCD1602LM016LClearScreen(void)
{
LCD1602WriteCommand(0x01);
DelayNus(50);
}
/*******************************************
*函數(shù)名稱:LCD1602Init
*輸 入:無
*輸 出:無
*說 明:LCD1602初始化
/ *******************************************
void LCD1602Init(void)
{
LCD1602ClearScreen( );
LCD1602WriteCommand(LCD1602_DATA_MODE); //顯示模式設置,設置16x2顯示,5x7點陣,
//8位數(shù)據(jù)接口
LCD1602WriteCommand(LCD1602_OPEN_SCREEN); //開顯示
LCD1602WriteCommand(LCD1602_DISP_ADDRESS); //起始顯示地址
LCD1602ClearScreen( );
}
/*******************************************
*函數(shù)名稱:PortInit
*輸 入:無
*輸 出:無
*說 明:I/O口初始化
*******************************************/
void PortInit(void)
{
P0=P1=P2=P3=0xFF;
}
/*******************************************
*函數(shù)名稱:main
*輸 入:無
*輸 出:無
*說 明:函數(shù)主體
*******************************************/
void main(void)
{
PortInit( );
LCD1602Init();
LCD1602PrintfString(0,LCD1602_LINE1,"0123456789");
LCD1602PrintfString(0,LCD1602_LINE2,"ABCDEFGHIJ");
while(1)
{
; //空操作
}
}
|
|