Пример реализации 4*4 для PIC: Все достаточно просто и для 8*8:
;Подпрограмма сканирования кнопок 4*4 ;подключенных к порту В. ;Старшие 4-и линии порта направить на ввод,младшие на вывод c нулями. ;Требуется подключить подтягивающие резисторы. ; Определить KEY_PRESD_COD ;KEY_PRESD возвращает в KEY_PRESD_COD 4-ех битный код нажатой кнопки. ; ; rb7 ------- F E D C ; rb6 ------- B A 9 8 ; rb5 ------- 7 6 5 4 ; rb4 ------- 3 2 1 0 ; | | | | ; | | | | ; b3b2b1b0 ;ЕСЛИ КНОПКА НЕБЫЛА НАЖАТА ИЛИ НАЖАТЫ более 1-ой ВОЗВРАЩАЕТ в W 0x0 ;Подпрограмма может глюкнуть если только нажаты одновременно соседние ;по столбцу кнопки,в этом случае возвращает код нижней. ;Во все остальных случаях:если не нажата или нажаты более одной ;кнопки в W возвращается 0X0. ;При использовании прерывания после вызова подпрограммы требуется переинициализировать TRIS ;При использовании высокочастотных генираторов при циклическом ;вызове подпрограммы(детектирование нажатия) встовляйте задержку перед ;подпрограммой. ;KEY_CONNECT-порт подключения клавиатуры KEY_PRESD CLRF KEY_CONNECT BANK1 MOVLW 0XF0 MOVWF KEY_CONNECT BANK0 MOVF KEY_CONNECT,0 ANDLW 0XF0 ;если XORLW 0XF0 ; ненажата BTFSC STATUS,Z ; ниодна кнопка RETLW 0X0 ; вернуть в W 0X0 ;кнопка нажата !!! ;Определим строку: CLRW BTFSS KEY_CONNECT,4 MOVLW 0X0 BTFSS KEY_CONNECT,5 MOVLW 0X4 BTFSS KEY_CONNECT,6 MOVLW 0X8 BTFSS KEY_CONNECT,7 MOVLW 0XC MOVWF KEY_PRESD_COD ;Определим столбец: BANK1 ;TRIS BSF KEY_CONNECT,0 BANK0 NEXT_KEY_ST MOVF KEY_CONNECT,0 ;Проверка ANDLW 0XF0 ; на номер XORLW 0XF0 ; установленного BTFSC STATUS,Z ; столбца. RETLW 1 ; MOVF KEY_PRESD_COD,0 ; Проверка ANDLW 0X3 ; на последний XORLW 0X3 ; обработанный BTFSC STATUS,Z ; столбец. RETLW 0 ;нажаты несколько кнопок. INCF KEY_PRESD_COD,1 ; Выбрать cледущий столбец для проверки. BANK1;TRIS BTFSC KEY_CONNECT,2 ; BSF KEY_CONNECT,3 BTFSC KEY_CONNECT,1 ; BSF KEY_CONNECT,2 BSF KEY_CONNECT,1 BANK0 NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; Задержка для высокочастотных генираторов. NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; GOTO NEXT_KEY_ST ;****************************************************************
|