⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4x4key.c

📁 4X4键盘
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#include "LCD1602.h"
#define uchar unsigned char
#define uint  unsigned int
#define key   P1
//   P1.0-P1.3 	为横行
//	 P1.4-P1.7  为竖列	  

uchar  key_value,temp;

bit key_check();//
void keyvalue();//

void main()
{ 
  key=0xff;
  key_value=0;
  LCD_init();
  LCD_disp_string(0,0,"key_value");
  while(1)
  {if(key_check())
   {
	  keyvalue();
	  if(key_value>9)  
   	{
	     key_value+=7;
      }	
     LCD_write_char(0,1,key_value+'0') ;
    }	
	}		 
}

bit key_check()
{uchar temp1,temp2;
 temp=0;
 key=0x0f;
 temp1=key;
 if(temp1!=0x0f)	   // 如果有按键按下,temp1就不等于0x0f
 {
	 delay_ms(10);	   // 去抖动
    temp1=key;		   // 在次检查是否有按键按下,以免由其他干扰引起的错误判断
    if(temp1!=0x0f)
    {
	    key=0xf0;	   // 让列为高电平,行为低电平
       temp2=key;	
       temp=temp1|temp2;	  // temp等于让行为低电平列为高电平时key的值或上让行为高电平列为低电平时key的值
	   do
		{ 
		 key=0x0f;
		 }			  // 等待按键释放
	   while(key!=0x0f);
	   delay_ms(10);			  //延时去抖
	   }
	}
 if(temp!=0)
 {   
   return 1;
	}		  // 有按键按下 返回 1
 else  
 {
   return 0;
	}
  }

void keyvalue()
{
  switch(temp)					     //	 对键值的判断
     {
	    case  0xee:  key_value=0; break;
		 case  0xde:  key_value=1; break;
		 case  0xbe:  key_value=2; break;
		 case  0x7e:  key_value=3; break;
		 case  0xed:  key_value=4; break;
		 case  0xdd:  key_value=5; break;
		 case  0xbd:  key_value=6; break;
       case  0x7d:  key_value=7; break;
		 case  0xeb:  key_value=8; break;
		 case  0xdb:  key_value=9;break;
		 case  0xbb:  key_value=10;break;
		 case  0x7b:  key_value=11;break;
		 case  0xe7:  key_value=12;break;
		 case  0xd7:  key_value=13;break;
       case  0xb7:  key_value=14;break;
		 case  0x77:  key_value=15;break;
	    default:     key_value=0; break;		
		 }
}	
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -