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

📄 keyboard.c

📁 基于51单片机的键盘扫描程序
💻 C
字号:
#define KEY	P0
unsigned char key_get;		 //得到的键值
unsigned char key_cnt;		 //已得到的键数量
unsigned char key_press;
const unsigned char key_map[16]=	//设置键盘的逻辑值与程序计算键值的映

	{							    //按手机

键盘设置
	1,2,3,0x0a,
	4,5,6,0x0b,
	7,8,9,0x0c,
 0x0e,0,0x0f,0x0d
	};

void init_key(void)				 /*初始化*/
	{
	unsigned char i;

	key_get=0;key_cnt=0xff;//-1	
	key_press=0;//flag=0;	
	for(i=0;i<4;i++)
		led_buf[i]=0;//led_buf[i]=16;//不显示	
	}

void key_scan(void)	 /*键盘扫描*/
{
	 int i,j;
	 unsigned char scancode=0xef;//高位扫描

	      //KEY=0x0f;//00001111B
	 	  //for(i=0;i<1000;i++);  	//延时 	
	 	
			if(KEY==0x0e)		//00001110
				j=0; //在第0列(列输入)
			else if(KEY==0x0d)	//00001101
				j=1; //在第1列(列输入)
			else if(KEY==0x0b) 	//00001011
				j=2; //在第2列(列输入)
			else if(KEY==0x07)	//00000111
				j=3; //在第3列(列输入)
			KEY=scancode;//11101111B
			for(i=0;i<4;i++) //在第i行
				{
		 		if(KEY!=scancode)
		 			break;
		 		else 
		 			{scancode=(scancode<<1)|0x0f;//扫描

码左移一位,低四位为1
			 		KEY=scancode;
					}
				}
			key_get=key_map[i*4+j];	
}

unsigned char key_event() /*确定键盘事件,能判断键盘是否松开*/
{
 unsigned char flag=0;
 int i;

 KEY=0x0f;
 for(i=0;i<50;i++);  	//延时去抖动
 
 if((key_press==0)&&(KEY<0x0f))//有按键
 	{
	 key_press=1;
	 key_scan();
	} 
 else if((key_press==1)&&(KEY==0x0f))//已松开按键
 	{
	 key_press=0;
	 flag=1;
	}

 return flag;
}

⌨️ 快捷键说明

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