Разобрать данные ds18b20 и вывести на индикатор7 сегментов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем добрый день. Как разобрать данные с плавающей запятой из датчика ds18b20, и правильно разбить по разрядам 7ми сегментного индикатора. Код считывания температуры
for(j=0;j<devices;)
{
temperature=ds18b20_temperature(&ds18b20_rom_codes[j][0]);
temps = (unsigned int) temperature;//Присвоим переменной temp значение переменной temperature с явным указанием типа данных
if (temperature<0)temps = ( ~temps ) + 0x0001; // если число отрицательное перевести его в норм.вид 
    celie = (temps >> 4);               // целая часть числа
    drob_tmp = temps & 0x0F;          // дробная часть числа с точностью 1/16 градуса         
     drob  = (unsigned int) ((drob_tmp * 10) / 16); // преобразование дробной части в формате "1/16 градуса" в десятичный формат с точностью 0,1 градуса  
if (temperature<0) {//Если темп. плюсовая или 0
buf5=10;// знак "-" 6разряду
}
buf0=0;//5разряд
buf1=drob;//4разряд
buf2=celie/100;//3разряд
buf3=celie%100/10;//2разряд
buf4=celie%10;//1разряд
j++;           
}
delay_ms(800);
}

Решение задачи: «Разобрать данные ds18b20 и вывести на индикатор7 сегментов»

textual
Листинг программы
    //преобразуем в целое число
    drob_tmp = (drob_tmp<<1) + (drob_tmp<<3);// Умножаем на 10
    drob_tmp = (drob_tmp>>4);//делим на 16 или умножаем на 0.0625

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы