51单片机控制电动机正反转,PWM调速,记录转动圈数。
今天的实验需要用到的材料有:51单片机最小系统,4X4的矩阵键盘,DC直流6V-12V带编码器电机,L298N模块,一个led小灯。下面把产品截图展示一下:


单片机就不展示了,都一样,下面是接线图:



下面是电机的脉冲信号接法:4个脉冲1圈,图中单片机处接到51单片机的P3.2口,外部中断0


接下来就是我组装完了的一张图片了。

下面介绍一下程序的大体流程:按A键正转,按B键反转,0停止,1到9设置脉冲的高电平占用的百分比,10%到90%,也就是1最慢,9最快了。还能再快,没有写,到100%就是最快了,不管什么情况下,转够十圈都会停止转动。
下面就是整个程序,有注释,程序测试没有问题,特此记录:
#include<reg52.h>
sbit IN1=P3^5; //接L298N 7
sbit IN2=P3^6; //接L298N 6
sbit EN1=P3^7; //接L298N 5
sbit LED=P2^7; //接一个小led灯检测信号用#define uc unsigned char
#define uint unsigned intuint dat_H[2]; // 定时器初值的高位取值数组
uint dat_L[2]; // 定时器初值的低位取值数组
uint num=1000; // 定时器的定时时间(高电平时间为0.1毫秒)uc flag=0; //记录按键是否被按下的标志
uc count=0; //用来记录电机转的圈数,4个数为1圈//电动机停止函数
void motor_stop()
{IN1=1;IN2=1;EN1=1;EA=0;
}//电动机正转函数
void motor_zheng()
{IN1=1;IN2=0;EA = 1;
}//电动机反转函数
void motor_fan()
{IN1=0;IN2=1;EA = 1;
}//数据初始化
void dat_init()
{dat_H[0]=(65536-(10000-num))/256;dat_L[0]=(65536-(10000-num))%256;dat_H[1]=(65536-num)/256;dat_L[1]=(65536-num)%256;}void key()
{uc temp=0, temp1=0, temp2=0;P0 = 0x0F;if(P0 != 0x0F && flag == 0){flag=1; }if(P0 != 0x0F && flag == 1){flag=0; // temp1 = P0;}P0 = 0xF0;if(P0 != 0xF0 && flag == 0){flag = 1;//temp2 = P0;}if(P0 != 0xF0 && flag == 1){flag = 0;//temp2 = P0;}temp = temp1 + temp2;//按键1按下 修改num值达到修改定时器定时时间的目的if(temp == 0xEE){num = 1000;}//按键2按下if(temp == 0xDE){num = 2000;}//按键3按下if(temp == 0xBE){num = 3000;}//按键A按下if(temp == 0x7E){motor_zheng(); // 电机正转}//按键4按下if(temp == 0xED){num = 4000;}//按键5按下if(temp == 0xDD){num = 5000;}//按键6按下if(temp == 0xBD){num = 6000;}//按键B按下if(temp == 0x7D){motor_fan(); // 电机反转}//按键7按下if(temp == 0xEB){num = 7000;}//按键8按下if(temp == 0xDB){num = 8000;}//按键9按下if(temp == 0xBB){num = 9000;}//按键C按下
// if(temp == 0x7B)
// {
//
// }//按键*按下
// if(temp == 0xE7)
// {
//
// }//按键0按下if(temp == 0xD7){motor_stop(); //停止转动}//按键#按下
// if(temp == 0xB7)
// {
//
// }
//
// //按键D按下
// if(temp == 0x77)
// {
//
// }LED=0;dat_init(); // 所有按键都检测完了就要重新设置一下初值,好叫按键更改的num值起效
}//定时器初始化
void time_init()
{TMOD=0x01;TH0=dat_H[0];TL0=dat_L[0];ET0=1;EA=1;TR0=1;IN1=1;IN2=0;EN1=0;LED=0; //P2的7口接了一个led小灯检测信号有没有用的。//下面是外部中断初始化IT0=1; // 外部中断设置成1,边沿触发方式EX0=1; // 使用INT0的中断}// 主函数
int main()
{time_init(); //初始化定时器while(1){key(); // 检测按键}return 0;
}// 定时器中断入口函数
void zd() interrupt 1
{ EN1=~EN1; // 电动机转动使能,每次取反, 得1时转动,得0时停止if(EN1==0) // 如果是停止转动时,就设置初值为(65536-(10000-num))num为定时时间1000为1毫秒{ TH0=dat_H[0];TL0=dat_L[0];}if(EN1==1) // 如果是转动时,就设置初值为(65536-num),num为定时时间1000为1毫秒{TH0=dat_H[1];TL0=dat_L[1];}
}// 外部中断入口函数
void wbzd() interrupt 0
{count++;if(count == 40) //记录电机转10圈的时候就停止转动,点亮led灯,圈数置0.{LED=1;count=0;motor_stop();}
}
相关文章:
51单片机控制电动机正反转,PWM调速,记录转动圈数。
今天的实验需要用到的材料有:51单片机最小系统,4X4的矩阵键盘,DC直流6V-12V带编码器电机,L298N模块,一个led小灯。下面把产品截图展示一下: 单片机就不展示了,都一样,下面是接线图&a…...
JAVA学习(方法的定义和调用)
一、方法的定义和调用 1、关键词:static表示静态方法,如没有返回值使用void,方法名前使用类型,例如int、float等; /*** 测试方法的定义和调用*/public class TestMethod {public static void main(String[] args) {a…...
Linux(CentOS/Ubuntu)——安装nginx
如果确定你的系统是基于CentOS或RHEL,可以使用以下命令: ①、安装库文件 #安装gcc yum install gcc-c#安装PCRE pcre-devel yum install -y pcre pcre-devel#安装zlib yum install -y zlib zlib-devel#安装Open SSL yum install -y openssl openssl-de…...
26962-2011 高频电磁场综合水处理器技术条件
声明 本文是学习GB-T 26962-2011 高频电磁场综合水处理器技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了高频电磁场综合水处理器(以下简称处理器)的术语和定义、分类和型号、结构型式、 要求及检验、标志、包装和贮运…...
图扑软件受邀亮相 IOTE 2023 国际物联网展
IOTE 2023 国际物联网展,作为全球物联网领域的盛会,于 9 月 20 日 - 22 日在中国深圳拉开帷幕。本届展会以“IoT构建数字经济底座”为主题,由深圳市物联网产业协会主办,打造当前物联网最新科技大秀。促进物联网与各行业深度融合&a…...
C语言文件操作与管理
一、为什么使用文件 在我们前面练习使用结构体时,写通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了ÿ…...
蓝桥等考Python组别八级005
第一部分:选择题 1、Python L8 (15分) 运行下面程序,输出的结果是( )。 i 1 while i < 4: print(i, end ) i 1 1 2 30 1 2 31 2 3 40 1 2 3 4 正确答案:C 2、Python L8 &#…...
JUnit介绍
JUnit是用于编写和运行可重复的自动化测试的开源测试框架, 这样可以保证我们的代码按预期工作。JUnit可广泛用于工业和作为支架(从命令行)或IDE(如Eclipse)内单独的Java程序。 JUnit提供: 断言测试预期结果。 测试功能共享通用的测试数据。 测试套件轻…...
(高阶) Redis 7 第16讲 预热/雪崩/击穿/穿透 缓存篇
面试题 什么是缓存预热/雪崩/击穿/穿透如何做缓存预热如何避免或减少缓存雪崩穿透和击穿的区别?穿透和击穿的解决方案出现缓存不一致时,有哪些修补方案缓存预热 理论 将需要的数据提前加载到缓存中,不需要用户使用的过程中进行数据回写。(比如秒杀活动数据等) 方案 1.…...
(三) gitblit管理员手册
(一)gitblit安装教程 (二) gitblit用户使用教程 (三) gitblit管理员手册 目录 权限管理创建仓库时创建用户普通用户 管理员用户访问限制和访问权限仓库创建权限分配 Teams普通组管理员组 参考资料 权限管理 创建仓库时 选择指定的人员查看,克隆,推送 不允许fork 对应Anonymo…...
ESKF算法融合GNSS与IMU信息,航向角的偏差是如何逐渐影响到重力加速度g以及位置偏差的 CSDN gpt
1##############################ESKF算法融合GNSS与IMU信息,航向角的偏差是如何逐渐影响到重力加速度g以及位置偏差的 CSDN gpt 航向角的偏差会逐渐影响重力加速度和位置偏差。首先,航向角的偏差会影响重力加速度的测量值。在ESKF算法中,通过将IMU测…...
Java初始化大量数据到Neo4j中(二)
接Java初始化大量数据到Neo4j中(一)继续探索,之前用create命令导入大量数据发现太过耗时,查阅资料说大量数据初始化到Neo4j需要使用neo4j-admin import 业务数据说明可以参加Java初始化大量数据到Neo4j中(一),这里主要是将处理好的节点数据和…...
flink1.17安装
Flink1.17安装 官网地址: https://nightlies.apache.org/flink/flink-docs-release-1.17/zh//docs/try-flink/local_installation/ 安装jdk11 ps:只能安装openjdk11,昨天安装的oracle jdk17,结果怎么也运行不起来。 sudo apt …...
SLAM从入门到精通(gmapping建图)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们介绍了hector slam建图。相对而言,hector slam建图对数据的要求比较低,只需要lidar数据就可以建图了。但是hector …...
中国312个历史文化名镇及景区空间点位数据集
一部中华史,既是人类创造丰富物质财富的奋头史,又是与自然共生共存的和谐史不仅留存下悠久丰富的人文思想和情怀,还在各处镌刻下可流传的生活场景,历史文化名镇(以下简称:名镇)就是这样真实的历史画卷。“镇”是一方的政治文化中心…...
记一次Mybatis驼峰命名导致的线上BUG及处理方案
前言 方向从一开始就错了,还是执着的去寻找问题的解决方案,简直就是一场重大灾难,但这也是每个修行者的必由之路。这个线上问题,差点让我的心里防线崩溃,苦寻无门,最终得以解决也多亏了身边的各路大佬的群…...
在MyBatisPlus中添加分页插件
开发过程中,数据量大的时候,查询效率会有所下降,这时,我们往往会使用分页。 具体操作入下: 1、添加分页插件: package com.zhang.config;import com.baomidou.mybatisplus.extension.plugins.Pagination…...
算法题系列8·买卖股票的最佳时机
目录 题目描述 实现 提交结果 题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。 设计一个算法来计算你所能获取的最大利润。…...
DC电源模块关于宽电压输入和输出的范围
BOSHIDA DC电源模块关于宽电压输入和输出的范围 DC电源模块是一种电子设备,能够将输入的直流电源转换成所需的输出电源,用于供电各种电子设备。其中,关于宽电压输入和输出的范围,是DC电源模块常见的设计要求之一。本文将详细介绍…...
【Docker】docker拉取镜像错误 missing signature key
问题 当我使用docker拉取一个特定的镜像时,提示错误: 错误 missing signature key 但是拉取其他镜像又可以访问,,,,于是,我怀疑是否是docker版本问题。 docker --version结果确实࿰…...
基于React+TypeScript+Tailwind的ChatGPT应用UI模板开发指南
1. 项目概述:一个为ChatGPT应用量身定制的UI模板如果你正在开发一个基于ChatGPT或类似大语言模型的Web应用,无论是客服机器人、智能写作助手,还是企业内部的知识问答工具,那么你大概率会遇到一个绕不开的难题:如何快速…...
基于FreeRTOS与LVGL的智能手表开源系统InfiniTime开发指南
1. 项目概述:为你的智能手表注入灵魂 如果你手上有一块PineTime或者类似的低功耗智能手表,并且对官方固件那有限的功能感到意犹未尽,那么“InfiniTime”这个名字你应该不会陌生。它不是一个简单的应用商店,而是一个为这类开源硬件…...
LLM Wiki Bridge:将Markdown知识库编译为AI可操作的概念图谱
1. 项目概述:将你的知识库变成AI的“第二大脑” 如果你和我一样,是个重度笔记用户,大概率也经历过这样的场景:在Obsidian、Logseq或者任何你喜欢的Markdown编辑器里,日积月累了成百上千篇笔记。你清楚地记得自己写过某…...
ChatGPT Instagram内容策略失效真相(92%运营者忽略的算法适配层)
更多请点击: https://intelliparadigm.com 第一章:ChatGPT Instagram内容策略失效的底层归因 Instagram 的算法演进与用户行为迁移,正系统性瓦解基于通用大模型(如 ChatGPT)生成的“模板化内容策略”。其失效并非源于…...
Agent-Layer:构建多智能体协作系统的中间层框架设计与实践
1. 项目概述:Agent-Layer 是什么,以及它想解决什么问题最近在开源社区里,一个名为lopushok9/Agent-Layer的项目引起了我的注意。乍一看这个标题,你可能会想,这又是一个关于“智能体”或“代理”的框架吧?确…...
XSP25全协议 100W PD快充诱骗芯片_串口读电压电流信息
在Type-C快充技术普及的今天,快充诱骗协议芯片成为小家电、智能硬件、锂电设备等产品实现高效取电的核心器件。XSP25作为汇铭达推出的Type‑C受电端(Sink)多功能快充取电芯片,以全协议兼容、100W大功率输出、串口智能通信、极简外…...
如何使用日志实现业务全链路追踪
在现代分布式系统架构中,一个业务请求往往需要经过多个服务节点的协同处理,涉及网关、微服务、数据库、缓存、消息队列等多个组件。传统的日志记录方式通常局限于单个服务或模块,难以还原一个完整请求的流转路径,给问题排查、性能…...
modbus 512 断线重连 db browser for sqlite
断线重连 private async Task HeartbeatLoopAsync(CancellationToken token) {// 监工一直循环干活,直到工长喊停工(token.IsCancellationRequested)while (!token.IsCancellationRequested){try{// 每隔一段时间检查一次(最少20…...
ARM CoreSight TRBPIDR寄存器详解与调试技巧
1. ARM CoreSight TRBPIDR寄存器概述在嵌入式系统调试领域,ARM CoreSight架构提供了一套完整的调试和追踪解决方案。其中TRBPIDR(Trace Buffer Peripheral Identification Register)系列寄存器是识别和配置追踪缓冲区的关键组件。这些寄存器遵…...
如何在Windows电脑上直接安装Android应用:3个简单步骤告别模拟器
如何在Windows电脑上直接安装Android应用:3个简单步骤告别模拟器 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经希望在Windows电脑上直接运行An…...
