por phophollety » 25 Fev 2008 19:46
Não é viável pq você usa delay, eu faço:
uso um timer para interrupção de 1ms, vamos supor que eu tenho um teclado 4*4...
Ligo a primeira linha, e faço leitura das teclas, 1,2,3 e A, se alguma delas estiver pressionada, eu começo a decrementar o contador de pressionamento, se estiver solta eu decremento o contador de soltura, feito isso, desligo essa linha, vou para a próxima linha e assim por diante, quando eu voltar novamente nesta linha vou decrementar novamente, se eu tiver começado a decrementar e o botão estivar solto, recarrego timer da tecla e começo a decrementar o (outro, soltura) se ele chegar em 0 eu seto um flag de botão pressionado, se ainda estiver pressionado e o flag já acionado, eu pulo e vou para o próximo...
De 1 em 1 mili também eu leio o estado lógico da tecla (já filtrado pelo debounce) e passo para outro flag, que é o que eu realmente vou usar..
Para cade tecla eu crio um pressTeclaX() e um libTeclaX, assim eu posso colocar funções no pressionamento e na soltura...
Uso o tempo de 60ms para cada teclado e lhe garanto, funciona que é muito bem!
O ruim é que gasta um pouco de memória, (coisa de 2 bytes por tecla..)
Dei exemplo dos métodos em C, mas em asm faço a mesma coisa e nada a reclamar!
Já implementei em PIC16, 18 e 24HJ..
abraços
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.