【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 ();}
}
相关文章:

【SOC基础】单片机学习案例汇总 Part1:电机驱动、点亮LED
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

【HTML】HTML基础知识扫盲
1、什么是HTML? HTML是超文本标记语言(Hyper Text Markup Language)是用来描述网页的一种语言 注意: HTML不是编程语言,而是标记语言 HTML文件也可以直接称为网页,浏览器的作用就是读取HTML文件ÿ…...

【Mybatis-Plus】常见的@table类注解
目录 引入Mybatis-Plus依赖 TableName 当实体类的类名在转成小写后和数据库表名相同时 当实体类的类名在转成小写后和数据库表名不相同时 Tableld TableField 当数据库字段名与实体类成员不一致 成员变量名以is开头,且是布尔值 编辑 成员变量名与数据库关…...
Android WMS——操作View(七)
上一篇文章我们将 view 传递给 ViewRootImpl 进行操作,这里我们主要分析 ViewRootImpl 对 View 进行操作。在正式分析之前我们先来介绍以下 View。 一、View介绍 最开始学习 View 的时候最先分析的是它的布局(LinearLayout、FrameLayout、TableLayout、RelativeLayout、Abso…...
算法__数组排序_冒泡排序直接选择排序快速排序
文章目录 冒泡排序算法说明代码实现 直接选择排序算法说明代码实现 快速排序算法说明代码实现 本篇主要讲解数组排序相关的三种算法,冒泡排序,直接排序和快速排序。 冒泡排序 算法说明 在数组中依次比较相邻的两个元素,当满足左侧大于右侧时…...

ByteBuffer的原理和使用详解
ByteBuffer是字节缓冲区,主要用户读取和缓存字节数据,多用于网络编程,原生的类,存在不好用,Netty采用自己的ByteBuff,对其进行了改进 1.ByteBuffer的2种创建方式 1.ByteBuffer buf ByteBuffer.allocate(i…...

【MySql】10- 实践篇(八)
文章目录 1. 用动态的观点看加锁1.1 不等号条件里的等值查询1.2 等值查询的过程1.3 怎么看死锁?1.4 怎么看锁等待?1.5 update 的例子 2. 误删数据后怎么办?2.1 删除行2.2 误删库/表2.3 延迟复制备库2.4 预防误删库 / 表的方法2.4.1 账号分离2.4.2 制定操…...

【三方登录-Apple】iOS 苹果授权登录(sign in with Apple)之开发者配置一
记录一下sign in with Apple的开发者配置 前言 关于使用 Apple 登录 使用“通过 Apple 登录”可让用户设置帐户并使用其Apple ID登录您的应用程序和关联网站。首先使用“使用 Apple 登录”功能启用应用程序的App ID 。 如果您是首次启用应用程序 ID 或为新应用程序启用应用程序…...

可视化 | 数据可视化降维算法梳理
文章目录 📚数据描述🐇iris🐇MNIST 📚PCA🐇算法流程🐇图像描述 📚Kernel-PCA🐇算法流程🐇图像描述 📚MDS🐇算法流程🐇图像描述 &#…...

分布式:一文吃透分布式事务和seata事务
目录 一、事务基础概念二、分布式事务概念什么是分布式事务分布式事务场景CAP定理CAP理论理解CAPCAP的应用 BASE定理强一致性和最终一致性BASE理论 分布式事务分类刚性事务柔性事务 三、分布式事务解决方案方案汇总XA规范方案1:2PC第一阶段:准备阶段第二…...

Java架构师前沿技术
目录 1 导学2 信息物理系统2.1CPS的体系架构2.2 CPS的技术体系3 人工智能4 机器人5 边缘计算6 数字李生体7 云计算7.1 云计算的部署模式8 大数据想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 信息物理系统 信息物理系统(CPS)是控制系统、嵌入式系统的扩展与…...
OpenCV ycrcb颜色空间
Opencv中有一个Ycrcb的选项,这个选项其实是Yuv444packet. 下面代码从文件中获取到一个yuv444planar的文件,通过手动转换,将其转为YcrCb,然后进行颜色空间csc. 所以可以确定这是一个packet的存储格式 def yuv444p_2_bgr8_opencv(…...

SPSS两独立样本t检验
前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…...

视频格式高效转换:MP4视频批量转MKV格式的方法
随着数字媒体技术的不断发展,视频格式转换已经成为了我们日常工作中不可或缺的一部分。不同的视频格式适用于不同的场景和设备,因此将视频从一种格式转换为另一种格式往往是我们必须完成的任务。在本文中,我们将重点介绍如何运用云炫AI智剪高…...

0028Java程序设计-智能农场监控报警系统设计与实现
文章目录 摘要目 录系统设计开发环境 摘要 我国是一个以农业为主的国家,在当今社会信息化迅速发展的背景下,将信息技术与农业相融合是必然的趋势。现代信息技术在农业生产中的运用,主要体现在两个领域:一是传感器技术;…...

数据结构和算法——用C语言实现所有图状结构及相关算法
文章目录 前言图的基本概念图的存储方式邻接矩阵邻接表十字链表临界多重表 图的遍历最小生成树普里姆算法(Prim)克鲁斯卡尔算法(Kruskal) 最短路径BFS求最短路径迪杰斯特拉算法(Dijkstra)弗洛伊德算法&…...
JavaScript一些数据类型介绍
JavaScript一些数据类型介绍 1)数字类型(Number):可以表示整数和浮点数,例如:42、3.14159。 var x 42; // x 的类型是 Number var y 3.14159; // y 的类型是 Number2)字符串类型(…...
正向代理和反向代理与负载均衡
自存用 什么是反向代理,反向代理与正向代理的区别 一文帮你梳理清楚「正向代理和反向代理的区别与联系」 什么是反向代理服务器 正向代理为用户服务,给用户换个ip使其能访问其他网站 反向代理为服务器服务,使用户访问特定网站服务器。反向代…...

制造执行系统(MES)的核心功能是什么?
“一般来讲,制造执行系统(MES)的功能模块包括过程监控,质量管理,设备监控,计划执行等功能模块。” 为了深入探讨MES的核心功能,本文将从以下3个方面展开说明: 首先,从概…...

uniapp如何使用mumu模拟器
模拟器安装 下载地址:MuMu模拟器 模拟器相关设置 1.在设置-显示中选中手机版,设置手机分辨率 2.设置-关于手机-版本号快速点击,将其设置为开发者模式 3.选择多开器 4.打开hbuilderx,找到adb设置 5.配置adb路径及端口号&#x…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...