当前位置: 首页 > news >正文

基于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.lryc.cn/news/348795.html

相关文章:

  • 网络层协议之 IP 协议
  • SpringBoot 实现对提供的接口进行 AES (加密,解密)
  • ASP.NET学生成绩管理系统
  • 谁考了第k名C++
  • 多线服务器的优势有哪些?
  • vue + element-plus 开发中遇到的问题
  • 使用java远程提交flink任务到yarn集群
  • 麻了!新增4.1分,CCF-C类,2区毕业神刊,被标记On Hold!
  • tomcat 的启动流程
  • YOLOv9全网最新改进系列::YOLOv9完美融合双卷积核(DualConv)来构建轻量级深度神经网络,目标检测模型有效涨点神器!!!
  • PCIE协议-2-事务层规范-MEM/IO/CFG request rules
  • jmeter分布式集群压测
  • 美国加州正测试ChatGPT等生成式AI,在4大部门应用
  • 【Kali Linux工具篇】wpscan的基本介绍与使用
  • C#算法之计数排序
  • EasyExcel简单使用
  • Notes客户端中的漫游功能
  • 为什么要内存对齐?
  • 23、Flink 的 Savepoints 详解
  • 【Unity】Unity项目转抖音小游戏(二)云数据库和云函数
  • SpringBoot集成jasypt对yml文件指定参数加密并自定义@bean隐藏密钥
  • GDB的使用
  • Linux处理用户输入
  • 【代码笔记】高并发场景下问题解决思路
  • 【Docker系列】Linux部署Docker Compose
  • 基于SSM的文化遗产的保护与旅游开发系统(有报告)。Javaee项目。ssm项目。
  • 整合springboot-mybatis时,MySQL数据库无法连接问题
  • C语言循环队列
  • Docker运行出现iptables: No chain/target/match by that name报错如何解决?
  • 力扣 122. 买卖股票的最佳时机 II python AC