矩阵按键行扫描

void keyscan() // 键盘扫描程序函数
{
    uchar temp;//P2端口中转变量
    uint num=20;//键值
    P2=0xfe; 
    if(P2!=0xfe)//第一行
    {
       Delay(20);// 延迟20ms
       if(P2!=0xfe) 
       {  
               temp=P2&0xf0;
                switch(temp) //判断哪一列
                {
                     case 0xe0:num=0;   break;    //7
                     case 0xd0:num=1;   break;     //8
                     case 0xb0:num=2;   break;    //9
                     case 0x70:num=3;   break;    //÷
                }
       }   
       while(P2!=0xfe);//按键放开
    }

    P2=0xfd;
    if(P2!=0xfd) //第二行
    {
       Delay(20);//延时
       if(P2!=0xfd)
       {  
           temp=P2&0xf0;
            switch(temp)//判断哪一列
            {
                 case 0xe0:num=4; break; //4
                 case 0xd0:num=5; break; //5
                 case 0xb0:num=6; break; //6
                 case 0x70:num=7; break; //×
            }
       }   
       while(P2!=0xfd);//等待按键释放
    }

    P2=0xfb;
    if(P2!=0xfb)//第三行
    {  
        Delay(20);//延时
       if(P2!=0xfb) 
       { 
           temp=P2&0xf0;
            switch(temp)//检测哪列按下
            {
                     case 0xe0:num=8;    break;     //1
                     case 0xd0:num=9;    break;     //2
                     case 0xb0:num=10;   break;     //3
                     case 0x70:num=11;   break;     //-
            }
       }  
        while(P2!=0xfb);//按键释放
    }

    P2=0xf7;
    if(P2!=0xf7)//第四行
    {   
        Delay(20);//延时
       if(P2!=0xf7)
       { 
           temp=P2&0xf0;
            switch(temp)//检测哪列按下
            {
                     case 0xe0:num=12; break;  //清0键    
                     case 0xd0:num=13; break;  //数字0    
                     case 0xb0:num=14; break;  //等于键    
                     case 0x70:num=15; break;  //加
            }                                   
        } 
        while(P2!=0xf7);//按下释放                                     
                                
       }
    }//P2!=0xf7
   

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值