qq_33532837 2015-12-27 13:15 采纳率: 0%
浏览 2454

使用keil是所遇到的警告问题

Build target 'Target 1'
compiling main.c...
linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _?PIXEL
MODULE: main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _LINE
MODULE: main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?_LINE?BYTE
MODULE: main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?_LINE?BIT
MODULE: main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _?SET_LCD_POS
MODULE: main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: CLS
MODULE: main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: LCD_INITIALISE
MODULE: main.obj (MAIN)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _?PIXEL
MODULE: main.obj (MAIN)
ADDRESS: 0D2AH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _?PIXEL
MODULE: main.obj (MAIN)
ADDRESS: 0DDAH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _?PIXEL
MODULE: main.obj (MAIN)
ADDRESS: 0E23H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?_LINE?BYTE
MODULE: main.obj (MAIN)
ADDRESS: 1064H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?_LINE?BIT
MODULE: main.obj (MAIN)
ADDRESS: 1066H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _LINE
MODULE: main.obj (MAIN)
ADDRESS: 106CH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?_LINE?BYTE
MODULE: main.obj (MAIN)
ADDRESS: 10FFH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?_LINE?BIT
MODULE: main.obj (MAIN)
ADDRESS: 1101H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _LINE
MODULE: main.obj (MAIN)
ADDRESS: 1107H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: LCD_INITIALISE
MODULE: main.obj (MAIN)
ADDRESS: 12D9H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _?SET_LCD_POS
MODULE: main.obj (MAIN)
ADDRESS: 12E0H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: CLS
MODULE: main.obj (MAIN)
ADDRESS: 12E3H
Program Size: data=41.1 xdata=0 code=2937
creating hex file from "指针式电子钟main"...
"指针式电子钟main" - 0 Error(s), 19 Warning(s).

源程序如下
#include
#include
#include
#define PI 3.1415926

sbit SDA=P1^0; //DS1302数据线
sbit CLK=P1^1; //DS1302时钟线
sbit RST=P1^2; //DS1302复位线
sbit K1=P3^0; //选择
sbit K2=P3^1; //调整
sbit K3=P3^3; //确定

uchar tCount=0, d_Flag=0;
uchar Current_Time[7]; //所读取的日期时间
char Adjust_Index=-1; //当前调节的时间对象:秒,分,时(0,1,2)

