【SOC基础】单片机学习案例汇总 Part1:电机驱动、点亮LED

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 一、驱动电机
    • 1.1 直流电机介绍
    • 1.2 电机驱动代码
    • 1.3 变速控制电机驱动
  • 二、点亮LED
    • 2.1 LED介绍
    • 2.2 案例1:点亮一个LED
    • 案例2:流水灯
    • 案例3:按键点亮LED
    • 案例4:跑马灯效果实现


一、驱动电机

1.1 直流电机介绍

直流电机介绍:一种将电能和机械能互相转换的装置。一般直流电机有两极,当电极正接时,电机正转;电极反接,电机反转。
直流电机组成:永磁体(定子)、线圈(转子)和换向器。定子的主要作用是产生磁场。转子的主要作用是产生电磁转矩和感应电动势。

在这里插入图片描述
驱动芯片介绍:如果直接使用芯片的GPIO管脚去驱动大功率器件(继电器、LED等),要么将芯片烧坏,要么就驱动不起来。开发板上板载的驱动芯片是ULN2003,该芯片是一个单片高电压、高电流的达林顿晶体管阵列集成电路,可以用来驱动直流电机。
在这里插入图片描述
从上图可知,ULN2003的输入口与单片机的P1.0-P1.3连接,对应输出则是OUT1-OUT4,而J47则是提供给外部连接电机的接口,可以支持直流电机、五线四相步进电机28BYJ-48连接。本实验使用的是直流电机,电机的一根线连接在VCC上,另一根连接在OUT1上,因此可通过单片机P1.0口输出高电平来控制电机旋转,OUT1输出低电源控制电机停止。注意:单片机P1.0输出低电平时,ULN2003的OUT1并不会输出高电平导致停止,而是因为集电极开路,导致电机无电流流入致使停止。

1.2 电机驱动代码

控制直流电机驱动的代码:

#include <REGX52.H>
sbit Motor = P1^0;
void main()
{
    Motor = 1;
}

在这里插入图片描述

1.3 变速控制电机驱动

步进电机的介绍:除了直流电机外还有步进电机、舵机、无刷电机、空心杯电机等。步进电机是将电脉冲信号转换为角位移或是线位移的开环控制单元。
PWM介绍:PWM是Pulse Width Modulation的缩写,即脉冲宽度调制,简称脉宽调制。在具有惯性的系统中,可以用过对一系列脉冲的宽度进行调制,来等效获得所需要的模拟参数,常用于电机空速、开关电源等领域。
PWM重要参数:
1.频率(1/T,T指的是一个周期的时间)
2.占空比(开启时间/总时间,或是开始时间/关闭时间),占空比其实就是一个周期内高电平时间与周期的比值。占空比注意是开启时间与一个周期时间的比值。
3.精度
产生PWM的方法

在这里插入图片描述
通过改变比较值的大小进而改变占空比。比较值越大,低电平就会占比越大,占空比越低,导致LED等会比较亮(LED是给高电平会亮)。
通过PWM以及按键控制电机变速运转
ULN2003芯片介绍其实就是用为将低电流转换为高电流、低电压转换为高电压的作用。

二、点亮LED

2.1 LED介绍

中文名:发光二极管
外文名:light emitting diode,简称:LED

具有单向导电性,一般我们控制在3mA-20mA。通常我们会在LED管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为“限流电阻”。直插式发光二极管长脚为阳极,短脚为阴极。电流只能从阳极流向阴极。

2.2 案例1:点亮一个LED

由于单片机是TTL电平,因此高电平是+5V,低电平是0V。因此控制一个LED灯的亮灭就是控制负极的电平即可。通过如下的LED电路图可知,要让LED发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。
在这里插入图片描述
按键介绍:按下按键就会导通开关,相当于一根导线(低电平),当松手时开关断开(由于存在上拉电阻,所以自然状态下是高电平)
按键抖动现象:由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间的长短由按键的机械特性决定的,一般为5ms到10ms。
按键消抖方式:为了确保CPU对按键的一次闭合仅作一次处理,必须进行消抖。
一种是硬件消抖,另一种是软件消抖。为了使电路更加简单,通常采用软件消抖,一般来说一个简单的按键消抖就是先读取按键的状态,如果得到按键按下之后,延时10ms,再次读取按键的状态,如果按键还是按下状态,那么说明按键已经按下。其中延时10ms就是软件消抖处理。

在这里插入图片描述

按键电路是如何工作的?
按下就是一根导线一样,直接接地,也就是低电平;不按下的时候因为存在上拉电阻,存在电压差,因此是高电平。
(由于开发板IO都有上拉电阻,所以默认IO为高电平)
独立按键电路构成是由各个按键的一个管脚连接在一起接地,按键其他引脚分别接到单片机IO口。
单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,独立按键的一端接地,另一端与单片机的I/O口相连,开始时先给该IO口赋一高电平,然后让单片机不断地检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。
在这里插入图片描述

程序代码

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit LED1=P2^0;

