打印
[AVR单片机]

矩阵键盘程序

[复制链接]
2260|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
willym|  楼主 | 2011-3-28 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uchar  KEY_scan()
{   
        uchar temp;
        PORTB = 0xfe;
        DDRB  = 0xff;
        DDRB  = 0x00;
        delayms(1);
        PORTB = 0xff;
        if ((PINB & 0xf0) != 0xf0)
        {
               delayms(20);
               if((PINB & 0xf0) != 0xf0)
               {
                      temp = PINB;
                }
        }
        return temp;
}

第二个程序,思路一样
uchar Key_scan()
{
        uchar temp;
        PORTB = 0xfe;
        DDRB  = 0x0f;
        if ((PINB & 0xf0) != 0xf0)
        {
              delayms(20);
              if((PINB & 0xf0) != 0xf0)
              {
                     temp = PINB;
               }
        }
        return  temp;
}
两个程序算法一样,为什么第一个就不出结果呢?
我想问下两次读的 PINB 值不一样吗?



    }

相关帖子

沙发
ccxlslr| | 2011-3-28 14:49 | 只看该作者
我倒觉得第二个有些问题.
AVR的IO有同步逻辑,在置为输入后,要一个周期后,才能读到当前值,第二个程序编译后,很可能会马上读

使用特权

评论回复
板凳
chenczy| | 2011-4-1 16:29 | 只看该作者
输入和输出口的问题,楼主看下资料怎么设这些东西的吧

使用特权

评论回复
地板
408584884| | 2011-4-26 20:28 | 只看该作者
第一个DDRB有问题,DDRB=0x0f,因为第四位为输出,高四位为检测是否有低电平

使用特权

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

本版积分规则

0

主题

7

帖子

1

粉丝