реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Вывод на ЖКИ значений переменных.
andre583
сообщение Mar 7 2008, 15:21
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 7-03-08
Пользователь №: 35 720



Подскажите новичку, как выводить значения переменных на экран ЖКИ HD44780 при программировании в CodeVisionAVR. Вывод символьных строк и отдельных символов получается, а значений переменных - нет.
C примером на Си, пожалйста.
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Mar 7 2008, 15:27
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Цитата(andre583 @ Mar 7 2008, 18:21) *
Подскажите новичку, как выводить значения переменных на экран ЖКИ HD44780 при программировании в CodeVisionAVR. Вывод символьных строк и отдельных символов получается, а значений переменных - нет.
C примером на Си, пожалйста.


Если CV поддерживает sprintf, то сделать можно так:
Код
#include <stdio.h>

int x = 123;
char s[17];
sprintf(s, "x = %i", x);

// Дальше выводим строку s на индикатор, той функцией, что у Вас имеется
Go to the top of the page
 
+Quote Post
andre583
сообщение Mar 7 2008, 15:33
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 7-03-08
Пользователь №: 35 720



Спасибо, все заработало!!!
Go to the top of the page
 
+Quote Post
А.Петрович
сообщение Mar 20 2008, 08:41
Сообщение #4





Группа: Новичок
Сообщений: 8
Регистрация: 20-03-08
Пользователь №: 36 074



Цитата(andre583 @ Mar 7 2008, 18:33) *
Спасибо, все заработало!!!


Приветствую , Вас. А у меня нет sad.gif На sprintf дебагер Протеуса останавливается и все... Дисплей горит, но дальше никаких действий. stdio.h в CVAvr присутствует. Размер 1.9kb. В чем может быть дело ?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 20 2008, 09:30
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



sprintf формирует строку символов в памяти. Дальше её надо отправить на индикатор, как обычно.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
А.Петрович
сообщение Mar 20 2008, 10:00
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 20-03-08
Пользователь №: 36 074



Цитата(MrYuran @ Mar 20 2008, 12:30) *
sprintf формирует строку символов в памяти. Дальше её надо отправить на индикатор, как обычно.

Понимаю, что туплю... Занялся мк буквально неделю назад - интересно стало. За неделю разобрался с прерываниями, умудрился спидометр сделать (пока только в эмуляции) с выходом на семисегментные матрицы светодиодные и решил это дело перевести на LCD. Но что-то никак непойму эти функции вывода. Вот кусок кода :

lcd_init(16);
lcd_putsf("Test\nSpeed - control");
delay_ms(2000);
lcd_clear();
x=123;
sprintf(s,"x = %i", x) ;
lcd_puts(s);

Все что до sprintf - работает. Где я затупил ?

Прошу прощения, что спрашиваю такие элементарные вещи. Сейчас сижу вычитываю форум....
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 20 2008, 10:22
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Вверху - lcd_putsf()
внизу - lcd_puts()
Хотя, может просто описка
Можно глянуть на описание функции?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
А.Петрович
сообщение Mar 20 2008, 10:41
Сообщение #8





Группа: Новичок
Сообщений: 8
Регистрация: 20-03-08
Пользователь №: 36 074



Цитата(MrYuran @ Mar 20 2008, 13:22) *
Вверху - lcd_putsf()
внизу - lcd_puts()
Хотя, может просто описка
Можно глянуть на описание функции?


У меня внизу lcd_puts. Я что-то совсем ничего не пойму. Функции берутся из lcd.h, и там они описаны так :
------------------------------------------------------------
#ifndef _LCD_INCLUDED_
#define _LCD_INCLUDED_

#pragma used+
.......
// write the string str located in SRAM to the LCD
void lcd_puts(char *str);
// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str);
.......
#pragma used-
#pragma library lcd.lib

#endif
---------------------------------------------------------------
Как я понимаю, нужно смотреть функции в lcd.lib ? Если так, то там вот что :

// write the string str located in SRAM to the LCD
void lcd_puts(char *str)
{
char k;
while (k=*str++) lcd_putchar(k);
}

// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str)
{
char k;
while (k=*str++) lcd_putchar(k);
}

-----------------------------------------------------------------
и теперь я в полном тупике - обе функции описаны совершенно одинаково...
О smile.gif Нашел разницу, пардон.

Сообщение отредактировал А.Петрович - Mar 20 2008, 10:43
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 20 2008, 11:13
Сообщение #9


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



