ေအာက္က ပံုေတြမွာ Schematic ေကာ Keypad ပံုစံေတြပါ ျပထားပါတယ္။ Software controlled logic ကေတာ့ ..
၁။ ၄ လိုင္းစီ (4 Outputs and 4 Inputs) ထားပါ။ Row, Column ႀကိဳက္သလို ထားလို႔ရပါတယ္။
၂။ Output ၁ လိုင္းစီကေန logic (High/ Low) ေပးပါ။ ၁ လိုင္းေပးတိုင္း Input 4 lines လံုးကို scan ပါ။ ၁ လိုင္းမိတာနဲ႔ ထြက္ပစ္လိုက္ပါ။
ဥပမာ - Output 1 and Input 1 ဆိုရင္ Row 1, Col 1 ဆိုေတာ့ “Key 1"။
Output 2 and Input 3 ဆိုရင္ Row 2, Col 3 ဆိုေတာ့ “Key 6"။ အဲလိုနည္းစနစ္နဲ႔ ေရးသြားပါတယ္။
၃။ Key Bonce ကို ေျဖာက္ခ်င္ယင္ေတာ့ ၂ ခါျပန္ scan လုပ္ၿပီး တူတယ္ဆိုမွ အဲ့ဒီ Key ကို ယူပါ။ ေအာက္မွာ နမူနာ source code ထဲ့ေပးထားပါတယ္။
#include
#define keyport P2 //keypad connected to P2
#define col1 P2_0 //column 1
#define col2 P2_1 //column 2
#define col3 P2_2 //column 3
#define col4 P2_3 //column 4
#define TRUE 1 //some defines
#define FALSE 0
/*
+---------------------------------------+
| Prototype: void key_init(void); |
| Return Type: void |
| Arguments: None |
| Description: Initialize ports and |
| Keypad. |
+---------------------------------------+
*/
void key_init(){
keyport &=0x0F; //make Rows as o/p and cols are i/p
}
/*
+-----------------------------------------------+
| Prototype: unsigned char get_key(void); |
| Return Type: unsigned char |
| Arguments: None |
| Description: To read key from the keypad |
+-----------------------------------------------+
*/
unsigned char get_key(){
unsigned char i,k,key=0;
k=1;
for(i=0;i<4;i++){>
keyport &=~(0x80>>i); //to make rows low 1 by 1
if(!col1){ //check if key1 is pressed
key = k+0; //set key number
while(!col1); //wait for release
return key; //return key number
}
if(!col2){ //check if key2 is pressed
key = k+1; //set key number
while(!col2); //wait for release
return key; //return key number
}
if(!col3){ //check if key3 is pressed
key = k+2; //set key number
while(!col3); //wait for release
return key; //return key number
}
if(!col4){ //check if key4 is pressed
key = k+3; //set key number
while(!col4); //wait for release
return key; //return key number
}
k+=4; //next row key number
keyport |= 0x80>>i; //make the row high again
}
return FALSE; //return false if no key pressed
}



























