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

Cómo conectar el teclado con el microcontrolador AVR (ATmega16) – (Parte 11/46)

El teclado es el dispositivo de entrada más utilizado para proporcionar información del mundo externo al microcontrolador. El teclado hace que la aplicación sea más interactiva para los usuarios. El concepto de interconectar un teclado con el ATmega16 es similar a interconectar con cualquier otro microcontrolador. Se puede consultar el artículo Interfaz de teclado con 8051 para obtener una descripción detallada de la metodología utilizada aquí. Este artículo explica cómo conectar un teclado 4x3 con el microcontrolador AVR (ATmega16) y cómo mostrar la salida en una pantalla LCD.
El algoritmo y la explicación detallada de la interfaz del teclado se proporcionan en el artículo mencionado anteriormente. Los breves pasos para conectar el teclado al AVR se describen a continuación:
1. Configure pines de fila o columna.
dos. Configure todos los pines de salida en nivel bajo y los pines de entrada en nivel alto.
3. Continúe monitoreando el valor del puerto donde está conectado el teclado.


 mientras(1)

{ PUERTO=0xF0; //establece todas las entradas como una valor=PIND; //obtiene el valor PORTD en la variable “valor” if(value!=0xf0) //si se presiona cualquier tecla, el valor cambiará { comprobar1; comprobar2; comprobar3; comprobar4; } }
4. Si hay algún cambio en el valor del puerto, establezca uno de los pines de salida del puerto en cero y déjelo todo en alto.


 verificación nula 1 (nula)
 {
 //DDRD = 0xf0;
 bloque =0b11111110;
 //pad &= (0< 
_delay_us(10);
 si(bit_is_clear(PIND,c1))
 LCD_write('1');
 de lo contrario si (bit_is_clear (PIND, c2))
 LCD_write('2');
 de lo contrario si (bit_is_clear (PIND, c3))
 LCD_write('3');
 }
 
5. Si algún pin de entrada es cero, escriba los datos del pin específico en la pantalla LCD; de lo contrario, continúe con el paso (4).

Código fuente del proyecto

###


 // Programa para tomar la entrada del teclado y mostrarla en la pantalla LCD.
#incluir
#incluir #definir pad PORTD #definir r1 PD0 #definir r2 PD1 #definir r3 PD2 #definir r4 PD3 #definir c1 PD4 #definir c2 PD5 #definir c3 PD6 marque null1 (nulo); marque null2 (nulo); marque null3 (nulo); marque null4 (nulo); #definir PUERTO LCD_DATA //Puerto de datos LCD #definir ctrl PORTAB #definir en PB2 //activar la señal #definir rw PB1 //señal de lectura/escritura #definir jajaja PB0 //señal de selección de resistencia void LCD_cmd (cmd de carácter sin firmar); vacío init_LCD(vacío); void LCD_write (datos de caracteres sin firmar); prensa interna sin firmar; int principal { valor de carácter sin firmar; DDRA=0xff; // Puerto LCD_DATA como puerto de salida DDRB=0x07; //marcar como salida DDRD=0x0F; bloque=0xf0; inicio_LCD; //inicialización LCD LCD_write_string("presione una tecla"); LCD_cmd(0xc0); mientras(1) { PUERTO=0xF0; //establece todas las entradas como una valor=PIND; //obtiene el valor PORTD en la variable “valor” si(valor!=0xf0) //si se presiona alguna tecla el valor cambiará { comprobar1; comprobar2; comprobar3; comprobar4; } } devolver 0; } verificación nula 1 (nula) { //DDRD = 0xf0; bloque =0b11111110; //pad &= (0< _delay_us(10); si(bit_is_clear(PIND,c1)) LCD_write('1'); de lo contrario si (bit_is_clear (PIND, c2)) LCD_write('2'); de lo contrario si (bit_is_clear (PIND, c3)) LCD_write('3'); } cheque nulo 2 (nulo) { bloque = 0b11111101; /pad &= (0< _delay_us(10); si(bit_is_clear(PIND,c1)) LCD_write('4'); de lo contrario si (bit_is_clear (PIND, c2)) LCD_write('5'); de lo contrario si (bit_is_clear (PIND, c3)) LCD_write('6'); } cheque null3 (nulo) { bloque = 0b11111011; //pad &= (0< _delay_us(10); si(bit_is_clear(PIND,c1)) LCD_write('7'); de lo contrario si (bit_is_clear (PIND, c2)) LCD_write('8'); de lo contrario si (bit_is_clear (PIND, c3)) LCD_write('9'); } verificación nula 4 (nula) { bloque =0b11110111; //pad &= (0< _delay_us(10); si(bit_is_clear(PIND,c1)) LCD_write('#'); de lo contrario si (bit_is_clear (PIND, c2)) LCD_write('0'); de lo contrario si (bit_is_clear (PIND, c3)) LCD_write('*'); } init_LCD vacío (vacío) { LCD_cmd(0x38); //inicialización del LCD 16X2 en modo de 8 bits _delay_ms(1); LCD_cmd(0x01); //limpiar la pantalla LCD _delay_ms(1); LCD_cmd(0x0E); //cursor activado _delay_ms(1); LCD_cmd(0x80); // ---8 va a la primera línea y --0 está a la posición 0 _delay_ms(1); volver; } void LCD_cmd (cmd de carácter sin firmar) { LCD_DATA=cmd; Ctrl=(0< //haciendo RS y RW como BAJO y EN como ALTO _delay_ms(1); Ctrl=(0< //haciendo RS, RW, LOW y EN como LOW _delay_ms(50); volver; } void LCD_write (datos de caracteres sin firmar) { LCD_DATA=datos; control = (1< // haciendo RW como BAJO y RS, EN como ALTO _delay_ms(1); control = (1< //haciendo EN y RW como BAJO y RS ALTO _delay_ms(50); // da un retraso de 10 milisegundos para ejecutar cosas volver ; } void LCD_write_string(carácter sin firmar *cadena) // obtenemos el valor de la dirección de cadena en el pioneer *str { int i=0; mientras(cadena(i)!='�') // el bucle continuará hasta que haya caracteres NULL en la cadena { LCD_write(cadena(i)); //enviando datos al CD byte a byte yo++; } volver; }

###

Diagramas de circuito

Diagrama de circuito de cómo conectar el teclado con el microcontrolador AVR-ATmega16

Componentes del proyecto

  • ATmega16
  • LCD
  • Por defecto

Vídeo del proyecto

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.