1. 实验目的
通过按键控制三个LED灯的关灭,按下按键k2,LED显示流水灯样式,按下按键k3,LED从新开始显示流水灯。
2. 实验原理
按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开,使用按键时会产生图 6-1 中的带波纹信号,需要用软件消抖处理滤波,不方便输入检测。本实验板连接的按键带硬件消抖功能,见图 6.1.1,它利用电容充放电的延时,消除了波纹,从而简化软件的处理,软件只需要直接检测引脚的电平即可。
GPIO(General Purpose Input/Output)输入在按键检测中起着关键作用。以下是使用GPIO输入进行按键检测的一般步骤:
具体的实现细节可能会因微控制器的型号和开发环境的不同而有所差异。因此,建议查阅相关的硬件文档和软件开发工具包(SDK)以获取更详细的信息。
此外,为了通过LED灯的亮灭状态来间接完成按键检测,可以配置一个LED灯连接的GPIO引脚作为输出。当检测到按键按下时,将LED灯对应的引脚设置为高电平(或低电平,取决于电路设计),从而点亮LED灯。再次按下按键时,将LED灯对应的引脚设置为低电平(或高电平),从而熄灭LED灯。这样,就可以通过LED灯的亮灭状态来直观地反映按键的状态了。
图 6.1.1 按键抖动说明图
从按键的原理图可知,这些按键在没有被按下的时候,GPIO 引脚的输入状态为高电平(按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为低电平(按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。若您使用的实验板按键的连接方式或引脚不一样,只需根据我们的工程修改引脚即可,程序的控制原理相同。
3. 主要仪器设备
GEC-STM32F429开发板和keil 5软件
4. 实验内容及步骤
1,首先用keil软件打开实验项目,确保可编译之后。
2,开发板使用usb连接线连接上电脑
3,然后使用点击load加载到开发板上。
4,修改代码,实例代码如下
#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./key/bsp_key.h"
/**
* @brief 主函数
* @param 无
* @retval 无
*/
u8 interruptDelay(__IO uint32_t nCount, u8* ledSwitch);
void Delay(__IO uint32_t nCount);
int main(void)
{
u8 ledSwitch = 1; // 灯开关标志, 1开0灭
/* LED 端口初始化 */
LED_GPIO_Config();
/*初始化按键*/
Key_GPIO_Config();
/* 轮询按键状态,若按键按下则反转LED */
while(1) {
if(ledSwitch == 0){
LED1( OFF );
LED2( OFF );
LED3( OFF );
while( Key_Scan(KEY2_GPIO_PORT,KEY2_PIN) != KEY_ON );
ledSwitch = 1;
}
LED1( ON ); // 亮
//Delay(0xFFFFFF);
interruptDelay(0xAFFFF, &ledSwitch);
LED1( OFF ); // 灭
LED2( ON ); // 亮
//Delay(0xFFFFFF);
interruptDelay(0xAFFFF, &ledSwitch);
LED2( OFF ); // 灭
LED3( ON ); // 亮
//Delay(0xFFFFFF);
interruptDelay(0xAFFFF, &ledSwitch);
LED3( OFF ); // 灭
}
}
u8 interruptDelay(__IO uint32_t nCount, u8* ledSwitch){
if(*ledSwitch == 0){
return 1;
}
for(; nCount != 0; nCount--){
if(Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON){
*ledSwitch = 0;
return 1;
}
}
return 0;
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
/*********************************************END OF FILE**********************/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。