中级会员
 
- 积分
- 272
- 金钱
- 272
- 注册时间
- 2015-5-30
- 在线时间
- 9 小时
|
5金钱
程序如下
h文件部分:
#define KEY0 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)
#define KEY1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)
#define KEY2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)
#define KEY3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)
#define KEY4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)
#define KEY5 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)
#define KEY_UP 1
#define KEY_RIGHT 2
#define KEY_DOWN 3
#define KEY_LEFT 4
#define KEY_START 5
#define KEY_SELEC 6
按键扫描程序:
#include "key.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//KEY,????????
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13);
}
u16 KEY_Scan(u16 mode)
{
static u16 key_up=1;//°??ü????±ê????
if (mode) key_up=1;//?§??????°?
if(key_up&&KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0)
{
key_up=0;//???ü°???,
if(KEY0==0) return KEY_UP ;
else if(KEY1==0) return KEY_RIGHT ;
else if(KEY2==0) return KEY_DOWN ;
else if(KEY3==0) return KEY_LEFT ;
else if(KEY4==0) return KEY_START ;
else if(KEY5==0) return KEY_SELEC ;
}
else if (KEY0==1&&KEY1==1 &&KEY2==1 &&KEY3==1 &&KEY4==1&&KEY5==1) key_up=1;
return 0;
}
下载发现PB8,9,12三个键发现没反应,然后我参考了网上,加了这个就有用了
uint8_t KeyScan( GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin_x )
{
if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON )
{
KeyDelay(0x57E40); /* ???±5ms */
if ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON )
{
while ( GPIO_ReadInputDataBit( GPIOx, GPIO_Pin_x ) == KEY_ON ); /* ?????? */
return KEY_ON;
}
else
{
return KEY_OFF;
}
}
return KEY_OFF;
}
所以我想问下,是不是原子独立按键只能支持4个???
|
|