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

📄 scankey2.c

📁 这是几个实现键盘操作的程序
💻 C
字号:
//矩阵式键盘--复合键输入的应用,3×4
//P2口作为键盘的接口
//此函数定义了复合键的操作应用,程序中利用检测每一行的按键变量并分别独立再判断
//此程序只能识别同一行按下的单键,而不同行的按键才可以接收复合键的操作。您也可
//以根据自己的需要灵活修改。

void ScanKey2(void)
{
  unsigned char keytmp;
  //扫描第一行
  KeyData1=0;
  COLUMN1_PIN=0; //P2.4,scan line1 "0":active
  COLUMN2_PIN=1;
  COLUMN3_PIN=1;
  keytmp=~(P2)&0x0f;	//P2.0~P2.3
  switch(keytmp)
  {
  	case 1:
  		KeyData=KEY1;
  		break;
  	case 2:
  		KeyData=KEY2;
  		break;
  	case 4:
  		KeyData=KEY3;
  		break;
  		break;
  	case 8:
  		KeyData=KEY4;
  		break;
  	default:
  		break;
  }
    //扫描第二行
  KeyData2=0;
  COLUMN1_PIN=1;
  COLUMN2_PIN=0;	//P2.5,scan line2 "0":active
  COLUMN3_PIN=1;
  keytmp=~(P2)&0x0f;
  switch(keytmp)
  {
  	case 1:
  		KeyData=KEY5;
  		break;
  	case 2:
  		KeyData=KEY6;
  		break;
  	case 4:
  		KeyData=KEY7;
  		break;
  		break;
  	case 8:
  		KeyData=KEY8;
  		break;
  	default:
  		break;
  }
  
  	
  //扫描第三行
  KeyData3=0;
  COLUMN1_PIN=1;
  COLUMN2_PIN=1;	//P2.6,scan line3 "0":active
  COLUMN3_PIN=0;
  keytmp=~(P2)&0x0f;
  switch(keytmp)
  {
  	case 1:
  		KeyData=KEY9;
  		break;
  	case 2:
  		KeyData=KEY10;
  		break;
  	case 4:
  		KeyData=KEY11;
  		break;
  		break;
  	case 8:
  		KeyData=KEY12;
  		break;
  	default:
  		break;
  }
 COLUMN3_PIN=1;		//SCAN LINE3 NOT ACTIVE
 KeyData=KeyData1+KeyData2+KeyData3;	//判断最后复合键的值
}

//复合键的调用举例
void ScanKeyCheck(void)
{
	ScanKey2();
	FlgDoubleKey=0;		//初始化标志
	KeyData=NO_KEY;		//NO KEY
	if((KeyData1==KEY1)&&(KeyData3==KEY10))
	{
		FlgDoubleKey=1;		//有双键按下
		KeyData=DOUBLE_KEY;
	}
}

//END FILE

  

⌨️ 快捷键说明

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