📄 keyboard.c
字号:
/*****************************************************************************
* uart.c: UART API file for NXP LPC24xx Family Microprocessors
*
* Copyright(C) 2006, NXP Semiconductor
* All rights reserved.
*
* History
* 2006.07.12 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#include "LPC2468.h" /* LPC24xx definitions */
#include "type.h"
#include "target.h"
#include "irq.h"
#include "fio.h"
#include "keyboard.h"
#include "timer.h"
/*********************************************************************************************************
** 函数名称 :Key_Init()
** 函数功能 :按键初始化。(P3.28~P3.31: output; P0.19~P0.22: input)
** 入口参数 :无
** 出口参数 :按键的值。
*********************************************************************************************************/
unsigned char Key_Init(void)
{
unsigned long regval;
GPIOInit(0,FAST_PORT,DIR_IN); //端口初始化及方向设定
GPIOInit(3,FAST_PORT,DIR_OUT);
}
/*********************************************************************************************************
** 函数名称 :KeyScan()
** 函数功能 :按键扫描子程序。
** 入口参数 :无
** 出口参数 :按键的值。
*********************************************************************************************************/
unsigned char KeyScan(void)
{
unsigned long temp1,temp2,temp3;
unsigned char i,keycount;
keycount = 0;
FIO3CLR = 0xf0000000; // 行线输出低电平
temp1 = FIO0PIN;
temp1 &= 0x00780000; // P0.19~P0.22的值
if (temp1 == 0x00780000) // 如果没有键被按下
return(keycount); // 返回0
temp1 = ~(temp1>>19) & 0x0000000f; // 列值
switch(temp1)
{
case 1:
keycount = 1;break;
case 2:
keycount = 2;break;
case 4:
keycount = 3;break;
case 8:
keycount = 4;break;
default:
keycount = 0;
}
temp2 = 0x10000000;
for(i=0;i<4;i++) // 行扫描
{
FIO3SET = temp2; // P3.28~P3.31逐个拉高
temp3 = FIO0PIN;
temp3 &= 0x00780000;
if(temp3 == 0x00780000) // 判断本行是否有键按下
break;
temp2 = temp2<<1;
keycount += 4;
}
return(keycount);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -