欢迎光临散文网 会员登陆 & 注册

单片机应用实践篇之单总线上单个DS18B20的温度读取显示编程(基于LCD...

2023-07-11 22:20 作者:无数碎片寻你  | 我要投稿

处理整数部分,老师前面讲了,就是高五位是符号,所以我认为需要单独拿出来判断一下,因为这会影响整数部分(中间的七位),是负数,这几位数就是补码了,就需要取反,然后加一了,整数就没关系,所以我单独写了一个函数来处理这个,大家可以直接用,

我把老师main 函数里这个换了

len = chuli(int Temp,str);

//处理整数部分


unsigned char chuli(int dat, unsigned char *str)

{

unsigned char i = 0;

unsigned char len = 0;

unsigned char buf[7];

//提取符号

unsigned char sign;

unsigned char zheng;

sign = dat >> 7; //将整数部分移走,此时sign代表符号位

//然后开始提取整数部分

zheng = dat & 0x007F; //消除了符号位

//此时zheng 有可能是负数(补码),也有可能是整数,所以需要判断

if(sign > 0)

{

*str++ = '-';

len++;

//如果是负数, 说明是补码, 所以需要还原成源码

//现在我们只需要 整数取反, 并且保留七位整数,然后加一即可

zheng = ((~dat) & 0x07F )+ 1 ;

}



//下面把整数填进数组

do

{

buf[i++] = zheng %10 + '0'; //dat%10 + 0x30; buf[0] = '8' buf[1] = '7'

zheng /= 10;

}while(zheng > 0); //每取到一位数, 就截取掉

len += i;

while(i-- > 0)

{

*str++ = buf[i];

}

*str = '\0';

return len;

}

单片机应用实践篇之单总线上单个DS18B20的温度读取显示编程(基于LCD...的评论 (共 条)

分享到微博请遵守国家法律