论坛大神
  
- 积分
- 1850
- 金钱
- 1850
- 注册时间
- 2013-4-15
- 在线时间
- 163 小时
|

楼主 |
发表于 2014-6-17 12:51:00
|
显示全部楼层
发现此前的IO口,有JATG口,修改如下,还是有问题
#define PC0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)
#define PC1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)
#define PC2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)
#define KEY_UpdateFont 1
#define KEY_Up 2
#define KEY_Plus 3
#define KEY_Left 4
#define KEY_MakeSure 5
#define KEY_Right 6
#define KEY_Cancel 7
#define KEY_Down 8
#define KEY_Subtract 9
/********************
*按键初始化子函数*
********************/
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*使能GPIOA和GPIOC时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
/*初始化GPIOA0/GPIOA1,推挽输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
/*初始化GPIOC13,推挽输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_13);
/*初始化GPIOA11/GPIOA12/GPIOA15,下拉输入*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
}
/***********************************************
*按键扫描子函数*
*返回值:键值*
***********************************************/
u8 KEY_Scan(void)
{
static u8 key_up=1;
GPIO_SetBits(GPIOA, GPIO_Pin_0);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
if(key_up && (PC0==1 || PC1==1 || PC2==1))
{
delay_ms(5);
if(PC0==1 || PC1==1 || PC2==1)
{
key_up = 0;
if(PC0 == 1)
return KEY_UpdateFont;
else if(PC1 == 1)
return KEY_Up;
else if(PC2 == 1)
return KEY_Plus;
}
else
return 0;
}
GPIO_SetBits(GPIOA, GPIO_Pin_1);
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
if(key_up && (PC0==1 || PC1==1 || PC2==1))
{
delay_ms(5);
if(PC0==1 || PC1==1 || PC2==1)
{
key_up=0;
if(PC0 == 1)
return KEY_Left;
else if(PC1 == 1)
return KEY_MakeSure;
else if(PC2 == 1)
return KEY_Right;
}
else
return 0;
}
GPIO_SetBits(GPIOC, GPIO_Pin_13);
GPIO_ResetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
if(key_up && (PC0==1 || PC1==1 || PC2==1))
{
delay_ms(5);
if(PC0==1 || PC1==1 || PC2==1)
{
key_up = 0;
if(PC0 == 1)
return KEY_Cancel;
else if(PC1 == 1)
return KEY_Down;
else if(PC2 == 1)
return KEY_Subtract;
}
else
return 0;
}
else if(PC0==0 && PC1==0 && PC2==0) //松手检测
key_up=1;
return 0;
}
|
|