Как кодировать на C для буквенно-цифровой клавиатуры 4x3 - PullRequest
1 голос
/ 04 сентября 2011

В настоящее время я работаю над проектом, который имеет следующие настройки.

  1. Микроконтроллер AVR
  2. IDE - AVR Studio
  3. Операционная система - FreeRTOS

Для ввода я использую матрицу клавиатуры 4x3. Я уже кодировал для клавиатуры 4x3, чтобы принимать входные данные как числа. Но теперь я хочу сделать это буквенно-цифровым. Как мы видим в наших клавиатурах мобильных телефонов.

Пример. Ключ 2 будет использоваться для ввода данных для 2, a, b, c. Однократным нажатием клавиши 2 мы получим номер 2, дважды нажмем клавишу 2, затем получим «a», тройное нажатие клавиши 2, затем получим «b» и четыре раза нажмем клавишу 2, затем мы получим «d» на экране.

Надеюсь, вы все поняли, что я имею в виду выше. Кто-нибудь может дать некоторую идею кода на C для реализации этого типа функциональности?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2012

см. Проблема в том, что если вы нажмете 2 (скажем) через xxx секунд спустя после 30 миллисекунд, если вы проверите и обнаружите, что нажата 2, то есть два случая. case1> нажатая клавиша новая и такая же как предыдущая case2> нажатая клавиша такая же, как и предыдущая, и она нажимается с ххх до сих пор по кругу.

2 голосов
/ 04 сентября 2011

Скорее всего, вам просто нужно отслеживать системное время последнего нажатия клавиши и сравнивать его с системным временем следующего нажатия клавиши. Если текущая клавиша совпадает с последней клавишей, а время между нажатиями мало (скажем, менее одной секунды), замените текущий вводимый символ на следующий символ в списке символов для этой клавиши. Если разница во времени превышает одну секунду или если была нажата другая клавиша, примите текущий символ и добавьте новый символ, начиная с первого символа в списке для клавиши.

...