Перейти к содержанию

Как вывести переменную на WH0802


Гость химик

Рекомендуемые сообщения

Добрый день. Делаю термометр на двух DS1820 + 90s2313. Проблема в том, что размер памяти 1kB, а эта жирная функция забирает 60% от обьема. Делал вот так:

     sprintf(text,"t1 %d",ds1820_temperature_10(&ds1820_rom_codes[0][0])/10); 
   lcd_gotoxy(0,0);
   lcd_puts(text);
   lcd_putchar(0x01);
   lcd_putchar(0x43);  

Один из градусников будет работать в промежутке -40 ... +50 (грубо говоря). Поетому знак должен меняться и если число меньше 10, не должно сползать влево. Искал в интернете, нашел что-то типа такого:

    lcd_gotoxy(0,0);
   lcd_putchar('t');
   lcd_putchar('=');
   lcd_gotoxy(3,0);
   lcd_putchar(x/10 + 0x30):                   ???????????????
   lcd_putchar(x%10 + 0x30):                  ???????????????
   lcd_putchar(0x01);    // мой символ
   lcd_putchar('C'); 

 

Должно получиться вот что t= +18*C

 

Вот как ето правильно сделать? И как выводить знак +/-?

Изменено пользователем химик
Ссылка на комментарий
Поделиться на другие сайты

...Проблема в том, что размер памяти 1kB, а эта жирная функция забирает 60% от обьема. ...

При таком размере памяти надо писать не на "С", а на Ассемблере.

Заодно и такие вопросы

...И как выводить знак +/-?...

возникать не будут. Знак - старший бит 9-битного результата DS1820.

Изменено пользователем Lexter
Ссылка на комментарий
Поделиться на другие сайты

При таком размере памяти надо писать не на "С", а на Ассемблере.

Ага. Осталось только выучить Ассемблер и через пол годика у меня будет термометр.

 

Заодно и такие вопросы

возникать не будут. Знак - старший бит 9-битного результата DS1820.

С этим уже разобрался, просто не сразу понял, что указатель %d выведет на дисплей знаковое число.

 

Сделал вот так

    temp = ds1820_temperature_10(&ds1820_rom_codes[0][0])/10; 
   Block_Char();
   lcd_gotoxy(0,0);
   lcd_putchar('t');
   lcd_putchar('1'); 
   lcd_putchar(0x20);            // пробел
   lcd_putchar(sign);
   lcd_putchar(De);
   lcd_putchar(Ee);   
   lcd_putchar(0x01);
   lcd_putchar(0x43);  

void Block_Char(void){
 
 if(temp <= -1) sign = 0x2d;
 if(temp <= 1) sign = 0x2b;   
 if(temp <= 0) sign = 0x20; 
 
   De = temp/10;
   if(De != 0){
     De = De + 0x30;
     }else{
       De = 0x20;
       }
       
   Ee = (temp%10) + 0x30;  

}

 

Мне нужно было знать как выводиться переменная через lcd_putchar(); :smile:

 

Теперь другая проблема - нешьеться 90s2313. Выскакивает ошибка начала програмирования. В закромах лежит и Tynni2313, но и старушку 90s жалко выбрасывать. Для такой простинькой схемы ее и берег.

Что может быть?

P.S. Внешний кварц 4МгЦ, меандр с программатора тоже непомагает.

Ссылка на комментарий
Поделиться на другие сайты

...Теперь другая проблема - нешьеться 90s2313. Выскакивает ошибка начала програмирования. ...

Да, встречается такое. Приходится читать рекомендации от авторов чипа (https://www.atmel.com/Images/doc0839.PDF со страницы 60 и далее) долго и до просветления, сверяя написанное с тем, что на осциллографе.

Изменено пользователем Lexter
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...