Keypad 3×4 ATMega Atmel Studio

file .c

#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <stdlib.h>
#include "keypad_lib.h"

char read_keypad()
{
	DDR_keypad = 0b00001111;
	/* 1 2 3
	   4 5 6
	   7 8 9
	   * 0 #
	*/
	
	PORT_keypad = 0b11111110;
	//scan baris 1
	if(PIN_keypad == 0b11101110)
	{
		return ('1');	
	}
	else if(PIN_keypad == 0b11011110)
	{
		return ('2');
	}
	else if(PIN_keypad == 0b10111110)
	{
		return ('3');
	}
	
	//scan baris 2	
	PORT_keypad = 0b11111101;
	if(PIN_keypad == 0b11101101)
	{
		return ('4');
	}
	else if(PIN_keypad == 0b11011101)
	{
		return ('5');
	}
	else if(PIN_keypad == 0b10111101)
	{
		return ('6');
	}
	
	//scan baris 3
	PORT_keypad = 0b11111011;
	if(PIN_keypad == 0b11101011)
	{
		return ('7');
	}
	else if(PIN_keypad == 0b11011011)
	{
		return ('8');
	}
	else if(PIN_keypad == 0b10111011)
	{
		return ('9');
	}
	
	//scan baris 4
	PORT_keypad = 0b11110111;
	if(PIN_keypad == 0b11100111)
	{
		return ('*');
	}
	else if(PIN_keypad == 0b11010111)
	{
		return ('0');
	}
	else if(PIN_keypad == 0b10110111)
	{
		return ('#');
	}
	return ('$');
}

file .h

#ifndef KEYPAD_LIB_H_
#define KEYPAD_LIB_H_

#include <inttypes.h>
#include <avr/pgmspace.h>

#define PORT_keypad PORTB
#define PIN_keypad PINB
#define DDR_keypad DDRB

extern char read_keypad();

#endif /* KEYPAD_LIB_H_ */

Leave a comment