基于51单片机学习----矩阵按键

在这里插入图片描述

//  方法一代码实现
//  变量说明:
//  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);	//检测按键松手检测			
         }	
    }   	
}
发布了2 篇原创文章 · 获赞 2 · 访问量 14

猜你喜欢

转载自blog.csdn.net/qq_45772756/article/details/104113405