Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Кнопки, не хочет работать...


Кнопки, не хочет работать...

Сообщений 31 страница 36 из 36

31

Чтобы не насиловать LCD и не было мельканий, реализовать вывод на дисплей по условию (флагу), если есть изменения показаний, то обновляем дисплей.

0

32

А, 4,7к подтяжку справа сразу не увидел. Кстати, один пин можно сэкономить вот так.

http://s7.uploads.ru/fOpF5.jpg

0

33

Это токоограничивающие резисторы.
2SIvan: свободные пины останутся. А за идею спасибо.

MACTEPok написал(а):

Чтобы не насиловать 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)

0

34

SIvan написал(а):

А, 4,7к подтяжку справа сразу не увидел. Кстати, один пин можно сэкономить вот так.

Вот так правильней, ИМХО

http://s6.uploads.ru/t/KcjIF.jpg

0

35

MACTEPok написал(а):

Чтобы не насиловать LCD и не было мельканий, реализовать вывод на дисплей по условию (флагу), если есть изменения показаний, то обновляем дисплей.

А пример реализации можно увидеть?

0

36

Да что там особо показывать. Сейчас у тебя вывод на LCD в основном цикле, независимо от того, данные меняются или нет. К тому же у тебя 2 окна реализовано и между сменой экрана пауза (то есть программа стоит). Сделать процедуру для вывода на экран и вызывать ее по флагу изменения инфы. Флаг поднимать в прерывании (то есть при нажатии кнопок) и в опросе часов, если изменились данные. сброс флага после вывода на экран. Это так, на заметку. Для чего уменьшаем частоту вывода на дисплей, чтобы сократить глюки, вызванные прерываниями (иногда бывает).

Чтобы не городить объемную процедуру вывода на дисплей, где возникают трудности с позиционированием данных, и самое неприятное - позиционирование чисел с изменяемым числом разрядов.

Для этого все числовые данные загоняем в строку командой str
далее с помощью команды Format и заданной маски формируем 4 строки по 20 символов
затем разом выводим эти 4 строки без команды Locate
Для времени маска "00", для других чисел "   "
Так избавимся от смещения данных в строках при разном числе разрядов. и не нужно делать кучу проверок.

0


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Кнопки, не хочет работать...