找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3464|回复: 1
打印 上一主题 下一主题
收起左侧

关于单片机+DS18B20负数显示的问题

[复制链接]
跳转到指定楼层
楼主
ID:722619 发表于 2020-4-29 16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问各位大佬,我的DS18B20负数显示时,温度在0到-15.9就可以正常显示,到-16就显示为-0,-17就显示-1·····这个是怎么回事?大佬们有啥解决方法吗?附上相关代码和仿真运行图。相关代码:
unsigned char tempL=0;  //设全局变量
unsigned char tempH=0;
unsigned char tempA;
unsigned char tempB;
unsigned char tempshi;
unsigned char tempge;
unsigned char xiaoshu1; //小数第一位
unsigned int zb;
bit  fg=1;              //温度正负标志
······
//读温度值(低位放tempL;高位放tempH;)
void ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
delaynms(250); //转换需要一点时间,延时
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB
tempA=(tempH<<8)|tempL;
if(tempH>0x07)      //最高位为1时温度是负
{
    tempA=~tempA+1;
    zb=12;
tempB=tempA*(0.625)+0.5;
}
else
{
    tempB=tempA*(0.625);
    zb=0;
    }
    tempshi=tempB/100;
    tempge=tempB%100/10;
    xiaoshu1=tempB%10;
}







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2020-4-29 21:44 | 只看该作者
ds18b20数码管显示 仿真.zip (113.41 KB, 下载次数: 45)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表