本帖最后由 hillslb 于 2015-1-6 17:22 编辑
按键PD建议上拉10K的电阻到VCC,PE建议下拉10K的电阻到GND。
int keysarch(void)
{
unsigned int key = 0;
unsigned char temp1 ,temp2, temp3, temp4;
temp1 = PIND&0x0f;
temp2 = PINE&0xf0;
if(temp1 != 0x0f||temp2 != 0x00)
{
delay_ms(10);
temp3 = PIND&0x0f;
temp4 = PINE&0xf0;
if(temp1 == temp3)
{
switch(temp3)
{
case 0x0e:
key = 1;
break;
case 0x0d:
key = 2;
break;
case 0x0b:
key = 3;
break;
case 0x07:
key = 4;
break;
default:
break;
}
}
if(temp2 == temp4)
{
switch(temp4)
{
case 0x10:
key = 5;
break;
case 0x20:
key = 6;
break;
case 0x40:
key = 7;
break;
case 0x80:
key = 8;
break;
default:
break;
}
}
break;
}
return key;
}
变量key可以声明为unsigned char key ,函数返回值类型也为unsigned char。
若不对PD和PE上拉或者下拉,需要在读IO之前输出一个与期望相反的电平,延时一段时间后在读IO。
delay_ms(10)函数是一个死循环一般很少这样用。
|