Hola:
Amigo zorro31 hubiera sido mas facil y rapido si hubieras posteado en el subforo adecuado, en el subforo de Pic Basic y proton hay ejemplos con teclado matricial de 4x4 y hay ritinas para que las puedas revisar.
mira este codigo:
Codigo:
BARRIDO:
LOW A
IF UNO = 0 THEN lcdout $FE,$C0," 7"
IF DOS = 0 THEN lcdout $FE,$C0," 8"
IF TRES = 0 THEN lcdout $FE,$C0," 9"
IF CUATRO = 0 THEN lcdout $FE,$C0,"10"
HIGH A
LOW B
IF UNO = 0 THEN lcdout $FE,$C0," 4"
IF DOS = 0 THEN lcdout $FE,$C0," 5"
IF TRES = 0 THEN lcdout $FE,$C0," 6"
IF CUATRO = 0 THEN lcdout $FE,$C0,"11"
HIGH B
LOW C
IF UNO = 0 THEN lcdout $FE,$C0," 1"
IF DOS = 0 THEN lcdout $FE,$C0," 2"
IF TRES = 0 THEN lcdout $FE,$C0," 3"
IF CUATRO = 0 THEN lcdout $FE,$C0,"12"
HIGH C
LOW D
IF UNO = 0 THEN lcdout $FE,$C0,"14"
IF DOS = 0 THEN lcdout $FE,$C0," 0"
IF TRES = 0 THEN lcdout $FE,$C0,"15"
IF CUATRO = 0 THEN lcdout $FE,$C0,"13"
HIGH D
pause 10
GOTO BARRIDO
END
Es mas corto que el otro y muy facil de entender, tambien puedes revisar aqui esquemas y mas cosas:
http://miarroba.com/foros/ver.php?foroid=8826&temaid=4180638&pag=4
Si quieres algo mas corto pero un poco mas complejo mira esto:
Codigo:
getkey:
PAUSE 50 "Debounce key-input
getkeyu:" Wait for all keys up
PORTB = 0 " All output-pins low
TRISB = $f0 " Bottom 4-pins out, top 4-pins in
IF ((PORTB >> 4) != $f) THEN getkeyu"If keys down, loop
PAUSE 50 " Debounce key-input
getkeyp:" Wait for keypress
FOR row = 0 TO 3 " 4 rows in keypad
PORTB = 0 " All output-pins low
TRISB = (DCD row) ^ $ff " Set one row pin to output
col = PORTB >> 4 " Read columns
IF col != $f THEN gotkey" If any keydown, exit
NEXT row
GOTO getkeyp " No keys down, go look again
gotkey: " Change row and column to key number 1 - 16
key = (row * 4) + (NCD (col ^ $f))
"NOTE: for 12-key keypad, change to key = (row * 3)
RETURN " Subroutine over
END
Lo puedes revisar aqui:
http://www.rentron.com/serkey16.htm
SUERTE...!!!