LCD128*64 spi на ST7567. Есть вопросы.

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 118
Зарегистрирован: Вт апр 21, 2020 07:44:24
Откуда: Сумы, Украина

Сообщение Alek_von_German »

Доброго здравия всем откликнувшимся. Купил неглядя дешовый дисплей на контроллере ST7567, почему-то мне подумалось, что под него есть цельная куча библиотек и примеров использования. Но, оказалось нет. С горем пополам отыскал образец но он для 7565, я так понял-они идентичные. Код был изначально под STM. Портировать под atmega48 не составило труда.
Так вот, если писать что-то типа prints("hello world" ); на дисплее всё хорошо выводится, но вот если пытаться выводить значения переменных
gotoXy(2,1);
prints(znak/100+0 );
gotoXy(2,8);
prints(znak/10+0 );
gotoXy(2,17);
prints(znak%10+0 );
gotoXy(2,28);
prints(znak+0);

_delay_ms(1000); //
znak++; //
- то ничего не показывает. Подскажите, это я что-то делаю на так (что скорее всего), либо библиотеку нужно переделывать полностью? Ниже прикрепил архив с проэктом. Можт подскажете...
Вложения
128-64.zip
(41.35 КБ) 319 скачиваний
Хочется всё и сразу, а получаешь нихрена и постепенно...
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 57
Зарегистрирован: Ср янв 03, 2018 01:36:14

Сообщение VALNER »

По тому что вы не правильно их выводите.
Alek_von_German писал(а): gotoXy(2,1);
prints(znak/100+0 );
gotoXy(2,8);
prints(znak/10+0 );
gotoXy(2,17);
prints(znak%10+0 );
gotoXy(2,28);
prints(znak+0);
здесь две ошибки (если не три).
Во первых.
не + 0 а + '0'.




Во вторых. Как пример возьмем znak = 234.

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

prints(znak/100+0 ); -> prints(234/100)  = 2 (OK)
prints(znak/10+0 );   -> prints(234/10)    = 23 (FAIL)
prints(znak%10+0 ); -> prints(234%10)  = 4(OK)
prints(znak+0);         -> prints(234)        = 324(ЗАЧЕМ?)
Правильно (ну или не правильно, но работать должно)

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

prints('0'+ (znak   / 100);
prints('0'+ (znak % 100)/ 10);
prints('0'+  znak % 10);
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 118
Зарегистрирован: Вт апр 21, 2020 07:44:24
Откуда: Сумы, Украина

Сообщение Alek_von_German »

VALNER, ну '0', я тоже брал в одинарные кавычки. А в чем разница если '0' будет перед переменной или за ней?
Хочется всё и сразу, а получаешь нихрена и постепенно...
Открыл глаза
Аватара пользователя
Сообщения: 57
Зарегистрирован: Ср янв 03, 2018 01:36:14

Сообщение VALNER »

[uquote="Alek_von_German",url="/forum/viewtopic.php?p=3940842#p3940842"]VALNER, поясните пожалуйста prints(0x0f+ (znak / 100);, зачем 0х0f?[/uquote]

Ошибся. Вернее не заметил после копипаста. То как раз тот сдвиг +'0'.
В ответе я исправил.

Добавлено after 7 minutes 43 seconds:
[uquote="Alek_von_German",url="/forum/viewtopic.php?p=3940842#p3940842"]VALNER, ну '0', я тоже брал в одинарные кавычки. А в чем разница если '0' будет перед переменной или за ней?[/uquote]

Да ни в чем.

И еще, судя по хедеру из приложенного массива.

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

void prints( char *s);
Требует указатель на строку. При этом вы ему скармливаете просто char.
Как он при этом не ругается при компиляции?
На сколько я понимаю для отправления именно символа нужно использовать
следующую функцию.

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

void printc(unsigned char);
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 118
Зарегистрирован: Вт апр 21, 2020 07:44:24
Откуда: Сумы, Украина

Сообщение Alek_von_German »

VALNER, хм. Замечание интересное. Нужно ещё раз пересмотреть библиотеки... И да, он варнинги выплевывал...
Хочется всё и сразу, а получаешь нихрена и постепенно...
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 118
Зарегистрирован: Вт апр 21, 2020 07:44:24
Откуда: Сумы, Украина

Сообщение Alek_von_German »

VALNER, Вы совершенно правы, нужно было использовать функцию printc(...);
Хочется всё и сразу, а получаешь нихрена и постепенно...
Реклама
Ответить

Вернуться в «AVR»