51单片机——步进电机模块
直流电机没有正负之分,在两端加上直流电就能工作

P1.0-P1.3都可以控制电机,例如:使用P1.0,则需要把线接在J47的1(VCC)和2(OUT1)上
1、直流电机实验
要实现的功能是:直流电机工作约5s后停止
#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
//输入1表示10us
void delay(u16 time){
while(time--);
}
//毫秒的延时函数,输入1表示1毫秒
void delay_ms(u16 ms){
u16 i=0,j=0;
for(i=ms;i>0;i--){
for(j=110;j>0;j--);
}
}
//P1.0口控制电机(P1.0-P1.3都可以控制电机)
sbit DC_MOTOR=P1^0;
//定义一个时间,5s
//不分正负极
void main(){
DC_MOTOR=1;
delay_ms(5000);
DC_MOTOR=0;
while(1){
}
}
2、步进电机实验
要实现的功能是:通过ULN2003驱动模块控制28BYJ48步进电机运行方向及速度,当按下KEY1键可调节电机旋转方向;当按下KEY2键,电机加速;当按下KEY3键,电机减速
#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
void delay_10us(u16 us){
while(us--);
}
//定义延时函数,ms=1时,大约延时1ms
void delay_ms(u16 ms){
u16 i=0,j=0;
for(i=ms;i>0;i--){
for(j=110;j>0;j--);
}
}
//定义控制步进电机的管脚
//8个节拍控制:A->AB->B->BC->C->CD->D->DA
sbit IN1_A=P1^0; //橙线
sbit IN2_B=P1^1; //黄线
sbit IN3_C=P1^2; //粉线
sbit IN4_D=P1^3; //蓝线
//独立按键
//使用宏定义的方法定义独立按键的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
//定义按键对应的管脚口
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
//封装一个函数,按键返回一个键值
u8 key_scan(u16 mode){ //mode:模式,有0和1操作,如果操作0,单次扫描;如果操作1,连续扫描
//打一个标志
static u16 key=1;
if(mode==1){
key=1;
}
if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0)){
//消抖处理,需要延时5ms-10ms
delay_10us(1000);
key=0;
//如果仍是按下,信号稳定
if(KEY1==0){
return KEY1_PRESS;
}else if(KEY2==0){
return KEY2_PRESS;
}else if(KEY3==0){
return KEY3_PRESS;
}else if(KEY4==0){
return KEY4_PRESS;
}
}else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1){
key=1;
return KEY_UNPRESS;
}
}//步进电机 step(拍数):0-7;dir(电机方向):0(逆时针),1(顺时针)
void step_motor_28BYJ48C_send_pulse(u8 step,u8 dir){
u8 temp=step;
if(dir==1){
temp=7-step;
}
switch(temp){
case 0:
IN1_A=1,IN2_B=0,IN3_C=0,IN4_D=0;
break;
case 1:
IN1_A=1,IN2_B=1,IN3_C=0,IN4_D=0;
break;
case 2:
IN1_A=0,IN2_B=1,IN3_C=0,IN4_D=0;
break;
case 3:
IN1_A=0,IN2_B=1,IN3_C=1,IN4_D=0;
break;
case 4:
IN1_A=0,IN2_B=0,IN3_C=1,IN4_D=0;
break;
case 5:
IN1_A=0,IN2_B=0,IN3_C=1,IN4_D=1;
break;
case 6:
IN1_A=0,IN2_B=0,IN3_C=0,IN4_D=1;
break;
case 7:
IN1_A=1,IN2_B=0,IN3_C=0,IN4_D=1;
break;
}
}
//定义转速1-5区间(最小不能小于1),步进电机的速度的值越小,速度越快;值越大,速度越慢
#define STEPMOTOR_MAXSPEED 1 //可以改
#define STEPMOTOR_MINSPEED 5
void main(){
u8 key=0; //按键的返回值
u8 dir=0; //默认逆时针
u8 step=0; //拍数
u8 speed=STEPMOTOR_MAXSPEED; //默认最大转速
while(1){
key=key_scan(0);
if(key==KEY1_PRESS){
//换方向
dir=!dir;
}else if(key==KEY2_PRESS){
//加速
if(speed>STEPMOTOR_MAXSPEED){
speed-=1;
}
}else if(key==KEY3_PRESS){
//减速
if(speed<STEPMOTOR_MINSPEED){
speed+=1;
}
}
//电机工作
step_motor_28BYJ48C_send_pulse(step++,dir);
if(step==8){
step=0;
}
delay_ms(speed); //脉冲频率
}
}
相关文章:
51单片机——步进电机模块
直流电机没有正负之分,在两端加上直流电就能工作 P1.0-P1.3都可以控制电机,例如:使用P1.0,则需要把线接在J47的1(VCC)和2(OUT1)上 1、直流电机实验 要实现的功能是:直…...
当算法遇到线性代数(四):奇异值分解(SVD)
SVD分解的理论与应用 线性代数系列相关文章(置顶) 1.当算法遇到线性代数(一):二次型和矩阵正定的意义 2.当算法遇到线性代数(二):矩阵特征值的意义 3.当算法遇到线性代数࿰…...
SASS 简化代码开发的基本方法
概要 本文以一个按钮开发的实例,介绍如何使用SASS来简化CSS代码开发的。 代码和实现 我们希望通过CSS开发下面的代码样式,从样式来看,每个按钮的基本样式相同,就是颜色不同。 如果按照传统的方式开发,需要开发btn &…...
40.TryParse尝试转化为int类型 C#例子
也许这个时候学有点晚,但是不管怎样都学了 尝试转化,不能转化就返回bool类型的假 它会直接给括号里面的int类型赋值 代码: using System; using System.Timers; public class Program {static void Main(){int a;bool i;while (true){Get…...
【微服务】2、网关
Spring Cloud微服务网关技术介绍 单体项目拆分微服务后的问题 服务地址问题:单体项目端口固定(如黑马商城为8080),拆分微服务后端口各异(如购物车808、商品8081、支付8086等)且可能变化,前端难…...
红队-shell编程篇(上)
声明 通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、建立Shell文件 1. Shell简介 Shell是一种命令行界面&am…...
电子价签会是零售界的下一个主流?【新立电子】
电子价签,作为一种能够替代传统纸质标签的数字显示屏,已经在零售行业中展现出其巨大的潜力。它具有实时更新、集中管理、高效节能的特点,实现价格的实时更新,大大减少更新价格的工作量和时间。为消费者带来更加便捷、准确的购物体…...
5 分布式ID
这里讲一个比较常用的分布式防重复的ID生成策略,雪花算法 一个用户体量比较大的分布式系统必然伴随着分表分库,分机房部署,单体的部署方式肯定是承载不了这么大的体量。 雪花算法的结构说明 如下图所示: 雪花算法组成 从上图我们可以看…...
SpringBoot | @Autowired 和 @Resource 的区别及原理分析
关注:CodingTechWork 引言 在Spring框架中,Autowired 和 Resource 是两种常用的依赖注入注解,它们都用于自动装配Bean,简化了开发者手动创建和管理Bean的繁琐工作。然而,它们的实现机制和使用方式有所不同。理解这两者…...
『SQLite』解释执行(Explain)
摘要:本节主要讲解SQL的解释执行:Explain。 在 sqlite 语句之前,可以使用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语,用于描述表查询的细节。 基本语法 EXPLAIN 语法: EXPLAIN [SQLite Query]EXPLAIN QUER…...
0基础学前端-----CSS DAY12
视频参考:B站Pink老师 今天是CSS学习的第十二天,今天开始的笔记对应Pink老师课程中的CSS第七天的内容。 本节重点:CSS高级技巧 本章目录 本节目标1. 精灵图1.1 为什么需要精灵图1.2 精灵图使用案例:拼出自己的名字 2. 字体图标2.…...
(概率论)无偏估计
参考文章:(15 封私信 / 51 条消息) 什么是无偏估计? - 知乎 (zhihu.com) 首先,第一个回答中,马同学图解数学讲解得很形象, 我的概括是:“注意,有一个总体的均值u。然后,如果抽样n个&…...
Minio-Linux-安装
文章目录 1.Linux安装1.下载源码包2.上传到/usr/local/minio1.进入目录2.上传 3.开放执行权限4.创建minio文件存储目录及日志目录5.编写启动的shell脚本1.脚本编写2.赋予执行权限 6.启动!1.执行run脚本2.查看日志3.开放9001和9000端口1.服务器2.安全组3.访问&#x…...
利用Java爬取1688商品详情API接口:技术与应用指南
引言 1688作为中国领先的B2B电子商务平台,拥有海量的商品信息。对于商家和市场研究人员来说,能够从1688获取商品详情信息,对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序,以合法、高效的方式获取…...
基于MATLAB的汽车热管理模型构建
一、引言 汽车热管理系统对汽车性能、部件寿命及驾乘体验至关重要。它能确保发动机、电池等关键部件在适宜温度工作。MATLAB 功能强大,为构建高精度热管理模型提供有效途径,助力优化系统设计与控制策略。 二、汽车热管理系统构成 2.1 发动机冷却系统&…...
LRU(1)
LRU是"Least Recently Used"(最近最少使用)的缩写,它是一种常用的页面置换算法和缓存淘汰策略。当计算机系统的内存或缓存资源有限时,LRU算法根据的历史访问记录来决定哪些数据应该被保留在内存或缓存中,哪些被淘汰。其核心思想是“…...
VSCode 使用鼠标滚轮控制字体
一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意:保存哦!ctrlS 三、测试 按住ctrl鼠标滚轮,控制字体大小...
数据库(3)--针对列的CRUD操作
1.Create 新增 语法: insert into 表名 (列名)values (列)... 创建一个学生表用于演示: create table if not exists student( id bigint comment 编号, name varchar(20) comment 姓名 ); 1.1直接增加…...
【Linux】记录一下考RHCE的学习过程(七)
年底了,公司接的北京地铁轨道交通的项目做不完了,一百多列地铁的设备都得调,派我出差了几周,这几天才回来,出差累死了实在是没办法更新。(YOASOBI的二开票还没抢到ToT,哭死,看看回滚…...
【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 1:背景动机
目录 1 简单概括2 几个重要发现3 主要贡献4 背景知识5 方法简介 论文:Multi-Head Encoding for Extreme Label Classification 作者:Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位:山东大学 代码:https://gi…...
Asian Beauty Z-Image Turbo 微信小程序前端开发:实时图像生成与分享
Asian Beauty Z-Image Turbo 微信小程序前端开发:实时图像生成与分享 最近在捣鼓一些有意思的AI应用,发现把大模型的能力搬到移动端,特别是像微信小程序这样的轻量级平台上,能玩出很多新花样。今天想和大家聊聊,怎么给…...
[ESP32]:利用MicroPython调用C库实现高效硬件控制
1. 为什么要在MicroPython中调用C库? 很多刚接触ESP32开发的工程师可能会有疑问:既然MicroPython已经足够简单易用,为什么还要费劲调用C库呢?这里有个很形象的比喻——就像你平时吃饭用筷子很方便,但遇到牛排时就需要…...
BepInEx插件依赖管理:5个高效解决多插件冲突的终极方案
BepInEx插件依赖管理:5个高效解决多插件冲突的终极方案 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx作为Unity游戏模组开发的强大框架,其核心价值…...
造相-Z-Image-Turbo亚洲美女LoRA:一键生成国风美女,效果惊艳实测
造相-Z-Image-Turbo亚洲美女LoRA:一键生成国风美女,效果惊艳实测 1. 为什么选择这个镜像生成亚洲女性形象 1.1 专为亚洲面孔优化的生成能力 传统AI图像生成工具在处理亚洲人物时常常面临特征模糊、肤色失真等问题。造相-Z-Image-Turbo亚洲美女LoRA通过…...
麦橘超然Flux图像生成控制台:从环境准备到生成测试的完整流程
麦橘超然Flux图像生成控制台:从环境准备到生成测试的完整流程 1. 引言 1.1 项目概述 麦橘超然Flux图像生成控制台是一款基于DiffSynth-Studio框架构建的AI绘画工具,集成了majicflus_v1模型,通过float8量化技术显著降低了显存需求。这个解决…...
.NET后端服务调用FRCRN:跨语言通信与音频数据传输方案
.NET后端服务调用FRCRN:跨语言通信与音频数据传输方案 最近在帮一个做智能客服的朋友优化他们的系统,他们遇到了一个挺典型的工程问题:后端是用.NET技术栈写的,但团队里新引入了一个基于Python的音频降噪模型FRCRN。怎么让这两个…...
ESP32嵌入式菜单框架:基于tcMenu的工业HMI开发库
1. 项目概述bamboitEsp32Base_3.0.0是一个面向 ESP32 系列微控制器(特别是 ESP32-WROOM-32、ESP32-WROVER、ESP32-S2/S3)的综合性嵌入式基础库,其核心定位并非通用 HAL 封装,而是围绕tcMenu(Touch Control Menu&#x…...
2026-04-12 全国各地响应最快的 BT Tracker 服务器(联通版)
数据来源:https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1http://211.75.205.187:80/announce上海联通192udp://211.75.205.189:6969/announce江西南昌联通293udp://132.226.6.145:6969/announce北京联通614udp://185.216.179.62:25/announce北京联通1…...
第一次启动QClaw,这5个设置决定你未来半年的使用上限
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
5分钟掌握Windows任务栏美化:TranslucentTB终极透明化指南
5分钟掌握Windows任务栏美化:TranslucentTB终极透明化指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 还在为Windows任务…...