разница только в том, что одна функция берёт строки-константы из флеши, другая - из озу.
если s - это массив char'ов, то вроде должно работать.
Если только sprintf не работает...
Хотя с чего бы ему не работать?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
А.Петрович
сообщение Mar 20 2008, 11:24
Сообщение #10





Группа: Новичок
Сообщений: 8
Регистрация: 20-03-08
Пользователь №: 36 074



Цитата(MrYuran @ Mar 20 2008, 14:13) *
Если только sprintf не работает...
Хотя с чего бы ему не работать?

Вот меня и терзают смутные сомнения sad.gif перерастающие в уверенность. Если б была какая-то проблема с lcd_puts(), то либо комприллятор ругнулся бы, либо просто ничего б не вывелось и программа пошла бы дальше, а там след.строкой опять стоит lcd_putsf("Text") . Как только убираю sprintf - печатается след.строка. Вот код :
-------------------------------
......
x=1;
//sprintf(s,"x = %i", x) ;
lcd_puts(s);
delay_ms(200);
lcd_putsf("sprintf not work !!!");
---------------------------------

В результате на дисплее "sprintf not work !!!".
Вопрос в следущем - как проверить stdio.h на "рабочесть" ?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 20 2008, 11:47
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(А.Петрович @ Mar 20 2008, 14:24) *
Вопрос в следущем - как проверить stdio.h на "рабочесть" ?

Про CodeVision врать не буду - не работал.
Вот если MSP430+IAR - то пожалуйста.

Может, попробовать
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

Хуже-то не станет...

А линкёр не ругается?
может пути до библиотек не прописаны и он не может прилинковать, и молчит себе в тряпочку?

Сообщение отредактировал MrYuran - Mar 20 2008, 11:50


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
А.Петрович
сообщение Mar 20 2008, 12:52
Сообщение #12





Группа: Новичок
Сообщений: 8
Регистрация: 20-03-08
Пользователь №: 36 074



Цитата(MrYuran @ Mar 20 2008, 14:47) *
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

Хуже-то не станет...

А линкёр не ругается?
может пути до библиотек не прописаны и он не может прилинковать, и молчит себе в тряпочку?

Линкер не ругается, библиотеки подцепляются. Кажется понял я в чем дело. А дело в форматном выводе. Неправильно указываю тип выводимых данных похоже.

sprintf(s,"%i",x)

весь вопрос в том что ставить после %. Теперь вот роюсь в хелпах. Может на вскидку подскажете. Все перепробовал и i и f и u.
Люди добрые, подскажите какие там буковки вообще могут быть. Все что у Кернигана с Ритчи указано перепробовал sad.gif По моему разумению, для вышеуказанного примера должно быть либо i либо d - но не работает... Может в CVAvr свои какие-то понятия о форматном выводе ?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 20 2008, 13:33
Сообщение #13


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



а может, так попробовать?

sprintf(s,"Test");

уж если это не прокатит, то форматный вывод ни при чём
Ещё можно попробовать передать в функцию lcd_... указатель на s, хотя вроде имя массива и так должно быть указателем

Можно ещё вот чего: инициализировать массив s какой-нибудь строкой и попытаться вывести.
Только в конце строки обязательно должен стоять 0


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
А.Петрович
сообщение Mar 20 2008, 13:40
Сообщение #14





Группа: Новичок
Сообщений: 8
Регистрация: 20-03-08
Пользователь №: 36 074



Цитата(MrYuran @ Mar 20 2008, 16:33) *
а может, так попробовать?

sprintf(s,"Test");

Это-то прокатывает sad.gif Проходит даже
sprintf(s,"%c",x);
Выдает символ соответствующий скан коду знакогенерируещей таблицы...
Может s как-то по другому описывать надо ? Может не char s[33] ?


Цитата(MrYuran @ Mar 20 2008, 16:33) *
Ещё можно попробовать передать в функцию lcd_... указатель на s, хотя вроде имя массива и так должно быть указателем

Можно ещё вот чего: инициализировать массив s какой-нибудь строкой и попытаться вывести.
Только в конце строки обязательно должен стоять 0

Попробую пока второй вариант. Спасибо за подсказки a14.gif
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Mar 20 2008, 13:56
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



А если в настройках Project-Configure-C Compiler установить параметры sprintf в "long, widht"? Может поможет?..


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 11:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016