【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.rhkb.cn/news/177883.html

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

相关文章

路由导航守卫

路由导航守卫有哪些&#xff1a; 全局守卫 组件内守卫 独享守卫 1.全局守卫 beforeEach 全局前置守卫 beforeResolve 全局解析守卫 afterEach 全局后置守卫 在创建实例的过程中&#xff0c;我们可以定义全局守卫&#xff1a; 2.独享守卫 beforeEnter 就是放到routes中定义的&…

上市公司-供应链效率数据集(2000-2022年)

参照张倩肖&#xff08;2023&#xff09;、Feng&#xff08;2015&#xff09;、张树山&#xff08;2023&#xff09;的做法&#xff0c;团队以库存周转天数来衡量供应链效率 库存周转天数有效克服了因企业保留安全库存而导致供应链效率较低的测算误差&#xff0c;体现供应链上…

MATLAB R2023a下载链接及软件安装教程

先解释下什么是A什么是B&#xff0c;省的有些小菜们总问。 a是上半年&#xff0c;b是下半年版本&#xff0c;但是有些小弱们总是觉得只要是b一定功能多&#xff0c;这不一定的&#xff0c;同年版本b比a可能稍微全点&#xff0c;不同年的&#xff0c;比如21b&#xff0c;22a&am…

最新ai系统ChatGPT商业运营版网站源码+支持GPT4.0/支持AI绘画+已支持OpenAI GPT全模型+国内AI全模型+绘画池系统

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

2103. 环和杆

2103. 环和杆 难度: 简单 来源: 每日一题 2023.11.02 总计有 n 个环&#xff0c;环的颜色可以是红、绿、蓝中的一种。这些环分别穿在 10 根编号为 0 到 9 的杆上。 给你一个长度为 2n 的字符串 rings &#xff0c;表示这 n 个环在杆上的分布。rings 中每两个字符形成一个…

新版Idea显示Git提交人信息

新版Idea的类和方法上会展示开发者信息 不想展示的话可以做以下配置&#xff1a;

ModStartCMS v7.5.0 内外网映射节流,安全使用增强

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

找工作时如何快速了解一家公司?看他们招聘就知道

每一位求职者&#xff0c;都希望自己能够对感兴趣或者符合自己期望条件的公司有一个全面而深入的了解。如何在找工作或者找实习的时候&#xff0c;快速地了解一家公司&#xff0c;那就看看他们的招聘吧&#xff01; 1、从招聘信息洞察公司格局 有些公司的招聘信息中&#xf…

回归预测 | Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测

Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测 目录 Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量…

protected by SourceGuardian and requires a SourceGuardian loader ‘ixed.8解决方案

php相关问题 安装程序提示以下内容 遇到某些php程序的安装提示&#xff1a; PHP script ‘/www/wwwroot/zhengban.youyacao.com/install/index.php’ is protected by SourceGuardian and requires a SourceGuardian loader ‘ixed.8.1.lin’ to be installed. 1) Click her…

移动硬盘只读模式怎么取消?

当硬盘驱动器处于为只读模式时&#xff0c;您仅能读取保存在该驱动器中的数据&#xff0c;但却无法添加新数据和修改当前数据。如果您想要对数据做一些改变就需要取消只读模式。那么&#xff0c;移动硬盘只读模式怎么取消&#xff1f; 方案一&#xff1a;使用命令提示符移除只读…

日本移动支付Merpay QA团队的自动化现状

Merpay是日本最大的网购平台之一Mercari的无现金支付系统。Merpay 的主要功能是让用户在 Mercari的网站上购物&#xff0c;也可以在日本的许多实体店和餐厅使用它&#xff0c;也可以理解为日本的“支付宝”。以下为Merpay QA 团队在自动化方面的一些思考&#xff1a; 这几年&am…

Linux0.11内核源码解析-malloc

malloc介绍 Linux内核版本0.11中的malloc.c文件实现了内存分配的功能。在这个版本的Linux内核中&#xff0c;malloc.c文件包含了内核级别的内存分配函数&#xff0c;用于分配和释放内核中的内存。这些函数可以帮助内核管理可用的内存&#xff0c;并允许内核动态地分配和释放内…

投资者如何保障个人利益?行业律师与欧科云链专家给出建议

香港作为全球加速拥抱Web3变革的引领之地&#xff0c;规定自今年6月起在香港经营虚拟资产服务业务需申领牌照。蜂拥而至的Web3创业公司&#xff0c;伺机而动的加密货币交易所&#xff0c;以及跃跃欲试的行业从业者&#xff0c;都让这座金融之都热闹非凡。但近期伴随JPEX诈骗案等…

基于单片机设计的电子柜锁

一、前言 随着现代社会的不断发展&#xff0c;电子柜锁的应用越来越广泛。传统的机械柜锁存在一些不便之处&#xff0c;例如钥匙容易丢失、密码容易泄露等问题。设计一款基于单片机的电子柜锁系统成为了一个有趣而有意义的项目。 该电子柜锁系统通过电磁锁作为柜锁的开关&…

【强化学习】14 —— A3C(Asynchronous Advantage Actor Critic)

A3C算法&#xff08; Asynchronous Methods for Deep Reinforcement Learning&#xff09;于2016年被谷歌DeepMind团队提出。A3C是一种非常有效的深度强化学习算法&#xff0c;在围棋、星际争霸等复杂任务上已经取得了很好的效果。接下来&#xff0c;我们先从A3C的名称入手&…

电脑如何录制小视频

如果你想在你的电脑上录制视频分享给你的朋友或者亲人&#xff0c;无论你的电脑是win还是mac&#xff0c;都可以在本篇文章中找到电脑录制视频的详细教程。小编为你们整理了2种不同系统电脑的录制详细流程&#xff0c;继续阅读查看吧&#xff01; 第一部分&#xff1a;windows…

计算样本方差和总体方差

例如&#xff0c;给出了三个数据&#xff0c;194、183、175&#xff0c;现在计算样本方差和总体方差。 手工计算 它们的平均值 样本方差 总体方差 用excel计算 样本方差 总体方差

ChatGPT对未来发展的影响?一般什么时候用到GPT

ChatGPT以其强大的自然语言处理能力对未来的发展具有重要影响。以下是ChatGPT的潜在影响和一般使用情况&#xff1a; 改善自然语言理解和生成&#xff1a;ChatGPT和类似的模型可以改善机器对人类语言的理解和生成。这将有助于改进各种应用领域&#xff0c;包括智能助手、聊天机…

恒驰服务 | 华为云数据使能专家服务offering之大数据建设

恒驰大数据服务主要针对客户在进行智能数据迁移的过程中&#xff0c;存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题&#xff0c;通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容&#xff0c;支撑客户实现快速稳定上云&#xff0c;有效降低时间成本…