Stm32_标准库_呼吸灯_按键控制

news2024/11/25 2:20:07

Stm32按键和输出差不多

PA1为LED供给正电,PB5放置按键,按键一端接PB5,另一端接负极

void Key_Init(void){
	   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //APB2总线连接着GPIOB
	   GPIO_InitStructur.GPIO_Mode = GPIO_Mode_IPU;
	   GPIO_InitStructur.GPIO_Pin = GPIO_Pin_5;
	   GPIO_InitStructur.GPIO_Speed = GPIO_Speed_50MHz;
	   GPIO_Init(GPIOB, &GPIO_InitStructur);//写入
}

初始化为上拉输入输入HZ不用管,GPIOA和GPIOB都连接在APB2总线上,开启对应时钟才能进一步使用

这里初始化PB5为输入,PB3不知道啥原因不能作为输入端口

读输入值

GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5)

这个函数返回的是一个uint8_t范围为[0 ~ 255),一般用它装小范围的int类型数据

在这里插入图片描述

按键扫描代码

uint8_t check(void){
	  uint8_t keynum = 0;//初始化0
	  if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == 0){
			 Delay_ms(10);//消抖
			 while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == 0);//等待松按键
			 keynum = 1;
		}
		return keynum;//记得返回值
}

完整代码

#include "stm32f10x.h"    // Device header
#include "Delay.h"

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructuer;//结构体
GPIO_InitTypeDef GPIO_InitStructur;//定义变量结构体



void GPIOA_Init(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	GPIO_InitStructur.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructur.GPIO_Pin = GPIO_Pin_0;		//GPIO_Pin_15;
	GPIO_InitStructur.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructur);
}



void PWM_Init(void){ //pwm波形配置
	   TIM_OCStructInit(&TIM_OCInitStructuer);//给不需要配置的结构体成员赋予初始值
	   TIM_OCInitStructuer.TIM_OCMode = TIM_OCMode_PWM1; //输出比较模式
	   TIM_OCInitStructuer.TIM_OCPolarity = TIM_OCPolarity_High; //极性
	   TIM_OCInitStructuer.TIM_OutputState = TIM_OutputState_Enable; //输出使能
	   TIM_OCInitStructuer.TIM_Pulse = 0; //CCR,频率1kHZ,占空比50%的PWM波形
	   TIM_OC1Init(TIM2, &TIM_OCInitStructuer);//配置GPIOA端口通道
}

/*定时器定时中断代码*/

void Timer_Init(void)//使用TM2定时器
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	
	GPIOA_Init();
	
	TIM_InternalClockConfig(TIM2);
	
	 
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	
	PWM_Init();
	 
	
	TIM_Cmd(TIM2, ENABLE);//启动定时器
}

/*CCR控制灯的亮度在运行过程中不断更改CCR的值来达到呼吸效果*/ //CCR[0~100]值越大灯越亮



void PWM_setcompare1(uint16_t compare){
	   TIM_SetCompare1(TIM2, compare);
}

uint8_t i;
uint8_t j;

void Led_light(void){
	  
   for(j = 0; j < 3; j ++){     	
	   for(i = 0; i <= 100; i ++){
			   PWM_setcompare1(i);
			   Delay_ms(8);
		 }
		 for(i = 0; i <= 100; i ++){
			   PWM_setcompare1(100 - i);
			   Delay_ms(8);
		 }
	}
		 
}

void Key_Init(void){
	   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //APB2总线连接着GPIOB
	   GPIO_InitStructur.GPIO_Mode = GPIO_Mode_IPU;
	   GPIO_InitStructur.GPIO_Pin = GPIO_Pin_5;
	   GPIO_InitStructur.GPIO_Speed = GPIO_Speed_50MHz;
	   GPIO_Init(GPIOB, &GPIO_InitStructur);//写入
}

uint8_t check(void){
	  uint8_t keynum = 0;//初始化0
	  if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == 0){
			 Delay_ms(10);//消抖
			 while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == 0);//等待松按键
			 keynum = 1;
		}
		return keynum;//记得返回值
}
 
	
int main(void){
	Timer_Init();
  Key_Init();
	while(1){
       if(check() == 1){
			    Led_light();
			 }
	}
}

效果:按一下按键松开,Led呼吸三次

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

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

相关文章

@vitejs/plugin-legacy 为你的 Vite 项目提供对旧版浏览器的支持

vitejs/plugin-legacy 是 Vite 生态系统中的一个插件&#xff0c;它的作用是为你的 Vite 项目提供对旧版浏览器的支持。 具体而言&#xff0c;该插件会根据你在项目配置中指定的目标浏览器列表&#xff08;通过 browserslist 字段&#xff09;&#xff0c;自动生成兼容旧版浏览…

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…

面试题08.05.递归算法

递归乘法。 写一个递归函数&#xff0c;不使用 * 运算符&#xff0c; 实现两个正整数的相乘。可以使用加号、减号、位移&#xff0c;但要吝啬一些。 示例1: 输入&#xff1a;A 1, B 10输出&#xff1a;10示例2: 输入&#xff1a;A 3, B 4输出&#xff1a;12提示: 保证乘法…

nodejs+vue 大学生就业管理系统

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;学生就业管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而…

从MVC到DDD,该如何下手重构?

作者&#xff1a;付政委 博客&#xff1a;bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。多年的 DDD 应用&#xff0c;使我开了技术的眼界&#xff01; MVC 旧工程腐化严重&#xff0c;…

