[AVR单片机] 矩阵键盘程序

[复制链接]
3455|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

粉丝
快速回复 在线客服 返回列表 返回顶部