网站标题和关键词有什么区别/如何销售自己产品方法有哪些

网站标题和关键词有什么区别,如何销售自己产品方法有哪些,做类似起点的网站,网站设计模板免费下载写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

写在前言

  此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识

  在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识,主要是为下章节的代码部分打基础。

  我的单片机是24年12月在tb普中买的,型号是STC89C52,在原视频中引脚或接口不对应的我都会改正,保证在我的机子上能运行才发上来的,还有一些文字部分是我的理解,并非照搬,所以可能有理解不到位的现象。

  如有误或交流,敬请指点提问

本节课一共两个代码,LED呼吸灯和直流电机调速

一、直流电机

1.介绍

  • 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
  • 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成
  • 除直流电机外,常见的电机还有步进电机(机壳装载了一圈电磁铁,对相对两个电磁铁进行一圈脉冲式通电,优点是严格控速精密)、舵机(跟船舵一样,方便控制转向)、无刷电机(转速特别快)、空心杯电机(体积很小)等
  • 左1就是我们开发板里的电机,有两个电极;左1是N20,一个直流电机+减速箱;右1比左2还多带一个编码器(测速),PID算法(常用)控制电机速度

2.驱动电路

有两种方式

  • 大功率器件直接驱动 

不能正反转上面是一个三极管控制开关,下面是一个蓄流二极管,用于保护电路;因为电机(继电器)是感性负载元件,驱动的时候会出现很高的电压(电感的特效)

这个ULN2003里面也是一个大功率元件

  • H桥驱动

能正反转因为我们使第二、四象限的二极管导通其余的截止,就会令电流向右走,如果反过来就可以令电流向左走;因为没有蓄流二极管保护,所以对mos管和晶体管的耐压特效要求比较高

二、PWM

PWM是控制直流电机调速的


1.介绍

  • PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域
  • PWM重要参数:
  • 频率=1/Ts  占空比=Ton/Ts  精度=占空比变化步距

三、代码实战

1.LED呼吸灯 

先定义一下引脚

然后再定义一个比较快的延时函数,让这个LED灯先亮一段时间,再灭一段时间,这就是PWM的工作原理,通常为了保证周期是稳定的,不随占空比变化而变化,所以亮和灭加起来的时间也要是个固定值

#include <REGX52.H>sbit LED=P2^0;void Delay(unsigned int t)
{while(t--);
}void main()
{while(1){LED=0;Delay(5);LED=1;Delay(95);}
}

接下来就是让亮和灭的值不断变化,从而实现呼吸灯的效果

我们就可以定义一个变量Time,让亮的时间为Time,灭的时间为100-Time,这样就可以实现两个数加起来是固定值,然后我们再对Time进行for循环,不断++

但是这个速度还是比较快,我们让他每次亮灭变换的时间再久一点,定义一个i,在for循环里嵌套再进行一次for循环,这样就可以实现LED一直从暗到亮

但是我们还想实现从暗到亮,再从亮到暗又怎么做呢,就是把之前的外层对Time的for循环反过来再依次--

#include <REGX52.H>sbit LED=P2^0;void Delay(unsigned int t)
{while(t--);
}void main()
{unsigned char Time,i;while(1){for(Time=0;Time<100;Time++){for(i=0;i<20;i++){LED=0;Delay(Time);LED=1;Delay(100-Time);				}}for(Time=100;Time>0;Time--){for(i=0;i<20;i++){LED=0;Delay(Time);LED=1;Delay(100-Time);				}}}
}

这样就可以实现呼吸灯从暗到亮,再从亮到暗

但是会有一个缺点,就是占用了我们的主循环不断翻转IO口,还比较占用CPU

一般都会写到定时器上,或者从硬件上解决

所以在下面的代码中我们用定时器来实现

2.直流电机调速

在这个代码我们就用定时器来实现LED呼吸灯和直流电机调速功能

产生PWM方法

我们通过改变比较值就可以改变占空比 

由于之前的定时器设置有点慢,我们让他快一点

这个PWM驱动电机在一定范围内是越快越好,一般设置在10K-20K范围里,如果频率比较低,电流就会抖动,如果在1K左右,就会产生一些蜂鸣器的声音

这个中断就是每隔100us中断一次

//timer0.c#include <REGX52.H>/*** @brief  定时器0初始化,100us@12.000MHz* @param  无* @retval 无*/
void Timer0_Init(void)
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0=1;EA=1;PT0=0;
}/*定时器中断函数模板
void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值T0Count++;if(T0Count>=1000){T0Count=0;}
}
*/

由上面的图可以知道要定义两个值,计数值和比较值,

我们让计数值从0-100然后清零,实现定时自增

    Counter++;
    Counter%=100;

这样写和if(counter==100){清零}是一个效果

接下来再让计数值和比较值进行比较

可以观察到如果比较值越大,低电平时间越久,也就是越暗

