3)一旦处理器判定有一个键按下,键盘扫描软件将过滤掉抖动并且判定哪个键被按下。
4)每个键被分配一个称为扫描码的唯一标识符。应用程序利用该扫描码,根据按下的键来判定应该采取什么行动,换句话说,扫描码将告诉应用程序按下哪个键。
5.键盘扫描算法
1)初始化:所有的行(输出端口)被强行设置为低电平。
2)在没有任何键按下时,所有的列(输入端口)将读到高电平。 3)任何键的闭合将造成其中的一列变为低电平。
4)一旦检测到有键被按下,就需要找出是哪一个键。过程很简单,微处理器只需在其中一行上输出一个低电平。如果它在输入端口上发现一个0值,微处理器就知道在所选择行上产生了键的闭合。
6.一旦检测到有键被按下,就需要找出是哪一个键。过程很简单,微处理器只需在其中一行上输出一个低电平。如果它在输入端口上发现一个0值,微处理器就知道在所选择行上产生了键的闭合
JXARM9-2440具有4×4的软键盘。原理图如下:
四、实验内容、步骤、程序、结果
1.获取按键值,在串口显示。
1) 参照模板工程key(modules\\key\\key.apj),新建一个工程key,添加相应的文件,并修改key 的工程设置;
2) 创建main.c 并加入到工程key 中; 3) 按照实验内容编写相应程序; 4) 编译key; 5) 下载程序并运行,按键看串口是否有显示;看数码管是否输出相应键值。 程序如下: /* 包含文件 */
#include \#include \#include \#include \#include \
/******************************************************************** // Function name : Main
// Description : JXARM9-2410 键盘实验主程序 // 实现功能: // Return type : void // Argument : void
*********************************************************************/ void Main(void) { /* 配置系统时钟 */
ChangeClockDivider(2,1); U32 mpll_val = 0 ;
mpll_val = (92<<12)|(1<<4)|(1);
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
/* 初始化端口 */ Port_Init();
/* 初始化串口 */ Uart_Init(0,115200); Uart_Select(0);
/* 打印提示信息 */ PRINTF(\键盘测试程序---\\n\ PRINTF(\请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)\\n\
/* 开始回环测试 */ while(1) { unsigned char ch; ch=Key_GetKeyPoll();// TODO // 获取键值 if(ch != 0) { PRINTF(\键按下\ } } }
结果:在串口显示键盘输入的对应值
2.使按键按照如下表的顺序显示出来。步骤同上。 0 1 2 3 4 8 C 5 9 D 6 A E 7 B F 修改的程序如下(此处仅需修改keyboard.c中的部分地方):
char key_get_char(int row, int col) { char key = 0; switch( row ) { case 0: if((col & 0x01) == 0) key = '9'; else if((col & 0x02) == 0) key = '5'; else if((col & 0x04) == 0) key = '1'; else if((col & 0x08) == 0) key = 'D'; break; case 1: if((col & 0x01) == 0) key = '8'; else if((col & 0x02) == 0) key = '4'; else if((col & 0x04) == 0) key = '0'; else if((col & 0x08) == 0) key = 'C'; break; case 2: if((col & 0x01) == 0) key = '7'; else if((col & 0x02) == 0) key = '3'; else if((col & 0x04) == 0) key = 'F'; else if((col & 0x08) == 0) key = 'B'; break; case 3: if((col & 0x01) == 0) key = '6'; else if((col & 0x02) == 0) key = '2'; else if((col & 0x04) == 0) key = 'E'; else if((col & 0x08) == 0) key = 'A'; break; default: break; } return key; }
结果:按键按照表中的顺序显示出来。
3.将键盘按键值在数码管上显示。步骤如上。 程序如下: