打印
[AVR单片机]

用过mega8 的大神们帮我看看吧 谢谢了

[复制链接]
1221|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
z755924843|  楼主 | 2012-7-5 22:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 一个持续的低电平了 可是并没有我想看到的现象而是一直一个状态 没有变化。

相关帖子

沙发
joyme| | 2012-7-6 13:31 | 只看该作者
你的a0是局部变量,即每次调用次函数a0会被重新初始化,因此a0>100的条件是成了不了的

使用特权

评论回复
板凳
z755924843|  楼主 | 2013-10-14 13:06 | 只看该作者
joyme 发表于 2012-7-6 13:31
你的a0是局部变量,即每次调用次函数a0会被重新初始化,因此a0>100的条件是成了不了的 ...

谢谢啊 ,虽然有点迟。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

260

帖子

39

粉丝