51单片机控制电动机正反转,PWM调速,记录转动圈数。

news2024/11/26 9:18:51

今天的实验需要用到的材料有: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 int
	
uint 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();
	}
}

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

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

相关文章

【Linux学习】04Linux实用操作

Linux&#xff08;B站黑马&#xff09;学习笔记 01Linux初识与安装 02Linux基础命令 03Linux用户和权限 04Linux实用操作 文章目录 Linux&#xff08;B站黑马&#xff09;学习笔记前言04Linux实用操作各类小技巧&#xff08;快捷键&#xff09;ctrl c 强制停止ctrl d 退出或…

手把手教你制作精美的新店开业微传单

如果你准备开设一家新店&#xff0c;那么制作一份具有吸引力的微传单是宣传店铺的重要手段之一。下面&#xff0c;我们将通过乔拓云平台&#xff0c;手把手教你制作一份有吸引力的新店开业微传单。 1. 注册并登录乔拓云账号 首先&#xff0c;你需要在乔拓云官方网站注册一个账号…

麒麟信安服务器操作系统V3.5.2重磅发布!

9月25日&#xff0c;麒麟信安基于openEuler 22.03 LTS SP1版本的商业发行版——麒麟信安服务器操作系统V3.5.2正式发布。 麒麟信安服务器操作系统V3定位于电力、金融、政务、能源、国防、工业等领域信息系统建设&#xff0c;以安全、稳定、高效为突破点&#xff0c;满足重要行…

​分拆菜鸟将使阿里巴巴股票迎来新一轮上涨?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;阿里巴巴(BABA)最近公布的季度财报显示&#xff0c;该公司有能力实现快速盈利。 &#xff08;2&#xff09;据报道&#xff0c;阿里巴巴正计划分拆菜鸟集团&#xff0c;并将在香…

JavaScript高阶班之ES6 → ES11(八)

JavaScript高阶班之ES6 → ES11 1、ES6新特性1.1、let 关键字1.2、const关键字1.3、变量的解构赋值1.3.1、数组的解构赋值1.3.2、对象的解构赋值 1.4、模板字符串1.5、简化对象写法1.6、箭头函数1.7、函数参数默认值1.8、rest参数1.9、spread扩展运算符1.9.1、数组合并1.9.2、数…

瀑布流布局

效果&#xff1a; 代码&#xff1a; APP.vue <template><waterFallVue :list"list"></waterFallVue> </template> <script setup> import waterFallVue from "./components/waterFallVue .vue"const list [{height: 300,…

欧洲FBA专线海运与陆运的差别

随着全球电商市场的快速发展&#xff0c;越来越多的卖家选择将产品销售到欧洲市场。然而&#xff0c;面对欧洲境内的物流问题&#xff0c;卖家们往往会面临一个重要的选择&#xff1a;选择欧洲FBA专线时是选择海运还是陆运?这两种运输方式在时效、成本和服务质量上都有所不同&…

练习敲代码速度/提高打字速度

今天看到一个敲代码的视频&#xff0c;说的是不要用你的爱好来挑战程序员的职业。 惭愧&#xff0c;我也是程序员&#xff0c;但打字还真的没那么快&#xff0c;尤其是数字键盘&#xff0c;以前敲不准&#xff0c;十几年了也没在意&#xff0c;毕竟很少用。直接用右边小键盘更…

基于web的学校二手书城系统/二手书交易系统

摘 要 本文论述了学校二手书城系统的设计和实现&#xff0c;该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;网络和Mysql数据库设计来实现的&#xff0c;网站主要包括用户注册、用户登录、浏览图书、搜索图书、查看图书并进行购买…

简单易上手的在windows部署cmake版paddledetection/yolo(c++)

一.下载源代码 官方地址&#xff1a; https://gitee.com/paddlepaddle/PaddleDetection 网盘&#xff1a; paddledetection 链接&#xff1a;https://pan.baidu.com/s/1g0z5SYQNDR1pwe9iAtvR3A?pwdktl6 提取码&#xff1a;ktl6 paddleocr 链接&#xff1a;https://pan.baid…

