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

点灯硬件原理图

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和PB9GPIO_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;//速度50MhzGPIO_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.hqwc.cn/news/687475.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防爆气象仪

TH-WFB5矿山作为一个特殊的工作环境,其安全生产一直是重中之重。而矿山环境中的气象变化,如温度、湿度、风速、风向等,不仅直接影响矿山的日常生产活动,还关系到矿工的生命安全。因此,防爆气象仪的应用显得尤为重要。 …

陪玩系统APP小程序H5音视频社交系统陪玩系统源码,陪玩app源码,陪玩源码搭建陪玩社交系统开发(现成,可定制)线下陪玩系统项目开发搭建

线下陪玩系统项目的设计 在需求分析完成后,接下来进行系统设计。系统设计主要包括以下几个部分: 1. 数据库设计:根据需求分析的结果,设计数据库结构,包括用户信息表、服务信息表、订单信息表等。 2. 界面设计&#…

激光雷达:盲人世界的导航灯塔

在科技日新月异的今天,一项名为“蝙蝠避障”的创新成果,正悄然改变着盲人朋友的日常生活,特别是在出行这一领域,它的应用如同一束光,照亮了前行的道路。本文将深入探讨激光雷达技术对盲人的帮助,揭示这项高…

虚拟化技术 分离虚拟机数据流量与ESXi的流量管理

一、实验内容 为ESXi主机添加网卡通过vClient查看已添加的网卡信息为ESXi添加网络,创建标准交换机修改网络配置,实现虚拟机数据流量与ESXi的管理流量分离 二、实验主要仪器设备及材料 安装有64位Windows操作系统的台式电脑或笔记本电脑,建…

探索震坤行API:一键解锁高效工业用品采购新纪元!

震坤行是一家专注于工业用品的B2B电商平台,为企业客户提供一站式的工业用品采购服务。虽然震坤行没有直接公开通用的API接口供开发者调用,但通常大型企业或合作伙伴之间可以通过API进行系统集成和数据交互。以下是一个假设性的震坤行API接口调用示例与代…

如何使用 ERNIE 千帆大模型基于 Flask 搭建智能英语能力评测对话网页机器人(详细教程)

ERNIE 千帆大模型 ERNIE-3.5是一款基于深度学习技术构建的高效语言模型,其强大的综合能力使其在中文应用方面表现出色。相较于其他模型,如微软的ChatGPT,ERNIE-3.5不仅综合能力更强,而且在训练与推理效率上也更高。这使得ERNIE-3…

VBA在Excel中登录页面的应用—动态密码设置

https://mp.weixin.qq.com/s?__biz=MzkwMzY1OTIzOA==&mid=2247484420&idx=1&sn=5f98ef156cd6a784f0b1e64eed11ee42&chksm=c093af8df7e4269bdda3ed4adc37ce5f30707760ad42a2e0c6c3278ff0a0c5fcaf890016f9b5&token=1012529499&lang=zh_CN#rd 文章目录 …

Yolov8目标检测——在Android上部署Yolov8 tflite模型

1. 简介 YOLOv8 是一种用于目标检测的深度学习模型,它是 YOLO(You Only Look Once)系列的最新版本之一。YOLO 系列因其高效和准确性而在计算机视觉领域非常受欢迎,特别是在需要实时目标检测的应用中,如视频监控、自动…

C++ BuilderXE 计算程序运行时间精确到毫秒

#include <time.h> // //计算时间 clock_t start,end,dtStart; startclock(); // ProgressBar1->Percent0; // // ProgressBar1->Percenti/DDnum*100; // Application->ProcessMessages(); // //操作完成计时 …

视频批量剪辑高效掌握,轻松驾驭视频制作,播放速度与帧数尽在掌控

在追求速度与激情的视频制作世界里&#xff0c;你是否曾渴望拥有一款能够轻松调整播放速度和秒数的神器&#xff1f;现在&#xff0c;这款神器已经来到了你的身边&#xff0c;让你在视频制作的道路上更加得心应手&#xff0c;效率倍增&#xff01; 首先&#xff0c;我们要进入媒…

【网络安全】一次sql注入问题的处理

目录 问题 10.60.100.194&#xff0c;修改之前 修改方案 问题解决 测试过程 问题思考与总结 问题 一次sql注入问题的筛查报告&#xff0c;主要是sql注入的问题资源-CSDN文库 doc-new\20-设计文档\34-Mesh设备管理\100-网络安全 10.60.100.194&#xff0c;修改之前 修改…

项目经理有哪些常见的沟通技巧?

项目经理有哪些常见的沟通技巧&#xff1f; 项目管理的核心之一是沟通。有效的沟通技巧对于确保项目团队成员之间的合作、项目信息的准确传达以及项目目标的顺利实现至关重要。一个号的项目管理工具可以让我们事半功倍&#xff0c;结合项目管理工具zz-plan 来探讨一些项目经理…