Чтобы не насиловать LCD и не было мельканий, реализовать вывод на дисплей по условию (флагу), если есть изменения показаний, то обновляем дисплей.
Кнопки, не хочет работать...
Сообщений 31 страница 36 из 36
Поделиться322013-12-11 22:18:32
А, 4,7к подтяжку справа сразу не увидел. Кстати, один пин можно сэкономить вот так.

Поделиться332013-12-11 22:58:33
Это токоограничивающие резисторы.
2SIvan: свободные пины останутся. А за идею спасибо.
Чтобы не насиловать LCD и не было мельканий, реализовать вывод на дисплей по условию (флагу), если есть изменения показаний, то обновляем дисплей.
Так там как раз по переменной A изменение меню происходит
'====обработка нажатия кнопки "OK" Ok: A = 10 If A = 11 Or A = 12 Or A = 13 Then A = A * 10 End If If A = 21 Or A = 22 Or A = 23 Then A = A * 10 End If If A = 31 Or A = 32 Or A = 33 Then A = A * 10 End If If A = 41 Or A = 42 Or A = 43 Then A = A * 10 End If If A = 10 Or A = 20 Or A = 30 Or A = 40 Then Incr A End If Return '====обработка нажатия кнопки "ESC" Esc: If A = 11 Or A = 12 Or A = 13 Then A = 10 End If If A = 21 Or A = 22 Or A = 23 Then A = 20 End If If A = 31 Or A = 32 Or A = 33 Then A = 30 End If If A = 41 Or A = 42 Or A = 43 Then A = 40 End If If A > 100 Then A = A / 10 End If Return '====обработка нажатия кнопки "DOWN" Down: If A = 10 Or A = 20 Or A = 30 Then A = A + 10 End If If A = 11 Or A = 12 Then Incr A End If If A = 21 Or A = 22 Then Incr A End If If A = 31 Or A = 32 Then Incr A End If If A = 41 Or A = 42 Then Incr A End If Return '====обработка нажатия кнопки "UP" Up: If A = 20 Or A = 30 Or A = 40 Then A = A - 10 End If If A = 12 Or A = 13 Then Decr A End If If A = 22 Or A = 23 Then Decr A End If If A = 32 Or A = 33 Then Decr A End If If A = 42 Or A = 43 Then Decr A End If Return
А вот как входить в меню, никак не придумывается.
Отредактировано rustr (2013-12-11 22:59:05)
Поделиться352013-12-12 15:23:03
Чтобы не насиловать LCD и не было мельканий, реализовать вывод на дисплей по условию (флагу), если есть изменения показаний, то обновляем дисплей.
А пример реализации можно увидеть?
Поделиться362013-12-12 16:52:15
Да что там особо показывать. Сейчас у тебя вывод на LCD в основном цикле, независимо от того, данные меняются или нет. К тому же у тебя 2 окна реализовано и между сменой экрана пауза (то есть программа стоит). Сделать процедуру для вывода на экран и вызывать ее по флагу изменения инфы. Флаг поднимать в прерывании (то есть при нажатии кнопок) и в опросе часов, если изменились данные. сброс флага после вывода на экран. Это так, на заметку. Для чего уменьшаем частоту вывода на дисплей, чтобы сократить глюки, вызванные прерываниями (иногда бывает).
Чтобы не городить объемную процедуру вывода на дисплей, где возникают трудности с позиционированием данных, и самое неприятное - позиционирование чисел с изменяемым числом разрядов.
Для этого все числовые данные загоняем в строку командой str
далее с помощью команды Format и заданной маски формируем 4 строки по 20 символов
затем разом выводим эти 4 строки без команды Locate
Для времени маска "00", для других чисел " "
Так избавимся от смещения данных в строках при разном числе разрядов. и не нужно делать кучу проверок.
Похожие темы
| И снова I2C-Slave... | Связь проводная и бесп-ная, интерфейсы, протоколы | 2025-05-11 |
| Использование готовых модулей | Периферия | 2019-07-01 |
| Конкурсы 2011 !!! | КОНКУРС | 2010-12-31 |