数码配件商城搭建教程:一步一步实现自己的小程序商城

在如今数字化的时代&#xff0c;电子商务成为了一种非常重要的商业模式。而随着移动互联网的发展&#xff0c;小程序商城成为了许多企业和个人创业者的选择。本文将介绍如何使用乔拓云平台搭建一个数码配件商城的小程序&#xff0c;并实现自己的商业梦想。 第一步&#xff1a;登…

raw图片处理推荐 DxO PhotoLab 6 for Mac中文最新

DxO PhotoLab 6是一款专业的RAW图片处理软件&#xff0c;适用于Mac操作系统。它具有先进的图像处理技术和直观易用的界面&#xff0c;可帮助用户轻松地将RAW格式的照片转换为高质量的JPEG或TIFF图像。以下是对DxO PhotoLab 6软件的详细介绍&#xff1a; RAW图像处理&#xff1…

python监控ES索引数量变化

文章目录 1, datafram根据相同的key聚合2, 数据合并&#xff1a;获取采集10,20,30分钟es索引数据脚本测试验证 1, datafram根据相同的key聚合 # 创建df1 > json {key:A, value:1 } {key:B, value:2 } data1 {key: [A, B], value: [1, 2]} df1 pd.DataFrame(data1)# 创建d…

【广州华锐互动】奶牛养殖难产助产3D沉浸式教学平台

在传统的奶牛难产助产教学中&#xff0c;主要依赖理论知识和2D图像来进行教学。然而&#xff0c;这种教学方式往往无法全面、真实地展示奶牛难产的各种情况&#xff0c;教学效果也不尽如人意。随着科技的发展&#xff0c;3D互动教学的出现&#xff0c;为奶牛难产助产教学带来了…

TextMeshPro创建中文资源出现内容不全的问题记录

原因可能是出现乱码了&#xff0c;如下图3500的汉字没有乱码可以创建成功&#xff0c;但7000的汉字创建时没有乱码的能创建出来&#xff0c;乱码的内容在创建出来的资源里不存在。

rk3568 weston 桌面相关

rk3568 weston 桌面相关 1、Weston 桌面参考链接 https://www.mankier.com/5/weston.ini#Output_Section 2、查看显示设备 输入 ls /sys/class/drm 命令&#xff0c;以MIPI 屏为例。 3、调整屏幕方向 修改 /etc/xdg/weston/weston.ini 文件 [output] nameDSI-1 //与上面列…

亿发连锁商超新零售解决方案提供商,提供定制新零售管理系统

时代的发展带动了经济环境的变化&#xff0c;为迎合市场经济的发展需求&#xff0c;数字化收银逐渐融入到大中生活中&#xff0c;中小型商铺都倾向于使用智慧收银系统取代传统收银模式。新零售系统成为了商家在竞争激烈的市场中立足的关键。但随之也带来了数不尽的竞争压力&…

openlayers-18-聚合显示补充(切换聚合与非聚合状态)

最近有一些网友问我&#xff0c;聚合显示怎么实现聚合与不聚合之间的切换&#xff0c;有很多方法能够实现&#xff0c;下面是一个示例作为参考。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-…

怎么保护苹果手机移动应用程序ios ipa文件中的代码?

目录 前言 代码混淆步骤 1. 选择要混淆保护的ipa文件 2. 选择要混淆的类名称 3. 选择要混淆保护的函数&#xff0c;方法 4. 配置签名证书 5. 混淆和测试运行 前言 在当今移动应用市场竞争激烈的环境中&#xff0c;代码保护功能对于iOS应用程序的成功非常关键。代码保护可…

不同走向地下管线的地质雷达响应特征分析

不同走向地下管线的地质雷达响应特征分析 前言 以PVC管线为例&#xff0c;建立不同走向&#xff08;水平倾斜、垂直倾斜、水平相邻&#xff09;的三维管线地质模型&#xff0c;进行三维地质雷达数据模拟&#xff0c;分析不同走向地下管线的地质雷达响应特征。 文章目录 不同…