板载按键实验。
查询引脚功能图,可以知道板载按键与引脚对应为 KEY0 --> PC5, KEY1 --> PA15,要使用按键,应当先使能对应时钟(以使用KEY0为例):
#define KEY_GPIO_PIN GPIO_Pin_5
#define KEY_GPIO_PORT GPIOC
#define KEY_GPIO_CLK RCC_APB2Periph_GPIOC
RCC_APB2PeriphClockCmd(KEY_GPIO_CLK, ENABLE);
然后要设置对应IO口配置:
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = KEY_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStruct);
然后要对按键进行消抖,我们可以对延时5ms作为消抖:
void KEY_Scan()
{
if(PCin(5) == 0)
{
delay_ms(5);
if(PCin(5) == 0)
{
flag = 1; //用于改变LED灯状态
}
while(!PCin(5));
}
}
加上之前的对板载LED的设置,可以在LED函数中这么写:
void LED_Change()
{
static u8 i = 1;
j++;
if(flag == 1)
{
flag = 0;
switch(i)
{
case 0:PAout(8) = 1;i++;break;
case 1:PAout(8) = 0;i=0;break;
}
}
}
主函数中将这两个函数写在同一个循环中:
int main(void)
{
LED_GPIO_Config();
KEY_GPIO_Config();
delay_init();
LED_Change();
while(1)
{
KEY_Scan();
LED_Change();
}
}
注意要加上相应的头文件。写入单片机中,实现按下KEY0改变LED灯的现象。