AVR按键扫描程序
来源:互联网 发布:结构的刚度矩阵怎么求 编辑:程序博客网 时间:2024/05/22 08:24
uchar key_press()//判断是否有按键按下 { uchar i; DDRA=0XFF;//把PA口作为输出 PORTA=0XF0; DDRA=0X0F; i=PINA;//读取端口引脚 if(i==0XF0) { DDRA=0XFF;//把PA口作为输出 return 0; } else { DDRA=0XFF;//把PA口作为输出 return 1; } } uchar key_scan()//扫描按键 { uchar key,i=0x7F,j; delay_ms(10);//键盘消抖 if(key_press()) { do { i=(i<<1|i>>7); //这个地方很巧妙 PORTA=i; DDRA=0X0F;//高四位为输入,低四位为输出 key=PINA; j=key&0xF0; }while(j==0xF0); while(key_press()); switch(key) { case 0XE7: key=0X0;break; case 0XEB: key=0X1;break; case 0XEC: key=0X2;break; case 0XEE: key=0X3;break; case 0XD7: key=0X4;break; case 0XDB: key=0X5;break; case 0XDD: key=0X6;break; case 0XDE: key=0X7;break; case 0XB7: key=0X8;break; case 0XBB: key=0X9;break; case 0XBD: key=0XA;break; case 0XBE: key=0XB;break; case 0X77: key=0XC;break; case 0X7B: key=0XD;break; case 0X7D: key=0XE;break; case 0X7E: key=0XF;break; default: key=16; } } else key=16;return key; }