extern void cls(); //清屏
extern char LCD_Initialise(); //LCD初始化
extern uchar LCD_Write_Command(uchar cmd); //写无参数的命令
extern uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2); //写双参数命令
extern uchar LCD_Write_Data(uchar dat); //写数据
extern void Set_LCD_POS(uchar row,uchar col)reentrant; //设置当前地址
extern void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit Mode); //画直线函数
extern void Pixel(uchar x,uchar y,uchar Mode)reentrant; //画点函数
uchar Time_Back[]={-1,-1,-1};
uchar HMS_Hand_Length[]={24,20,15}; //秒,分,时针的长度
//------------------------------------------------------------------------------------------
//绘制电子钟圆形面板
//------------------------------------------------------------------------------------------
void Clock_Plate()
{
float sta,x,y; //绘制外围图形园圈
for (sta=0;sta<=2*PI;sta+=0.1)
{
x=sin(sta); y=cos(sta);
Pixel(30+30*x,30+30*y,1);
} // 绘制刻度1~12
for (sta=0;sta<=2*PI;sta+=2*PI/12)
{
x=sin(sta); y=cos(sta);
Pixel(30+27*x,30+27*y,1);
Pixel(30+26*x,30+26*y,1);
}
}
//------------------------------------------------------------------------------------------
//重绘HMS中的某一指针(参数0,1,2分别为秒,分,时)
//------------------------------------------------------------------------------------------
void Repaint_A_Hand(uchar i)
{
float r,m;
uint x,y;
m=(i==0 || i==1)?60.0:12.0; //擦除
r=Time_Back[i]/m*2*PI+1.5*PI;
x=HMS_Hand_Length[i]*cos(r);
y=HMS_Hand_Length[i]*sin(r);
Line(30,30,x+30,y+30,0); //重绘
r=Current_Time[i]/m*2*PI+1.5*PI;
x=HMS_Hand_Length[i]*cos(r);
y=HMS_Hand_Length[i]*sin(r);
Line(30,30,x+30,y+30,1); //时间备份
Time_Back[i]=Current_Time[i];
}
//-------------------------------------------------------------------------------------------
//时间变化时重绘
//秒针与分针、时针接近重叠,或分针与时针接近重叠时也重绘
//-------------------------------------------------------------------------------------------
void Display_HMS_Hand()
{
Repaint_A_Hand(0); Repaint_A_Hand(1); Repaint_A_Hand(2);
}
//-------------------------------------------------------------------------------------------
//向DS1302写入一字节
//-------------------------------------------------------------------------------------------
void Write_A_Byte_TO_DS1302(uchar x)
{
uchar i;
for(i=0;i {
SDA = x&1;
CLK = 1;
CLK = 0;
x >>= 1;
}
}
//-------------------------------------------------------------------------------------------
//从DS1302读取一字节
//-------------------------------------------------------------------------------------------
uchar Get_A_Byte_FROM_DS1302()
{
uchar i,b,t;
for(i=1;i {
b >>= 1;
t = SDA;
b |= t<<7;
CLK = 1;
CLK = 0;
}
return b/16*10+b%16; //BCD码转换
}
//--------------------------------------------------------------------------------------------
//从DS1302指定位置读数据
//--------------------------------------------------------------------------------------------
uchar Read_Data(uchar addr)
{

uchar dat;
RST = 0; CLK = 0; RST = 1;
Write_A_Byte_TO_DS1302(addr);
dat = Get_A_Byte_FROM_DS1302();
CLK = 1; RST = 0;
return dat;
}

//--------------------------------------------------------------------------------------------
//向DS1302某地址写入数据
//--------------------------------------------------------------------------------------------
void Write_DS1302(uchar addr,uchar dat)
{
CLK = 0; RST = 1;
Write_A_Byte_TO_DS1302(addr);
Write_A_Byte_TO_DS1302(dat);
CLK = 0; RST = 0;
}
//--------------------------------------------------------------------------------------------
//设置时间
//--------------------------------------------------------------------------------------------
void SET_DS1302()
{
Write_DS1302(0x8E,0x00); //写控制字,取消写保护
Write_DS1302(0x82,(Current_Time[1]/10<<4)|(Current_Time[1]%10)); //写入分
Write_DS1302(0x84,(Current_Time[2]/10<<4)|(Current_Time[2]%10)); //写入时
Write_DS1302(0x8E,0x80); //加保护
}
//--------------------------------------------------------------------------------------------
//读取当前时间(秒,分,时)
//--------------------------------------------------------------------------------------------
void GetTime()
{
Current_Time[0] = Read_Data(0x81);
Current_Time[1] = Read_Data(0x83);
Current_Time[2] = Read_Data(0x85);
}
//--------------------------------------------------------------------------------------------
//时,分调整
//--------------------------------------------------------------------------------------------
void Current_Time_Adjust()
{
switch(Adjust_Index)
{
case 2: Current_Time[2] = (Current_Time[2]+1)%24;//时
break;
case 1: Current_Time[1] = (Current_Time[1]+1)%60;//分
break;
}
}
//---------------------------------------------------------------------------------------------
//定时器0每秒刷新LCD显示
//---------------------------------------------------------------------------------------------
void T0_INT() interrupt 1
{
TH0 = -50000/256;
TL0 = -50000%256;
if( ++ tCount != 2)return;
tCount = 0;
if(d_Flag == 0)
{
Clock_Plate();
d_Flag = 1;
}
Display_HMS_Hand();
}
//---------------------------------------------------------------------------------------------
//键盘中断(INT0)
//---------------------------------------------------------------------------------------------
void EX_INT0() interrupt 0
{
if(K1 == 0) //选择调整对象
{
if(Adjust_Index == -1 || Adjust_Index == 1)

Adjust_Index = 3;
Adjust_Index -- ;
}
else
if(K2 == 0) //调整
Current_Time_Adjust();
else
if(K3 == 0) //确定
{
SET_DS1302(); //将调整后的时间写入DS1302
Adjust_Index = -1; //操作索引重设为-1,时间继续正常显示
}
}
//----------------------------------------------------------------------------------------------
//主程序
//----------------------------------------------------------------------------------------------
void main()
{
LCD_Initialise(); //液晶初始化
Set_LCD_POS(0,0); //从LCD左上角开始清屏
cls();
IE = 0x83; //允许INT0,T0中断

IP = 0x01;
IT0 = 0x01;
TMOD = 0x01;
TH0 = -50000/256;
TL0 = -50000%256;
TR0 = 1;

 while(1)
 {                                        //如果未执行调整操作则正常读取当前时间
       if(Adjust_Index == -1) GetTime();
 }

}

  • 写回答

2条回答 默认 最新

  • wuheng_1 2015-12-27 13:22
    关注

    使用了库函数,但没有把库导进工程里;或者是使用了其他C源代码文件里函数,却没有把这些C文件导入工程;
    典型的一个LCD_Initialise()函数,LCD操作的源代码在哪儿呢?

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题