用按键点灯----GPIO的输入和输出

  • 一、原理讲解
  • 二、代码实现

这只是提供一个思路给你参考如何做这样一个东西,具体不同型号的单片机初始化都是不一样的,但是基本原理都是差不多的,如果你对这个项目有兴趣可以评论、关注我,如果你也想做这样的一个项目可以私聊找我,我会给你提供帮助。
如果这篇博文对你有帮助赶紧关注、点赞、收藏吧,感谢你的支持!

一、原理讲解

首先我们先去看一下原理图
这是LED的管脚
用来输出

这是按键的管脚
接收输入的信号

这是原理图
当按键KEY2按下的时候,BACKUP就由1变为0

按照这个原理我们可以弄一个按键扫描来识别和保存按键的状态

二、代码实现

这是按键初始化和按键扫描的代码
key.c

#include "key.h"/*
函数功能:KEY初始化
参数:void
返回值:void
说明:1、使能GPIOC时钟2、初始化GPIOC口PC13:浮空输入模式
*/void Key_Config(void)
{GPIO_InitTypeDef GPIO_InitStruct;//定义结构体变量RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;//浮空输入模式GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;//PC13GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//50MhzGPIO_Init(GPIOC, &GPIO_InitStruct);//初始化GPIOC口
}/*
函数功能:按键扫描
参数:void
返回值:u8
说明:1、识别按键2、消抖3、记录按键状态*/u8 Key_Scan(void)
{static u8 flag = 0;//没按键按下按键的状态为0if(KEY1 == 0 && flag == 0){Delay_ms(20);if(KEY1 == 0){flag = 1;//按键按下按键的状态为1return 1;}}else if(KEY1 == 1 && flag == 1){flag = 0;//没按键按下按键的状态为0}return 0;}

key.h

#ifndef _KEY_H
#define _KEY_H#include "stm32f4xx.h"
#include "delay.h"
#include "io_bit.h"#define KEY1 PCin(13)//位带操作宏定义void Key_Config(void);
u8 Key_Scan(void);#endif

main.c
我们先定义一个变量来接收按键的值,如果按键返回值是1就是按下了,就对LED取反这样按一次按键就可以开灯,再按一次就可以关灯;如果按键的值是0,就没有按键按下。

#include "main.h"int main()
{u8 Key_State;Led_Config();Key_Config();while(1){/*点亮LED*/
//      GPIO_SetBits(GPIOB, GPIO_Pin_8);//关
//      GPIO_SetBits(GPIOB, GPIO_Pin_9);
//      GPIO_ResetBits(GPIOB, GPIO_Pin_8);//开
//      GPIO_ResetBits(GPIOB, GPIO_Pin_9);
//      LED1 = 1;
//      LED2 = 1;
//      LED1 = 0;
//      LED2 = 0;/*按键点亮LED*/Key_State = Key_Scan();if(Key_State == 1){LED1 = ~LED1;LED2 = ~LED2;          }}}

main.h

#ifndef _MAIN_H
#define _MAIN_H#include "stm32f4xx.h"
#include "led.h"
#include "key.h"#endif

【10天基于STM32F401RET6智能锁项目实战第2天】用按键点灯----GPIO的输入和输出相关推荐

  1. 10天基于STM32F401RET6智能锁项目实战第1天(环境搭建和新建工程)

    10天基于STM32F401RET6智能锁项目实战第1天(环境搭建和新建工程) 一.环境搭建 二.新建工程 一.环境搭建 1.安装keil5 2.安装支持包 这里按照需求安装支持包,有F4和F1的支持 ...

  2. 【10天基于STM32F401RET6智能锁项目实战第4天】外部中断的按键实现语音控制

    外部中断的按键实现语音控制 一.实现语音功能 1.语音模块的资料 2.代码实现 二.外部中断的按键实现语音控制 一.实现语音功能 1.语音模块的资料 首先我们要做的就是了解语音模块是怎么使用的,那么就 ...

  3. 【10天基于STM32F401RET6智能锁项目实战第2天】(分别用库函数和寄存器点灯)

    分别用库函数和寄存器点灯 一.用寄存器点灯 二.用库函数点灯 一.用寄存器点灯 硬件分析:首先我们要先去看原理图找到相应的GPIO口 然后再去看用到的寄存器 首先我们先看一下GPIO口是挂载在AHB1 ...

  4. 【10天基于STM32F401RET6智能锁项目实战第2天】GPIO与寄存器

    GPIO与寄存器 一.GPIO的作用.数量与命名 二.GPIO口的四大模式 三.寄存器 一.GPIO的作用.数量与命名 二.GPIO口的四大模式 三.寄存器 更多的寄存器的实际操作会在后面的代码中讲解 ...

  5. 10天智能锁项目实战第1天(了解单片机STM32F401RET6和C语言基础)

    10天智能锁项目实战第1天(了解单片机STM32F401RET6和C语言基础) 一.学习目标 二.了解单片机STM32F401RET6 三.C语言基础 一.学习目标 二.了解单片机STM32F401R ...

  6. Python基于AIML智能聊天机器人实战(4)- 机器人自学习能力集成

    一.前言 本文是<Python基于AIML智能聊天机器人实战>第四篇:AIML自学习能力集成: AIML是智能对话机器人具有里程碑意义的开源项目,曾斩获多项国际大奖,是基于检索技术的闲聊式 ...

  7. 基于 Netty 网络编程项目实战课程

    一 基于 Netty 网络编程项目实战课程 1项目介绍 2Netty 介绍与相关基础知识 2.1Netty 介绍 简介 Netty 是由 JBOSS 提供的一个 java 开源框架.Netty 提供异 ...

  8. Python基于AIML智能聊天机器人实战视频教程-张子良-专题视频课程

    Python基于AIML智能聊天机器人实战视频教程-244人已学习 课程介绍         Python基于AIML的智能聊天机器人开发实战课程,包括典型案例.基础理论.功能拓展.源码框架解读四个方 ...

  9. 基于C++的OpenCV项目实战——文档照片转换成扫描文件

    基于C++的OpenCV项目实战--文档照片转换成扫描文件 一.背景 前段时间都是基于Python的OpecCV进行一些学习和实践,但小的知识点并没有应用到实际的项目中:并且基于Python的版本的移 ...

最新文章

  1. 最新!薪酬最高的大学专业公布!
  2. python高级应用程序课程设计_Python高级应用程序设计任务
  3. C++串口通信API方式
  4. 江湖传闻怪谈——让酒
  5. java/php/net/python基于Java的校园一卡通管理系统
  6. 生活随记 - 2020国庆第一天
  7. Objective-C JSON字符串解析
  8. 设计一个小型的物联网应用系统_点赞 | 面向能源物联网的智能传感芯片设计与应用...
  9. 微信小程序豆瓣电影(上)
  10. 写了一个内核模块实现简单的类似ps命令.
  11. matlab 代码转 Python
  12. javacv开发详解之19:如何使用批量的多张图片制作apng动态图,再也不用担心不会制作动态图了
  13. 支付10秒倒计时链接页面跳转
  14. 第十八次CCF计算机软件能力认证
  15. fivem服务器文件,云梦YumVGTA5 FiveM 服务器插件管理器
  16. 前端学习(2451):表单数据的绑定
  17. Elixir交互式Shell: 1. 运行时系统标记
  18. airodump-ng wlan0mon无法找到wifi信息
  19. 模拟atm取款机 php,C语言模拟ATM自动取款机系统
  20. 模式识别大作业-代码

热门文章

  1. javax.servlet.http.HttpServlet was not found
  2. submit与button区别提交区别
  3. sphinx配置文件全解析
  4. UCS B200安装windows server 2003
  5. 脚本实现补丁安装自动化
  6. .Net框架集WebClient类向WinCE平台上传文件(FTP方式)延迟15秒释疑
  7. 二分法(三):采用二分法解决“最大化最小值问题”
  8. laravel5.6 邮件队列database驱动简单demo
  9. Mom and Dad
  10. android-studio于java相关