Escolar Documentos
Profissional Documentos
Cultura Documentos
Rodrigo Almeida
rodrigomax@unifei.edu.br
Revisão
Display de 7 segmentos
Atenção
ATENÇÃO
Variáveis globais-locais
1
Global dentro do escopo da biblioteca, local pois não pode ser acessada fora do
arquivo
ECOP04 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 7 / 33
Leitura de Teclas
Leitura de Teclas
Leitura de Teclas
Exemplo Eletrônico
http://www.scienceprog.com/how-does-tri-state-buffers-work/
Exemplo Eletromecânico
Bounce
Problema de bouncing
Causado pela oscilação mecânica da chave
Pode gerar acionamentos indevidos no sistema
Soluções
Via hardware através de circuito dedicado
Via software através de confirmação temporal
Bounce
Debounce
Debounce
Debounce
Debounce
Debounce
2
Um PIC com cristal de 8MHz tem cada ciclo com duração de 0,5 (µs)
ECOP04 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 18 / 33
Leitura de Teclas
Debounce
Leitura Matricial
Leitura Matricial
3
18f4520 = US$4,47, 18f2550 = US$3,98
4
Geralmente componentes com muitos terminais tem encapsulamento SMD/QFP ou
BGA
ECOP04 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 21 / 33
Leitura Matricial
Leitura Matricial
Leitura Matricial
5
Para N terminais disponı́veis no microcontrolador, temos um aumento de N chaves
para ( N2 )2 chaves
ECOP04 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 23 / 33
Leitura Matricial
Leitura Matricial
Leitura Matricial
1 // p r o c e s s o de v a r r e d u r a
2 for ( i = 0 ; i < 4 ; i ++) {
3 // apenas a coluna de i n t e r e s s e é c o n f i g u r a d a como saı́da
4 TRISB = ~(( unsigned char )1 < < i ) ;
5 // apenas a coluna de i n t e r e s s e é ligada
6 PORTB = ~(( unsigned char )1 < < i ) ;
7
8 for ( j = 0 ; j < 4 ; j ++) { // j<2 sem usar a fonte
9 if (! BitTst ( PORTB , j + 4 ) ) { // realiza o teste para cada bit
10 chave [ i ][ j ] = 1 ; // a t u a l i z a a matriz
11 } else {
12 chave [ i ][ j ] = 0 ;
13 }
14 }
15 }
Processo de Varredura
Atenção
O código não apresenta debounce em software para as teclas.
A operação com uma matriz gasta muito processamento e memória.
Para minimizar estes gastos podemos representar cada chave como
um bit numa variável.
A operação de debounce será apresentada nas funções a seguir.
1 // rotina de d e b o u n c e
2 // a cada chamada o tempo é d e c r e m e n t a d o em 1un .
3 if ( valorAntigo == valorNovo ) {
4 tempo - -;
5 } else {
6 tempo = 10 ;
7 valorAntigo = valorNovo ;
8 }
9 if ( tempo == 0 ) {
10 valor = valorAntigo ;
11 }
12 }
Header
Header
1 # ifndef TECLADO_H
2 # define TECLADO_H
3 unsigned int LerTeclas ( void ) ;
4 void Debounce Teclas ( void ) ;
5 void I n i c i a l i z a T e c l a d o ( void ) ;
6 # endif // T E C L A D O H
Uso da Biblioteca
Contagem de pressionamentos
Uso da Biblioteca
Contagem de pressionamentos