Решил поиграться с давно заказанной с китая мембранной клавиатурой 3x4. Есть много видов и разновидностей данной клавиатуры, есть в пластмассовых корпусах, а есть пленочные. У моего вариант 3x4 7 контактов, распиновка клавиатуры 4x4 показана на схеме ниже, схема один к одному. Схема почти идентична с клавиатурой 3x4 за исключением того что отсутствует правый ряд клавиш "A,B,С,D".
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/MatrixKeyboard.png)
Схема подключения клавиатуры 3x4 :
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/cx.jpg)
Клавиатура 4x4 подключается аналогично, четвертый ряд "A,B,С,D" подключается к порту PD7 микроконтроллера.
Исходный код программы:
$regfile = "m8def.dat"
$crystal = 1000000
'конфигурация дисплея
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 20 * 4
Cursor Off
Cls
'конфигурация клавиатуры
Config Kbd = Portd , Debounce = 40 , Delay = 100
'переменные
Dim Key_char As Byte 'номер нажатой клавиши
Dim Key_str As String * 1 'символ нажатой клавиши на клаивиатуре
Dim Result As String * 20 'результат нажатий на клавиатуру
Deflcdchar 1 , 32 , 14 , 10 , 31 , 27 , 27 , 14 , 32 '
Locate 1 , 4
Lcd Chr(1)
Result = ""
'Главный цикл программы
Do
Key_char = Getkbd() 'когда клавиша не нажата функция возвращает переменной значение 16
If Key_char <> 16 Then 'если переменная не равна 16, значит была нажата кнопка
Key_str = Lookupstr(key_char , Keyboard_data) 'вытаскиваем из массива символ нажатой клавиши
Result = Result + Key_str
End If
Locate 2 , 3
Lcd Result 'выводим на дисплей результат нажатий
Waitms 100
If Result = "123" Then
Locate 2 , 2
Lcd "UNLOCK"
Wait 1
Goto Pizdec
Else
End If
If Key_str = "5" Then
Locate 2 , 2
Lcd "RETURN"
Wait 1
Goto Pizdec
Else
End If
Loop
End
Keyboard_data:
Data "1" , "4" , "7" , "*" , "2" , "5" , "8" , "0"
Data "3" , "6" , "9" , "#" , "A" , "B" , "C" , "D"
Pizdec:
Return
При удержании клавиши символы начинают повторяться, программу можно слегка доработать если добавить в конец первого в примере строки:
Key_char = Getkbd()
If Key_char <> 16 Then
Goto 1
End If
то мы избегаем повторения символов при удержании клавиши. Можем хоть минуту давить на кнопку, а символ будет один.
При включении прибора на верхней строке высвечивается иконка "замок", на нижней строке отображаются вводимые символы.
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/11.jpg)
По умолчанию в исходнике код "123", как только мы введем этот код (как только нажмем третью правильную кнопку) на нижней строке выйдет надпись "UNLOCK".
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/12.jpg)
Если при вводе мы ошиблись цифрой, т.е. ввели не ту цифру - нажимаете кнопку 5 чтобы стереть все и начать ввод кода заного, при нажатии на кнопку 5 программа перезапускается. Статья дана лишь в ознакомительных целях и естественно клавишу 5 (клавишу которая стирает цифры) в идеале нужно перенести например на знак "решетка". Из за нехватки времени не стал переделывать, перепроверил все в железе и решил поделиться с вами.
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/13.jpg)
Думаю принцип работы программы вам понятен, остается программу чуть дописать, указать порты на срабатывание при вводе правильного кода.
Видео работы кодового замка:
Скачать файлы проекта с исходным кодом (~15кб.)
Готовая версия кодового замка:
Ниже представлена готовая рабочая схема кодового замка с настроенными портами для подключения электропривода и светодиодов. Электропривод можно подключить автомобильный, так называемый привод замка дверей.
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/cxema_min.jpg)
При верном вводе PIN кода привод сработает на 1 секунду, этого времени достаточно для работы механизма замка (открывания двери)? привод подключается через транзистор к порту PORTB.4. Если же при попытке ввести PIN код ошиблись цифрой, нажимаете кнопку "решетка" и можно начать ввод кода заново...
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/1c.jpg)
При правильном вводе PIN кода открывается замок, а на дисплее выводится надпись "UNLOCK".
![](http://cxema21.ucoz.ru/FILES/katalog_statey/mc/key3x4/2c.jpg)
Проект в Proteus и прошивка лежат ниже в архиве, PIN код замка указан в архиве в названии файла прошивки.
...по материалам сайта avrproject.ru
Скачать проект Proteus и файл прошивки (~16кб.)
|