4X4键盘扫描程序,选用查表方法,适用于AVR单片机。
此处为4X4键盘软件部分,硬件部分avr.com/news/2008-01/1945.htm&rn=252847&v=1&ref=http%3A//www.picavr.com/news/c37/defaultp7.htm&province=%u5E7F%u4E1C&city=%u5E7F%u5DDE” qs_is_on_div=”” rel=”nofollow” target=”_blank”>规划请参照:
此程序对应的键盘电路为:
/*键盘扫描函数读取当时键盘的状况有按键按下回来相应按键值无按键按下回来"0x00"*/unsigned char key_read(void){unsigned char i;DDRA = 0x00;/*获取列地址*/PORTA = 0x0F;DDRA = 0xF0;i = PINA;DDRA = 0x00;/*获取行地址*/PORTA = 0xF0;DDRA = 0x0F;i |= PINA;DDRA = 0x00;/*输出复位*/PORTA = 0xFF;switch (i) {/*将按键码转换成键值*/case 0x00: return 0x00;case 0xEE:return 1;case 0xDE:return 2;case 0xBE:return 3;case 0x7E:return A;case 0xED:return 4;case 0xDD:return 5;case 0xBD:return 6;case 0x7D:return B;case 0xEB:return 7;case 0xDB:return 8;case 0xBB:return 9;case 0x7B:return C;case 0xE7:return *;case 0xD7:return 0;case 0xB7:return #;case 0x77:return D;default :return 0x00;} }
/*按键获取函数获取按键信号,其间包括有状况记载及按键去哆嗦。有正确按键按下回来相应按键值无正确按键按下回来"0x00"*/unsigned char get_key(void){unsigned char i;static unsigned char j;/*按键记载*/
i = key_read();if (i == 0x00){/*无有用按键按下*/j = 0x00;/*铲除按键记载*/return 0x00;/*程序退出*/}if (j == 0x00) {/*为新按键*/j = i;/*保存本次采样成果*/delay_ms(10);/*去按键哆嗦*/i = key_read();if(i == j) {return i;}}return 0x00;}