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

📄 keyscan.c

📁 在8052下实现电平电压测试功能,自己开发的单片系统
💻 C
字号:
/*
----------------------------------------------------------
;		(c) Copyright xami All Rights Reserved              
----------------------------------------------------------
;	SOURCE_FILE:    KEYSCAN.C
;	APPLICATION:	80c51\80c52
;	DESCRIPTION:    键盘扫描
;	AUTHOR:         xami
;	DATE:           28 Apr. 2007
----------------------------------------------------------
*/

/*
//----------------------------------------------------------
//[测试版]
//----------------------------------------------------------
unsigned char keyscan(void)
{
  unsigned char keytab[]={
							0x11,0x12,0x14,0x18,
							0x21,0x22,0x24,0x28,
							0x41,0x42,0x44,0x48,
							0x81,0x82,0x84,0x88} ; //行数,列数,行列综合后的键码,键码表
  unsigned char resh,resl,res;

  //取得行数
  P1=0x0f; 				//行位全部置高
  delay(2);
  if((P1&0x0f)!=0x0f)	//读取行,按下的键位为零
    {
      delay(20);		//去抖动
      if((P1&0x0f)!=0x0f)
	{
	  resh=P1;	  	
        }	
     }
  //取得列数
  P1=0xf0; 				//列位全部置高
  delay(2);
  if((P1&0xf0)!=0xf0)	//读取列,按下的键位为零
    {
      delay(20);		//去抖动
      if((P1&0xf0)!=0xf0)
	{
	  resl=P1;	  	
        }
     }
res=resh^resl; //行与列综合

return(res);
}
*/


/*
**********************************************************
;		(c) Copyright xami All Rights Reserved              
---------------------------------------------------------- 
;	SOURCE_FILE:    keyscan.c
;	APPLICATION:	80c51\80c52 use port P1
;	DESCRIPTION:    [4*4 keboard scan programme] v1.0.1
					输入:	无
					输出:	1、检测到按键,输出对应的键码。
							2、未检测到按键,输出0
	//键盘编码数组结构
 	//-----------------------------------------------------
	//unsigned char keytab[]={
	//						0x11,0x12,0x14,0x18,
	//						0x21,0x22,0x24,0x28,
	//						0x41,0x42,0x44,0x48,
	//						0x81,0x82,0x84,0x88} ; 
    //-----------------------------------------------------

	//硬件接口说明
	//-----------------------------------------------------
	//列线都分别通过上拉电阻接5V正电;
	//P1.0~P1.3分别接键盘的列线0~3列;
	//P1.4~P1.7分别接键盘的行线0~3行;
	//行线、列线交叉点通过按键相连接;
	//-----------------------------------------------------
	
;	AUTHOR:         xami
;	DATE:           16 Apr. 2007
**********************************************************
*/

//----------------------------------------------------------
//[改进版]
//----------------------------------------------------------
unsigned char keyscan(void)
{
	unsigned char res;
	P1 = 0;					//初始化端口
	P1 = 0x0f; 				//列位全部置高,准备读数据
	delay(1);				//(*配合硬件调节)
	if((P1&0x0f)!= 0x0f){			//有键按下
		delay(20);					//去抖动延时(*需要配合硬件调节)
		if((P1&0x0f)!= 0x0f){   	//仍有按键
			res = (~P1)&0x0f;		//读取列,有键按下的列电平被拉低,所以先取反统一编码
			P1 = 0xf0; 				//行位全部置高,准备读数据
			delay(1);				//(*配合硬件调节)
			if((P1&0xf0)!= 0xf0){   	//检查到行有按键(*实际去掉这个判断也应该没什么问题)
				res |= (~P1)&0xf0;		//读取行,有键按下的列电平被拉低,同时把它与列的结果合并
    		}else{
			return 0;}
		}else{						//只是抖动,返回0
		return 0;}
	}else{							//没有检测到按键,返回0
	return 0;}

	return(res);
}

⌨️ 快捷键说明

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