AVR 独立按键问题【恢复】
按照以前学习51时候的思路,写了一个独立按键的测试程序,发现PIND.6按键按下后,有时PA口输出没有反应。用PROTEUS仿真和在试验板测试,都是这个现象。怀疑按键问题,但用万用表测量PD.6引脚的电压,每次按键按下都变为0,
说明按键没问题。请各位高手指点啊
#include <mega16.h>
#include <delay.h>
unsigned char da;
void main(void)
{
PORTA=0x00;
DDRA=0xff; //设置输出
PORTD=0xff;
DDRD=0x00; //设置为输入,
while (1)
{
if(PIND.6==0) //如果PIND.6按键按下
{
delay_ms(10); //10ms的消抖时间
if(PIND.6==0)//确认PIND.6按键按下
{ da++;
PORTA=da; //通过PA口的变化,检测按键是否按下
}
}
while(PIND.6==0); //等待按键松开
} ;
}
本贴被 wb5846410 编辑过,最后修改时间:2008-12-03,21:56:44. 可能出现按键抖动的情况。
当你按下一个按钮的时候,程序满足第一个if,但是由于抖动的出现,有一定几率
当10ms延时以后,读取到的却不是低电平,这个时候,就无法满足地二个if语句,
而直接进入while(PIND.6==0);的循环中了。是有可能存在这种情况的。 谢谢。 调试程序发现了一点问题、
while(PIND.6==0); //等待按键松开
这里没有放置到 if 判读语句里面 先说方法,调试中需要有“观察点”。怀疑PA输出有问题,就要确认PA输出是否正确,否则你就没有地方可以观察程序的运行情况了。你可以通过写固定值的方式来验证PA输出是否正常,再往下做。推荐“脱离仿真器玩单片机”一文,到我博客下载。
页:
[1]