呵呵,这样都记得.的确是哦 7楼: 随便说说
if (R1 == 0) Key = '2'; if (R2 == 0) Key = '5'; if (R3 == 0) Key = '8'; if (R4 == 0) Key = '0'; 如果R1=0则Key = '2'... 但如果R1,R2,R3,R4其中几个都为0怎样,合理吗.... 所以 一看就写的不咋地,没有必要继续看...
bit KEYPAD_Scan(char* const pKey, char* const pFuncKey) { static data char Old_Key;
char Key = KEYPAD_NO_NEW_DATA; char Fn_key = (char) 0x00;
char i; //添加的 C1 = 0; // Scanning column 1 if (R1 == 0) {Key = '1';i++;} if (R2 == 0) {Key = '4';i++;} if (R3 == 0) {Key = '7';i++;} if (R4 == 0) Fn_key = '*'; C1 = 1;
C2 = 0; // Scanning column 2 if (R1 == 0) {Key = '2';i++;} if (R2 == 0) {Key = '5';i++;} if (R3 == 0) {Key = '8';i++;} if (R4 == 0) {Key = '0';i++;} C2 = 1;
C3 = 0; // Scanning column 3 if (R1 == 0) {Key = '3';i++;} if (R2 == 0) {Key = '6';i++;} if (R3 == 0) {Key = '9';i++;} if (R4 == 0) Fn_key = '#'; C3 = 1;
if (Key == KEYPAD_NO_NEW_DATA) { // No key pressed (or just a function key) Old_Key = KEYPAD_NO_NEW_DATA; Last_valid_key_G = KEYPAD_NO_NEW_DATA;
return 0; // No new data } // A key has been pressed: debounce by checking twice if(i==1) //添加的 { if (Key == Old_Key) { // A valid (debounced) key press has been detected // Must be a new key to be valid - no 'auto repeat' if (Key != Last_valid_key_G) { // New key! *pKey = Key; Last_valid_key_G = Key;
// Is the function key pressed too? if (Fn_key) { // Function key *is* pressed with another key *pFuncKey = Fn_key; } else { *pFuncKey = (char) 0x00; }
return 1; } } }//end if(i==1) // No new data Old_Key = Key; return0; return 0; }
这样就可以禁止两个以上的数字键被按下了,,,,不同的要求偏写不同的程序就可以了,没必要什么都做的十全十美的,在特定的场合OK就行了!!!
|