Keil 编译的错误

TDB1111 2013-04-06 12:34:18
编译出现错误:
LCD.C(178): warning C206: 'temp': missing function-prototype

uint16 temp() 是自己定义的函数,其中还包含了自己定义的子函数,再调用这个函数的时候就出现这个错误,
是怎么回事??
所有用的子函数都在其前面编写的,所以不用函数声明了吧,怎么还出现这样的错误。。。
...全文
512 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fighting959800 2013-04-07
  • 打赏
  • 举报
回复
在线调试,单步走一下试试,看看是Temp()函数中哪里出错了!
TDB1111 2013-04-07
  • 打赏
  • 举报
回复
引用 5 楼 TDBswitch 的回复:
引用 4 楼 wangfan027 的回复:同学,注意大小写啊,这玩意对大小写敏感 我的个去,马虎了~~~~~~下面函数名用小写了。。。谢谢
虽然没错,程序还是没调试出来,不过谢谢哈,我慢慢调试
TDB1111 2013-04-07
  • 打赏
  • 举报
回复
引用 4 楼 wangfan027 的回复:
同学,注意大小写啊,这玩意对大小写敏感
我的个去,马虎了~~~~~~下面函数名用小写了。。。谢谢
dceacho 2013-04-07
  • 打赏
  • 举报
回复
同学,注意大小写啊,这玩意对大小写敏感
TDB1111 2013-04-06
  • 打赏
  • 举报
回复
引用 1 楼 FLY_725 的回复:
前面有没有子函数,调用他了。 把uint16 temp() 在开头声明一下试试。 能不能 把整个程序贴上看看。
不行啊,你看代码吧

#include<reg51.h>
#include<intrins.h>
#include<delay.h>

typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long uint16;

sbit LCD_RS=P1^0;
sbit LCD_RW=P1^1;
sbit LCD_EN=P2^5;
sbit LED_DU=P2^6;
sbit LED_WE=P2^7;

sbit DQ=P2^2; //温度传感器数据口

uchar tab1[14]=" APP!";
//uchar tab1[11]="Today Temp:";
uchar tab2[10]="2013.04.04";

uchar tab[10]={'0','1','2','3','4','5','6','7','8','9'};
uchar spot='.';

uint16 Temp();

//*******18B32函数********//
void delay5us()	  //主函数调用delay5us(),先执行LCALL指令2us,执行_nop_()用时1us,最后执行RET用时2us,较准确
{
	_nop_();
}

void delayus(uint i)	//延时i*5us,误差较大
{
	uint j;
	for(j=i;j>0;j--)
		delay5us();
}

void Reset()    //复位,480~960 us的低电平,再持续15~60us 高电平,进入主机发送存在信号
{
	bit flag=1;

	while(flag){
		while(flag){
			DQ=1;	      //释放总线
			_nop_();
			DQ=0;	     //拉至低电平
			delayus(100);    //延时在480~960us内

			DQ=1;        //释放总线,进入接受状态
			delay(3);	 //延时在15~60us内
			flag=DQ;   	 //接受主机发送的存在信号,低电平复位成功
		}
		delayus(95);     //延时480,复位成功释放总线,否则失败
		flag=~DQ;		  //?????复位成功返回低电平,取反为高电平,怎么退出循环?????
	}
	DQ=1;
}


uint Read_Byte()     //读取数据
{
	uint val=0;
	uchar i;

	for(i=0;i<8;i++){
		DQ=1;		  //初始化高电平
		_nop_();
		DQ=0;
		_nop_();	   //延时4us ,产生读时间隙
		_nop_();
		_nop_();
		_nop_();
		DQ=1;
		if(DQ){
			val>>=1;
			val|=0x80; //高位到低位
		}
		delayus(12);    //延时大于60us
	}
	DQ=1;
	return val;
}

void Write_Byte(uchar dat)		  //写入8位数据
{
	uchar i;

	for(i=0;i<8;i++){
		DQ=1;
		_nop_();
		DQ=0;		//产生写时间隙
		_nop_();    //延时4us
		_nop_();
		_nop_();
		_nop_();

		DQ=dat&0x01;
		delay(12);   //延时大于60us,进行下一位写入
		dat>>=1;
	}
	DQ=1;
	_nop_();       //连续两次间隔大于1us
	_nop_();
}
uint16 Temp()
{
	uint16 temperature;
	uint tem[2];

	/************************************************
	启动温度转换的三个步骤:
	                      一,复位;
	                      二,发出Skip ROM(CCH)写操作;
	                      三,发出Convert T(44H)写操作;
	                      四,发出(BEH)读操作;
	************************************************/

	Reset();      //复位
	Write_Byte(0xCC);
	Write_Byte(0x44);
	Write_Byte(0xBE);

	tem[0]=Read_Byte(); //低八位
	tem[1]=Read_Byte();	//高八位

	temperature=tem[1];
	temperature<<=8;
	temperature|=tem[0];
	//temperature>>=4;     //???????????
	return temperature;  //返回无转换温度
}

//******LCD函数***********//
void LCD_Write_Com(uchar com)
{
	P0=com;
	LCD_RS=0;
	LCD_RW=0;
	LCD_EN=0;   //此处后面写数据??
	delay(1);
	LCD_EN=1;
	delay(1);
	LCD_EN=0;

}


void LCD_Write_Data(uchar _data)
{
	P0=_data;
	LCD_RS=1;
	LCD_RW=0;
	LCD_EN=0;
	delay(1);
	LCD_EN=1;
	delay(1);
	LCD_EN=0;
}			


void Init()
{
	LED_DU=0;
	LED_WE=0;
	LCD_Write_Com(0x38);
	delay(2);
	LCD_Write_Com(0x0f);
	delay(2);
}

//********主函数*********//
void main()
{
    uchar i,a[4];
	uint16 Tem;

/*********温度计算*************/
	 Tem=temp();		//???
	 Tem=Tem*0.0625;
	 a[3]=Tem/100;        //百位
	 a[2]=Tem%100/10; 	  //十位
	 a[1]=Tem%10;         //个位
	 a[0]=0;	//未定义

/*******显示***********/
    Init();
	LCD_Write_Com(0x80);
	for(i=0;i<14;i++)
	    LCD_Write_Data(tab1[i]);

	LCD_Write_Com(0xc0);
	for(i=3;i>=0;i--)
		LCD_Write_Data(tab[a[i]]);
	while(1);
}
dragon_cheng 2013-04-06
  • 打赏
  • 举报
回复
功能没用对什么的
  • 打赏
  • 举报
回复
前面有没有子函数,调用他了。 把uint16 temp() 在开头声明一下试试。 能不能 把整个程序贴上看看。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