初级会员

- 积分
- 151
- 金钱
- 151
- 注册时间
- 2016-7-31
- 在线时间
- 32 小时
|
5金钱
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
unsigned char read_key(void);
u8 Key_Timer=10;
unsigned char Key_Number = 0;
void RCC_Config(void);
void GPIO_Config(void);
void SysTick_Configuration(void);
int main(void)
{
SystemInit();
SysTick_Configuration();
RCC_Init();
GPIO_Config();
GPIO_SetBits(GPIOC,GPIO_Pin_4);
while(1)
{
if(!Key_Timer)
{
Key_Timer=10;
Key_Number=read_key();
if(Key_Number==1)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_4);
}
else
{
GPIO_SetBits(GPIOC,GPIO_Pin_4);
}
}
}
}
unsigned char read_key(void)
{
static char key_state = 0; //摁键的状态
unsigned char key_press; //按键是否被按下
unsigned char key_return = 0;//按键返回值
key_press = GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3);// 读按键I/O电?
switch (key_state)
{
case key_state_0:// 按键初始态
if (!key_press)
key_state = key_state_1;// 键被按下,状态转换到键确认态? ?? ?? ?? ?? ?
break;
case key_state_1: // 按键确认态
if (!key_press)
{
key_return = 1;// 按键仍按下,按键确认输出为“1”
key_state = key_state_2;// 状态转换到键释放态
}
else
key_state = key_state_0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (key_press)
key_state = key_state_0;//按键已释放,转换到按键初始
break;
}
return key_return;
}
void SysTick_Configuration(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//72M
SysTick_Config(72000); //这条语句最后一句话又将时钟源设为72mM的了
}
void RCC_Init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
}
void GPIO_Config(void)
{
/*----------------------LED--------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //LED5 PC4
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//KEY2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
|
|