Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IMEC
Salón 28109
Práctica II
Presenta:
{
#define F_CPU 16000000UL output_ddr=output_ddr&~((1<<0)|(1<<1)|(1<<2)|(1<<
#include <avr/io.h> 3)|(1<<4)|(1<<5));
{
//Rutina para hacer corrimientos e identificar output_port=(output_port&0b11000000)|(keypad[fila
Renglon y columna ][2]&0x0F);
while (1) //poner los 4 bits menos significativos de keypad
{ //renglon 0 en output_prt
key_port=(key_port&0x0F)|0b11100000; //pone en 0 }
renglon 0 ([PD7..PD4]=1110)
else
colum=key_pin&0X0F; //colloc<--[PD3..PD0]
//0b 0000 0111
if (colum!=0x0F) //si es verdadero quiere decir
que una tecla de ese renglon esta presionada output_port=(output_port&0b11000000)|(keypad[fila
][3]&0x0F);
{
//poner los 4 bits menos significativos de keypad
fila=0; en output_prt
break;
} }
//renglon 1 }
key_port=(key_port&0x0F)|0b11010000; //pone en 0
renglon 1 ([PD7..PD4]=1101)
colum=key_pin&0X0F;
//colloc<--[PD3..PD0]
if (colum!=0x0F) //si es
verdadero quiere decir que una tecla de ese renglon
esta presionada
{
fila=1;
break;
}
Descripción de código.
1. Configuración de los pines y constantes: Se definen algunas constantes y se incluyen las
bibliotecas necesarias para el control del microcontrolador AVR. Además, se definen las
asignaciones de los puertos para los pines utilizados en el teclado y la salida.
4. Rutina de detección de teclas no presionadas: Primero, se verifica si todas las teclas del
teclado están en estado no presionado. Esto se hace mediante un bucle que pone en 0 los
pines PD7 a PD4 y luego lee el estado de las columnas (PD3 a PD0). Si alguna columna
tiene un valor diferente de 0x0F (todos los bits en alto), significa que al menos una tecla
está presionada.
5. Rutina para reducir rebotes: Una vez que se detecta que al menos una tecla está
presionada, se realiza una rutina para reducir los rebotes que pueden ocurrir debido a la
fluctuación en el estado de la tecla. Se utiliza otro bucle que espera hasta que se presione
una tecla y luego espera un breve período de tiempo (25 ms). Luego, se lee nuevamente
el estado de las columnas para confirmar que la tecla todavía está presionada.
6. Rutina para identificar fila y columna: Después de confirmar que se ha presionado una
tecla y reducir los rebotes, se utiliza un bucle para determinar la fila y la columna
correspondientes a la tecla presionada. El bucle recorre las filas (0 a 3) y configura cada
una en 0 mientras lee el estado de las columnas. Si encuentra una columna que no está en
estado alto (0x0F), significa que se ha presionado una tecla en esa fila.
8. El bucle principal se repite continuamente, lo que permite detectar y procesar las teclas
presionadas en el teclado matricial.
Desarrollo de la practica
Parte 2: Programar un circuito donde se utilice un display de 7 segmentos etc.
#include <util/delay.h> };
resultado = binario[x];
//despliega digito 3
//a b c d e f g dp SegThree_ON;
0b01011011, //2
0b01111100, //B
num = 0x0FFF;
int main(void) }
{ }
DDRD=
DDRD|(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(
1<<6); //Configura PD7..PD0 como salida// do
}
while (1)
_delay_ms(45);
do
MUX();
if(a == 0b00010000){
num+=1;
num = 0;
Descripción de código
1. Se define una función "tabla" que mapea los valores binarios correspondientes a los
dígitos y letras hexadecimales en una matriz.
2. Se declaran variables globales para los segmentos de visualización (seg1, seg2, seg3),
una variable para el valor actual (num) y una variable auxiliar (a).
3. Se define una función "MUX" que actualiza los segmentos de visualización con los
dígitos correspondientes del número almacenado en "num".
López, J., & García, A. (2018). Design and Implementation of a 4x4 Keypad Interfacing with 7-
Segment Display using ATmega328 Microcontroller. International Journal of Engineering and
Technology, 7(3.27), 14-19.
Smith, R. (2016). Debouncing Techniques for Mechanical Keyboards.
Patel, S., & Sharma, M. (2020). Design and Implementation of Digital Counter using
ATmega328 Microcontroller with 7-Segment Display. International Journal of Advanced
Research in Electrical, Electronics and Instrumentation Engineering, 9(6), 6514-6518.