打印

矩阵按键!!!求助啊!

[复制链接]
1577|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sapphire123|  楼主 | 2011-5-28 02:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<absacc.h>

void my_delay10nms(unsigned int n)
{
unsigned i,j;
while(n --)
{
  for(i = 128;i > 0;i --)
  for(j = 10;j > 0;j --);
}
}
void main(void)
{
unsigned char key_h,key_v,key_tmp,key_val,last_key_val;
while(1)
{
  key_val = 0;
  for(key_h = 4;key_h < 8;key_h ++)
  {
   P0 = (1 << key_h);//对应行拉高
   
   P0 |= 0xf0;
   key_tmp = P0 & 0xf0;
  
   if(key_tmp)//有按键按下
   {
    for(key_v = 4;key_v < 8;key_v ++)
    {
     if(key_tmp & (1 << key_v))//第key_v位为1
     {
      key_val = (key_h - 4) * 4 + (key_v - 4) + 1;
      break;
     }
    }
   }
   if(key_val) break;
  }
  if(last_key_val != key_val)
  {
   last_key_val = key_val;
  }
  else
  {
   if(last_key_val)//有按键被可靠按下
   {
    P0 = key_val;
       }
  }
  my_delay10nms(1);
}
}
这个是接了下拉电阻的!矩阵按键是能够实现的!

#include<reg52.h>
#include<absacc.h>

void my_delay10nms(unsigned int n)
{
unsigned i,j;
while(n --)
{
  for(i = 128;i > 0;i --)
  for(j = 10;j > 0;j --);
}
}
void main(void)
{
unsigned char key_h,key_v,key_tmp,key_val,last_key_val;
while(1)
{
  key_val = 0;
  for(key_h = 0;key_h < 4;key_h ++)
  {
   P1 &= ~(key_h<<1);//对应行拉低
  
  
   P1 |= 0xf0;
   key_tmp = P1 & 0xf0;
   
   if(key_tmp)//有按键按下
   {
    for(key_v = 4;key_v < 8;key_v ++)
    {
     if(key_tmp & (~(1<<key_v)))//第key_v位为1
     {
      key_val = (key_h - 4) * 4 + (key_v - 4) + 1;
      break;
     }
    }
   }
   if(key_val) break;
  }
  if(last_key_val != key_val)
  {
   last_key_val = key_val;
  }
  else
  {
   if(last_key_val)//有按键被可靠按下
   {
    P0 = key_val;
   
   }
  }
  my_delay10nms(1);
}
}
这个是没有接下拉电阻的,那么这个程序为什么不行呢!
由于没接电阻,但是51单片机就有上拉的作用,所以处在空闲的时候为1的,那么我用P1 &= ~(key_h<<1);//对应行拉低,但是我感觉下面的程序应该是对的,为什么不对呢?请大虾指点啊

相关帖子

沙发
hotpower| | 2011-5-28 11:24 | 只看该作者
应该上拉的

使用特权

评论回复
板凳
sapphire123|  楼主 | 2011-5-28 14:19 | 只看该作者
要是上拉电阻怎么改啊

使用特权

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

本版积分规则

0

主题

13

帖子

1

粉丝