GPIO输入—按键检测(开关控制小灯)
本次的代码全是在上次代码之上添加的.
1.user下新建文件夹key,新建bsp_key.h bsp_key.c文件.
2.keil项目添加bsp_key.c,魔术棒C/C++中include path添加key文件夹.
3.相应的源码为:
bsp_key.h中内容
//条件编译,防止重复定义头文件(stm32f10x.h在这里引入,但是在主函数中仍然引入,会被加载两次,若没有添加编译会报错.)
#ifndef BSP_KEY_H_
#define BSP_KEY_H_ #include "stm32f10x.h" #define KEY_ON 1
#define KEY_OFF 0 #define KEY_LED_GPIO_PIN GPIO_Pin_13
#define KEY_LED_GPIO_PORT GPIOC
#define KEY_LED_GPIOC_CLOCK RCC_APB2Periph_GPIOC void KEY_LED_Config(void);
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin); #endif
bsp_key.c中内容
//只需要包含自身的头文件即可
#include "bsp_key.h"
//配置按键的GPIOC,配置完成后通过检测GPIOC的pin13引脚(对应的寄存器为GPIOC-IDR-PIN13)的高低电平 判断键是否被按下,高--按下,低--未按下
void KEY_LED_Config(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(KEY_LED_GPIOC_CLOCK, ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin=KEY_LED_GPIO_PIN; GPIO_Init(KEY_LED_GPIO_PORT, &GPIO_InitStruct); }
//检测案件是否按下函数 GPIO_ReadInputDataBit 库函数中函数,含义为 检测某个GPIOX的某个pin的电平
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin){ /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin)==KEY_ON){ /*等待按键释放 */ while(GPIO_ReadInputDataBit( GPIOx, GPIO_Pin)==KEY_ON) ; return KEY_ON ; }else return KEY_OFF; }
main函数中内容
#include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>
#include "bsp_led.h"
#include "bsp_key.h" #define SOFT_DELAY Delay(0x0FFFFF);
//void Delay(__IO u32 nCount);
void Delay( uint32_t count){
for( ;count!=0;count--); } int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
LED_GPIO_Config();
//默认情况,灯为灭的.(LED电路图为低电平点亮,配置完成后默认为低电平,即便是不赋值也会亮起来)
LED_OFF;
KEY_LED_Config();
while(1){
if(Key_Scan(KEY_LED_GPIO_PORT,KEY_LED_GPIO_PIN)==KEY_ON){ LED_TOGGLE; //有按键按下,灯的亮灭翻转一次 } } }
GPIO输入—按键检测(开关控制小灯)的更多相关文章
- 第12章 GPIO输入—按键检测
第12章 GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- 第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列
第12章 GPIO输入—按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- Arduino 开关控制小灯持续亮之具体思路
Arduino 开关控制小灯持续亮之具体思路 为什么写这篇文章: 我们用开关控制灯的亮灭的时候,希望只需要按一下按键就可以做到灯一直亮着.而在<Arduino魔法书>中——有弹性的按键这一 ...
- 第13章 GPIO输入—按键检测
本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘 ...
- GPIO 输入—按键检测
这里要用到一定的模电知识.电容两端电压不能突变,电感两端电流不能突变.这里利用了电容的放电延时实现硬件消抖.按键按下会有抖动,波形有毛刺,使得高低电平显现不明显,而按键按下时,电容放电一下,马上又被充 ...
- 硬件——nrf51822第三篇,按键控制小灯
现象是按键按下,小灯亮,按键抬起,小灯灭. 从这一节我们细致剖析gpio口的设置: nrf51822片上一共有32个数字引脚,分为4个port,如下: port 0 pin 0-7 port 1 pi ...
- 5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8759294.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8 ...
- STM32嵌入式开发学习笔记(三):使用按键控制小灯
按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作. 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入 ...
- (三)开关检测来控制LED灯的亮灭
开关检测案例一: 具体电路图如下: K1--K4闭合,控制 D1—D4 亮灭 产生的问题: 1.关于 R8 R9 R7 R10 的阻值选择问题,倘若太大的话, 比如10K 不管开关断开还是闭合,好像 ...
随机推荐
- docker笔记--如何批量删掉已经停止的容器
(以下操作都是在root用户) 方法如下: (1)显示所有容器,过滤出状态为Exited的容器id,然后删除. # for i in `docker ps -a |grep Exited |awk ...
- Eclipse中Git的操作
一.工程初始化为本地库 工程→右键→Team→Share Project→Git 点击Finish即可 二.Eclipse 中忽略不必追踪控制的文件 列如: .classpath 文件 .projec ...
- 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
小李的Build之路(上) 转自: 刘欣 码农翻身 2016-07-10 摘要:手工Build的烦恼要不是为了和女朋友留在一个城市,小李肯定去北上广奋斗去了.现在他只能留在这个2.5线城市,进入这家软 ...
- Kafka、RabbitMQ、RocketMQ、ActiveMQ消息中间件的对比--多年生产经验实践总结
引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...
- 【JavaScript】使用定时器实现Js的延期执行或重复执行setTimeout,setInterval
使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInterval.其中前者可 ...
- 32Flutter仿京东商城项目 用户中心页面布局
import 'package:flutter/material.dart'; import 'package:flutter_jdshop/services/ScreenAdapter.dart'; ...
- Javascript——概述 && 继承 && 复用 && 私有成员 && 构造函数
原文链接:A re-introduction to JavaScript (JS tutorial) Why a re-introduction? Because JavaScript is noto ...
- PAT 甲级 1061 Dating (20 分)(位置也要相同,题目看不懂)
1061 Dating (20 分) Sherlock Holmes received a note with some strange strings: Let's date! 3485djDk ...
- SM30维护视图屏蔽按钮
标准维护视图 GUI状态 ESLG 编辑按钮 AEND 达到效果 DATA: l_act TYPE char1, l_name TYPE dd02v-tabname. DATA: lt_vimex ...
- 过滤emoji表情的方法
public static function replaceEmoji($str) { $str = preg_replace_callback( '/./u', function (array $m ...