首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

关于电子密码锁键盘扫描的程序.解决方法

2012-03-13 
关于电子密码锁键盘扫描的程序...//键盘扫描程序段ucharkeysacn(void){ucharscancode,tmpcodeP10xf0if(

关于电子密码锁键盘扫描的程序...
//键盘扫描程序段
uchar   keysacn(void)
{
      uchar   scancode,tmpcode;
      P1=0xf0;
      if((P1&0xf0)!=0xf0)//这边操作的结果应该会等于0xf0   的吧?  
      {
            delay();                 //延时去抖动
            if((P1&0xf0)!=0xf0)     //再判断一次
            scancode=0xfe;
            while((scancode&0x10)!=0)       //逐行扫描
            {
                  P1=scancode;                 //输出行扫描码
                  if((P10xf0)!=0xf0)       //本行有键按下
                  {
                        tmpcode=(P1&0xf0)|0x0f;
                        return((~scancode)+(~tmpcode));
                  }
                  else   scancode=(scancode < <1)|0x01;//行扫描码左移一位
            }  
      }
      return(0);   //无键按下
}
哪位可以帮忙讲解一下行列扫描的原理吗?有点看不懂..谢谢了,我是新手啊

[解决办法]
怎么都是这程序.

得看着硬件连接啊

先是列(行)全输出低, 读行(列), 如不全为高者为有键按下

再逐列(行)输出, 逐行(列)读取.
[解决办法]
这个是4×4的行列键盘的扫描程序,P1的高半字节和低半字节分别代表行、列的四根线。
先是将列(低半字节)置0,然后根据行(高半字节)是否为不是全为高电平(0xF0),判断是否有按键按下。如果不是全高电平,则延时一段时间后再判断。如果仍然不是全高电平,则判断哪一行有按键按下。
  判断哪一行有按键按下,其实就是通过只将一列置为低电平(0),然后判断行(高半字节)是否为全高电平,如果是的话,则该列没有键按下,否则有键按下。因为如果有键按下,则对应的行线与列线相连,如果列的电平为低,则行的电平也被拉低,读得的位值为0。
[解决办法]
关于键值,这个和你的电路密切相关的!!

特别是像单片机这种层次的开发,独立的去看哪一方面,这都没有决定性的意义

至少都得有拿60分的理解

热点排行