如何编写程序,从矩阵键盘中分离出单个按键使用?

[复制链接]
3706|7
 楼主| 开始的梦想 发表于 2010-7-21 21:04 | 显示全部楼层 |阅读模式
请问大家,怎样在不增加按键的情况下,如何从矩阵键盘中分离出3个按键使用,并要求使用3个按键时,其它按键无效,
程序如下,怎样修改呢?

unsigned char getkey(void)
{
unsigned  char rcode,ccode;
while (key_scan())
delay(1);
P1=0x0f;           
rcode=P1&0x0f;     
if(rcode!=0x0f)   
  {
   delay(1);        
i   f(rcode!=0x0f)
       {
      rcode=P1&0x0f;
      P1=rcode|0xf0;
      ccode=P1&0xf0;
      return(rcode+ccode);
       }
    }

return(0xff);  
}

unsigned char keyscan(void)
{
getkey();
switch(keybord)
  {
case 0xee:keynum=1;K1=1;break;//要使用k1、k2、k3
case 0xed:keynum=2;K2=1;break;//
case 0xeb:keynum=3;K3=1;break;//
case 0xe7:keynum=11;break;

case 0xde:keynum=4;break;
case 0xdd:keynum=5;break;
case 0xdb:keynum=6;break;
case 0xd7:keynum=13;break;

case 0xbe:keynum=7;break;
case 0xbd:keynum=8;break;
case 0xbb:keynum=9;break;
case 0xb7:keynum=14;break;

case 0x7e:keynum=10;break;
case 0x7d:keynum=0;break;
case 0x7b:keynum=12;break;
case 0x77:keynum=15;break;
default:break;
   }
while (~key_scan())
delay(1);
return 0;
}


void main()
{
   lcd_rest() ;              
  dis_inputpsw();
  keyscan();
  while(1)
   {
     while (keynum>=1 && keynum<=3) //非1-3的数字则不响应
     keyscan();

     if(K1)              
          {
            dis_pswwrong(); //显示
           }
      if(K2)
          {
             dis_changepsw();
           }
      if(K3)
         {
           dis_newpsw();
          }
     }
}
ayb_ice 发表于 2010-7-22 08:47 | 显示全部楼层
什么叫分离
 楼主| 开始的梦想 发表于 2010-7-22 09:25 | 显示全部楼层
哦,因为主程序中需要3个按键,而其它按键则不响应。
欧阳青云 发表于 2010-7-23 15:26 | 显示全部楼层
你按其他按键(除了那三个按键外的按键)时让其空操作就行啦。
木字四点水 发表于 2010-7-23 16:07 | 显示全部楼层
fm0597 发表于 2011-5-28 17:28 | 显示全部楼层
[quote][/quote]
haolaishi 发表于 2011-9-10 19:45 | 显示全部楼层
sysdriver 发表于 2011-9-10 20:46 | 显示全部楼层
唉。。。我的理解能太差了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

58

帖子

1

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