Code: /* * automation_of_restaurant_menu_ordering.c * * Created: 6/16/2016 11:40:10 AM * Author: Anusha */ #include #include #define Rows PORTC //Pc0,pc1,pc2,pc3 #define Columns PIND //PD4,PD5,PD6 unsigned char upperNibble, keyCode, keyPressed,k,c[6]; char press_key() { unsigned char i; DDRC = 0x0f; PORTC=0x0f; PORTD = 0xf0; k=1; while(k==1) { upperNibble = 0xff; for(i=0; i<4; i++) { _delay_ms(1); Rows = ~(0x01 << i); _delay_ms(1); upperNibble = Columns| 0x0f; if (upperNibble != 0xff) { _delay_ms(20); //key debouncing delay upperNibble = Columns | 0x0f; if(upperNibble == 0xff) goto OUT; keyCode = (upperNibble & 0xf0) | (0x0f & ~(0x01 << i)); while (upperNibble != 0xff) upperNibble = Columns | 0x0f; _delay_ms(20); //key debouncing delay switch (keyCode) { case (0xee): keyPressed = '1';k=0; break; case (0xed): keyPressed = '4';k=0; break; case (0xeb): keyPressed = '7';k=0; break; case (0xe7): keyPressed = '*';k=0; break; case (0xde): keyPressed = '2';k=0; break; case (0xdd): keyPressed = '5';k=0; break; case (0xdb): keyPressed = '8';k=0; break; case (0xd7): keyPressed = '0';k=0; break; case (0xbe): keyPressed = '3';k=0; break; case (0xbd): keyPressed = '6';k=0; break; case (0xbb): keyPressed = '9';k=0; break; case (0xb7): keyPressed = '#';k=0; break; case (0x7e): keyPressed = '/';k=0; break; case (0x7d): keyPressed = 'X';k=0; break; case (0x7b): keyPressed = '-';k=0; break; case (0x77): keyPressed = '+';k=0; break; default : keyPressed = 'X';k=0; } OUT:; } } } return keyPressed; } void uart_init() { UCSRC=(1<