AVR中的key=PIND; j=key&0xFD;和j=PIND&0xFD;j值为什么不一样呢
部分程序如下:uchar key_press(void)
{
uchar i;
DDRD=0XFF;
PORTD=0XF0;//判断是否有键按下
DDRD=0X0F;
// i=PIND;//??PIND由两部分组成,高四位是读入的,低四位是刚输出的,如果输入的四根线没变化,则也是刚输出的
if( PIND==0XF0)
{
DDRD=0XFF;//定义为输出
return 0;
}
else
{
DDRD=0XFF;//定义为输出
return 1;
}
}
uchar key_scan(void)
{
uchar key,i=0X7F,j;
delay(10);//???
if(key_press())
{
do
{
i=(i<<1|i>>7);//????
PORTD=i;//前面已定义为输出
DDRD=0X0F;
/***************************************/
key=PIND;
j=key&0XF0;
//j=PIND&0XF0;
/***********************************************/
} while(j==0XF0);
while(key_press());
switch(key)
{
case 0xEE: key=0x0; break;
case 0xDE: key=0x1; break;
case 0xBE: key=0x2; break;
case 0x7E: key=0x3; break;
case 0xED: key=0x4; break;
case 0xDD: key=0x5; break;
case 0xBD: key=0x6; break;
case 0x7D: key=0x7; break;
case 0xEB: key=0x8; break;
case 0xDB: key=0x9; break;
case 0xBB: key=0xA; break;
case 0x7B: key=0xB; break;
case 0xE7: key=0xC; break;
case 0xD7: key=0xD; break;
case 0xB7: key=0xE; break;
case 0x77: key=0xF; break;
default: key=16;
}
}
else
{
key=16;
}
return key;//key是显示在数码管的值 AVR新手,感觉楼主的Port输出状态定义的就不对。做按键输入的话,应该是输入状态,带内部上拉,这样比较好吧。
页:
[1]