按键控制LED灯亮灭

news2024/12/29 9:57:50

按键原理图:按键选用PE4

 创建两个文件一个.c文件一个.h文件来写按键的代码

.c文件

#include "Key.h"


void Key_Init(void)
{

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
	
	GPIO_InitTypeDef  GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;   //上拉输入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE,&GPIO_InitStruct);  //初始化PE端口
	
}


uint8_t key_scan(void)
{
	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == KEY_ON)  //判断按键的按下
	{
		while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == KEY_ON);  //确认按键的按下
		
		return KEY_ON;   //返回1
	}
	else
	{
		return KEY_OFF;  //返回0
	}

}

.h文件

#ifndef __KEY_H
#define __KEY_H

#include "stm32f10x.h"                  // Device header

#define KEY_ON  1    //宏定义
#define KEY_OFF 0

uint8_t key_scan(void);
void Key_Init(void);

#endif

LED灯原理图: 选用PE5

 

创建两个文件一个.c文件一个.h文件来写LED灯的代码

.c文件

#include "Led.h"


void LED_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);  //开启时钟
	
	GPIO_InitTypeDef  GPIO_InitStruct;				//定义GPIO结构体
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; 			//选用引脚5
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOE,&GPIO_InitStruct);
	
	GPIO_SetBits(GPIOE,GPIO_Pin_5);   //上电默认熄灭
	
}


void LED_ON()
{
	
	GPIO_ResetBits(GPIOE,GPIO_Pin_5);   //灯亮
}

void LED_OFF()
{
	
	GPIO_SetBits(GPIOE,GPIO_Pin_5);     //灯灭
}

 .h文件

#ifndef __LED_H
#define __LED_H

#include "stm32f10x.h"     // Device header


void LED_Init(void);
void LED_ON(void);
void LED_OFF(void);


#define LED1_TOGGLE		{GPIOE->ODR ^=GPIO_Pin_5;} //绿灯状态翻转    异或操作


#endif

main函数

#include "stm32f10x.h"                  // Device header
#include "Key.h"
#include "Led.h"

int main(void)
{
	
	LED_Init();
	Key_Init();
	
	while(1)
	{
		if(key_scan() == KEY_ON)  //获取按键返回值
		{
			LED1_TOGGLE;   //LED灯翻转
		}	
	}

}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python astra相机驱动问题

报错问题: openni.utils.OpenNIError: (OniStatus.ONI_STATUS_ERROR, bDeviceOpen using default: no devices found, None) 解决办法: 1、从sdk中拷贝文件 2、修改openni源码 3、执行测试程序 from openni import openni2 import numpy as np impor…

基于驾驶训练优化的BP神经网络(分类应用) - 附代码

基于驾驶训练优化的BP神经网络(分类应用) - 附代码 文章目录 基于驾驶训练优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.驾驶训练优化BP神经网络3.1 BP神经网络参数设置3.2 驾驶训练算法应用 4.测试结果…

【C/C++笔试练习】初始化列表、构造函数、析构函数、两种排序方法、求最小公倍数

文章目录 C/C笔试练习1. 初始化列表(1)只能在列表初始化的变量 2.构造函数(2)函数体赋值(3)构造函数的概念(4)构造函数调用次数(5)构造函数调用次数&#xff…

自然语言处理---RNN经典案例之使用seq2seq实现英译法

1 seq2seq介绍 1.1 seq2seq模型架构 seq2seq模型架构分析: seq2seq模型架构,包括两部分分别是encoder(编码器)和decoder(解码器),编码器和解码器的内部实现都使用了GRU模型,这里它要完成的是一个中文到英文的翻译:欢迎…

数据库MongoDB

MongoDB记录是一个文档,由一个字段和值对组成的数据结构,文档类似于JSON对象。 一个文档认为就是一个对象,字段的数据类型是字符型,值除了使用基本类型外,还可以包括其他文档,普通数组和文档数组。 一、…

Python —— UI自动化之使用JavaScript进行元素点亮、修改、点击元素

1、JavaScript点亮元素 在控制台通过JavaScript语言中对元素点亮效果如下: 将这个语句和UI自动化结合,代码如下: locator (By.ID,"kw") # 是元组类型 web_element WebDriverWait(driver,5,0.5).until(EC.visibility_of_eleme…

Windows安装virtualenv虚拟环境

