论坛元老
- 积分
- 4418
- 金钱
- 4418
- 注册时间
- 2018-5-11
- 在线时间
- 923 小时
|
楼主 |
发表于 2018-9-2 12:44:48
|
显示全部楼层
//*************** key.c 文件相应内容 ********
//按键初始化函数
void KEY_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* PD8,9,10,11按键输入*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 下拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* PD12,13,14,15按键扫描输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* PD3,4,5,6按键输入,对应四个方向键*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
//硬件按键编码
//以上述20键为例(最大暂支持32键,对于键少的系统 KeyS_Type可定义为u16或u8)
KeyS_Type GetHalKeyCode(void)
{
KeyS_Type ktmp=0;
if(!KB_RIGHT_IN) ktmp|=1<<KB_RIGHT;
if(!KB_DOWN_IN) ktmp|=1<<KB_DOWN;
if(!KB_LEFT_IN) ktmp|=1<<KB_LEFT;
if(!KB_UP_IN) ktmp|=1<<KB_UP;
//扫描行列式键盘
KEY_OUT_LINE_NULL;
KEY_OUT_LINE1;
ktmp |= KEY_IN0<<4; //或者直接KEY_IN>>4
KEY_OUT_LINE_NULL;
KEY_OUT_LINE2;
ktmp |= KEY_IN0<<8; //或者直接KEY_IN
KEY_OUT_LINE_NULL;
KEY_OUT_LINE3;
ktmp |= KEY_IN0<<12; //或者直接KEY_IN<<4
KEY_OUT_LINE_NULL;
KEY_OUT_LINE4;
ktmp |= KEY_IN0<<16; //或者直接KEY_IN<<8
return ktmp;
}
|
|