博客
关于我
按键输入实验
阅读量:773 次
发布时间:2019-03-24

本文共 2046 字,大约阅读时间需要 6 分钟。

按键实验实践指南

1. 按键实验硬件连接

1.1 连接原理

在进行按键实验之前,我们需要正确配置硬件电路。KEY_UP按键连接到IO口时,系统会检测到高电平信号。而KEY0/KEY1/KEY2按键连接时,系统会检测到低电平信号。通过合理设置输入电平检测,可以实现对不同按键状态的准确捕捉。

1.2 提示

在实际操作中,KEY_UP按键按下时会输出高电平信号,而KEY0/KEY1/KEY2按下时会输出低电平信号。不同按键的连接方式需要根据实际电路进行相应设置,确保系统能够正确识别按键状态。


2. GPIO输入操作说明

2.1 输入库函数

在进行GPIO输入操作时,我们需要使用相应的库函数来读取IO口电平状态。

2.1.1 读取IO口输入电平

可以通过调用GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)函数来读取指定GPIO口的输入电平状态。该函数将返回对应引脚的输入电平信息。

2.1.2 读取输入电平操作寄存器

GPIO端口输入寄存器(GPIOx_IDR)是用于读取输入电平状态的主要寄存器。通过访问该寄存器,可以获得指定引脚的电平信息。

2.1.3 使用位带操作读取

可以通过位带操作的方式来读取GPIO口的输入电平状态。例如,针对GPIOE口,使用位带操作来读取GPIOE.4或其他指定引脚的电平信息。位带操作通过将位带地址映射到位带别名地址,从而实现对单个引脚状态的读取。


3. 按键实验

3.1 按键扫描思路

在进行按键扫描时,我们需要设计一个循环结构来连续检测多个键盘输入。通过使用static关键字,可以实现对单个按键的按住状态监控。此外,我们还可以设计一种双层扫描模式,确保能够同时检测多个按键的状态变化。

3.1.1 实现连续按

通过将static关键字应用于循环内部,可以实现对按键连续按下的检测。这种方式可以确保程序能够持续监控键盘输入,直到按键状态发生改变。

3.1.2 不支持连续按

某些硬件配置可能不支持对按键连续按下的检测。在这种情况下,开发者需要根据实际情况进行相应的设计调整,确保程序能够正确工作。

3.1.3 两种模式合一

为了提高开发效率,可以将两种模式合并为一种实现方式。通过灵活配置扫描周期和按键监控方式,可以实现对多种按键状态的准确检测。


3.2 实现代码

#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"#include "beep.h"#include "key.h"int main(void){    u8 key;  // 定义按键变量    delay_init(168);  // 初始化延时器    LED_Init();       // 初始化LED    BEEP_Init();     // 初始化蜂鸣器    KEY_Init();       // 初始化按键模块    LED0 = 0;       // 初始化LED0为低电平    while(1)    {        key = KEY_Scan(0);  // 扫描所有键盘(参数0表示只扫描一次)        if(key)        {            switch(key)            {                case WKUP_PRES:  // WKUP键按下                    BEEP = !BEEP;                    break;                case KEY0_PRES:  // KEY0键按下                    LED0 = !LED0;                    break;                case KEY1_PRES:  // KEY1键按下                    LED1 = !LED1;                    break;                case KEY2_PRES:  // KEY2键按下                    LED0 = !LED0; // LED0切换                    LED1 = !LED1; // LED1切换                    break;            }        }        else        {            delay_ms(10);  // 当无按键按下时,等待10ms        }    }}

以上代码实现了对按键状态的扫描检测和相应的LED及蜂鸣器的控制。通过合理设置键盘扫描周期和按键响应方式,可以实现对多种按键状态的准确捕捉。

转载地址:http://beakk.baihongyu.com/

你可能感兴趣的文章
pickle模块
查看>>
pid控制
查看>>
PID控制介绍-ChatGPT4o作答
查看>>
PID控制器数字化
查看>>
PIESDKDoNet二次开发配置注意事项
查看>>
PIL Image对图像进行点乘,加上常数(等像素操作)
查看>>
PIL.Image、cv2的img、bytes相互转换
查看>>
Pillow lacks the JPEG 2000 plugin
查看>>
ping 命令的七种用法,看完瞬间成大神
查看>>
Pinia:$patch的使用场景
查看>>
Pinia:$subscribe()的使用场景
查看>>
Pinpoint对Kubernetes关键业务模块进行全链路监控
查看>>
Pinterest 大规模缓存集群的架构剖析
查看>>
pintos project (2) Project 1 Thread -Mission 1 Code
查看>>
PinYin4j库的使用
查看>>
PIP
查看>>
pip install goose-extractor // SyntaxError: Missing parentheses in call to 'print'
查看>>
pip install 出现报asciii码错误的解决
查看>>
pip throws TypeError: parse() got an unexpected keyword argument ‘transport_encoding‘ 在尝试安装新软件包时
查看>>
pip 下载慢
查看>>