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结果确实࿰…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
