#include #define ROWS PORTA #define COLS PORTB void MSDelay(int); void SerTX(unsigned char); const unsigned char keypad[4][4] = { '1','2','3','A', '4','5','6','B', '7','8','9','C', '*','0','#','D' }; unsigned char column,row; void main(void) { SCI0BDH=0x0; SCI0BDL=0x0D; SCI0CR1=0x0; SCI0CR2=0x0C; DDRA =0xFF; DDRT =0xFF; DDRB =0; while(1) { do { ROWS = 0; column = COLS; column = column & 0x0F; }while(column != 0x0F); do { do { MSDelay(15); column = COLS; column = column & 0x0F; }while(column == 0x0F); MSDelay(15); column = COLS; column = column & 0x0F; }while(column == 0x0F); while(1) { ROWS = 0xFE; column = COLS; column = column & 0x0F; if(column != 0x0F) { row = 0; break; } ROWS = 0xFD; column = COLS; column = column & 0x0F; if(column != 0x0F) { row = 1; break; } ROWS = 0xFB; column = COLS; column = column & 0x0F; if(column != 0x0F) { row = 2; break; } ROWS = 0xF7; column = COLS; column = column & 0x0F; if(column != 0x0F) { row = 3; break; } column = 0; break; } if(column == 0x0E) { PTT = keypad[row][0]; SerTX(keypad[row][0]); } else if(column == 0x0D) { PTT = keypad[row][1]; SerTX(keypad[row][1]); } else if(column == 0x0B) { PTT = keypad[row][2]; SerTX(keypad[row][2]); } else if(column == 0x07) { PTT = keypad[row][3]; SerTX(keypad[row][3]); } } } void SerTX(unsigned char x) { while(!(SCI0SR1 & SCI0SR1_TDRE_MASK)); SCI0DRL=x; } void MSDelay(int ms) { int i,j; for(i=0;i < ms; i++) for(j=0;j < 329; j++); }