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;
}
AVR按键扫描程序
最新推荐文章于 2021-03-25 00:46:16 发布