📄 key.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 + -