搜索
bottom↓
回复: 3

AVR 独立按键问题【恢复】

[复制链接]

出0入0汤圆

发表于 2008-12-3 21:18:35 | 显示全部楼层 |阅读模式
按照以前学习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.

出0入296汤圆

发表于 2008-12-4 07:59:40 | 显示全部楼层
可能出现按键抖动的情况。

当你按下一个按钮的时候,程序满足第一个if,但是由于抖动的出现,有一定几率

当10ms延时以后,读取到的却不是低电平,这个时候,就无法满足地二个if语句,

而直接进入while(PIND.6==0);的循环中了。是有可能存在这种情况的。

出0入0汤圆

 楼主| 发表于 2008-12-3 23:04:21 | 显示全部楼层
谢谢。 调试程序发现了一点问题、

while(PIND.6==0);  //等待按键松开 

 这里没有放置到 if 判读语句里面

出0入0汤圆

发表于 2008-12-3 21:42:34 | 显示全部楼层
先说方法,调试中需要有“观察点”。怀疑PA输出有问题,就要确认PA输出是否正确,否则你就没有地方可以观察程序的运行情况了。你可以通过写固定值的方式来验证PA输出是否正常,再往下做。推荐“脱离仿真器玩单片机”一文,到我博客下载。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 06:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表