基于STM32F401RET6智能锁项目(使用库函数点灯、按键)

news2024/11/18 23:25:42

点灯硬件原理图

1、首先,我们查看一下原理图,找到相对应的GPIO口

LED_R低电平导通,LED4亮,所以LED_R的GPIO口需要配置一个低电平才能亮;

LED_G低电平导通,LED3亮,所以LED_R的GPIO口需要配置一个低电平才能亮;

点灯代码实现部分

#include "led.h"
#include "delay.h"


int main(void)
{
	Led_Config();//LED初始化
	while(1)
	{	
		led3_on();
		Delay_ms(1000);
		led3_off();
		Delay_ms(1000);
	}
}
#include "led.h"

/*
函数功能:LED初始化
			1、打开GPIOB时钟
			2、LED4 PB8  LED_R-----  通用推挽模式   
				 LED3 PB9 --LED_G -----  通用推挽模式
*/

void Led_Config(void)
{
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//打开GPIOB的时钟
	GPIO_InitTypeDef GPIO_InitStruct;//声明结构体变量
	//初始化PB8和PB9
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//通用输出
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;//第八号管脚
	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;//速度50Mhz
	
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	GPIO_SetBits(GPIOB, GPIO_Pin_8);//灭
	GPIO_SetBits(GPIOB, GPIO_Pin_9);//灭
	
}

void led3_on(void)   
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_9);//亮
}

void led3_off(void)   
{
	GPIO_SetBits(GPIOB, GPIO_Pin_9);//灭
}

void led4_on(void)   
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_8);//亮
}

void led4_off(void)   
{
	GPIO_SetBits(GPIOB, GPIO_Pin_8);//灭
}



#ifndef _LED_H_
#define _LED_H_

#include "stm32f4xx.h"

void Led_Config(void);
void led3_on(void);
void led3_off(void);
void led4_on(void);
void led4_off(void);


#endif

按键硬件电路

KEY1按下是高电平,未按下是低电平。

KEY2按下是低电平,未按下是高电平。

按键代码实现部分

实现现象:key1控制LED3的亮灭、key2控制LED4的亮灭。

#include "key.h"
#include "delay.h"
#include "led.h"



/*
key1   PA0
key2   PC13
*/
void key_config(void)
{
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC,ENABLE); //开启GPIOA的时钟
	GPIO_InitTypeDef GPIO_InitStruct = {0};//声明结构体变量
	
	//给结构体赋值
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;  //输入模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;  //PA0引脚
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;  //浮空模式
	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;

	GPIO_Init(GPIOA,&GPIO_InitStruct);  //写入结构体
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_Init(GPIOC,&GPIO_InitStruct);  //写入结构体
}

/*
0 	没有按键按下
1		key1按下
2		key2按下
*/

uint8_t key_scan(void)
{
	uint8_t key_state = 0;
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1)		
	{
		Delay_ms(10);
		if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1)
		{
			while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1)
			{
				//按键1按下
			}
			key_state = 1;
		}
	}
	
	else if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0)		
	{
		Delay_ms(10);
		if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0)
			{
				//按键2按下
			}
			key_state = 2;
		}
	}
	
	return key_state;
}


//按键处理函数
void KEY_Handle(void)
{
	uint8_t Key_State=0;
	Key_State = key_scan();
	switch(Key_State)
	{
		case 0:  //没有按键按下
			break;
		case 1:  //按键1按下
			led3_T();
			break;	
		case 2:  //按键2按下
			led4_T();
			break;
		case 3:  //按键3按下
				
			break;	
		case 4:  //按键4按下
				
			break;	
		default:
			break;
	}
}



#ifndef _KEY_H_
#define _KEY_H_

#include "stm32f4xx.h"                  // Device header
void key_config(void);
uint8_t key_scan(void);
void KEY_Handle(void);


#endif
#include "led.h"
#include "delay.h"
#include "key.h"

int main(void)
{
	Led_Config();//LED初始化
	key_config();
	while(1)
	{	
		KEY_Handle();
	}
}

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

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

相关文章

[ES] ElasticSearch节点加入集群失败经历分析主节点选举、ES网络配置 [publish_address不是当前机器ip]

背景 三台CentOS 7.6.1虚拟机, 每台虚拟机上启动一个ElasticSearch 7.17.3(下面简称ES)实例 即每台虚拟机上一个ES进程(每台虚拟机上一个ES节点) 情况是: 之前集群是搭建成功的, 但是今天有一个节点一…

Dual Aggregation Transformer for Image Super-Resolution论文总结

题目:Dual Aggregation Transformer(双聚合Transformer) for Image Super-Resolution(图像超分辨) 论文(ICCV):Chen_Dual_Aggregation_Transformer_for_Image_Super-Resolution_ICCV…

「TypeScript」TypeScript入门练手题

前言 TypeScript 越来越火&#xff0c;现在很多前端团队都使用它&#xff0c;因此咱们前端码农要想胜任以后的前端工作&#xff0c;就要更加熟悉它。 入门练手题 interface A {x: number;y: number; }type T Partial<A>;const a: T { x: 0, y: 0 }; const b: T { …

Java集合框架之LinkedHashSet详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

uniapp、web网页跨站数据交互及通讯

