Вывод значения переменной на дисплей

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
hsl
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс ноя 15, 2009 22:34:49

Вывод значения переменной на дисплей

Сообщение hsl »

Доброго времени суток!
Помогите пожалуйста разобратся
Есть функция вывода строк на дисплей

Код: Выделить всё

void LCD_PUTSF(byte x, byte y, flash unsigned char str[]){
	byte i=0;
	//Пока не конец строки выводим символы
	while(str[i]){
		LCD_PUTC(x+i*5+i, y, str[i]);
		i++; 
	}  
}
Для вывода строк типа

Код: Выделить всё

LCD_PUTSF(36,0,"Строка");
Все прекрасно работает
Но есть переменная

Код: Выделить всё

signed char volume;
Как то вот так

Код: Выделить всё

LCD_PUTSF(36,0,&volume);
Типа должно работать, но компилятор ругается, что то про несоответствие типов, и что то я никак не соображу как привести это в соответствие, либо выводить по другому либо подправить функцию. Вобщем запутался что то, помогите разобраться. Делается все это в CodevisionAVR
Реклама
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Вывод значения переменной на дисплей

Сообщение Satyr »

Да уж...
Ну стоит почитать чтото по самым азам программирования.
Реклама
hsl
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс ноя 15, 2009 22:34:49

Re: Вывод значения переменной на дисплей

Сообщение hsl »

Satyr писал(а):Да уж...
Ну стоит почитать чтото по самым азам программирования.
А реально помочь слабо?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Вывод значения переменной на дисплей

Сообщение Engineer_Keen »

Я с Си не очень дружу, но все-же... Думаю проблема в том, что в LCD_PUTSF используется тип flash unsigned char, это массив беззнаковых байтов (строка), который вроде находится во флеше (т.е. зашит в программе на этапе компиляции). А вы пытаетесь ему подсунуть signed char (число в диапазоне +-127), который находится скорее всего в RAM. Значит нужно выводить как-то по другому, переводя число volume в строку и потом используя LCD_PUTC.
Реклама
Эиком - электронные компоненты и радиодетали
hsl
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс ноя 15, 2009 22:34:49

Re: Вывод значения переменной на дисплей

Сообщение hsl »

Engineer_Keen Но ведь в LCD_PUTSF мы же можем передавать любую строку вида LCD_PUTSF(36,0,"Строка"); тогда получается нужно всего лишь привести значение -+127 в строковый вид и подставить вместо прямого ввода строки, или я что то еще не понимаю?

Кстати, сделал вот так

Код: Выделить всё

void LCD_PUTS(byte x, byte y, unsigned char str[]){
    byte i=0;
    //Пока не конец строки выводим символы
    while(str[i]){
        LCD_PUTC(x+i*5+i, y, str[i]+48);
        i++; 
    }  
}
теперь при попытке вывести вот так

Код: Выделить всё

LCD_PUTS(10,10,&volume); 
компилятор не ругается, но выводится не строка а один символ.

Я понимаю, что я чего то не понимаю, и непонимаю каких то элементарных вещей, но весь день уже сегодня копаюсь в разных примерах и книжках в инете, но что бы дошло очевидно нужен какой то конкретный совет или пример по теме.
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вывод значения переменной на дисплей

Сообщение ChipKiller »

hsl писал(а):но выводится не строка а один символ
... а может и ни одного не вывести - все зависит от условия

Код: Выделить всё

while(str[i])
Реклама
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Вывод значения переменной на дисплей

Сообщение Satyr »

hsl писал(а): А реально помочь слабо?
Решение очевидно - преобразовать значение в строку.
если там есть стандартные сишные библиотеки и места для кода не сильно припирает - использоваться sprintf()

char tmpstr[4];
sprintf(tmpstr, "%d", val);
LCD_PUTC(x, y, tmpstr);
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вывод значения переменной на дисплей

Сообщение ChipKiller »

Satyr писал(а):Решение очевидно - преобразовать значение в строку.
если там есть стандартные сишные библиотеки и места для кода не сильно припирает - использоваться sprintf()

char tmpstr[4];
... только не char tmpstr[4] - если значение signed char, например, = -100, то места чуть-чуть не хватит :), т.к. строка должна завершаться 0.
hsl
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс ноя 15, 2009 22:34:49

Re: Вывод значения переменной на дисплей

Сообщение hsl »

Satyr писал(а): Решение очевидно - преобразовать значение в строку.
если там есть стандартные сишные библиотеки и места для кода не сильно припирает - использоваться sprintf()

char tmpstr[4];
sprintf(tmpstr, "%d", val);
LCD_PUTC(x, y, tmpstr);
Когда знаешь конечно очевидно, а вот когда еще изучаешь, не всегда понятно даже что искать, через sprintf() все заработало, а галвное я понял принцип, теперь можно двигатся дальше, спасибо за помощь.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»