打印
[AVR单片机]

菜鸟请教矩阵键盘的问题

[复制链接]
1407|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sungpeng|  楼主 | 2011-1-6 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sungpeng 于 2011-1-6 22:05 编辑

我用的开发板做的矩阵键盘的实验,16个键显示0~F;发现一个问题,为什么去掉 DDRD=0xff 这句话之后,就可以显示呢?我觉得加上这句话之后没有问题啊。。想不明白,求助高手们。
扫描键盘程序如下:

uchar key_scan()
{
    uchar key,i=0x7f,j,num;
if(key_press())
{
     delay(10);
  if(key_press())
  {
        do
     {
      //    DDRD=0XFF;
    i=(i<<1)|(i>>7);
    PORTD=i;
    DDRD=0x0f;
    j=PIND;
    key=j&0xf0;
     }        
           while(key==0xf0);
     
     switch(j)
     {
          case 0xee: num=0x0;break;
    case 0xde: num=0x1;break;
    case 0xbe: num=0x2;break;
    case 0x7e: num=0x3;break;
    case 0xed: num=0x4;break;
    case 0xdd: num=0x5;break;
    case 0xbd: num=0x6;break;
    case 0x7d: num=0x7;break;
    case 0xeb: num=0x8;break;
    case 0xdb: num=0x9;break;
    case 0xbb: num=0xA;break;
    case 0x7b: num=0xB;break;   
          case 0xe7: num=0xC;break;
    case 0xd7: num=0xD;break;
    case 0xb7: num=0xE;break;
    case 0x77: num=0xF;break;
    default  : num=16; break;
     }
     while(key_press());
     }
    }
return num;
}

相关帖子

沙发
airwill| | 2011-1-8 19:39 | 只看该作者
哈哈, 端口延迟哇.
再写 IO 端口后, 记得要延迟一两个时钟, 否则, 可能读不到准确的数据.
看楼主的程序:

do     {
      //    DDRD=0XFF;
    i=(i<<1)|(i>>7);
    PORTD=i;
    DDRD=0x0f;
    j=PIND;
    key=j&0xf0;
}   while(key==0xf0);

    DDRD=0x0f;
    j=PIND;
这两句之间没有时间延迟, 所以读不到准确数据了. 中间加几个 _nop() 试试吧.
另外, 楼主应该在改变信号后到读取信号之间尽量增加些时间. 毕竟硬件上还有因寄生电容而导致的延迟呢

使用特权

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

本版积分规则

0

主题

8

帖子

1

粉丝