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

02 基于STM32的按键控制继电器驱动电机

 本专栏所有源资料都免费获取,没有任何隐形消费。

注意事项:STM32仿真会存在各种各样BUG,且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。

本文已经配置好STM32F103C8T6系列,在PROTUES仿真里,32单片机一般只用一种型号,如需其他型号,可改名。

本次功能实现基于STM32的按键控制继电器驱动电机转动,此为Proteus仿真演示:

基于STM32的按键控制继电器

LED灯与单片机相连:

如图所示,首先点击图左的led.c文件,然后可以看到图右的LED引脚配置。由图可知,可以配置单片机的PD2引脚为继电器引脚,如需更改引脚,可自行修改。

接着,点LED.h文件,可以看出给PD2引脚定义名称为fs,表示为风扇的意思,在仿真图中代表继电器的名称。

然后,点击key.c文件,可以看出按键引脚配置分别由PC5、PC6、PC7,本文采用PC5引脚连接一个按键。

点击key.h文件,可以看出本文给PC5引脚定义为KEY1,即可以调用KEY1为PC5按键。

在本次仿真中,选择PC5引脚连接按键,PD2引脚连接继电器驱动电机。

主函数代码配置:

#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"
#include "led.h"
#include "key.h"

u16 key;
u8 motor_flag=0;

void Check_serial_KEY(void);
void motor_switch(void);


int main(void)
 {	
 
	 LED_Init();		  	        //初始化与LED连接的硬件接口 包括电机
	 KEY_Init();          	//初始化与按键连接的硬件接口
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
   RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);	

	 while(1)
		{
			Check_serial_KEY();       //按键控制函数	
			motor_switch();				//电机控制函数
		}	 
 }


void Check_serial_KEY(void) //按键
{
	key=KEY_Scan(0);	  //0,不支持连续按;1,支持连续按;
	if(key)
	{						   
		switch(key)
		{				 
			case KEY1_PRES:	
				motor_flag++;
			  if(motor_flag>1)
				{
					motor_flag = 0;
				}
				break; 
			default:
				break;
		}
	}
	else delay_ms(10); 
}

void motor_switch(void) //电机控制函数
{
	if(motor_flag == 0)
	{
		fs = 1;
	}
	else{
		fs = 0;
	}
}


仿真示例资源、程序源码和软件安装包

基于PROTEUS8.15平台,KEIL5编写
链接:https://pan.baidu.com/s/17FmzUjtkCgGWSuB8Cef6Bw?pwd=795d 
提取码:795d 


http://www.kler.cn/news/309602.html

相关文章:

  • springboot luttuc redis 集成protobuf,手动序列化反序列化
  • C#使用Access数据库使用总结
  • LeetCode 面试经典 150 题回顾
  • 【C++】多态的认识和理解
  • 速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读
  • Leetcode 3291. Minimum Number of Valid Strings to Form Target I
  • 线性判别分析 (Linear Discriminant Analysis, LDA)
  • 【Unity学习心得】如何制作俯视角射击游戏
  • vue-router 在新的标签页打开链接/路由
  • 2024.9.11(k8s环境搭建)
  • 如何为 Java 应用程序创建安装程序
  • 《深度学习》【项目】 OpenCV 身份证号识别
  • PostgreSQL 的 logger 进程和 Oracle 的 diag 进程对比
  • SDKMAN!软件开发工具包管理器
  • 基于Spark框架实现XGBoost模型
  • ThinkPHP3改造自定义日志输出
  • setup函数子传父普通写法
  • 一般在写SQL时需要注意哪些问题,可以提高查询的效率?
  • adb install失败: INSTALL_PARSE_FAILED_NO_CERTIFICATES
  • JavaScript高级——闭包应用-自定义js模块
  • 『功能项目』窗口可拖拽脚本【59】
  • 设置spring boot禁止日志输出到控制台
  • c++中的二叉搜索树
  • 前端网络层性能优化
  • 【2024华为杯研究生数学建模竞赛】比赛思路、代码、论文更新中.....
  • 使用 Vue 3 和 TypeScript 实现带打字效果的仿 AI 分析展示组件
  • 【C/C++语言系列】指针数组、数组指针、函数声明和函数指针区别
  • Git 中的refs
  • Python异常处理:自定义异常②
  • 智慧体育场馆:科技引领未来运动体验