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...
Bloga dön

Yorum yapın

Yorumların yayınlanabilmesi için onaylanması gerektiğini lütfen unutmayın.