Заранее благодарен!
Заранее благодарен!
Ну, специально для вас прошивку переписывать никто не будет, тем более, что, для того, чтобы не было "десятых", достаточно этот разряд индикатора просто не использовать (не ставить, или не подключать.Batters_ghw писал(а):Приветствую форумчане, решил собрать термометр http://radiokot.ru/circuit/digital/home/61/. Но вот незадача, так как термометр будет устанавливаться в машину, а десятые доли градуса мне не нужны, хотел бы попросить вас переписать прошивку.
Код: Выделить всё
void view_term(void) {
unsigned char celie, drob, tmp;
unsigned int temp, celie_tmp, drob_tmp;
temp = (unsigned int) temperature;
if (temperature>=0) {
digit_out[0]=PROBEL; // первый символ (сотни) пустой
} else {
temp = ( ~temp ) + 0x0001; // если число отрицательное перевести его в норм.вид
digit_out[0]=MINUS; // и высветить знак минус (в дальнейшем атрибут отр.темп.)
};
zpt_ON=1;
celie_tmp = temp >> 4; // целая часть числа
drob_tmp = temp & 0x000F; // дробная часть числа с точностью 1/16 градуса
drob = (unsigned char) ((drob_tmp * 10) / 16); // преобразование дробной части в формате "1/16 градуса" в десятичный формат с точностью 0,1 градуса
celie = (unsigned char) celie_tmp; // я люблю явное преведение типов
if (celie >= 100) {tmp=bin2bcd(celie-100); digit_out[0] = 1; } else { tmp=bin2bcd(celie); } // вычислить целую часть
if ((celie >= 100) || ((digit_out[0] == MINUS) && (celie >= 10))) { // если больше 100,0 гр. или если темп. меньше -10 точность 1 гр.
zpt_ON=0;
digit_out[1] = tmp >> 4; // десятки
digit_out[2] = tmp & 0x0F; // единицы
}
if ((digit_out[0] == MINUS) && (celie < 10)) { // если темп.меньше 0 и больше -10 точность 0,1 гр.
digit_out[1] = celie; // единицы
digit_out[2] = drob; // дробная часть
}
if ((digit_out[0] == PROBEL) && (celie < 100)) { // если темп. меньше 100,0 гр и больше 0 гр точность 0,1 гр.
if (tmp >> 4) digit_out[0] = tmp >> 4; // десятки - если десятков нет то и не показывать
digit_out[1] = tmp & 0x0F; // единицы
digit_out[2] = drob; // дробная часть
}
} // -------------------------------------------------------------------------Batters_ghw писал(а):Это всё очень хорошо, но танцы с бубном в виде покупки ещё 2-х индикаторов меня не устраивают, к тому же их не вставить в место заглушки в моё авто.
Код: Выделить всё
void view_term(void) {
unsigned char celie, tmp;
unsigned int temp, celie_tmp;
temp = (unsigned int) temperature;
if (temperature>=0) {
digit_out[0]=PROBEL; // первый символ (сотни) пустой
} else {
temp = ( ~temp ) + 0x0001; // если число отрицательное перевести его в норм.вид
digit_out[0]=MINUS; // и высветить знак минус (в дальнейшем атрибут отр.темп.)
};
zpt_ON=0;
celie_tmp = temp >> 4; // целая часть числа
celie = (unsigned char) celie_tmp; // я люблю явное преведение типов
if (celie >= 100) {tmp=bin2bcd(celie-100); digit_out[0] = 1; } else { tmp=bin2bcd(celie); } // вычислить целую часть
if ((celie >= 100) || ((digit_out[0] == MINUS) && (celie >= 10))) { // если больше 100,0 гр. или если темп. меньше -10 точность 1 гр.
digit_out[1] = tmp >> 4; // десятки
digit_out[2] = tmp & 0x0F; // единицы
}
if ((digit_out[0] == MINUS) && (celie < 10)) { // если темп.меньше 0 и больше -10 точность 1 гр.
digit_out[1] = PROBEL; // десятки
digit_out[2] = celie; // единицы
}
if ((digit_out[0] == PROBEL) && (celie < 100)) { // если темп. меньше 100,0 гр и больше 0 гр точность 1 гр.
digit_out[1] = PROBEL; // десятки
if (tmp >> 4) digit_out[1] = tmp >> 4; // десятки - если десятков нет то и не показывать
digit_out[2] = tmp & 0x0F; // единицы