云HIS 医院综合运营管理系统源码

医院管理信息系统&#xff08;HIS&#xff09;是医院基本、重要的管理系统&#xff0c;是医院大数据的基础。 基于云计算的云医疗信息系统&#xff08;云HIS&#xff09;。以SaaS的方式提供服务&#xff0c;系统遵循服务化、模块化原则开发&#xff0c;具有强大的可扩展性&…

vue实现移动端悬浮可拖拽按钮

需求&#xff1a; 按钮在页面侧边悬浮显示&#xff1b;点击按钮可展开多个快捷方式按钮&#xff0c;从下向上展开。长按按钮&#xff0c;则允许拖拽来改变按钮位置&#xff0c;按钮为非展开状态&#xff1b;按钮移动结束&#xff0c;手指松开&#xff0c;计算距离左右两侧距离…

喜迎中秋国庆双节,华为云Astro Canvas之我的中秋节设计大屏

目录 前言 前提条件 作品展示 薅羊毛 前言 大屏应用华为云Astro Canvas是华为云低代码平台Astro的子服务之一&#xff0c;是以数据可视化为核心&#xff0c;以屏幕轻松编排&#xff0c;多屏适配可视为基础&#xff0c;用户可通过图形化界面轻松搭建专业水准的数据可视化大屏…

面试:Spring中单例模式用的是哪种?

你好&#xff0c;我是田哥 需要简历优化、模拟面试、面试辅导、技术辅导......请联系我。10年码农24小时在线为你服务。 面试中被问到设计模式的概率还是蛮高的&#xff0c;尤其是问&#xff1a;你在项目中用过设计模式吗&#xff1f; 面对这个问题&#xff0c;我也在做模拟面试…

使用香橙派 在Linux环境中安装并学习Python

前言 在实际项目中&#xff0c;经常会遇到需要使用人工智能的场景&#xff0c;如人脸识别&#xff0c;车牌识别等...其一般的流程就是由单片机采集数据发送给提供人工智能算法模型的公司&#xff08;百度云&#xff0c;阿里云...&#xff09;&#xff0c;然后人工智能将结果回…

使用 Python 函数callable和isinstance的意义

一、说明 在这篇博客中&#xff0c;我们将探讨两个python函数&#xff1a;1 callable 中的函数及其有趣的应用程序。该callable函数用于检查对象是否可调用&#xff0c;这意味着它可以作为函数调用。2 isinstance这个内置函数允许我们比较两种不同的数据类型并确定它们是否相…

rancher部署pv、pvc、离线部署nfs

&#xff08;1&#xff09;NFS离线安装 使用nfs配置两台机器共享目录 假设两台机器188.188.30.32&#xff08;服务端&#xff09;、188.188.30.31&#xff08;客户端&#xff09;配置nfs 1.在可以联网的机器上下载rpm安装包 yum -y install nfs-utils --downloadonly --dow…

ETF场内基金佣金最低可达万0.5!速速办理

2023年ETF基金开户&#xff0c;交易手续费佣金一般默认是万三左右的&#xff0c;最低是5元起。想要申请低佣金是可以通过线上客户经理办理的&#xff0c;客户经理手中一般都是有低佣金开户渠道的&#xff0c;账户开通后还可以给您提供VIP专属服务&#xff0c;十几分钟就可以办理…

NPU上PyTorch模型训练问题案例

在昇腾AI处理器上训练PyTorch框架模型时&#xff0c;可能由于环境变量设置问题、训练脚本代码问题&#xff0c;导致打印出的堆栈报错与实际错误并不一致、脚本运行异常等问题&#xff0c;那么本期就分享几个关于PyTorch模型训练问题的典型案例&#xff0c;并给出原因分析及解决…

动态照片怎么制作?教你如何制作gif动图

Gif动图想必大家都不陌生吧&#xff01;那么&#xff0c;这种gif格式的动图要怎么操作呢&#xff1f;很简单通过使用gif动态图片制作&#xff08;https://www.gif.cn/&#xff09;工具-GIF中文网&#xff0c;只需上传jpg、png格式的两张以上图片无需下载软件&#xff0c;手机、…

为什么说网络安全是IT行业最后的红利?是风口行业?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万…

uniapp ui安装 阿里图标库使用 报错 Assignment to constant variable.

安装 ui uni-app官网 (dcloud.net.cn) &#xff08;一&#xff09;安装 pages.js配置 安装 sassnpm i sass -D 或 yarn add sass -D 安装 sass-loader npm i sass-loader10.1.1 -D 或 yarn add sass-loader10.1.1 -D安装 uni-uinpm i dcloudio/uni-ui 或 yarn a…

VMware:一个多云+AI的未来

“以往在应用人工智能时&#xff0c;首先你需要一个基础算法模型&#xff0c;然后使用特定的数据进行处理&#xff0c;最后再将其加人到应用程序上…… 但是很显然&#xff0c;这里的每一步骤都涉及到法律和隐私问题&#xff1a;算法模型的知识产权、私人数据的法律风险&#x…

计算机竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…

解决VUE报错GET http://127.0.0.1:5500/favicon.ico 404 (Not Found)

当我们启动VUE项目的时候控制台会报错错误GET http://127.0.0.1:5500/favicon.ico 404 (Not Found) 原因就是项目下的 favicon.ico 找不见&#xff0c;缺少一个页签图标 解决方法&#xff1a; 在根目录下放置一张图片&#xff0c;重命名为favicon.ico 这个时候选中的图片就会…