线反转法扫描矩阵程序

2020-01-13 18:23发布

uchar key(void)
{
    uchar key,key1,key2,k;
    P1=0XF0;
    k=0xff;
    if((P1&0XF0)!=0XF0)
    {
        delay();
        if((P1&0XF0)!=0XF0)
        key1=P1&0XF0;
        P1=0X0F;
        if((P1&0X0F)!=0X0F)
        {
            delay();
            if((P1&0X0F)!=0X0F)
            {
                key2=P1&0X0F;
                key=key1|key2;
                if(key!=0xff)
                {
                    switch(key)
                    {
                        case 0xee: k=0;break;                       
                        case 0xed: k=1;break;                        
                        case 0xeb: k=2;break;                       
                        case 0xe7: k=3; break;
                        case 0xde: k=4;break;                       
                        case 0xdd: k=5;break;                        
                        case 0xdb: k=6;break;                       
                        case 0xd7: k=7; break;
                         case 0xbe: k=8;break;                       
                        case 0xbd: k=9;break;                        
                        case 0xbb: k=10;break;                       
                        case 0xb7: k=11; break;
                         case 0x7e: k=12;break;                       
                        case 0x7d: k=13;break;                        
                        case 0x7b: k=14;break;                       
                        case 0x77: k=15; break;
                    }
                }
            }
        }
    }
    return(k);
}


只做了键盘扫描程序,说明问题,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
72条回答
Tankng
1楼-- · 2020-01-19 06:26
二楼经典啊,mark
xjx41
2楼-- · 2020-01-19 10:08
顶下二楼
renwocai
3楼-- · 2020-01-19 13:51
 精彩回答 2  元偷偷看……
tcpln
4楼-- · 2020-01-19 14:35
mark
henry
5楼-- · 2020-01-19 18:41
回复【48楼】dawmoon
-----------------------------------------------------------------------
扫描法 是逐行扫描查询 假如按键很多  按下的键位于最后1列时 那么要扫描到最后一列才能知道按键位置
反转法 无论按下是第一列 还是最后1列,只需要2步便可获得按键位置
所以反转法更加方便实用
yao1
6楼-- · 2020-01-19 21:10
回复【48楼】dawmoon
-----------------------------------------------------------------------
扫描法 代码更多
unsigned int keyboar()           //键盘检测函数,返回键值
{
    P2=0xfe;
    temp=P2;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
          delay1ms(10);
         temp=P2;
             switch(temp)
             {
                   case 0xee:
                              key=0;
                             break;
                   case 0xde:
                              key=1;
                              break;
                   case 0xbe:
                              key=2;
                              break;
                   case 0x7e:
                              key=3;
                              break;         
             }
         while(temp!=0xf0)          
         {
               temp=P2;
               temp=temp&0xf0;
         }  
    }

    P2=0xfd;
    temp=P2;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
          delay1ms(10);
             temp=P2;
             switch(temp)
             {
                   case 0xed:
                               key=4;
                               break;
                   case 0xdd:
                               key=5;
                               break;
                   case 0xbd:
                               key=6;
                              break;
                   case 0x7d:
                               key=7;
                              break;         
             }
             while(temp!=0xf0)          
             {
                  temp=P2;
                  temp=temp&0xf0;
             }   
    }

    P2=0xfb;
    temp=P2;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
          delay1ms(10);
             temp=P2;
             switch(temp)
             {
                   case 0xeb:
                              key=8;
                             break;
                   case 0xdb:
                              key=9;
                             break;
                   case 0xbb:
                              key=10;
                             break;
                   case 0x7b:
                              key=11;
                             break;         
             }
             while(temp!=0xf0)          
             {
                   temp=P2;
                   temp=temp&0xf0;
             }   
    }

    P2=0xf7;
    temp=P2;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
         delay1ms(10);
             temp=P2;
             switch(temp)
             {
                   case 0xe7:
                              key=12;
                             break;
                   case 0xd7:
                              key=13;
                             break;
                   case 0xb7:
                              key=14;
                             break;
                   case 0x77:
                              key=15;
                             break;         
             }
             while(temp!=0xf0)          
             {
                   temp=P2;
                   temp=temp&0xf0;
             }   
    }
    return key;
}

一周热门 更多>