Como fazer a interface do teclado com o microcontrolador AVR (ATmega16) – (Parte 11/46)

Como fazer a interface do teclado com o microcontrolador AVR (ATmega16) – (Parte 11/46)

O teclado é o dispositivo de entrada mais amplamente utilizado para fornecer informações do mundo externo ao microcontrolador. O teclado torna o aplicativo mais interativo para os usuários. O conceito de interface de um teclado com o ATmega16 é semelhante à interface com qualquer outro microcontrolador. O artigo Interface do teclado com 8051 pode ser consultado para descrição detalhada da metodologia utilizada aqui. Este artigo explica a interface de um teclado 4×3 com o microcontrolador AVR (ATmega16) e a exibição da saída em um LCD.
O algoritmo e a explicação detalhada da interface do teclado são fornecidos no artigo mencionado acima. As breves etapas para conectar o teclado ao AVR estão descritas abaixo:
1. Configure os pinos de linha ou de coluna.
2. Coloque todos os pinos de saída em baixo e os pinos de entrada em alto.
3. Continue monitorando o valor da porta onde o teclado está conectado.

enquanto(1)
{ PORTD=0xF0; //define todas as entradas como uma valor=PIND; //obtém o valor PORTD na variável “valor” if(value!=0xf0) //se alguma tecla for pressionada, o valor será alterado { verificação1 ; verificação2 ; verificar3 ; verificar4 ; } }
4. Se houver alguma alteração no valor da porta, coloque um dos pinos de saída da porta em zero e deixe tudo alto.

verificação nula 1 (nula)
{
//DDRD = 0xf0;
bloco =0b11111110;
//pad &= (0<
_atraso_us(10);
se(bit_is_clear(PIND,c1))
LCD_write('1');
senão if(bit_is_clear(PIND,c2))
LCD_write('2');
senão if(bit_is_clear(PIND,c3))
LCD_write('3');
}
5. Se algum pino de entrada for zero, grave os dados do pino específico no LCD, caso contrário, continue com a etapa (4).

Código-fonte do projeto

###


// Programa para obter entrada do teclado e exibi-la no LCD.
#incluir #incluir #define pad PORTD #define r1 PD0 #define r2 PD1 #define r3 PD2 #define r4 PD3 #define c1 PD4 #define c2 PD5 #define c3 PD6 verificação nula1 (void); verificação nula2 (void); verificação nula3 (void); verificação nula4 (void); #define LCD_DATA PORTA //porta de dados LCD #define ctrl PORTAB #define em PB2 //ativa o sinal #define rw PB1 //sinal de leitura/gravação #define rs PB0 //sinal de seleção de resistência void LCD_cmd(char cmd não assinado); vazio init_LCD(vazio); void LCD_write (dados de caracteres não assinados); imprensa interna não assinada; int principal { valor de caractere não assinado; DDRA=0xff; //Porta LCD_DATA como porta de saída DDRB=0x07; //sinaliza como saída DDRD=0x0F; bloco=0xf0; init_LCD ; //inicialização do LCD LCD_write_string("pressione uma tecla"); LCD_cmd(0xc0); enquanto(1) { PORTD=0xF0; //define todas as entradas como uma valor=PIND; //obtém o valor PORTD na variável “valor” se(valor!=0xf0) //se alguma tecla for pressionada o valor será alterado { verificação1 ; verificação2 ; verificar3 ; verificar4 ; } } retornar 0; } verificação nula 1 (nula) { //DDRD = 0xf0; bloco =0b11111110; //pad &= (0< _atraso_us(10); se(bit_is_clear(PIND,c1)) LCD_write('1'); senão if(bit_is_clear(PIND,c2)) LCD_write('2'); senão if(bit_is_clear(PIND,c3)) LCD_write('3'); } verificação nula 2 (void) { bloco=0b11111101; /pad &= (0< _atraso_us(10); se(bit_is_clear(PIND,c1)) LCD_write('4'); senão if(bit_is_clear(PIND,c2)) LCD_write('5'); senão if(bit_is_clear(PIND,c3)) LCD_write('6'); } verificação nula3 (void) { bloco=0b11111011; //pad &= (0< _atraso_us(10); se(bit_is_clear(PIND,c1)) LCD_write('7'); senão if(bit_is_clear(PIND,c2)) LCD_write('8'); senão if(bit_is_clear(PIND,c3)) LCD_write('9'); } verificação nula 4 (nula) { bloco =0b11110111; //pad &= (0< _atraso_us(10); se(bit_is_clear(PIND,c1)) LCD_write('#'); senão if(bit_is_clear(PIND,c2)) LCD_write('0'); senão if(bit_is_clear(PIND,c3)) LCD_write('*'); } vazio init_LCD(vazio) { LCD_cmd(0x38); //inicialização do LCD 16X2 no modo 8 bits _atraso_ms(1); LCD_cmd(0x01); //limpa o LCD _atraso_ms(1); LCD_cmd(0x0E); //cursor LIGADO _atraso_ms(1); LCD_cmd(0x80); // ---8 vai para a primeira linha e --0 é para a 0ª posição _atraso_ms(1); retornar; } void LCD_cmd (char cmd não assinado) { LCD_DATA=cmd; ctrl=(0< //tornando RS e RW como LOW e EN como HIGH _atraso_ms(1); ctrl=(0< //tornando RS, RW, LOW e EN como LOW _atraso_ms(50); retornar; } void LCD_write (dados de caracteres não assinados) { LCD_DATA=dados; ctrl = (1< // fazendo RW como LOW e RS, EN como HIGH _atraso_ms(1); ctrl = (1< //tornando EN e RW como LOW e RS HIGH _atraso_ms(50); // dá um atraso de 10 milissegundos para executar as coisas retornar ; } void LCD_write_string(caractere não assinado *str) //pega o valor do endereço da string no pionter *str { int i=0; enquanto(str(i)!='�') // o loop continuará até que os caracteres NULL estejam na string { LCD_write(str(i)); //enviando dados no CD byte por byte eu++; } retornar; }

###

Diagramas de circuito

Diagrama de circuito de como fazer a interface do teclado com o microcontrolador AVR-ATmega16

Componentes do Projeto

  • ATmega16
  • LCD
  • Predefinido

Vídeo do projeto

Conteúdo Relacionado

Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
ESP32-CAM é um módulo de câmera compacto que combina...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Você provavelmente já viu permanecer um isolante sente-se em...
Você provavelmente já viu Isoladores de manilha entronizados em...
Você provavelmente já passou por situações em que o...
Torna al blog

Lascia un commento

Si prega di notare che, prima di essere pubblicati, i commenti devono essere approvati.