Successfully reported this slideshow.
Leitura de teclas e teclado matricialProf.MSc.Rodrigo Maximiano Antunes de Almeida           Universidade Federal de Itaju...
TecladoRevisãoELT024   Leitura de teclas e teclado matricial
Leitura de Teclas                           Debounce• Problema de bouncing    • Causado pela oscilação mecânica da chave  ...
Leitura de Teclas                              Debounce                      Circuito com bouncinghttp://www.labbookpages....
Leitura de Teclas                                  Debounce1    void main(void) interrupt 0 {2        unsigned char valTem...
Leitura Matricial   Circuito básico   ELT024   Leitura de teclas e teclado matricial
Leitura Matricial                               Processo de Varredura1    //processo de varredura23    for(i = 0; i < 2; i...
Display de LCDDisplay de LCD   ELT024   Leitura de teclas e teclado matricial
Display de LCD  ELT024   Leitura de teclas e teclado matricial
Display de LCD• Display de LCD    • Utiliza-se do conceito de polarização da luz para formar a       imagem    • Os pixels...
Display de LCD• Este tipo de display pode ser visto como uma solução de  exibição completa:    •   O microcontrolador faz ...
Display de LCD  ELT024   Leitura de teclas e teclado matricial
Display de LCD1   Terra                             9   Bit 22   VCC (+5V)                        10   Bit 33   Ajuste do ...
Display de LCDAtençãoCuidado com a pinagem do display. O que está em uso na aula é15, 16, 1, 2, ... 14. Os pinos não estão...
Display de LCD  ELT024   Leitura de teclas e teclado matricial
Display de LCD  • Rotina para envio de dados/comando para o LCD      • Para comando RS = 0; Para dados RS = 1;      • Habi...
Display de LCDhttp://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi                           ELT024    L...
Display de LCDhttp://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi                           ELT024    L...
Display de LCD         Formação dos comandos para controle do                  LCD:                       Dados (bit)     ...
Display de LCD• Definições:    • ID: 1 – Incrementa, 0 – Decrementa    • S: 1 – O display acompanha o deslocamento    • SC:...
Display de LCD• Desenvolvimento da biblioteca    • Criação de rotinas de delay (2ms e 40us)    • Função para enviar comand...
Display de LCD1    #include "lcd.h"2    #include "basico.h"3    #define RS 04    #define EN 15    #define RW 267    void D...
Display de LCD1    void EnviaComando(unsigned char cmd){2        BitClr(PORTE,RS); //comando3        BitClr(PORTE,RW); // ...
Display de LCD1    void InicializaLCD(void){2        Delay2ms(); // garante inicialização do LCD3        Delay2ms();4     ...
Display de LCD1   #ifndef LCD_H2       #define LCD_H3       void EnviaComando(unsigned char cmd);4       void EnviaDados(u...
Display de LCD1    #include "basico.h"2    #include "config.h"3    #include "lcd.h"45    //inicio do programa6    void mai...
TecladoDesenhando imagens no LCD         ELT024   Leitura de teclas e teclado matricial
Display de LCD• A maioria dos LCD’s permite a criação de caracteres  customizados• Para os display’s compatíveis com a con...
Display de LCD0x40       Caracter 00x47                       0x50    1a linha      0x040x48       Caracter 1      0x51   ...
Display de LCD1    //Cada linha é representada por um caracter2    char sino[8] =3            {0x04, 0x0E, 0x0E, 0x0E, 0x0...
Display de LCD• É possível criar um desenho/imagem de até 40*16 pixels (4*2  caracteres)• A imagem será binária, apenas pi...
Display de LCD• Passos para geração de uma imagem:    • 1 - Criar uma imagem binária com o desenho desejado;    • 2 - Segm...
Display de LCD1 - Criar uma imagem binária com o desenho desejado;                         ELT024   Leitura de teclas e te...
Display de LCD2 - Segmentar a imagem em retângulos de 8x5;                         ELT024   Leitura de teclas e teclado ma...
Display de LCD3 - Transcrever cada linha em binário/hexadecimal;            0x01 0   0   0   0   1   0x11   1   0   0     ...
Display de LCD     4 - Gerar o código fonte.1    //Cada linha é representada          por um caracter2    char unifei[48] ...
Display de LCDResultado:               ELT024   Leitura de teclas e teclado matricial
Próximos SlideShares
Carregando em…5
×

Utilizando um Display de LCD

3.012 visualizações

Publicada em

Utilização de um display de LCD 2x16 em linguagem C.

Publicada em: Educação
  • Seja a primeira pessoa a gostar disto

Utilizando um Display de LCD

  1. 1. Leitura de teclas e teclado matricialProf.MSc.Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajubá rodrigomax@unifei.edu.br ELT024 Leitura de teclas e teclado matricial
  2. 2. TecladoRevisãoELT024 Leitura de teclas e teclado matricial
  3. 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. 4. Leitura de Teclas Debounce Circuito com bouncinghttp://www.labbookpages.co.uk/electronics/debounce.html - Dr. Greensted ELT024 Leitura de teclas e teclado matricial
  5. 5. Leitura de Teclas Debounce1 void main(void) interrupt 0 {2 unsigned char valTemp, valAtual, tempo;3 //inserir as configurações necessárias aqui4 for(;;){5 while(valAtual==PORTB); //aguarda uma mudança na porta B6 valTemp = PORTB; //na mudança, aguarda um tempo7 tempo = 22;8 while (tempo > 0) {9 if (valTemp == PORTB) { // se não mudar continua a contar10 tempo--;11 } else {12 valTemp = PORTB; // se mudar, atualiza e reinicia13 tempo = 22;14 }15 }16 valAtual = valTemp; //valor atualizado;17 //Aqui a variável está pronta para ser usada18 }19 } ELT024 Leitura de teclas e teclado matricial
  6. 6. Leitura Matricial Circuito básico ELT024 Leitura de teclas e teclado matricial
  7. 7. Leitura Matricial Processo de Varredura1 //processo de varredura23 for(i = 0; i < 2; i++){4 PORTB = 0xff; //liga todas as colunas5 for(j = 0; j < 100; j++);6 BitClr(PORTB,i); //desliga coluna a ser testada7 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 bit10 chave[i][j] = 1; //atualiza a matriz11 BitSet(PORTD,j+4*i); //mostra na porta D12 }else{13 chave[i][j] = 0;14 BitClr(PORTD,j+4*i);15 }16 }17 } ELT024 Leitura de teclas e teclado matricial
  8. 8. Display de LCDDisplay de LCD ELT024 Leitura de teclas e teclado matricial
  9. 9. Display de LCD ELT024 Leitura de teclas e teclado matricial
  10. 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 simbolos1 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. 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. 12. Display de LCD ELT024 Leitura de teclas e teclado matricial
  13. 13. Display de LCD1 Terra 9 Bit 22 VCC (+5V) 10 Bit 33 Ajuste do contraste 11 Bit 44 Seleção de registro(RS) 12 Bit 55 Read/Write (RW) 13 Bit 66 Clock, Enable (EN) 14 Bit 77 Bit 0 15 Backlight +8 Bit 1 16 Backlight Gnd ELT024 Leitura de teclas e teclado matricial
  14. 14. Display de LCDAtençãoCuidado 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. Atroca/substituição do display tem que ser realizada com atençãopois a placa está pronta para receber apenas esse tipo de display. ELT024 Leitura de teclas e teclado matricial
  15. 15. Display de LCD ELT024 Leitura de teclas e teclado matricial
  16. 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 quetinham antes de chamar a rotina, já que eles estão multiplexados com outrosdispositivos ELT024 Leitura de teclas e teclado matricial
  17. 17. Display de LCDhttp://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi ELT024 Leitura de teclas e teclado matricial
  18. 18. Display de LCDhttp://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi ELT024 Leitura de teclas e teclado matricial
  19. 19. Display de LCD Formação dos comandos para controle do LCD: Dados (bit) TempoInstruçã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 usReset 0 0 0 0 0 0 0 0 1 - 1.5msConfig. 0 0 0 0 0 0 0 1 ID S 37 usConfig. 0 0 0 0 0 0 1 D C B 37 usMovim. 0 0 0 0 0 1 SC RL - - 37 usConfig. 0 0 0 0 1 DL N F - - 37 usMove(l,c) 0 0 1 X 0 0 Coluna 37 usOcup. 0 1 BF - - - - - - - 10 us http://www.sparkfun.com/datasheets/LCD/HD44780.pdf - Datasheet Hitachi (Modificado) ELT024 Leitura de teclas e teclado matricial
  20. 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. 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
  22. 22. Display de LCD1 #include "lcd.h"2 #include "basico.h"3 #define RS 04 #define EN 15 #define RW 267 void Delay40us(void){8 //para um cristal de 8MHz cada instrução9 //gasta 0,5 us: 40/0,5 = 80 instruções10 unsigned char i;11 //3 + 3 * 25 = 7812 for(i=0; i < 25; i++);13 }1415 void Delay2ms(void){16 unsigned char i;17 for(i=0; i < 200; i++)18 {19 Delay40us();20 }21 } ELT024 Leitura de teclas e teclado matricial
  23. 23. Display de LCD1 void EnviaComando(unsigned char cmd){2 BitClr(PORTE,RS); //comando3 BitClr(PORTE,RW); // habilita escrita4 PORTD = cmd;5 BitSet(PORTE,EN); //habilita leitura6 Delay2ms();7 BitClr(PORTE,EN); //termina leitura8 BitClr(PORTE,RS); //deixa em nível baixo9 BitClr(PORTE,RW); //deixa em nível baixo10 Delay2ms();11 }1213 void EnviaDados(unsigned char valor){14 BitSet(PORTE,RS); //dados15 BitClr(PORTE,RW); // habilita escrita16 PORTD = valor;17 BitSet(PORTE,EN); //habilita leitura18 Delay40us();19 BitClr(PORTE,EN); //termina leitura20 BitClr(PORTE,RS); //deixa em nível baixo21 BitClr(PORTE,RW); //deixa em nível baixo22 Delay40us();23 } ELT024 Leitura de teclas e teclado matricial
  24. 24. Display de LCD1 void InicializaLCD(void){2 Delay2ms(); // garante inicialização do LCD3 Delay2ms();4 Delay2ms();5 Delay2ms();6 Delay2ms();7 // configurações de direção dos terminais8 BitClr(TRISE,RS); //RS9 BitClr(TRISE,EN); //EN10 BitClr(TRISE,RW); //RW11 TRISD = 0x00; //dados12 ADCON1 = 0b00001110;13 //configura o display14 EnviaComando(0x38); //8bits, 2 linhas, 5x815 EnviaComando(0x06); //modo incremental16 EnviaComando(0x0F); //display, cursor e blinking ON17 EnviaComando(0x03); //zera contadores internos18 EnviaComando(0x01); //limpar display19 EnviaComando(0x80); //posição inicial20 } ELT024 Leitura de teclas e teclado matricial
  25. 25. Display de LCD1 #ifndef LCD_H2 #define LCD_H3 void EnviaComando(unsigned char cmd);4 void EnviaDados(unsigned char valor);5 void InicializaLCD(void);6 #endif //LCD_H ELT024 Leitura de teclas e teclado matricial
  26. 26. Display de LCD1 #include "basico.h"2 #include "config.h"3 #include "lcd.h"45 //inicio do programa6 void main(void) interrupt 07 {8 unsigned int i,j;9 char msg[] = "Hello World!";10 InicializaLCD();11 for(i=0;i<11;i++)12 {13 EnviaDados(msg[i]);14 for(j = 0; j < 65000; j++);15 }16 for(;;);17 } ELT024 Leitura de teclas e teclado matricial
  27. 27. TecladoDesenhando imagens no LCD ELT024 Leitura de teclas e teclado matricial
  28. 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. 29. Display de LCD0x40 Caracter 00x47 0x50 1a linha 0x040x48 Caracter 1 0x51 2a linha 0x0E0x4F 0x52 3a linha 0x0E0x50 Caracter 2 0x53 4a linha 0x0E0x57 0x54 5a linha 0x0E ... 0x55 6a linha 0x1F 0x56 7a linha 0x000x70 Caracter 6 0x57 8a linha 0x040x770x78 Caracter 70x7F Apenas 5 bits por linha! ELT024 Leitura de teclas e teclado matricial
  30. 30. Display de LCD1 //Cada linha é representada por um caracter2 char sino[8] =3 {0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0x1F, 0x00, 0x04};45 //Configura para a primeira posição de memória6 EnviaComando(0x40);78 //Envia cada uma das linhas em ordem9 for(i=0; i<8; i++){10 EnviaDados(sino[i]);11 } ELT024 Leitura de teclas e teclado matricial
  31. 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. 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. 33. Display de LCD1 - Criar uma imagem binária com o desenho desejado; ELT024 Leitura de teclas e teclado matricial
  34. 34. Display de LCD2 - Segmentar a imagem em retângulos de 8x5; ELT024 Leitura de teclas e teclado matricial
  35. 35. Display de LCD3 - Transcrever cada linha em binário/hexadecimal; 0x01 0 0 0 0 1 0x11 1 0 0 0 1 0x10 1 0 0 0 0 0x03 0 0 0 1 1 0x1F 1 1 1 1 1 0x18 1 1 0 0 0 0x03 0 0 0 1 1 0x00 0 0 0 0 0 0x18 1 1 0 0 0 0x0E 0 1 1 1 0 0x01 0 0 0 0 1 0x0E 0 1 1 1 0 0x1C 1 1 1 0 0 0x1F 1 1 1 1 1 0x07 0 0 1 1 1 0x18 1 1 0 0 0 0x12 1 0 0 1 0 0x03 0 0 0 1 1 0x08 0 1 0 0 0 0x14 1 0 1 0 0 0x02 0 0 0 1 0 0x08 0 1 0 0 0 0x1F 1 1 1 1 1 0x02 0 0 0 1 0 0x08 0 1 0 0 0 0x12 1 0 0 1 0 0x02 0 0 0 1 0 0x18 1 1 0 0 0 0x14 1 0 1 0 0 0x03 0 0 0 1 1 0x1C 1 1 1 0 0 0x1F 1 1 1 1 1 0x07 0 0 1 1 1 0x0E 0 1 1 1 0 0x08 0 1 0 0 0 0x0E 0 1 1 1 0 0x03 0 0 0 1 1 0x00 0 0 0 0 0 0x18 1 1 0 0 0 0x03 0 0 0 1 1 0x1F 1 1 1 1 1 0x18 1 1 0 0 0 0x01 0 0 0 0 1 0x11 1 0 0 0 1 0x10 1 0 0 0 0 0x00 0 0 0 0 0 0x00 0 0 0 0 0 0x00 0 0 0 0 0 ELT024 Leitura de teclas e teclado matricial
  36. 36. Display de LCD 4 - Gerar o código fonte.1 //Cada linha é representada por um caracter2 char unifei[48] = {3 0x01, 0x03, 0x03, 0x0E, 0x1C, 0x18, 0x08, 0x08, //0,04 0x11, 0x1F, 0x00, 0x01, 0x1F, 0x12, 0x14, 0x1F, //0,15 0x10, 0x18, 0x18, 0x0E, 0x07, 0x03, 0x02, 0x02, //0,26 0x08, 0x18, 0x1C, 0x0E, 0x03, 0x03, 0x01, 0x00, //1,07 0x11, 0x1F, 0x00, 0x01, 0x1F, 0x12, 0x14, 0x1F, //1,18 0x02, 0x03, 0x07, 0x0E, 0x18, 0x18, 0x10, 0x00 //1,29 };1011 EnviaComando(0x40); //Configura para a primeira posição de memór12 //Envia cada uma das linhas em ordem13 for(i=0; i<48; i++){14 EnviaDados(unifei[i]);15 } ELT024 Leitura de teclas e teclado matricial
  37. 37. Display de LCDResultado: ELT024 Leitura de teclas e teclado matricial

×