1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| sbit KEY_IN_1 = P4^4; sbit KEY_IN_2 = P4^2; sbit KEY_IN_3 = P3^5; sbit KEY_IN_4 = P3^4; sbit KEY_OUT_1 = P3^0; sbit KEY_OUT_2 = P3^1; sbit KEY_OUT_3 = P3^2; sbit KEY_OUT_4 = P3^3; uchar KeySta[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
void Timer0Init(void) { AUXR &= 0x7F; TMOD &= 0xF0; TL0 = 0x66; TH0 = 0xFC; TF0 = 0; TR0 = 1; ET0 = 1; EA = 1; }
void Scan_Key_16(void) { uchar i; static uchar keyout = 0; static uchar keybuff[4][4] = {{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff}}; keybuff[keyout][0] = (keybuff[keyout][0] << 1) | KEY_IN_1; keybuff[keyout][1] = (keybuff[keyout][1] << 1) | KEY_IN_2; keybuff[keyout][2] = (keybuff[keyout][2] << 1) | KEY_IN_3; keybuff[keyout][3] = (keybuff[keyout][3] << 1) | KEY_IN_4; for(i = 0;i < 4;i ++) { if((keybuff[keyout][i] & 0x0f) == 0x00) KeySta[keyout][i] = 0; else if((keybuff[keyout][i] & 0x0f) == 0x0f) KeySta[keyout][i] = 1; } keyout ++; keyout = keyout & 0x03; switch(keyout) { case 0:KEY_OUT_4 = 1;KEY_OUT_1 = 0;break; case 1:KEY_OUT_1 = 1;KEY_OUT_2 = 0;break; case 2:KEY_OUT_2 = 1;KEY_OUT_3 = 0;break; case 3:KEY_OUT_3 = 1;KEY_OUT_4 = 0;break; default:break; }
}
void Ser_Timer0() interrupt 1 { Scan_Key_16(); }
|