Разобрать данные 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