📄 main.c
字号:
/************************************************************************************
* 文 件 名:Key_4_4.c
* 功 能:4*4行列式键盘驱动。
* 作 者:POWER
* 日 期:2006年5月23号
* 斯凯科技主页:www.armsky.net
* 斯凯科技论坛:www.armsky.net/bbs
*************************************************************************************/
#include "config.h"
/* 定义键盘连接引脚,用户可根据自己的连接修改 */
#define row1 ((uint32)1<<4) //P1.16
#define row2 ((uint32)1<<5) //P1.17
#define row3 ((uint32)1<<6) //P1.18
#define row4 ((uint32)1<<7) //P1.19
#define col1 ((uint32)1<<0) //P1.20
#define col2 ((uint32)1<<1) //P3.23
#define col3 ((uint32)1<<2) //P1.24
#define col4 ((uint32)1<<3) //P1.25
//#define SelectPinToGPIO 0x0d814914 //将连接键盘的引脚选择为GPIO,用户可根据自己的连接修改
/************************************************************************************
* 函数名称:Delay_N_76us()
* 功 能:软件延时
* 入口参数:dly 延时参数,值越大,延时越长
* 出口参数:无
* 注 意:该函数根据用户具体的硬件及系统配置,延时时间并不一定是76us的整数倍
*************************************************************************************/
extern void Delay_N_76us(uint32 dly);
/************************************************************************************
* 函数名称:KeyInit()
* 功 能:键盘初始化
* 入口参数:无
* 出口参数:无
* 注 意:用户可根据自己的键盘连接引脚修改该函数
*************************************************************************************/
extern void KeyInit(void);
/************************************************************************************
* 函数名称:KeyDown()
* 功 能:检测键盘是否按下
* 入口参数:无
* 出口参数:返回1表示键盘按下,返回0表示键盘未按下
* 注 意:该函数有消抖功能
*************************************************************************************/
extern uint8 KeyDown(void);
/************************************************************************************
* 函数名称:KeyUp()
* 功 能:检测键盘是否弹起
* 入口参数:无
* 出口参数:返回1表示键盘弹起,返回0表示键盘未弹起
* 注 意:该函数有消抖功能
*************************************************************************************/
extern uint8 KeyUp(void);
/************************************************************************************
* 函数名称:KeyNum()
* 功 能:检测用户按下的键盘所对应的键盘号
* 入口参数:无
* 出口参数:返回0表示没有键盘被按动,返回1~16对应被按动的键盘
* 说 明:用户可根据自己的键盘编号修改该函数。
*************************************************************************************/
extern uint8 KeyNum(void);
/************************************************************************************
* 函数名称:Delay_N_76us()
* 功 能:软件延时
* 入口参数:dly 延时参数,值越大,延时越长
* 出口参数:无
* 注 意:该函数根据用户具体的硬件及系统配置,延时时间并不一定是76us的整数倍
*************************************************************************************/
void Delay_N_76us(uint32 dly)
{
uint8 i;
for(;dly>0;dly--)
for(i=0;i<10;i++);
}
/************************************************************************************
* 函数名称:KeyInit()
* 功 能:键盘初始化
* 入口参数:无
* 出口参数:无
* 注 意:用户可根据自己的键盘连接引脚修改该函数
*************************************************************************************/
void KeyInit(void)
{
PINSEL0=0xFF; // 选择4*4行列式键盘所需引脚为GPIO
IO0DIR|=(row1|row2|row3|row4); // P1.16~P1.19为输出
IO0DIR&=~(col1|col2|col3|col4); // P1.20,P1.24,P1.25为输入
}
/************************************************************************************
* 函数名称:KeyDown()
* 功 能:检测键盘是否按下
* 入口参数:无
* 出口参数:返回1表示键盘按下,返回0表示键盘未按下
* 注 意:该函数有消抖功能
*************************************************************************************/
uint8 KeyDown(void)
{
IO0CLR|=row1;
IO0CLR|=row2;
IO0CLR|=row3;
IO0CLR|=row4;
if (((IO0PIN & col1) ==0 ) || ((IO0PIN & col2)==0) || ((IO0PIN & col3)==0) || ((IO0PIN & col4)==0))
{
Delay_N_76us(1000);
if (((IO0PIN & col1) ==0 ) || ((IO0PIN & col2)==0) || ((IO0PIN & col3)==0) || ((IO0PIN & col4)==0))
return 1;
else
return 0;
}
else
return 0;
}
/************************************************************************************
* 函数名称:KeyUp()
* 功 能:
* 入口参数:检测键盘是否弹起
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -