You are on page 1of 3

/*

* MtE316L: Microprocessor & Microcontrollers (Lab), Fall 2018


* Dept. of Mechatronics Engg., UET Peshawar
* Date: 10/25/2018
* Author : Mazidi et al.
* Modified by: Dr. Muhammad Tufail
*/
#define F_CPU 16000000UL
#define BAUD_RATE 9600
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define KEY_PRT PORTB
//keyboard PORT
#define KEY_DDR DDRB
#define KEY_PIN PINB

unsigned char keypad[4][4] =


{ '7','8','9','/',
'4','5','6','x',
'1','2','3','-',
'o','0','=','+'};
void usart_init(void)
{
UCSR0B = (1<<TXEN0);
UCSR0C = (1<< UCSZ01)|(1<<UCSZ00);
UBRR0L = 0x33;
}
void usart_send(unsigned char ch )
{
while (! (UCSR0A & (1<<UDRE0))); //wait until UDR0 is empty

UDR0 = ch; //transmit ch


_delay_ms(10);
}

int main(void)
{
unsigned char *number , operator1 , operator2 ;
int a ,b;
unsigned char *operand1[3] , operand2[6]={0} ;
int *operand;
operand = operand1;
char *result[2]={0};

int i = 0;
unsigned char colloc, rowloc;
KEY_DDR = 0xF0;
KEY_PRT = 0xFF;
usart_init(); //initialize serial communication
while(1)
{
do
{
KEY_PRT &= 0x0F;
asm("NOP");
colloc = (KEY_PIN & 0x0F);
} while(colloc != 0x0F);
do
{
do
{
_delay_ms(10);
colloc =(KEY_PIN&0x0F);
} while(colloc == 0x0F);
_delay_ms(10);
colloc = (KEY_PIN & 0x0F);
}while(colloc == 0x0F);
while(1)
{

KEY_PRT = 0xEF;
asm("NOP");
colloc = (KEY_PIN & 0x0F);
if(colloc != 0x0F)
{
rowloc = 0;
break;
}
KEY_PRT = 0xDF;
asm("NOP");
colloc = (KEY_PIN & 0x0F);
if(colloc != 0x0F)
{
rowloc = 1;
break;
}
KEY_PRT = 0xBF;
asm("NOP");
colloc = (KEY_PIN & 0x0F);
if(colloc != 0x0F)
{
rowloc = 2;
break;
}
KEY_PRT = 0x7F;
asm("NOP");
colloc = (KEY_PIN & 0x0F);
rowloc = 3;
break;
}

if(colloc == 0x0E){
number = (keypad[rowloc][0]); //transmit letter

}
else if(colloc == 0x0D) {
number = (keypad[rowloc][1] );}

else if(colloc == 0x0B){


number = (keypad[rowloc][2]);}
else {
number = (keypad[rowloc][3]);}

if ( number!='=' )
{

operand1[i] = number;

i=i+1;
}

if ( number=='=')
{
i=0;
a = atoi(operand1);
a=a+2;
itoa (a,operand1,10);
usart_send(operand1[0]);
}

return 0;
}

You might also like