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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Алгоритм кнопочной клавиатуры с динамичной индикацией.


Алгоритм кнопочной клавиатуры с динамичной индикацией.

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

31

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

....
В результате получаем два номера.
номер1
номер2
Далее:
номер1 = 255 - номер1                        - сдвигаем на 4 разряда вверх
                                                             можно Rotate, как удобнее
номер1 + номер2 = <результат>

Результат: (255-B1) + B2= Ответ
Есть совпадения в конце:

Результаты

255-1 = 254 + 2 =0
255-2 = 253 + 4 =1
255-1 = 254 + 4 =2
255-4 = 251 + 8 =3
255-2 = 253 + 8 =5
255-1 = 254 + 8 =6
255-8 = 247 + 16 =7
255-4 = 251 + 16 =11
255-2 = 253 + 16 =13
255-1 = 254 + 16 =14
255-16 = 239 + 32 =15
255-8 = 247 + 32 =23
255-4 = 251 + 32 =27
255-2 = 253 + 32 =29
255-1 = 254 + 32 =30
255-32 = 223 + 64 =31
255-16 = 239 + 64 =47
255-8 = 247 + 64 =55
255-4 = 251 + 64 =59
255-2 = 253 + 64 =61
255-1 = 254 + 64 =62
255-64 = 191 + 128 =63
255-32 = 223 + 128 =95
255-16 = 239 + 128 =111
255-8 = 247 + 128 =119
255-4 = 251 + 128 =123
255-2 = 253 + 128 =125
255-1 = 254 + 128 =126
255-128 = 127 + 1 =128
255-128 = 127 + 2 =129
255-128 = 127 + 4 =131
255-128 = 127 + 8 =135
255-128 = 127 + 16 =143
255-128 = 127 + 32 =159
255-128 = 127 + 64 =191
255-64 = 191 + 1 =192
255-64 = 191 + 2 =193
255-64 = 191 + 4 =195
255-64 = 191 + 8 =199
255-64 = 191 + 16 =207
255-64 = 191 + 32 =223
255-32 = 223 + 1 =224
255-32 = 223 + 2 =225
255-32 = 223 + 4 =227
255-32 = 223 + 8 =231
255-32 = 223 + 16 =239
255-16 = 239 + 1 =240
255-16 = 239 + 2 =241
255-16 = 239 + 4 =243
255-16 = 239 + 8 =247
255-8 = 247 + 1 =248
255-8 = 247 + 2 =249
255-8 = 247 + 4 =251
255-4 = 251 + 1 =252
255-4 = 251 + 2 =253
255-2 = 253 + 1 =254
255-1 = 254 + 1 =255<=======
255-2 = 253 + 2 =255<=======
255-4 = 251 + 4 =255<=======
255-8 = 247 + 8 =255<=======
255-16 = 239 + 16 =255<=======
255-32 = 223 + 32 =255<=======
255-64 = 191 + 64 =255<=======
255-128 = 127 + 128 =255<=======

0

32

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

Результат: (255-B1) + B2= ОтветЕсть совпадения в конце

Опять я недопонятый... ;)
"Не той стороной бутерброд кладете..." (с) Матроскин
Надо использовать не веса битов, а их номер в байте !
Ну и я немного напортачил... ;)

For <колонка> = 1 То 8

      For <строка> = 1 То 8

      If <cовпадение> Then
           <флаг совпадения> = 1
           Exit For
      End If

      Next <строка>

If <флаг совпадения> = 1 Then
     <флаг совпадения> = 0
     Exit For
End If

Next <колонка>

Допустим, что попали сюда при:
<колонка> = 5
<строка> 4

Объединяем в один байт:
<колонка> = <колонка> * 16 - вот мой косяк ;)
Получаем: <колонка> = 80
<результат> = <колонка> + <строка> = 80 + 4 = 84

Номер (бита) колонки попадает в старшие 4 бита результат, а номер (бита) строки - в младшие...

Выделяем обратно, удобнее побитно.
Так же, побитно, можно и "упаковывать":

For <номер> = 0 То 3

     <колонка>.<номер> = <результат>.(<номер> + 4)
     <строка>.<номер> = <результат>.<номер>

Next <номер>

0

33

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

.....
For <колонка> = 1 То 8

      For <строка> = 1 То 8

      If <cовпадение> Then
           <флаг совпадения> = 1
           Exit For
      End If

      Next <строка>

If <флаг совпадения> = 1 Then
     <флаг совпадения> = 0
     Exit For
End If

Next <колонка>
....


Такой код значительно задержится в прерывании. Получается самый простой всё-же вот такой:

Результат = Колонка+Строка 
IF Колонка > Строка Then Результат = 255-Результат

Так-же даст индивидуальный идентификатор, но ресурсы ЦП будут затрачены только операции на сложение, условие и вычитание.

0

34

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

но ресурсы ЦП будут затрачены только операции на сложение, условие и вычитание.

Ну, тут уже надо даташит листать на тему "Сколько тактов на что..." ;)

Я не утверждаю, что мое предложение будет работать быстрее других вариантов.
Просто мне так понятнее... ;)

А для чего так "моментально" надо читать кнопки ?
Из всех кнопок, которые я встречал, самое срочное в обработке - "СТОП".
Все остальное - банальное машинное время...

0

35

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

...
Просто мне так понятнее...
А для чего так "моментально" надо читать кнопки ?
....


Да так, к примеру есть буфер кнопок, который надо заполнять быстро не мешая программе прерыванием, вот тут самое то такой алгоритм.
Если нужно набрать на клавиатуре быстро какой нибудь длинный код, то комфортней не пропускать нажатия кнопок и сократить интервал реагирования перед нажатиями.

0

36

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

Да так, к примеру есть буфер кнопок, который надо заполнять быстро не мешая программе прерыванием, вот тут самое то такой алгоритм.

Не проще ли тогда кнопки опрашивать другим МК и при необходимости считывать из него ?

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

Если нужно набрать на клавиатуре быстро какой нибудь длинный код, то комфортней не пропускать нажатия кнопок и сократить интервал реагирования перед нажатиями.

Если честно, то я пока не встречал даже в новостях сообщений о человеке, печатающем быстрее, чем соображает МК... ;)

0

37

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

...Если честно, то я пока не встречал даже в новостях сообщений о человеке, печатающем быстрее, чем соображает МК...

А если МК будет динамично выводить индикацию на графический LCD и одновременно работать с AVR-Dos + общаться по двум UART и делать расчёты с плавающей запятой?
Тут как-бы нужно всё максимально быстро. Конечно отдельный модуль на контроллере облегчил бы задачу, но и так уже в собираемой системе две Xmega и 1 Atmega участвует.

0

38

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

Конечно отдельный модуль на контроллере облегчил бы задачу, но и так уже в собираемой системе две Xmega и 1 Atmega участвует.

И что ?  Система перегружена ?

На работе в аппаратах по 2 десятка МК дружат бесперебойно... ;)
Головной - Мега16, вполне справляется...

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Алгоритм кнопочной клавиатуры с динамичной индикацией.