来来来&#xff0c;说说你的创作灵感&#xff01;这就跟吃饭睡觉一样&#xff0c;饿了就找吃的&#xff0c;渴了就倒水张口灌。 最近一个多月实在是忙的没再更新日志&#xff0c;好多粉丝私信说之前的创作于他们而言非常有用&#xff01;受益菲浅&#xff0c;这里非常感谢粉丝…

分布式与集群的区别

先说区别&#xff1a; 分布式是并联工作的&#xff0c;集群是串联工作的。 分布式中的每一个节点都可以做集群。而集群并不一定就是分布式的。 集群举例&#xff1a;比如新浪网&#xff0c;访问的人很多&#xff0c;他可以做一个集群&#xff0c;前面放一个相应的服务器&…

MySQL变量的四则运算以及取模运算

1、定义多个变量在一条语句中&#xff0c;需要使用,作为分隔符 除法默认保留4位有效数字 2、浮点数运算&#xff1a; 除法默认保留4位有效数字

《这就是ChatGPT》读书笔记

书名&#xff1a;这就是ChatGPT 作者&#xff1a;[美] 斯蒂芬沃尔弗拉姆&#xff08;Stephen Wolfram&#xff09; ChatGPT在做什么&#xff1f; ChatGPT可以生成类似于人类书写的文本&#xff0c;它基本任务是弄清楚如何针对它得到的任何文本产生“合理的延续”。当ChatGPT写…

2024 年最新使用 ntwork 框架搭建企业微信机器人详细教程

NTWORK 概述 基于 PC 企业微信的 api 接口&#xff0c;支持收发文本、群、名片、图片、文件、视频、链接卡片等。 下载安装 ntwork pip install ntwork国内源安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ntwork企业微信版本下载 官方下载&#xff1a;h…

无列名注入

在进行sql注入时&#xff0c;一般都是使用 information_schema 库来获取表名与列名&#xff0c;因此有一种场景是传入参数时会将 information_schema 过滤 在这种情况下&#xff0c;由于 information_schema 无法使用&#xff0c;我们无法获取表名与列名。 表名获取方式 Inn…

使用chatglm3本地部署形成的api给上一篇得到的网页信息text_content做内容提取

使用chatglm3本地部署形成的api给上一篇得到的网页信息text_content做内容提取&#xff0c; chatglm3的api调用见&#xff1a;chatglm3的api调用_启动chatglm3的api服务报错-CSDN博客 import os from openai import OpenAIbase_url "http://localhost:5000/v1/" c…

书生作业:XTuner

作业链接&#xff1a; https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md xtuner: https://github.com/InternLM/xtuner 环境配置 首先&#xff0c;按照xtuner的指令依次完成conda环境安装&#xff0c;以及xtuner库的安装。 然后&#xff0c;我们开始尝试…

基于Vant UI的微信小程序开发(随时更新的写手)

基于Vant UI的微信小程序开发✨ &#xff08;一&#xff09;悬浮浮动1、效果图&#xff1a;只要无脑引用样式就可以了2、页面代码3、js代码4、样式代码 &#xff08;二&#xff09;底部跳转1、效果图&#xff1a;点击我要发布跳转到发布的页面2、js代码3、页面代码4、app.json代…

STM32CubeMX软件使用(超详细)

1、Cube启动页介绍 2、芯片选择页面介绍 3、输入自己的芯片型号&#xff0c;这里以STM32U575RIT6举例 4、芯片配置页码介绍 5、芯片外设配置栏详细说明 6、点击ClockConfiguration进行时钟树的配置&#xff0c;选择时钟树后可以选择自己想使用的时钟源&#xff0c;也可以直接输…

LeetCode题练习与总结:反转链表Ⅱ--92

一、题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#…

e 值的故事:从复利到自然增长的数学之旅

自然对数函数的底数 e&#xff08;也称为自然常数或欧拉数&#xff09;与 π 一样&#xff0c;是数学中最伟大的常数之一。它大约为 2.718281828&#xff0c;是一个无理数&#xff0c;意味着它的小数部分无限且不重复。 与 π 和 √2 这些由几何发现而来的常数不同&#xff0c…

【高阶数据结构】图 -- 详解

一、图的基本概念 图 是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E)。其中&#xff1a; 顶点集合 V {x | x属于某个数据对象集} 是有穷非空集合&#xff1b; E {(x,y) | x,y属于V} 或者 E {<x, y> | x,y属于V && Path(x, y…

解决常见的Android问题

常见问题&#xff1a; 1、查杀&#xff1a; 查杀一般分为两个方向一种是内存不足的查杀&#xff0c;一种的是因为温度限频查杀&#xff0c;统称为内存查杀&#xff0c;两个问题的分析思路不同 1、内存不足查杀&#xff1a; 主要是因为当用户出现后台运行多个APP或者是相机等…

LeetCode96:不同的二叉搜索树

题目描述 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 代码 /*dp[i]&#xff1a;表示i个节点有dp[i]个不同的二搜索叉树递推公式&#xff1a;dp[i] dp[j-1] * dp[i-j], j…

【JavaSE】/*运算符—快速总结*/

目录 前言 一、什么是运算符 二、算术运算符 三、增量运算符 四、自增/自减运算符 五、关系运算符 六、逻辑运算符 七、位运算符 八、移位运算符 九、条件运算符 十、运算符的优先级 前言 Java 中的运算符和 C语言 的运算符规则有很多类型的地方&#xff0c;我们只…