这样我们通过控制比较值Compare就可以控制LED的亮度,还剩下下了主循环,接下来我们就实现按键功能

#include <REGX52.H>
#include " Delay.h"
#include " Key.h"
#include " Nixie.h"
#include " Timer0.h"sbit LED=P2^0;unsigned char Counter,Compare;void main()
{Timer0_Init();Compare=5;while(1){}}void Timer0_Routine() interrupt 1
{TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值Counter++;Counter%=100;if(Counter<Compare){LED=0;}else{LED=1;}
}

注意后面取的Key函数,如果是拿的定时器扫描按键的那章写的Key函数,要在定时器中写上这个Key_Loop()

#include <REGX52.H>
#include " Delay.h"
#include " Key.h"
#include " Nixie.h"
#include " Timer0.h"sbit LED=P2^0;unsigned char Counter,Compare;
unsigned char KeyNum,Speed;void main()
{Timer0_Init();Compare=5;while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=4;}Nixie(1,Speed);}}void Timer0_Routine() interrupt 1
{Key_Loop();TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值Counter++;Counter%=100;if(Counter<Compare){LED=0;}else{LED=1;}
}

这样就可以实现按下按键1数码管显示++并且过3就清零

接下来将Speed跟Compare比较值对应起来,就可以实现按键调速并显示

这样就可以实现LED的亮度控制

            if(Speed==0){Compare=5;}
            if(Speed==1){Compare=5;}
            if(Speed==2){Compare=50;}
            if(Speed==3){Compare=100;}    

那我们如果想控制电机,就直接把LED的端口改成电机的端口,而又因为我们的LED是给0亮给1灭,而电机是给1转给0灭,所以需要把极性反过来

这里有个小问题,在刚上电的时候,电机会转动,这是硬件的问题,因为单片机在复位的时候,IO口默认高电平,所以电机会转

#include <REGX52.H>
#include " Delay.h"
#include " Key.h"
#include " Nixie.h"
#include " Timer0.h"sbit Motor=P1^0;unsigned char Counter,Compare;
unsigned char KeyNum,Speed;void main()
{Timer0_Init();Compare=5;while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=4;if(Speed==0){Compare=0;}if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}	}Nixie(1,Speed);}}void Timer0_Routine() interrupt 1
{Key_Loop();TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值Counter++;Counter%=100;if(Counter<Compare){Motor=1;}else{Motor=0;}
}

这样就实现本节课的代码啦,按下按键调节电机的速度并且显示出来。

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

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

相关文章

uniapp+Vue3 开发小程序的下载文件功能

小程序下载文件&#xff0c;可以先预览文件内容&#xff0c;然后在手机上打开文件的工具中选择保存。 简单示例&#xff1a;&#xff08;复制到HBuilder直接食用即可&#xff09; <template><view class"container-detail"><view class"example…

【分布式】聊聊分布式id实现方案和生产经验

对于分布式Id来说&#xff0c;在面试过程中也是高频面试题&#xff0c;所以主要针对分布式id实现方案进行详细分析下。 应用场景 对于无论是单机还是分布式系统来说&#xff0c;对于很多场景需要全局唯一ID&#xff0c; 数据库id唯一性日志traceId 可以方便找到日志链&#…

【性能测试】Jmeter如何做一份测试报告(3)

本篇文章主要介绍Jmeter中下载插件&#xff08;Jmeter Plugins&#xff09; 如何使用监听器插件&#xff0c;线程组插件&#xff0c;梯度压测线程组 测试报告需要去关注的数据&#xff0c;怎么看测试报告图表 目录 一&#xff1a;插件下载 1&#xff1a;下载地址 2&#xff…

cocos creator使用mesh修改图片为圆形,减少使用mask,j减少drawcall,优化性能

cocos creator版本2.4.11 一个mask占用drawcall 3个以上&#xff0c;针对游戏中技能图标&#xff0c;cd,以及多玩家头像&#xff0c;是有很大优化空间 1.上代码&#xff0c;只适合单独图片的&#xff0c;不适合在图集中的图片 const { ccclass, property } cc._decorator;c…

AI重构SEO关键词布局

内容概要 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型&#xff0c;智能系统能够实时解析海量搜索数据&#xff0c;构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…

泛微ecode的页面开发发送请求参数携带集合

1.在开发过程中我们难免遇见会存在需要将集合传递到后端的情况&#xff0c;那么这里就有一些如下的注意事项&#xff0c;如以下代码&#xff1a; // 新增action.boundasync addQuestion(formData) {var theList this.questionAnswerList;var questionAnswerListArray new Ar…

20250212:linux系统DNS解析卡顿5秒的bug

问题: 1:人脸离线识别记录可以正常上传云端 2:人脸在线识别请求却一直超时 3:客户使用在线网络 思路:

道路运输安全员考试:备考中的心理调适与策略

