求助用过mega的大神帮我看看。求求大神们了 。我怎么想都没想通
[复制链接]
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 一个持续的低电平了 可是并没有我想看到的现象而是一直一个状态 没有变化。
|