前言
提示:这里可以添加本文要记录的大概内容:
看了原子的课程,觉得用了位操作实现上拉下拉输入在小程序量的代码里不一定有库函数好用,所以我又写了库函数版本的按键检测。
提示:以下是本篇文章正文内容,下面案例可供参考
一、GPIO输出输入方式理解
看了这么多讲各种IO口方式类别的,觉得初学者只需要会用推挽输出和上拉下拉输入即可。
推挽输出(GPIO_Mode_Out_PP)
一般IO输出:0 1都可
上拉输入(GPIO_Mode_IPU) 可接低电平按键
下拉输入(GPIO_Mode_IPD) 接高电平按键
二、使用步骤
代码如下(示例):
## 1.推挽输出
GPIO_InitTypeDef GPIO_str;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//enable PA PB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_str.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_str.GPIO_Pin = GPIO_Pin_0;
GPIO_str.GPIO_Speed = GPIO_Speed_50MHz;
//init
GPIO_Init(GPIOA,&GPIO_str);
## 2.读入数据(上拉下拉)
代码如下(示例):
```c
GPIO_InitTypeDef GPIO_str1,2;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA , ENABLE);//使能PORTB时钟
GPIO_str1.GPIO_Mode = GPIO_Mode_IPU; //--->pull up input 上拉输入
GPIO_str1.GPIO_Pin = GPIO_Pin_4; //key2
GPIO_str2.GPIO_Mode =GPIO_Mode_IPD; //--->pull up input 上拉输入
GPIO_str2.GPIO_Pin = GPIO_Pin_4; //key2
GPIO_Init(GPIOB, &GPIO_str1);
GPIO_Init(GPIOA, &GPIO_str2);
三、主题:用库函数写按键检测
flat = key_catch(0); //模式选择
if(flat)
{
switch(flat)
{
case KEY0_PRES:
GPIO_ResetBits(GPIOA,GPIO_Pin_0);break;
case KEY1_PRES:
GPIO_ResetBits(GPIOB,GPIO_Pin_0);break;
case KEY_ALL:
{GPIO_ResetBits(GPIOB,GPIO_Pin_0);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);}
break;
}
}
delay_ms(500);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
delay_ms(500);