单片机C语言DS18B20温度值子程序返回值问题
各位大侠,请教一个DS18B20温度值子程序返回值问题,程序如下/*读取温度*/Readtempdate(void){uchara=0;ucharb=0;uchart=0...
各位大侠,请教一个DS18B20温度值子程序返回值问题,程序如下
/*读取温度*/
Readtempdate(void)
{
uchar a=0;
uchar b=0;
uchar t=0;//返回给主程序的温度值
uchar t1=0;//返回给主程序的温度上限值
Init_ds18b20(); //初始化
Writetemperachar(0xcc);//跳过SKIP
Writetemperachar(0x44);//启动温度控制器
Init_ds18b20(); //初始化
Writetemperachar(0xcc);//跳过SKIP
Writetemperachar(0xbe);//发送读指令
a=Readtemperachar();//读低字节值
b=Readtemperachar();//读高字节值
t1=Readtemperachar();//返回给主程序的温度上限值
t=(b<<4)|(a>>4); //温度无小数点
if(t>128)
{ t=~t+1;
}
return(t,t1);
}
我想在主程序中使用t,t1,这样写好象主程序中无法调用两个值,难道要返回两个值必须写两个子程序吗,然后在主程序中分别调用吗,谢谢 展开
/*读取温度*/
Readtempdate(void)
{
uchar a=0;
uchar b=0;
uchar t=0;//返回给主程序的温度值
uchar t1=0;//返回给主程序的温度上限值
Init_ds18b20(); //初始化
Writetemperachar(0xcc);//跳过SKIP
Writetemperachar(0x44);//启动温度控制器
Init_ds18b20(); //初始化
Writetemperachar(0xcc);//跳过SKIP
Writetemperachar(0xbe);//发送读指令
a=Readtemperachar();//读低字节值
b=Readtemperachar();//读高字节值
t1=Readtemperachar();//返回给主程序的温度上限值
t=(b<<4)|(a>>4); //温度无小数点
if(t>128)
{ t=~t+1;
}
return(t,t1);
}
我想在主程序中使用t,t1,这样写好象主程序中无法调用两个值,难道要返回两个值必须写两个子程序吗,然后在主程序中分别调用吗,谢谢 展开
3个回答
展开全部
是这样的,所有的程序最多只能有一个返回值
你可以把
uchar t=0;//返回给主程序的温度值
uchar t1=0;//返回给主程序的温度上限值
设置成全局变量
你可以把
uchar t=0;//返回给主程序的温度值
uchar t1=0;//返回给主程序的温度上限值
设置成全局变量
追问
为什么要在全局变量中先把0赋给uchart 和uchar t1,另外我在主程序中写(部分省略)
void main()
{ write_tempalarm_date(0x50);//将50写入DS18B20 EEPROM中
delay(5);
TP=read_tempalarm_date();//DS18B20 EEPROM中的值是赋给TP,
}
这样编会不会EEPROM一直在读写,谢谢
追答
初始化了不容易错
单片机就是一直在读写,但是它的数度很快的,所以还能干别的事情,放心的写吧,没事
展开全部
return 不能返回超过一个值,多个值返回方法:
1,用全局变量存储。
2,用局部静态数组存储,返回数组首地址
3,调用时传入两个变量指针
4,把t 和t1 合并成一个int来返回
1,用全局变量存储。
2,用局部静态数组存储,返回数组首地址
3,调用时传入两个变量指针
4,把t 和t1 合并成一个int来返回
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要返回多个值的话,可以通过数组来实现
程序改为void Readtempdate(unsigned char table[]){
....
}
再把t,t1换成table[0],table[1]即可
程序改为void Readtempdate(unsigned char table[]){
....
}
再把t,t1换成table[0],table[1]即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询