备考道路运输安全员考试&#xff0c;心理调适同样重要。考试压力往往会影响考生的学习效率和考试发挥。​ 首先&#xff0c;要正确认识考试压力。适度的压力可以激发学习动力&#xff0c;但过度的压力则会适得其反。当感到压力过大时&#xff0c;要学会自我调节。可以通过运动…

LLM - 白话RAG(Retrieval-Augmented Generation)

文章目录 Pre一、大模型的"幻觉"之谜1.1 何为"幻觉"现象&#xff1f;1.2 专业场景的致命挑战 二、RAG技术解析&#xff1a;给大模型装上"知识外挂"2.1 核心原理&#xff1a;动态知识增强2.2 技术实现三部曲 三、RAG vs 微调&#xff1a;技术选型…

探索现代 C++:新特性、工程实践与热点趋势

目录 一、现代 C 的关键特性与热点关联 二、精简代码示例解析 三、工程实践中的应用思考 四、总结与展望 近几年&#xff0c;人工智能、边缘计算与跨语言开发成为技术热点&#xff0c;而 C 作为高性能系统编程的主力军&#xff0c;也在不断进化。从 C11 到 C20&#xff0c;…

257. 二叉树的所有路径(递归+回溯)

257. 二叉树的所有路径 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 思路&#xff1a;在叶子节点收割结果&#xff0c;如果不是叶子节点&#xff0c;则依次处理左右子树&a…

CSDN博客:Markdown编辑语法教程总结教程(中)

❤个人主页&#xff1a;折枝寄北的博客 Markdown编辑语法教程总结 前言1. 列表1.1 无序列表1.2 有序列表1.3 待办事项列表1.4 自定义列表 2. 图片2.1 直接插入图片2.2 插入带尺寸的图片2.3 插入宽度确定&#xff0c;高度等比例的图片2.4 插入高度确定宽度等比例的图片2.5 插入居…

RK3588部署YOLOv8(2):OpenCV和RGA实现模型前处理对比

目录 前言 1. 结果对比 1.1 时间对比 1.2 CPU和NPU占用对比 2. RGA实现YOLO前处理 2.1 实现思路 2.2 处理类的声明 2.3 处理类的实现 总结 前言 RK平台上有RGA (Raster Graphic Acceleration Unit) 加速&#xff0c;使用RGA可以减少资源占用、加速图片处理速度。因此…

SNIPAR:快速实现亲缘个体的基因型分离与推断

SNIPAR&#xff1a;快速实现亲缘个体的基因型分离与推断 近日&#xff0c;英国剑桥大学研究团队在Nature Genetics上发表了最新研究成果——SNIPAR&#xff08;SNP-based Inference of Pedigree relationship, Ancestry, and Recombination&#xff09;。这一强大的工具可以帮助…

阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台

阿里云操作系统控制台评测&#xff1a;国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展&#xff0c;企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具&#xff0c;正逐步成为企业高效管理…

大语言模型学习--向量数据库Milvus实践

Milvus是目前比较流行的开源向量数据库&#xff0c;其官网地址 Milvus 是什么&#xff1f; | Milvus 文档 1.Milvus简介 Milvus 是一种高性能、高扩展性的向量数据库。Milvus 提供强大的数据建模功能&#xff0c;能够将非结构化或多模式数据组织成结构化的 Collections。它支…

Visual Studio 安装及使用教程(Windows)【安装】

文章目录 一、 Visual Studio 下载1. 官网下载2. 其它渠道 二、Visual Studio 安装三、Visual Studio 使用四、Visual Studio 其它设置1. 桌面快捷方式2. 更改主题、字体大小 软件 / 环境安装及配置目录 一、 Visual Studio 下载 1. 官网下载 安装地址&#xff1a;https://vi…

关于ngx-datatable no data empty message自定义模板解决方案

背景&#xff1a;由于ngx-dataable插件默认没有数据时显示的文案是no data to display&#xff0c;且没有任何样式。这里希望通过自定义模板来实现。但目前github中有一个案例是通过设置代码&#xff1a; https://swimlane.github.io/ngx-datatable/empty** <ngx-datatable…

Matlab 双线性插值(二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 双线性插值是一种 二维插值方法,用于计算 栅格(Grid) 或 像素点 之间的插值值。它主要用于 图像缩放、旋转、变换 等操作,以在新像素位置估算灰度值或颜色值。 如上图所示,假设存在一个二维离散函数(如图像)…

coding ability 展开第二幕(双指针——巩固篇)超详细!!!!

文章目录 前言有效的三角形个数思路 查找总价格为目标值的两个商品思路 两数之和思路 三数之和思路 四数之和思路 总结 前言 本专栏的上篇&#xff0c;讲述了双指针的一些基础的算法习题 今天我们来学习更进一步的双指针用法吧 其实也是大相径庭&#xff0c;和前面的差不多&…