需要先安装好python环境 1 创建虚拟环境目录 还是在D:\Program\ 的文件夹新建 .env 目录(你也可以不叫这个名字,一般命名为 .env 或者 .virtualenv ,你也可以在其他目录中创建) 2 配置虚拟环境目录的环境变量 3 安装虚拟环境 进…

网络原理之UDP协议

文章目录 前言应用层协议常见的几种数据格式1. xml2. JSON3. protobuffer 端口号传输层UDP 报文协议格式源端口号和目的端口号UDP 长度校验和 前言 前面我们学习了如何使用 UDP 数据报 和 TCP 流实现网络编程一个回显服务器,在知道了 UDP 和 TCP 协议的基本原理之后…

Arduino驱动BMA220三轴加速度传感器(惯性测量传感器篇)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 BMA220的三轴加速度计是一款具有I2C接口的超小型三轴低g加速度传感器断路器,面向低功耗消费市场应用。它可以测量3个垂直轴的加速度,从而在手机、手持设备、计算机外围设备、人机界面、虚拟现实功能和游戏控制器中感知倾斜、…

MYSQL第五章节有关约束操作详解(附代码,例题详解)这一篇就够了

c知识点合集已经完成欢迎前往主页查看,点点赞点点关注不迷路哦 点我进入c第一章知识点合集 MYSQL第一章节DDL数据定义语言的操作----点我进入 MYSQL第二章节DDL-数据库操作语言 DQL-数据查询语言----点我进入 MYSQL第三章节DCL-管理用户,控制权限----点我…

【Lua语法】字符串

Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符,但是可以通过创建一个新字符串的方式来达到修改的目的 print(add2(1 , 2 ,15,3))a "no one"b string.gsub(a , "no" , "on1111")print(a) print…

英语——名言篇——成语

爱屋及乌 Love me, love my dog.百闻不如一见 (眼见为实 ) Seeing is believing.比上不足比下有余 worse off than some, better off than many; to fall short of the best, but be better than the worst.笨鸟先飞 A slow sparrow should make an early start.不眠之夜 white…

VSCode C/C++ 分目录+多文件编译配置2

前言:介绍 task.json 和 launch.json 文件 task.json 和 launch.json 是用于配置 VS Code 编辑器中的任务 和 调试功能的两个重要文件。 task.json 文件用于配置任务,它定义了执行特定操作的任务,并提供了相应的命令和参数。以下是 task.js…

BERT理解

参数计算(沐神对于bert参数计算介绍)

【趣味随笔】移动机器人基础(导航方式、自主导航、硬件系统结构分布)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

动画制作软件 Animate 2024 mac中文版介绍说明(an2024) v24.0

Animate 2024 mac是一款动画制作软件,它能帮助用户轻松制作出各种精美的动画作品。 Animate 2024拥有强大而直观的设计工作流程,能够让用户自由地构建动画场景、绘制精美的图形,并轻松添加动态效果。无论是传统手绘风格还是骨骼动画&#xff…

电路综合原理与实践---单双端口理想微带线(伪)手算S参数与时域波形

电路综合原理与实践—单双端口理想微带线(伪)手算S参数与时域波形与时域波形 1、单理想微带线(UE)的S参数理论推导 参考:Design of Ultra Wideband Power Transfer Networks的第四章,之后总结推导过程 2…

华为eNSP配置专题-RIP路由协议的配置

文章目录 华为eNSP配置专题-RIP路由协议的配置0、概要介绍1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、终端构成和连接2.2、终端的基本配置 3、RIP路由的配置3.1、RIP路由的配置3.2、RIP路由的删除 华为eNSP配置专题-RIP路由协议的配置 0、概要介绍 路由信息…

2023年淘宝双十一预售红包入口介绍

2023年淘宝双十一预售红包入口介绍 近两年,淘宝双十一推出了预售玩法会场。在会场中,大家可以做预售任务,领取现金红包,让购物变得更省。那么,2023年淘宝双十一预售红包入口在哪里?下面小编就给大家介绍下&#xff0c…

SSM框架集成

文章目录 SSM1 介绍2 集成步骤目录结构配置 web.xml配置 jdbc.properties配置 SqlMapConfig.xml配置 applicationContext-dao.xml配置 applicationContext-service.xml配置 log4j.properties编写解决中文乱码的过滤器编写实体类编写 ItemsMapper 接口编写映射 ItemsMapper.xml编…