单片机交流
直播中

爱与友人

9年用户 956经验值
擅长:可编程逻辑 模拟技术 存储技术
私信 关注
[问答]

矩阵按键扫描原理是什么?

矩阵按键扫描原理是什么?
实现十六矩阵的代码分享

回帖(1)

车熊鹤

2021-9-29 14:43:46


//  方法一代码实现
//  变量说明:
//  GPIO_KEY  代表控制矩阵按键的IO口,例P1、P2
//  matrixkey 代表哪一个按键号,取值[0~15]


//**********
//函数: void matrixkeyscan()
//作用: 矩阵按键扫描函数,检测按下了哪按键,最后调用数码管显示函数
//输入: 无
//输出: 无
//**********
void matrixkeyscan()
{       
     GPIO_KEY=0x0F;        //BIN 0000 1111  (运送行低电平,列高电平)       
     if(GPIO_KEY != 0x0F)        //如果行全为低电平,列如果有一个低电平,即GPIO_KEY != 0x0F,表示有按键按下;相反,GPIO_KEY == 0x0F表示没有按键按下。
           {               
               delay_ms(10);        //延时10ms进行消抖
               if(GPIO_KEY != 0x0F)        //再次检测键盘是否按下               
               {
               //测试列                       
               GPIO_KEY=0X0F;               
               switch(GPIO_KEY)                       
               {                               
                    case(0X07):        matrixkey=0;break;        //0000 0111                               
                    case(0X0b):        matrixkey=1;break;        //0000 1011                               
                    case(0X0d): matrixkey=2;break;        //0000 1101                               
                    case(0X0e):        matrixkey=3;break;  //0000 1110                         
               }                       
               //测试行                       
               GPIO_KEY=0XF0;        //1111 0000
               switch(GPIO_KEY)                       
               {                               
                    case(0X70):        matrixkey=matrixkey;break;          //0111 0000                               
                    case(0Xb0):        matrixkey=matrixkey+4;break;  //1011 0000                               
                    case(0Xd0): matrixkey=matrixkey+8;break;  //1101 0000                               
                    case(0Xe0):        matrixkey=matrixkey+12;break; //1110 0000                       
                }                       
                while(GPIO_KEY != 0xf0);        //检测按键松手检测                       
         }       
    }          
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分