unnsigned char get_digital(void)
{
unsigned char val = 0;
DDRD &= ~(0x01<<6);
if(!(PIND&(0x01<<6))){
val |= 0x01;
}
DDRB &= ~(0x01<<0);
if(!(PINB&(0x01<<0))){
val |= 0x02;
}
DDRC &= ~(0x01<<2);
if(!(PINC&(0x01<<2))){
val |= 0x04;
}
DDRC &= ~(0x01<<0);
if(!(PINC&(0x01<<0))){
val |= 0x08;
}
DDRB &= ~(0x01<<5);
if(!(PINB&(0x01<<5))){
val |= 0x10;
}
return val;
这样就没有问题,我先在想的是检测某个引脚持续低电平,假如说这个引脚是低电平了我就返回1否则 返回0 实现代码如下:
u8 get_digital(void)
{
u8 val = 0;
u8 a0;
DDRD &= ~(0x01<<6);
if(!(PIND&(0x01<<6)))//检测PD6为低电平
{
a0++; //持续一段时间
if(a0>100)//时间到
{
if(!(PIND&(0x01<<6)))//如果这是PD6还是低电平的话val|0x01;
{
val|=0x01;
}
else{ ///如果是高电平的话val最低位就为0;
val&=0xfe;
}
}
}
DDRB &= ~(0x01<<0);
if(!(PINB&(0x01<<0))){
val |= 0x02;
}
DDRC &= ~(0x01<<2);
if(!(PINC&(0x01<<2))){
val |= 0x04;
}
DDRC &= ~(0x01<<0);
if(!(PINC&(0x01<<0))){
val |= 0x08;
}
DDRB &= ~(0x01<<5);
if(!(PINB&(0x01<<5))){
val |= 0x10;
}
return val;
}
但是现在我已经给PD6 一个持续的低电平了 可是并没有我想看到的现象而是一直一个状态 没有变化。 |