Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.08.2016, 00:08
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
LCD1602A сделать backspace
Привет. Прикрутил матричную клаву к stm32, и повесил дисплей. Вывожу на экран то что набираю на клаве. Вопрос, как организовать, когда нажимаешь на звёздочку, что бы напечатанный символ стирался ну и соответственно курсор возвращался на 1 место назад. Мои мысли такие:
при нажатии на *
1. Узнать текущий адрес курсора
2 Сделать минус на 1 ячейку.
3. Очистить только эту ячейку (остальные не трогать)
4. Поставить курсор на 1 поз назад.
Я не знаю только как делать пункты 1 и 3.
Не подскажете?
|
|
|
|
15.08.2016, 00:51
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,659
Сказал спасибо: 74
Сказали Спасибо 1,801 раз(а) в 653 сообщении(ях)
|
Re: LCD1602A сделать backspace
Сообщение от supercelt
|
Вопрос, как организовать, когда нажимаешь на звёздочку, что бы напечатанный символ стирался ну и соответственно курсор возвращался на 1 место назад. Мои мысли такие:
при нажатии на *
1. Узнать текущий адрес курсора
2 Сделать минус на 1 ячейку.
3. Очистить только эту ячейку (остальные не трогать)
4. Поставить курсор на 1 поз назад.
|
Можно сделать гораздо проще, например так:
1) Сдвигаем курсор влево, команда = 10h.
2) Печатаем пробел (очищаем знакоместо), код символа = 20h.
3) Снова сдвигаем курсор влево, команда = 10h.
Вот и всё, удачи!
..
Последний раз редактировалось RECTO; 15.08.2016 в 01:09.
|
|
|
|
15.08.2016, 09:56
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: LCD1602A сделать backspace
Хранить строку на дисплее? Зачем? Какой практический смысл?
|
|
|
|
17.08.2016, 21:46
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: LCD1602A сделать backspace
Сообщение от RECTO
|
Можно сделать гораздо проще, например так:
1) Сдвигаем курсор влево, команда = 10h.
2) Печатаем пробел (очищаем знакоместо), код символа = 20h.
3) Снова сдвигаем курсор влево, команда = 10h.
Вот и всё, удачи!
..
|
RECTO!!! Ну... просто, от души!!!! ))
|
|
|
|
17.08.2016, 22:32
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: LCD1602A сделать backspace
Ну а если хранить строки дисплея в оперативке МК в виде массива символов char Str1[16], то тогда достаточно в указанном месте записать в строку символ ' ' (пробел, код 0x20).
pointer-- ;
Str1[pointer] = ' ' ;
и отправить всю строку на дисплей. Особенно хорошо это работает при аппаратном выводе на дисплей.
|
|
|
|
18.08.2016, 01:14
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,659
Сказал спасибо: 74
Сказали Спасибо 1,801 раз(а) в 653 сообщении(ях)
|
Re: LCD1602A сделать backspace
Сообщение от NewWriter
|
Ну а если хранить строки дисплея в оперативке МК в виде массива символов char Str1[16], то тогда достаточно в указанном месте записать в строку символ ' ' (пробел, код 0x20).
|
Ну, ещё нужно курсор (точнее, позицию вывода следующего символа) туда будет адресовать, поскольку при этом она должна сдвигаться влево.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:16.
|
|