java писал(а):СпасибоНет, я лучше подберу где-нибудь на свалке старенький комп, специально для программатора.
Ну да это точно проще чем винду переставить, ппц
java писал(а):СпасибоНет, я лучше подберу где-нибудь на свалке старенький комп, специально для программатора.
BCluster писал(а):Ну да это точно проще чем винду переставить, ппц
java писал(а):Не вижу смысла.Винду я сам не ставлю, отдаю знакомому
a.garkin писал(а):часы перестают идти...
__interrupt void Timer1CompA(void)
{
ES_PlaceEvent(EVENT_SYS_TIMER);
}
vbif87 писал(а): //для вывода значения температуры с точностью до одной сотой, %u заменить на %.3f ( диапазон 0-3 )
//переменную temper нужно записать как float temper;
Код: Выделить всё
unsigned char digit_ar[14] = {0b11111010, //0-
0b10000010, //1-
0b10111001, //2-
0b10101011, //3-
0b11000011, //4-
0b01101011, //5-
0b01111011, //6-
0b10100010, //7-
0b11111011, //8-
0b11101011, //9-
0b00000100, //. -
0b00000000, // empty
0b00000001, //-
0b11100001 //значок градуса
}; Код: Выделить всё
void main(void)
{
float znach;
unsigned char str1[3];
ds18b20_init(0,0,0,0);
avr_init();
#asm("sei");
while (1)
{
znach=ds18b20_temperature(0);
itoa((int)znach, str);
str1[0] = '+';
strcat(str, str1);
};
}Код: Выделить всё
void avr_init(void);
//Timer 0 interrupt
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
unsigned char m;
bit c;
TCNT0 = 0;
if (str[SignPlace] == '.') { //вывести знак "точка"
m = 10;
c = 1;
};
if (str[SignPlace] == '+') { //вывести знак "градус"
m = 13;
c = 1;
};
if (str[SignPlace] == '-') { //вывести знак "минус"
m = 12;
c = 1;
};
if (str[SignPlace] == ' ') { //вывести знак "пробел"
m = 11;
c = 1;
};
if (isprint(str[SignPlace]) == 0) {
m = 11;
c = 1;
};
if (c == 0) {
m = toint(str[SignPlace]);
}
PORTD = 0;
PORTB = 0;
PORTB = digit_ar[m];
PORTD = SPlace_ar[SignPlace];
c = 0;
SignPlace = SignPlace + 1;
if (SignPlace == 4) SignPlace = 0;
}
Мастер Ломастер писал(а):почитайте о том, как делать динамическую индикацию на 7-сегментниках, и тогда вопрос "как добавить точку" у вас должен отпасть сам собой.
Код: Выделить всё
#define COMMA_CHAR '.'
unsigned char SPlace_ar[4] = { 0b01000000,
0b00100000,
0b00010000,
0b00001000};
****
float znach;
****
while (1)
{
znach=ds18b20_temperature(0)*10;
itoa((int)znach, str);
SPlace_ar[4-1] |=COMMA_CHAR;
};ититьтвоючерезкоромыслопустымведромпоголове!levaclaus писал(а):статья гуд, но как быть с отрицательным числом? разряд то смещается.
Код: Выделить всё
massiv[4] - это 4 ваших индикатора.
out() - это функция, которая тупо выводит 3 разряда числа в этот массив "с конца", вроде как было описано в вышеупомянутой статье
temp - ваша температура, которая может быть с минусом
MINUS - макрос, задающий отображение знака минус
COMMA - макрос, задающий свечение точки на индикаторе
if(temp < 0){ // если температура отрицательная,
out(-temp); // то выводим ее по модулю и
massiv[0] = MINUS; // в первом индикаторе зажигаем минус
} else { // а если положительная,
out(temp); // то выводим ее, как есть
massiv[0] = 0; // и гасим первый индикатор
}
massiv[2] |= COMMA; // а потом тупо добавляем точку к нужному разряду