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

📄 key.c

📁 嵌入式实验 软件:ARM Developer Suite v1.2 Multi-ICE V2.2.5(Build1319)
💻 C
字号:
//-----------------------------------------------------------------
// 包含文件区
//-----------------------------------------------------------------
#include "2410addr.h"


//-----------------------------------------------------------------
// 函数定义区
//-----------------------------------------------------------------
/*****************************************************************
*	函数名 	: Key_Test
*	功能  	: 实现键盘扫描
*   参数    : void
*   返回值  : void
******************************************************************/
void Key_Test(void)
{    
	 int i,j;//i表示行数j表示列数
	 
	 Uart_Printf("\n\nPRESS ANY KEY ON ECPEND BOARD\n");
	 //GPFCON GPF   [ 1: 0] = 00 : INPUT
	 //GPFCON GPF   [ 3: 2] = 00 : INPUT
	 //GPFCON GPF   [ 5: 4] = 00 : INPUT
	 //GPFCON GPF   [15:14] = 00 : INPUT
	 rGPFCON=rGPFCON&0x3f03;//pf1237=input

	 //GPBCON GPB7  [15:14] = 01 : OUTPUT
	 //GPBCON GPB8  [17:16] = 01 : OUTPUT
	 //GPBCON GPB9  [19:18] = 01 : OUTPUT
	 //GPBCON GPB10 [21:20] = 01 : OUTPUT
	 rGPBCON=rGPBCON|0x154000;
	 rGPBCON=rGPBCON&0x157fff;
	 Uart_Printf("\n\nPRESS ANY KEY OF PC TO STOP.\n");
	  while(!Uart_GetKey())//按任何键停止扫描
	 {
	  //GPBDAT [10: 7] = 0000
	  rGPBDAT=rGPBDAT&0x7f;

	  if(~(rGPFDAT|0xffffff71))//如果有键按下
	  {
	   	{
	   	switch(~(rGPFDAT|0xffffff71))//由哪一位取到1判断是第几行
	   	{
	   	case 0x2 :{i=1;break;}
		case 0x4 :{i=2;break;}
		case 0x8 :{i=3;break;}
		case 0x80:{i=4;break;}
		}
	     }
	     //开始扫描各列
	     //GPBDAT [10,9,8,7] = 0001 扫描第1列
	 	 rGPBDAT=rGPBDAT|0x80;
	     rGPBDAT=rGPBDAT&0x6ff;
	     rGPBDAT=rGPBDAT&0x5ff;  
	     rGPBDAT=rGPBDAT&0x3ff;
	        if(!(~(rGPFDAT|0xffffff71))){j=1;}//判断是否第1列
			else
	        	{  
	        	//GPBDAT [10,9,8,7] = 0010 扫描第2列
	        	rGPBDAT=rGPBDAT&0x77f;
	            rGPBDAT=rGPBDAT|0x100; 
	            rGPBDAT=rGPBDAT&0x5ff;
	            rGPBDAT=rGPBDAT&0x3ff;
	            if(!(~(rGPFDAT|0xffffff71))){j=2;}//判断是否第2列
				 else
				 	{
				 	 //GPBDAT [10,9,8,7] = 0100 扫描第3列
				 	 rGPBDAT=rGPBDAT&0x77f;
	                 rGPBDAT=rGPBDAT&0x6ff;
	                 rGPBDAT=rGPBDAT|0x200;
	                 rGPBDAT=rGPBDAT&0x3ff;
	                   if(!(~(rGPFDAT|0xffffff71))){j=3;}//判断是否第3列
					   else
					   	{j=4;//以上条件不符合则为第4列
					   	//下面代码仅保证对应的LED亮
					   	//GPBDAT [10,9,8,7] = 1000 扫描第4列
					   	rGPBDAT=rGPBDAT&0x77f;
	                    rGPBDAT=rGPBDAT&0x6ff;
	                    rGPBDAT=rGPBDAT&0x5ff;
	                    rGPBDAT=rGPBDAT|0x400;
					   	}
				    }
	  			}
			 Uart_Printf("THE KEY YOU PUSH IS %d row %d column\n",i,j);}//打印结果
			 Delay(1);//延迟以消除抖动
	   	}
	Uart_Printf("\n\nTEST FINISHED!!"); 
}

⌨️ 快捷键说明

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