void delay_10us(u16 ten_us)//当传入Ten_us=1时,大约延时10us
{
	while (ten_us--);
}	
void main (
{
	while(1)
	{
		LED1=0;//点亮
		delay_10us ( 50000) ;//大约488msLED1=i;//熄灭
		delay_10us (50000) ;
	}
}

1s=1000ms;1ms=100us。输入1时,等于10微妙。
Typedef 用于重定义数据类型名称

案例2:流水灯

什么是流水灯?流水灯的本质其实就是多个灯间隔一定时间依此亮灭,像水流一样。
流水灯的不同8个状态:
第1个状态等于0x80(10000000),
第2个状态等于0x40(01000000),
第3个状态等于0x20(00100000),
第4个状态等于0x10(00010000),
第5个状态等于0x08(00001000),
第6个状态等于0x04(00000100),
第7个状态等于0x02(00000010),
第8个状态等于0x01(00000001),
延时时间越长流水灯就流的越慢,越短就流水越快。
如何实现流水灯?
8个状态一次执行,完成后从头开始,其实就是一个循环。下面以两个
实现流水灯的代码:
第一种:功能实现了,但是写的太笨了,如果状态变多程序就会更长。

While(1{
	P0=0x80;
	delay();
	P0=0x40;
	delay();
	P0=0x20;
	delay();
	P0=0x10;
	delay();
}

第二种:改进思路:通过变量运算来得到合适的端口输出值
(1)首先定义变量unsigned char a,初值等于0x80(10000000)
(2)8个状态,其实就是a依次右移0-7位
(3)相当于是用C语言让单片机自己去运算得到每个状态的端口值,而不用自己事先去计算好。这样程序就简化了。

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16:
define LED_PORT  P2//使用宏定义将P2端口定义。
void delay_10us (u16 ten_us)//当传入Ten_us=1时,大的延时10t
{
	while(ten_ua--) :
}
void main()
{
	uB i=0;
	while(l)
		{
			for(i=0;i<8;i++)
			{
				LED_PORT=~(0x01<<2);
				delay_10us(5000);
			}
		}
}	

上图中的是左移,也可以右移,就不需要加取反的符号。

案例3:按键点亮LED

使用按键控制LED的亮灭,通过开发板上的独立按键K1控制D1指示灯亮灭。

#include <REGX52.H>
sbit LED1=P2^0;
sbit KEY1 =P3^0;
void main()
{
    if(KEY1==0)
{
LED1=0;
}
else
{
LED1=1;
}
}

案例4:跑马灯效果实现

什么是跑马灯?跑马灯和流水灯非常像,不同的是:流水灯是8颗LED其中7灭1亮,亮的在移动;跑马灯是8颗LED7亮1灭,灭的在移动。
实现思路分析
01111111 0x7f 10000000
10111111 0xbf 01000000
11011111 0xdf 00100000

(1)编程实现跑马灯,必须用到C语言的2种技巧:左移(右移)、按位取反
(2)C语言中~这个符号表示对一个数字按位取反,譬如一个数01111111按位取反后变成了10000000。而11011111按位取反后变成了00100000

void main (void)
{
	unsigned char i =0;//i控制循环次
	while (1)
	{
		unsigned char d = 0x80;//端口值
		for (i=0; i<8; i++)
			{
				PO = ~d;//d按位取反后0端口
				d >>=1;
				delay ();
			}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【QT】鼠标常用事件

新建项目 加标签控件 当鼠标进去&#xff0c;显示【鼠标进入】&#xff0c;离开时显示【鼠标离开】 将QLable提升成自己的控件&#xff0c;然后再去捕获 添加文件 改继承的类名 提升类 同一个父类&#xff0c;可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…

【Azure】存储服务:Azure 的存储账户

文章目录 一、前提知识&#xff08;建议了解&#xff09;二、介绍 Azure 存储帐户三、使用 Microsoft Azure 门户创建存储帐户 一、前提知识&#xff08;建议了解&#xff09; 在每一个云厂商中&#xff0c;都有自身的云存储&#xff0c;也有根据不同功能进行区分的不同类型的…

双目视觉检测 KX02-SY1000型测宽仪 有效修正和消除距离变化对测量的影响

双目视觉检测的基本原理 利用相机测量宽度时&#xff0c;由于单个相机在成像时存在“近大远小”的现象&#xff0c;并且单靠摄入的图像无法知道被测物的距离&#xff0c;所以由被测物的跳动导致的被测物到工业相机之间距离变化&#xff0c;使测量精度难以提高。 因此测宽仪需…

java实现pdf文件添加水印,下载到浏览器

java实现pdf文件添加水印&#xff0c;下载到浏览器 添加itextpdf依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.8</version> </dependency>文件下载到浏览器和指定路径 …

55个软件测试工具,正在做测试的你get到了吗

网络“黑色星期五”威胁&#xff0c;安全漏洞&#xff0c;网上银行盗窃&#xff0c;系统停机时间&#xff0c;以及许多这样的恶梦让全球的企业忧心忡忡难以入眠。确保性能具有加载的安全性和增强的经验是这个领域每个有能力的玩家所必备的。 我们为你提供了一个丰富的软件测试…

如何使用查看器筛选、搜索功能进行数据定位?

前言 我们曾探讨过观测云如何通过将内置视图与查看器相联结&#xff0c;实现更全面的数据关联分析。&#xff08;参见《内置视图联动查看器&#xff0c;实现数据关联分析》&#xff09;这里提到的查看器&#xff0c;实际是一个功能全面且强大的数据查看分析工具。其提供多种搜…

macOS M1安装wxPython报错‘tiff.h‘ file not found的解决方法

macOS12.6.6 M1安装wxPython失败&#xff1a; 报错如下&#xff1a; imagtiff.cpp:37:14: fatal error: tiff.h file not found解决办法&#xff1a; 下载源文件重新编译&#xff08;很快&#xff0c;5分钟全部搞定&#xff09;&#xff0c;分三步走&#xff1a; 第一步&…

【element-ui】表格

效果展示 组件代码 <el-table class"compTableClass" ref"tableOOOOO":class"(className in tableConfig)?tableConfig.className:":data"tableConfig.data" :height"tableConfig.height" style"width: 100%"…

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!

目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2&#xff0e;单样本秩和检验 四、结果解读第一&#xff0c;假设检验摘要第二&#xff0c;Wilcoxon符号检验结果摘要。第三&#xff0c;Wilcoxon符号秩检验图第四&#xff0c;数…

【c++Leetcode】287. Find the Duplicate Number

问题入口 思想&#xff1a;Floyds Tortoise and Hare 这个算法除了可以检测是否有环&#xff08;问题入口&#xff09;&#xff0c;还可以用来检测重复数。当然这还需要一个慢指针才能实现。具体请点击标题跳转到原视频&#xff0c;这里是把内容再梳理一遍。如果有不对的地方…

可以直接在线制作电子画册的网站

​随着互联网技术的发展&#xff0c;越来越多的人开始使用在线工具来制作电子画册。今天&#xff0c;小编就来介绍一款可以直接在线制作电子画册的网站&#xff0c;让你的电子画册更加精美、个性化和实用。 1.首先点击FLBOOK在线制作制作电子杂志平台 2.点击开始制作&#xff0…

【Cargo Therapeutics】申请1亿美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;美国生物制药公司【Cargo Therapeutics】近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为(CRGX),Cargo Therapeutics…

社区投稿|解码Big Vector,开启Sui超扩展性的新篇章

* 本文是来自Sui生态项目Typus团队的投稿&#xff0c;文中「我们」均指代该项目团队&#xff0c;转载时修改部分不准确的用词。 本研究报告介绍了Big Vector的概念&#xff0c;这是一种我们用于 Typus V2 的新数据结构&#xff0c;以缓解 Sui 上数组和动态字段(dynamic field)…

spring boot配置ssl(多cer格式)保姆级教程

1. 准备cer格式的证书&#xff1b; 2. 合并cer证书并转化成jks格式的证书 为啥有这一步&#xff0c;因为cer证书配置在spring boot项目中&#xff0c;项目启动不起来。如果有大佬想指导一下可以给我留言&#xff0c;在此先谢过大佬。 1&#xff09;先创建一个jks格式的证…

通过python操作neo4j

在neo4j中创建结点和关系 创建结点 创建电影结点 例如&#xff1a;创建一个Movie结点&#xff0c;这个结点上带有三个属性{title:‘The Matrix’, released:1999, tagline:‘Welcome to the Real World’} CREATE (TheMatrix:Movie {title:The Matrix, released:1999, tagl…

大厂面试题-什么是服务网格?

概述 服务网格这个概念出来很久了&#xff0c;从2017年被提出来&#xff0c;到2018年正式爆发&#xff0c;很多云厂商和互联网企业都在纷纷向服务网格靠拢。像蚂蚁集团、美团、百度、网易等一线互联网公司&#xff0c;都有服务网格的落地应用。 服务网格是微服务架构的更进一…

端到端Scrum敏捷管理流程-

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…

4.5 Object类

思维导图&#xff1a; 4.5 Object类笔记总结 1. 定义和重要性 Java提供的Object类是所有Java类的根类。直接或间接&#xff0c;所有的Java类都继承自Object类。它被称为超类。 2. 默认行为 当创建一个新的类且没有显式地使用extends关键字指定一个父类时&#xff0c;该类默认…

2023年【熔化焊接与热切割】报名考试及熔化焊接与热切割找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割报名考试根据新熔化焊接与热切割考试大纲要求&#xff0c;安全生产模拟考试一点通将熔化焊接与热切割模拟考试试题进行汇编&#xff0c;组成一套熔化焊接与热切割全真模拟考试试题&#xff0c;学员可…

MacOS安装git

文章目录 通过Xcode Command Lines Tool安装(推荐)终端直接运行git命令根据流程安装先安装Command Lines Tool后再安装git 官网下载二进制文件进行安装官方国外源下载二进制文件(不推荐)国内镜像下载二进制文件(推荐)安装git 通过Xcode Command Lines Tool安装(推荐) 简单来讲C…
最新文章