单片机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,这样写好象主程序中无法调用两个值,难道要返回两个值必须写两个子程序吗,然后在主程序中分别调用吗,谢谢
展开
 我来答
lijia7906288
2011-12-07 · TA获得超过127个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:99.5万
展开全部
是这样的,所有的程序最多只能有一个返回值
你可以把
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一直在读写,谢谢
追答
初始化了不容易错
单片机就是一直在读写,但是它的数度很快的,所以还能干别的事情,放心的写吧,没事
zero_fn
2011-12-07 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:457万
展开全部
return 不能返回超过一个值,多个值返回方法:
1,用全局变量存储。
2,用局部静态数组存储,返回数组首地址
3,调用时传入两个变量指针
4,把t 和t1 合并成一个int来返回
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sanjinluo
2011-12-07 · TA获得超过4714个赞
知道大有可为答主
回答量:3402
采纳率:0%
帮助的人:2398万
展开全部
要返回多个值的话,可以通过数组来实现
程序改为void Readtempdate(unsigned char table[]){
....
}
再把t,t1换成table[0],table[1]即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式