打印

请教大家一个AVR的按键程序

[复制链接]
2285|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Metalor|  楼主 | 2010-7-4 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
望得到大家的解答~~先谢了~

程序很简单,每检测到一次按键后数码管显示的数字加1,但是按键按下之后有时检测不到(数码管显示数字不变),有时候又一直在加(像秒表的低位那样狂加)……还有我增加延时的时间(大概50ms),按键被检测到的几率会增大,找了一天的原因了都还不知道为什么。

程序如下:
void KeyRead( void )
{
   uchar ReadData;
   DDRD=0XFF;
   PORTD=0XFF;          //D口输出高电平
   DDRD=0;                 //D口输入
   if(PIND!=0XFF)
{
      delay(20);             //因为只是想测试下这个程序,用的软件延时
      ReadData= PIND^0xff;
          Trg  = ReadData & (ReadData ^ Cont);
      Cont = ReadData;
}

这是按键被检测到之后的程序:
if(Trg&key)          //key是我定义的某一个按键
{
       m++;              //m直接送到数码管显示程序里显示
       if(m>15)
           m=0;
}

这个按键程序是我在网上看到的一篇**里的,相信大家也都有见过吧,这里有个地址,没看过的可以看看,然后希望帮我解答解答。http://wenku.baidu.com/view/cd09693231126edb6f1a1004.html

相关帖子

沙发
Metalor|  楼主 | 2010-7-4 13:28 | 只看该作者
没有人回么。。自己顶一下~~

使用特权

评论回复
板凳
Metalor|  楼主 | 2010-7-4 14:32 | 只看该作者
啊哈哈!!我自己搞定啦~~~
改成这样:
void KeyRead( void )
{
        uchar ReadData;
          DDRD=0XFF;
        PORTD=0XFF;
          DDRD=0;
          if(PIND!=0XFF)
        {
                 delay(10);
                ReadData= PIND^0xff;
        }
        Trg  = ReadData & (ReadData ^ Cont);
                Cont = ReadData;
}
错误在于松手后程序没有经入到IF里面,导致Cont没有被更新而维持原来的数据~~从而导致出错~~吼吼~

使用特权

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

本版积分规则

2

主题

224

帖子

1

粉丝