Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.05.2010, 22:03
|
|
Частый гость
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
|
CCS C compiller, файл <LCD.C>
Приветствую всех! Добрый вечер.
Подскажите пожалуйста, как вывести на дисплей массив из восьми переменных типа char (byte), в шестнадцатиричном представлении?
Суть в том, что для отображения 16 символов в hex представлении 8 байтов данных нужно их перекодировать. Как это сделать?
В литературе я нашёл 2 способа вывода символов которые мне на мой взгляд подойдут:
1) функция lcd_putc() которая является составной частью файла LCD.C.
2) функция printf()
Между тем, обнаружились две проблемы:
1) При использовании функции lcd_putc() вот в таком виде:
Код:
|
lcd_putc("%X", Data2[]); |
Компилятор выдаёт сообщение об ошибке: Expecting a close paren, пока я не удалю вот это: %X, а это и есть команда вывода данных в hex представлении.
2) При попытке использования функции printf() которая допускает использование такого форматирования, компилятор просит назначить драйвер интерфейса RS232, а я его не хочу!!! Зачем мне он. Мне он не нужен. Я его в программе не использую...
Что делать?
|
|
|
|
18.05.2010, 22:15
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: CCS C compiller, файл <LCD.C>
Zepp Ditrich,
PHP код:
|
printf(lcd_putc,"Hello world");
printf(lcd_putc,"%03u %Lu ",g,i);
|
Где lcd_putc() - вывод одиночного символа!!!
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
18.05.2010, 22:27
|
|
Частый гость
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
|
Re: CCS C compiller, файл <LCD.C>
Сообщение от dosikus
|
printf(lcd_putc,"%03u %Lu ",g,i);
|
Спасибо что подсказали!
Вот так ошибки нет:
Код:
|
printf(lcd_putc,"%X",Data1[0]);
printf(lcd_putc,"%X",Data1[1]);
printf(lcd_putc,"%X",Data1[2]);
printf(lcd_putc,"%X",Data1[3]);
printf(lcd_putc,"%X",Data1[4]);
printf(lcd_putc,"%X",Data1[5]);
printf(lcd_putc,"%X",Data1[6]);
printf(lcd_putc,"%X",Data1[7]); |
А сократить не получится? Я чувствую что это по дурному я как-то накалякал
Только через цикл for, да?
Последний раз редактировалось Zepp Ditrich; 18.05.2010 в 22:32.
Причина: Дополнение
|
|
|
|
18.05.2010, 22:52
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: CCS C compiller, файл <LCD.C>
Сообщение от Zepp Ditrich
|
Только через цикл for, да?
|
В цикле естественно , не обязательно for , можно и while и do while и if goto .
Главное что в цикле ....
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
19.05.2010, 00:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: CCS C compiller, файл <LCD.C>
Сообщение от dosikus
|
Что делать?
|
Кроме printf есть еще sprintf - выводит результат в обычный буфер в памяти. Дальше можно на индикатор или еще куда.
|
|
|
|
21.05.2010, 19:56
|
|
Частый гость
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
|
Re: CCS C compiller, файл <LCD.C>
Подскажите пожалуйста. Я с функцией не могу разобраться
Код:
|
void lcd_gotoxy(BYTE x, BYTE y)
{
BYTE address;
if(y!=1)
address=LCD_LINE_TWO;
else
address=0;
address+=x-1;
lcd_send_byte(0,0x80|address);
#if defined(LCD_EXTENDED_NEWLINE)
g_LcdX = x - 1;
g_LcdY = y - 1;
#endif
} |
Параметр адреса строки передаётся в эту функцию в переменной "y"?
А В переменной "x" передаётся адрес символа этой сторки?
А если дисплей 16 символьный в одну строку, поделён физически на две строки. Вторая строка у меня в ассемблерной прогамме при обращении к этому дисплею начинается с адреса 0x40. Это адрес первого символа второй строки. Как мне быть, если эта функция почему-то считает, что вторая строка начинается с адреса 0x80
Я ещё не могу прочесть что значит LCD_EXTENDED_NEWLINE. Там с этим параметром здорово запутано... Может как-то его устанавливать нужно, но что он означает?
Последний раз редактировалось Zepp Ditrich; 21.05.2010 в 19:59.
|
|
|
|
21.05.2010, 20:09
|
|
Частый гость
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
|
Re: CCS C compiller, файл <LCD.C>
А "__PCH__" где то устанавливать нужно? Или это назначает сам компилятор исходя из типа применяемого контроллера? Что это вообще такое? Типа класс процессора?
Просмотрел файл ‹device.h› (‹18F458.h›) - в нём такого слова нет...
|
|
|
|
21.05.2010, 20:14
|
|
Частый гость
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
|
Re: CCS C compiller, файл <LCD.C>
Сообщение от Zepp Ditrich
|
Спасибо что подсказали!
Вот так ошибки нет:
Код:
|
printf(lcd_putc,"%X",Data1[0]);
printf(lcd_putc,"%X",Data1[1]);
printf(lcd_putc,"%X",Data1[2]);
printf(lcd_putc,"%X",Data1[3]);
printf(lcd_putc,"%X",Data1[4]);
printf(lcd_putc,"%X",Data1[5]);
printf(lcd_putc,"%X",Data1[6]);
printf(lcd_putc,"%X",Data1[7]); |
А сократить не получится? Я чувствую что это по дурному я как-то накалякал
Только через цикл for, да?
|
Сократил вот так:
Код:
|
void LCD_IND_DATA(LCD_Data[], LCD_Dat) { //LCD_Dat это указатель на массив LCD_Data[]
unsigned int8 i;
for(i=0; i‹8; i++){
printf(lcd_putc,"%X",LCD_Dat);
LCD_Dat++;
} |
Незнаю правильно ли? Выведется ли строка в виде массива в hex?
|
|
|
|
21.05.2010, 21:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: CCS C compiller, файл <LCD.C>
Сообщение от Zepp Ditrich
|
Незнаю правильно ли?
|
Если уж LCD_Dat указатель, то и работать с ним надо как указателем:
Код:
|
void LCD_IND_DATA(/*type of array*/ *LCD_Dat) { //LCD_Dat это указатель на массив LCD_Data[]
unsigned int8 i;
for(i=0; i‹8; i++) printf(lcd_putc,"%X",*LCD_Dat++);
} |
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
21.05.2010, 21:54
|
|
Частый гость
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
|
Re: CCS C compiller, файл <LCD.C>
Сообщение от AJScorp
|
void LCD_IND_DATA(/*type of array*/ *LCD_Dat) { //LCD_Dat это указатель на массив LCD_Data[]
unsigned int8 i;
for(i=0; i‹8; i++) printf(lcd_putc,"%X",*LCD_Dat++);
}
|
Наверное Вы правы. Я заменил кусок кода на Ваш, буду пробовать. Компилятор ошибок не выдал. Дело в том, что я осваиваю СИ по книге "Программирование на СИ для АВР и ПИК микроконтроллеров" автора Шпака. А у него в примерах указатели со звёздочкой перед ним фигурируют только при их объявлении. Дальше, при обращении к ним, звёздочка не ставится перед наименованием указателя. Для меня это тоже странно. Очень хочется её поставить. Иначе можно запутаться, но я не ставил потому что незнаю будет ли это правильным. Мне удобнее конечно ставить для наглядности.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:05.
|
|