GPIO 输入之按键轮询 | 学习笔记

简介: 快速学习 GPIO 输入之按键轮询

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:GPIO 输入之按键轮询】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11153


GPIO 输入之按键轮询

接一个按键,假设这个按键是接在了 PA1 一和 PA0 上面。按键的工作原理:把开关一个引脚接在 PA1,另一个引脚接在 PA0。如果开关没有按下去,PA1 和 PA0 没有关系,但一旦这个按键按下去了,PA1 和 PA0 的电平就是一样的了。

image.png

可以让 PA0 工作在一个输出状态,输出 1 输出 0 都可以。输出 0 的话,PA1 默认情况下给其一个上拉电阻,就保证了 PA0 和 PA1 这两个引脚在没有按下按键的情况下是不一样的。如果当这个按键按下去的时候,由于 PA0 是 0,才使得 PA1 也跟着成了 0。所以只需要判断 PA1 有没有从 1 变成 0 来判断有没有按下按键。

将下程序输入,叫作键盘的初始化:

Void led-int(void)

{

GPIO-InitTypeDef   GPIO-InitStructure;

RCC-APB2PeriphclockCmd(RCC-XXX-LED, ENABLE);

GPIO-InitStructure,GPIO-Pin=GPIO-XXX-LED;

GPIO-InitStructure,GPIO-Mode=GPIO-Mode-Out-PP;

GPIO-InitStructure,GPIO-Speed=GPIO-Speed-2MHZ;

GPIO-Init(GPIO-XXX-LED-PORT,& GPIO-InitStructure);

GPIO-XXX-LED-OFF():

}

现在用到 GPIOA,用的是 A0 和 A1 引脚,如果引脚有多个,没有必要重复去写,只需要扩上另一个就可以了。这里还不能用或,因为这两个引脚的工作方式不一样,一个输入一个输出所以这还是要分开写,这里的 io 口当然就是 GPIOA。

接下来再复制上面的代码做成两个 io,A0 的 iO 做成输出,输出低电平,GPIOA,A0 引脚。A1 的 iO 做成输入,ipu 上拉输入,频率不变。一个是输入,一个是输出,然后这个时钟都是 A。

按键的初始化做完之后,直接判断 io 口的值是多少。resetbits 是在设置电平的状态,是清零的,现在不是要至零了,要输入就要去读取输入的 io,参数就是 gpioa除去 a 的几个广角,0 是用作输出,1 是输入。读取的值如果等于 0 就表示这个按键被按下,按下了让灯和蜂鸣器都响起来,否则就关掉,具体代码修改完成后如下:

Int main(void)

{

Led-int();

Beep-init();

Key-init();

Whie(1){

If(GPIO-ReadInputDataBit(GPIOA,GPIO-Pin-1)==0){

LED-XXX-ON();

BEEP-XXX-ON();

delay-ms(300);

}else{

LED-XXX-OFF();

BEEP-XXX-OFF();

delay-ms(300);

}

编译,复位,出现问题蜂鸣器反了,修改为

#define BEEP_XXX_ON() GPIO_SetBits(GPIO_XXX_BEEP_PORT,GPIO_XXX_BEEP)

#define BEEP_XXX_OFF() GPIO_ResetBits(GPIO_XXX_BEEP_PORT,GPIO_XXX_BEEP)

之前接反了,重新复位,运行正常,A0A1 上接了两个按键,

image.png

如图所示为之前接的蜂鸣器,还有按键接到 A0A1 上面,按动按键,灯也会随着闪烁,

image.png

这就是输入输出通过 IO 口蜂鸣器 LED 和按键的演示。但是还是存在一些问题,按键的主循环里做了一件事情判断按键,学习中断时就不要判断放到主循环中。

相关文章
|
Linux 调度
按键消抖的两种方法--中断延迟工作与定时器
按键消抖的两种方法--中断延迟工作与定时器
656 0
|
3月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
6月前
|
C语言
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
|
存储 编译器
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
实验:MSP430F249 按键控制四个灯,并消抖
实验:MSP430F249 按键控制四个灯,并消抖
116 0
使用STM32CubeMX实现按下按键,电平反转
使用STM32CubeMX实现按下按键,电平反转
197 0
使用STM32CubeMX实现按下按键,电平反转
|
存储 调度
51单片机--定时器与按键控制流水灯模式
51单片机--定时器与按键控制流水灯模式
453 0
蓝桥杯使用定时器代替延时控制按键
蓝桥杯使用定时器代替延时控制按键
67 0