学习目标:
实现按键操控LED灯
学习内容:
上一次我学习了如何对IO口进行配置了解IO口配置需要的各种参数。
今天就正式进入对按键的学习
对于按键在mini版上有三个
可以看到key0和key1都是低电平有效,wk_up是高电平有效所以在程序里面配置io口时要对key0和key1的GPIO的模设置为上拉输入而wk_up就要设置为下拉输入
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);
现在就要设置按键处理函数了
//KEY0_PRES,KEY0按下
//KEY1_PRES,KEY1按下
//WKUP_PRES,WK_UP按下
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;
if(mode)key_up=1;
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(WK_UP==1)return WKUP_PRES;
}else if(KEY0==1||KEY1==1||WK_UP==0)key_up=1;
return 0;
}
这样就可以对按键进行控制了
#include "sys.h"
#include "led.h"
#include "delay.h"
#include "key.h"
int main(void)
{
u8 t;
u8 i=0;
delay_init();
LED_Init();
KEY_Init();
LED0=0;
while(1)
{
t=KEY_Scan(0);
switch(t)
{
case KEY0_PRES:
LED0=!LED0;
break;
case KEY1_PRES:
for(i=0;i<50;i++)
{
if(i%2==1){
LED0=!LED0;
delay_ms(100);
}
else if(i%2==0){
LED1=!LED1;
delay_ms(100);
}
}
break;
case WKUP_PRES:
LED0=!LED0;
LED1=!LED1;
break;
default:
delay_ms(10);
}
}
}
对于key1我对他设置了一下取出奇偶当i为奇数时LED0翻转当i为偶数时LED翻转
总结
对于今天的学习:按键就是对io口进行一些操作加深了我对IO口的了解程度
祝前程似锦