Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 18.05.2010, 22:03  
Zepp Ditrich
Частый гость
 
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Zepp Ditrich на пути к лучшему
По умолчанию 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, а я его не хочу!!! Зачем мне он. Мне он не нужен. Я его в программе не использую...

Что делать?
Реклама:
Zepp Ditrich вне форума  
Непрочитано 18.05.2010, 22:15  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: CCS C compiller, файл <LCD.C>

Zepp Ditrich,
PHP код:
printf(lcd_putc,"Hello world");
 
printf(lcd_putc,"%03u   %Lu ",g,i); 
Где lcd_putc() - вывод одиночного символа!!!
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
Zepp Ditrich (18.05.2010)
Непрочитано 18.05.2010, 22:27  
Zepp Ditrich
Частый гость
 
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Zepp Ditrich на пути к лучшему
По умолчанию 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. Причина: Дополнение
Zepp Ditrich вне форума  
Непрочитано 18.05.2010, 22:52  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: CCS C compiller, файл <LCD.C>

Сообщение от Zepp Ditrich Посмотреть сообщение
Только через цикл for, да?
В цикле естественно , не обязательно for , можно и while и do while и if goto .
Главное что в цикле ....
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
Zepp Ditrich (21.05.2010)
Непрочитано 19.05.2010, 00:36  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: CCS C compiller, файл <LCD.C>

Сообщение от dosikus Посмотреть сообщение
Что делать?
Кроме printf есть еще sprintf - выводит результат в обычный буфер в памяти. Дальше можно на индикатор или еще куда.
kison вне форума  
Сказали "Спасибо" kison
Zepp Ditrich (21.05.2010)
Непрочитано 21.05.2010, 19:56  
Zepp Ditrich
Частый гость
 
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Zepp Ditrich на пути к лучшему
По умолчанию 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.
Zepp Ditrich вне форума  
Непрочитано 21.05.2010, 20:09  
Zepp Ditrich
Частый гость
 
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Zepp Ditrich на пути к лучшему
По умолчанию Re: CCS C compiller, файл <LCD.C>

А "__PCH__" где то устанавливать нужно? Или это назначает сам компилятор исходя из типа применяемого контроллера? Что это вообще такое? Типа класс процессора?
Просмотрел файл ‹device.h› (‹18F458.h›) - в нём такого слова нет...
Zepp Ditrich вне форума  
Непрочитано 21.05.2010, 20:14  
Zepp Ditrich
Частый гость
 
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Zepp Ditrich на пути к лучшему
По умолчанию 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?
Zepp Ditrich вне форума  
Непрочитано 21.05.2010, 21:33  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" AJScorp
Zepp Ditrich (21.05.2010)
Непрочитано 21.05.2010, 21:54  
Zepp Ditrich
Частый гость
 
Регистрация: 15.05.2010
Адрес: Екатеринбург
Сообщений: 19
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Zepp Ditrich на пути к лучшему
По умолчанию 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++);
}
Наверное Вы правы. Я заменил кусок кода на Ваш, буду пробовать. Компилятор ошибок не выдал. Дело в том, что я осваиваю СИ по книге "Программирование на СИ для АВР и ПИК микроконтроллеров" автора Шпака. А у него в примерах указатели со звёздочкой перед ним фигурируют только при их объявлении. Дальше, при обращении к ним, звёздочка не ставится перед наименованием указателя. Для меня это тоже странно. Очень хочется её поставить. Иначе можно запутаться, но я не ставил потому что незнаю будет ли это правильным. Мне удобнее конечно ставить для наглядности.
Zepp Ditrich вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Чем открыть файл "PSF" Electric75 Делимся опытом 4 13.03.2010 00:12
CCS PICC+Proteus+MPLAB=? batalionok Микроконтроллеры, АЦП, память и т.д 40 06.11.2009 16:22


Часовой пояс GMT +4, время: 14:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot