Страница 1 из 1

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

Добавлено: Вс дек 13, 2020 00:33:30
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++; //
- то ничего не показывает. Подскажите, это я что-то делаю на так (что скорее всего), либо библиотеку нужно переделывать полностью? Ниже прикрепил архив с проэктом. Можт подскажете...

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

Добавлено: Вс дек 13, 2020 01:30:36
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);

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

Добавлено: Вс дек 13, 2020 01:33:51
Alek_von_German
VALNER, ну '0', я тоже брал в одинарные кавычки. А в чем разница если '0' будет перед переменной или за ней?

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

Добавлено: Вс дек 13, 2020 01:46:39
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);

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

Добавлено: Вс дек 13, 2020 01:50:53
Alek_von_German
VALNER, хм. Замечание интересное. Нужно ещё раз пересмотреть библиотеки... И да, он варнинги выплевывал...

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

Добавлено: Вс дек 13, 2020 14:51:28
Alek_von_German
VALNER, Вы совершенно правы, нужно было использовать функцию printc(...);