使用一个按键控制LED的亮灭,按键按下时LED亮起,按键松开时LED熄灭。通过按键控制实验来介绍下 IO 口作为输入的使用。本例中用到了GPIOE的PE3管脚。
LED和按键的电路图。
按键 K_LEFT、K_DOWN、K_RIGHT 分别连接在 STM32F1 芯片的 PE2、PE3、PE4引脚上。
按键另一端是全部接在 GND 上,这个和我们学习 51单片机是一样的,采用独立式按键接法,按下时输入到芯片管脚即为低电平。
整个程序实现的流程步骤如下:
按键检测处理
按键控制处理
工程文件目录如下。
IO口初始化程序代码在key.c文件中。
/*************************************************************** * 函 数 名 : KEY_Init * 函数功能 : 按键初始化 * 输 入 : 无 * 输 出 : 无 *****************************************************************/ void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE); GPIO_InitStructure.GPIO_Pin=KEY_UP_Pin;//选择你要设置的IO口 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉输入 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置传输速率 GPIO_Init(KEY_UP_Port,&GPIO_InitStructure);/*初始化GPIO*/ GPIO_InitStructure.GPIO_Pin=KEY_DOWN_Pin|KEY_LEFT_Pin|KEY_RIGHT_Pin; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉输入 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(KEY_Port,&GPIO_InitStructure); }
要知道哪个按键被按下,就需要编写按键检测函数,具体代码如下:
/**************************************************************** * 函 数 名 : KEY_Scan * 函数功能 : 按键扫描检测 * 输 入 : mode=0:单次按下按键 mode=1:连续按下按键 * 输 出 : 0:未有按键按下 KEY_UP:K_UP 键按下 KEY_DOWN:K_DOWN 键按下 KEY_LEFT:K_LEFT 键按下 KEY_RIGHT:K_RIGHT 键按下 *****************************************************************/ u8 KEY_Scan(u8 mode) { static u8 key=1; if(key==1&&(K_UP==1||K_DOWN==0||K_LEFT==0||K_RIGHT==0))//任意一个按键按下 { delay_ms(10);//消除抖动 key=0; if(K_UP==1) { return KEY_UP; } else if(K_DOWN==0) { return KEY_DOWN; } else if(K_LEFT==0) { return KEY_LEFT; } else { return KEY_RIGHT; } } elseif(K_UP==0&&K_DOWN==1&&K_LEFT==1&&K_RIGHT==1)//无按键按下 { key=1; } if(mode==1)//连续按键按下 { key=1; } return 0; }
主函数,代码如下:
#include "system.h" #include "SysTick.h" #include "led.h" #include"key.h" int main() { u8 key; SysTick_Init(72); LED_Init(); KEY_Init(); while(1) { key=KEY_Scan(1); //Á¬ÐøɨÃè°´¼ü if(key) { led2=0; delay_ms(5);//每隔5ms灭一次 if(KEY_Scan(1)!=key) { led2=!led2; delay_ms(5); } } } }
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
led
+关注
关注
240文章
23100浏览量
657524 -
单片机
+关注
关注
6030文章
44502浏览量
632305 -
STM32
+关注
关注
2265文章
10859浏览量
354501 -
IO口
+关注
关注
3文章
169浏览量
23975 -
按键控制
+关注
关注
1文章
44浏览量
8763
原文标题:STM32基础实例-按键控制LED
文章出处:【微信号:单片机与嵌入式,微信公众号:单片机与嵌入式】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
使用STM32按键控制LED亮灭
本次实验所用到的Simulink模型如图5.1所示,实验现象: 按键按下、松开LED循环实现翻转亮灭效果,当按键按下时,产生下降沿脉冲,通过一个计数器对下降沿脉冲进行0~1循环计数,计
利用按键控制LED的亮灭
STM32 HAL库 CubeMX教程(四)外部中断实验内容NVIC(嵌套向量中断控制器)外部中断简介CubeMX配置中断回调函数编写实验内容 利用按键控制LED的
发表于 08-09 09:02
利用按键控制LED灯的亮灭
STM32F4工程--IO口--按键控制点灯程序(库函数) ----芯片:STM32F429IGT6本文章介绍使用STM32F4单片机,利用按键控制
发表于 08-24 07:18
如何利用Stduino通过按键控制LED灯亮灭
2020/01/06 星期一作者:Astilbe问题:如何利用Stduino通过按键控制LED灯亮灭。我们已经学习过怎么点亮一颗LED灯,那
发表于 01-05 07:52
FPGA入门系列实验教程之按键控制LED亮灭的详细资料说明
实现按键控制LED亮灭。通过这个实验,掌握采用Verilog HDL语言编程实现按键控制LED
发表于 06-11 16:50
•31次下载
FPGA入门系列实验教程之如何进行按键消抖控制LED亮灭
实现按键控制 LED 亮灭。通过这个实验,掌握采用 Verilog HDL 语言编程实现按键控制 LED
发表于 06-11 16:50
•13次下载
评论