#include <mega16.h>
#include <delay.h>
#include <lcd.h>
#include <stdlib.h>
#include <math.h>
#asm
.equ __lcd_port=0x18
#endasm
int key();
char y=0 , lcd[25], z ;
//#############################################
void main(void){
DDRB=0x0F;
DDRC=0x07;
DDRD=0x0F;
lcd_init(16);
lcd_clear();
key();
z=10; //Just to check LCD is working printing z on lcd and cleared it before it enters while loop
itoa(z,lcd);
lcd_puts(lcd);
delay_ms(100);
lcd_clear();
while (1){
y=key();
itoa(y,lcd);
lcd_puts(lcd);
delay_ms(50);
}
}
//#########################################################
int key(void){
char KEY = 255 ;
while(KEY==255){
PORTD.0 = 1 ;
PORTD.1 = 0 ;
PORTD.2 = 0 ;
PORTD.3 = 0 ;
if(PIND.4 == 1)
KEY = 7;
if(PIND.5 == 1)
KEY = 8;
if(PIND.6 == 1)
KEY = 9;
if(PIND.7 == 1)
KEY = 10;
//==========================================
PORTD.0 = 0 ;
PORTD.1 = 1 ;
PORTD.2 = 0 ;
PORTD.3 = 0 ;
if(PIND.4 == 1)
KEY = 4;
if(PIND.5 == 1)
KEY = 5;
if(PIND.6 == 1)
KEY = 6;
if(PIND.7 == 1)
KEY = 11;
//==========================================
PORTD.0 = 0 ;
PORTD.1 = 0 ;
PORTD.2 = 1 ;
PORTD.3 = 0 ;
if(PIND.4 == 1)
KEY = 1;
if(PIND.5 == 1)
KEY = 2;
if(PIND.6 == 1)
KEY = 3;
if(PIND.7 == 1)
KEY = 12;
//==========================================
PORTD.0 = 0 ;
PORTD.1 = 0 ;
PORTD.2 = 0 ;
PORTD.3 = 1 ;
if(PIND.4 == 1)
KEY = 15;
if(PIND.5 == 1)
KEY = 0;
if(PIND.6 == 1)
KEY = 14;
if(PIND.7 == 1)
KEY = 13;
//=======================================================
}
delay_ms(50);
return KEY;
}
//############################################################