DS18B20单片机C语言温度数据转换

DS18B20单片机C语言温度数据转换,第1张

//温度值小数部分对照表

code

uchar

table_tempfh[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

//读取DS18B20当前温度

void

read_temp(void)

{

uchar

a=0;

uchar

b=0;

//DS18B20默认为12位精度

ds18b20_init();

ds18b20w_byte(0xCC);

//

跳过读序号列号的 *** 作

ds18b20w_byte(0x44);

//

启动温度转换

delayus(100);

//

等待足够长时间以读取温度值

ds18b20_init();

ds18b20w_byte(0xCC);

ds18b20w_byte(0xBE);

//读取温度寄存器等(共可读9个寄存器)

前两个就是温度

delayus(100);

a=ds18b20r_byte();

//读取温度值低位

b=ds18b20r_byte();

//读取温度值高位

tempvalue=b<<4;

//转化成字节温度

tempvalue+=(a&0xf0)>>4;

//整数部分

tempvalue_fh=table_tempfh[a&0x0f];

//小数部分(查表对照,获取小数位)

}

上面的程序采用12位精度,查阅18B20手册,LSB的最低四位代表小数,MSB的最高5位为符号位,其余的7位为整数部分,其分辨率为00625°,根据此规律,整数就是两字节凑在一起,而小数部分则是最低四位的值,乘以00625,看你取几位小数,再取整即可。上述的对照表是取1位小数的结果,取四舍五入。比如现在LSB的最低四位是0111,那么小数部分就是006257=04375,如果取1位小数,就是“4”,两位小数就是“44”依次类推。

#include <stdioh>int main(){    double c, f;    printf ("请输入华氏温度:");    scanf ("%lf", &f);    c=50/9(f-32);    printf ("%g华氏温度是%2f摄氏温度\n", f, c);    return 0;}

扩展资料:

#include<iostream>

using namespace std;

int main()

{

float f,c;

cout<<"请输入华氏温度:";    

cin>>f;  

c=5(f-32)/9;

cout<<"摄氏温度为:"<<c<<endl;

return 0;

}

你好!!

请看代码,:

#include<stdioh>

int main()

{

int x;

    float a,s;

    

    printf("请选择转换的类型:\n    华氏转摄氏(1)\n    摄氏转华氏(2)\n");

    scanf("%d",&x);

 

  switch(x)

  {

  case 1:

    printf("华氏温度:");

    scanf("%f",&a);

    s=(a-32)/18;

    printf("摄氏温度:%22f\n",s);

  break;

  case 2:

    printf("摄氏温度:");

    scanf("%f",&a);

    s=a18+32;

    printf("华氏温度:%22f\n",s);

  break;  

 }

    return 0;

}

你好!!另一个接法,合乎你的题目要求:

#include<stdioh>

int main()

{

int x;

    float a,s;

    int ii=0; 

for(ii=0;ii<3;ii++) 

{

    printf("请选择转换的类型:\n    华氏转摄氏(1)\n    摄氏转华氏(2)\n");

    scanf("%d",&x);

   switch(x)

  {

  case 1:

    printf("华氏温度:");

    scanf("%f",&a);

    s=(a-32)/18;

    printf("摄氏温度:%22f\n",s);

  break;

  case 2:

    printf("摄氏温度:");

    scanf("%f",&a);

    s=a18+32;

    printf("华氏温度:%22f\n",s);

  break;  

 }

}

    return 0;

}

使用公式℃=(5/9)(°F-32)打印下列华氏温度与摄氏温度对照表: 0 -178 20 -67 40 44 60 156 80 267 100 378 120 489 140 600 160 711 180 822 200 933 220 1044 240 1156 260 1267 280 1378 300 1489 代码如下: 要点整理:

1结果集中我们可以看到有1位小数,因此输出中要制定小数的位数,即%61f;

2公式中的(5/9)是不能直接照办斤程序中的,因为整数除法会进行舍位,结果将永远是0,因此需要用浮点数,即50/90 ,而后面的(fahr-32)虽然也是整型,由于和浮点数进行运算,最后的结果会自动转成浮点数;关于数据类型的自动转换可以找度娘;

3变量使用了常量的表达方式,便于理解和阅读,更便于以后的维护;

4for语句会先执行条件检查,check first and then do。

那么,学习方法有哪些呢

1、预习

预习是非常重要的学习方法,通过预习,可以熟悉文章的内容与结构,在预习的过程中,可以在自己不懂的地方作上标记,这样上课的时候,就可以带着问题,让自己有针对性去听课,进而提高了学习的兴趣与效率。

2、听课做好笔记

听课是人们接收信息的重要的方式。人们在听课的过程中,可以学习到大部分的内容,因此,把握好听课,非常的重要。一定要集中精力,听教师讲解,并积极的做好笔记,同时参加课堂活动,积极回答老师提出的问题。

3、认真做作业

老师在上完课之后,都会给学生布置作业。做作业的目的是为了进一步的巩固课堂上面学到的内容。所以,一定要认真对待作业。

4、复习与总结

学习之后,一定要进行复习与总结,通过复习与总结,可以让学习到的内容,成为自己的知识,并在复习与总结中,发现新的问题,进一步加深对知识点的理解。

5、保持自信心

自信心可以给人们带来巨大的动力,只有具备自信心,才可以让每一天的学习更加的充满活力,并更好的记忆学习的内容。

;这个是c++的 楼主好像写错公式了, f代表华氏温度,c代表摄氏温度

#include<iostreamh>

#include<iomaniph>

void main()

{

double f,c,b;

cout<<"请输入华氏温度:"<<endl;

cin>>f;

cout<<"对应的摄氏温度为:"<<endl;

c=f-32;

b=500/9;

c=bc;

cout<<setiosflags(ios::fixed)<<setprecision(2)<<"c="<<c<<endl;

}

;再给你个c语言的

#include <stdioh>

void main()

{

double f,c,b;

scanf("请输入华氏温度: %f\n",&f);

c=f-32;

b=500/9;

c=bc;

printf("对应的摄氏温度为: %f\n",c);

}

#include

<stdioh>

void

main()

{

double

f,c,b;

scanf("请输入华氏温度:

%f\n",&f);

c=f-32;

b=500/9;

c=bc;

printf("对应的摄氏温度为:

%f\n",c);

}

以上就是关于DS18B20单片机C语言温度数据转换全部的内容,包括:DS18B20单片机C语言温度数据转换、C语言编程:输入一个华氏温度,要求输出摄氏温度,公式为:、c语言华氏摄氏温度转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9445482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存