提问者:z78782013-06-13 00:00
rdbyte(void) //读取温度的一个字节 ....... tplsb=rdbyte();//温度值低位字节 tpmsb=rdbyte();//高位值高位字节 请问如何将读到的温度转换为十进制数?最好还包括一位小数。用数码管显示。先谢谢了!
把tplsb和tpmsb都是8位的合成一个16位的有符号数tt;temp为浮点数 t=tpmsb<<8; t=t|tplsb; if(t<0) //负温度 { temp=(~t+1)*0.0625*10+0.5; //负温度时,取反加1再乘以0.0625得实际温度,乘10+0.5显示小数点一位,且四舍五入 } else temp=t*0.0625*10+0.5; //正温度 if(t<0) bai='-'; //负温度时百位显示负号 else bai=(const) temp/1000+0x30; //百位 shi=((const) temp%1000)/100; //十位 ge=((const) temp%1000)%100/10; //个位 shifen=((const) temp%1000)%100%10; //十分位
回答者:pnhahd2016-06-13 00:00
1:第一个划横线部分为延时函数大约为11.4ms,为什么要这么延时?数据手册上说了吗?我特意看了下英文手册,10位转换的时间就是187.6ms,12位转换的时间是750ms,你看的那个延时时间还不一定对。2:第二个划横线
提问者:ChinaGHT2016-08-05
LCD驱动程序/*************************************************************//*
提问者:zhangpan6862017-01-10
任何外设的初始化或者命令如果能够得到返回值确定完成或者未完成才能让单片机选择是否进行下一步,更能让编程人员得到错误信息正确的调试错误
提问者:wangyunfeng1382016-09-20
乘以256是为了将读过来的数据转换成十进制数,再乘以25,然后在返回值里又左移了2,相当于(b*256+a)*0.0625*100!这段程序应该没有判断正负的语句!你多看看DS18B20的手册就会明白了!那里面说的很明白
提问者:nisipm2013-07-16
楼主你在时序上有些错误1。在转换时没有留够足够的转换时间。根据DS18B20芯片手册,9位精度转换时间为93.75ms。12位精度转换时间为750ms。而DS18B20默认为12位精度。所以我加了750ms延时2。在写函
提问者:rockchunyang2016-12-23
高五位S为符号位,分辨率为0.0625。正温度把16进制数转成10进制即可;负温度把16进制数取反后加1再转成10进制数,第一个是00FA是(15*16+10)*0.0625=15.62度,第二个是0032是(3*16+
提问者:e7w9e6o4a22014-11-16