Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Utilizando um Display de LCD
1. Leitura de teclas e teclado matricial
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajubá
rodrigomax@unifei.edu.br
ELT024 Leitura de teclas e teclado matricial
3. Leitura de Teclas
Debounce
• 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
ELT024 Leitura de teclas e teclado matricial
4. Leitura de Teclas
Debounce
Circuito com bouncing
http://www.labbookpages.co.uk/electronics/debounce.html - Dr. Greensted
ELT024 Leitura de teclas e teclado matricial
5. Leitura de Teclas
Debounce
1 void main(void) interrupt 0 {
2 unsigned char valTemp, valAtual, tempo;
3 //inserir as configurações necessárias aqui
4 for(;;){
5 while(valAtual==PORTB); //aguarda uma mudança na porta B
6 valTemp = PORTB; //na mudança, aguarda um tempo
7 tempo = 22;
8 while (tempo > 0) {
9 if (valTemp == PORTB) { // se não mudar continua a contar
10 tempo--;
11 } else {
12 valTemp = PORTB; // se mudar, atualiza e reinicia
13 tempo = 22;
14 }
15 }
16 valAtual = valTemp; //valor atualizado;
17 //Aqui a variável está pronta para ser usada
18 }
19 }
ELT024 Leitura de teclas e teclado matricial
6. Leitura Matricial
Circuito básico
ELT024 Leitura de teclas e teclado matricial
7. Leitura Matricial
Processo de Varredura
1 //processo de varredura
2
3 for(i = 0; i < 2; i++){
4 PORTB = 0xff; //liga todas as colunas
5 for(j = 0; j < 100; j++);
6 BitClr(PORTB,i); //desliga coluna a ser testada
7 for(j = 0; j < 100; j++); //gasta tempo (garantir estabilidade)
8 for(j = 0; j < 4; j++){
9 if (!BitTst(PORTB,j+4)){ //realiza o teste para cada bit
10 chave[i][j] = 1; //atualiza a matriz
11 BitSet(PORTD,j+4*i); //mostra na porta D
12 }else{
13 chave[i][j] = 0;
14 BitClr(PORTD,j+4*i);
15 }
16 }
17 }
ELT024 Leitura de teclas e teclado matricial
9. Display de LCD
ELT024 Leitura de teclas e teclado matricial
10. Display de LCD
• Display de LCD
• Utiliza-se do conceito de polarização da luz para formar a
imagem
• Os pixels são formados por retenção de luz 1
• Geralmente possue um microcontrolador integrado
• São encontrados em formato de 7 segmentos ou matricial 2
• No formato matricial é possivel representar as letras, números
e diversos simbolos
1
No caso dos displays com leds, os pixels são formados por emissão de luz.
2
Os formatos matriciais mais comuns são 5x7 e 5x8
ELT024 Leitura de teclas e teclado matricial
11. Display de LCD
• Este tipo de display pode ser visto como uma solução de
exibição completa:
• O microcontrolador faz o papel da placa de vídeo
• O display faz o papel do monitor
• A comunicação é feita através de um barramento paralelo
• O barramento é comandado por 3 sinais de controle
ELT024 Leitura de teclas e teclado matricial
12. Display de LCD
ELT024 Leitura de teclas e teclado matricial
13. Display de LCD
1 Terra 9 Bit 2
2 VCC (+5V) 10 Bit 3
3 Ajuste do contraste 11 Bit 4
4 Seleção de registro(RS) 12 Bit 5
5 Read/Write (RW) 13 Bit 6
6 Clock, Enable (EN) 14 Bit 7
7 Bit 0 15 Backlight +
8 Bit 1 16 Backlight Gnd
ELT024 Leitura de teclas e teclado matricial
14. Display de LCD
Atenção
Cuidado com a pinagem do display. O que está em uso na aula é
15, 16, 1, 2, ... 14. Os pinos não estão em ordem. A
troca/substituição do display tem que ser realizada com atenção
pois a placa está pronta para receber apenas esse tipo de display.
ELT024 Leitura de teclas e teclado matricial
15. Display de LCD
ELT024 Leitura de teclas e teclado matricial
16. Display de LCD
• Rotina para envio de dados/comando para o LCD
• Para comando RS = 0; Para dados RS = 1;
• Habilitar a escrita (RW=1) ou leitura (RW=0)
• Acionar terminal EN (enable)
• Delay para o LCD entender o comando
• Desabilita o terminal EN
• Retorna os terminais (RW e RS) para nível baixo 3
3
Para melhor uso é interessante retornar os terminais para o valor que
tinham antes de chamar a rotina, já que eles estão multiplexados com outros
dispositivos
ELT024 Leitura de teclas e teclado matricial
19. Display de LCD
Formação dos comandos para controle do LCD:
Dados (bit) Tempo
Instrução RS RW
7 6 5 4 3 2 1 0 (máx.)
Limpa 0 0 0 0 0 0 0 0 0 1 37 us
Reset 0 0 0 0 0 0 0 0 1 - 1.5ms
Config. 0 0 0 0 0 0 0 1 ID S 37 us
Config. 0 0 0 0 0 0 1 D C B 37 us
Movim. 0 0 0 0 0 1 SC RL - - 37 us
Config. 0 0 0 0 1 DL N F - - 37 us
Move(l,c) 0 0 1 X 0 0 Coluna 37 us
Ocup. 0 1 BF - - - - - - - 10 us
http://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi
(Modificado)
ELT024 Leitura de teclas e teclado matricial
20. Display de LCD
• Definições:
• ID: 1 – Incrementa, 0 – Decrementa
• S: 1 – O display acompanha o deslocamento
• SC: 1 – Desloca o display, 0 – Desloca o cursor
• RL: 1 – Move para direita, 0 – Move para esquerda
• DL: 1 – 8 bits, 0 – 4 bits
• N: 1 – 2 linhas, 0 – 1 linha
• F: 1 – 5x10 pontos, 0 – 5x8 pontos
• BF: 1 – Ocupado, 0 – Disponível
• X: 1 – 2a linha, 0 – 1a linha
• Coluna: nibble indicativo da coluna
ELT024 Leitura de teclas e teclado matricial
21. Display de LCD
• Desenvolvimento da biblioteca
• Criação de rotinas de delay (2ms e 40us)
• Função para enviar comandos
• Função para enviar dados
• Função de inicialização
ELT024 Leitura de teclas e teclado matricial
28. Display de LCD
• A maioria dos LCD’s permite a criação de caracteres
customizados
• Para os display’s compatíveis com a controladora HD44780:
• 8 caracteres disponíveis
• Formato binário e matricial de 8*5
• Armazenados a partir do endereço 0x40
• Os valores são salvos por linha de caracter
ELT024 Leitura de teclas e teclado matricial
29. Display de LCD
0x40
Caracter 0
0x47
0x50 1a linha 0x04
0x48
Caracter 1 0x51 2a linha 0x0E
0x4F
0x52 3a linha 0x0E
0x50
Caracter 2 0x53 4a linha 0x0E
0x57
0x54 5a linha 0x0E
... 0x55 6a linha 0x1F
0x56 7a linha 0x00
0x70
Caracter 6 0x57 8a linha 0x04
0x77
0x78
Caracter 7
0x7F Apenas 5 bits por linha!
ELT024 Leitura de teclas e teclado matricial
30. Display de LCD
1 //Cada linha é representada por um caracter
2 char sino[8] =
3 {0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0x1F, 0x00, 0x04};
4
5 //Configura para a primeira posição de memória
6 EnviaComando(0x40);
7
8 //Envia cada uma das linhas em ordem
9 for(i=0; i<8; i++){
10 EnviaDados(sino[i]);
11 }
ELT024 Leitura de teclas e teclado matricial
31. Display de LCD
• É possível criar um desenho/imagem de até 40*16 pixels (4*2
caracteres)
• A imagem será binária, apenas pixels brancos ou pretos
• Existe uma separação entre os caracteres, que pode prejudicar
de certa maneira a imagem em questão
ELT024 Leitura de teclas e teclado matricial
32. Display de LCD
• Passos para geração de uma imagem:
• 1 - Criar uma imagem binária com o desenho desejado;
• 2 - Segmentar a imagem em retângulos de 8x5;
• 3 - Transcrever cada linha em binário/hexadecimal;
• 4 - Gerar o código fonte.
ELT024 Leitura de teclas e teclado matricial
33. Display de LCD
1 - Criar uma imagem binária com o desenho desejado;
ELT024 Leitura de teclas e teclado matricial
34. Display de LCD
2 - Segmentar a imagem em retângulos de 8x5;
ELT024 Leitura de teclas e teclado matricial