当前位置: 首页 > news >正文

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)

前言

大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏
  • YY的《单片机》专栏
  • YY的《数据库》专栏
  • YY的《数据库原理》专栏

目录

  • 一.点亮LED灯
    • 1.新建一个工程&存放工程的文件夹
    • 2.熟悉编译和建立文件项目的操作
    • 3.LED发光二极管介绍
    • 4.开发板图查询(LED对应独立按键和MCU的原理图,找对应接口)
    • 5.单片机的进制转换问题
    • 6.单片机控制硬件(单片机)的原理+(1位控制,8位控制的区别)
    • 7.添加头文件让编译器识别寄存器P2
    • 8.将代码下载到单片机中
  • 二.LED闪烁(1s为周期)
    • 1.用循环让二极管能够反复接收到信号
    • 2.利用STC-ISP的软件延时计算器
    • 3.完整代码(重复第二大点中,写入开发板的过程)
  • 三.LED流水灯

一.点亮LED灯

1.新建一个工程&存放工程的文件夹

  • 打开软件Keil
  • 如图所示设置一个KeilProject文件夹,shift+ctrl+n新建三个文件夹,对应我们这次要做的三个实验(LED点亮&LED闪烁&LED流水灯)
    在这里插入图片描述
  • 如下图所示步骤操作
    在这里插入图片描述
    在这里插入图片描述
  • 点击保存后,会出现【单片机器件选择界面】
  • 黄框里面是各种公司的名字,由于我们是STC,所以软件中没有出现,但我们可以选用Atmel公司的AT89c52,功能都相同
  • 找到AT89C52后,点击OK
    在这里插入图片描述
  • 随后它会询问我们是否添加启动文件,我们一般是不需要改动启动文件的,这里选择否
    在这里插入图片描述
  • 工程建立完毕
    在这里插入图片描述
  • 添加C语言文件
    在这里插入图片描述
  • 一般用C语言,C++语言效率会慢一些,汇编语言更加底层
  • 命名一个main文件
    在这里插入图片描述
  • 创建文件成功,右边是程序编辑框

2.熟悉编译和建立文件项目的操作

  • 在左上角有三个选项,分别代表【编译】,【建立工程】,【所有工程编译建立】
  • 一般选择第二个即可
    在这里插入图片描述
  • 点击【建立工程后】
    在这里插入图片描述

3.LED发光二极管介绍

  • 发光二极管:只有正极接正极,负极接负极才有电流通过在这里插入图片描述

如何区分LED的正负极?

  • 电极:小的是正极,大的是负极;
  • 引脚:长的是正极,短的是负极(长正短负)
    在这里插入图片描述
    在这里插入图片描述

4.开发板图查询(LED对应独立按键和MCU的原理图,找对应接口)

  • 可以进入该传送门,下载对应资料:传送门
    在这里插入图片描述
  • 下载解压后得到文件如下图所示
    在这里插入图片描述
    在这里插入图片描述
  • 找到对应的LED模块
    在这里插入图片描述
  • 根据对应端口,找到MCU中与其链接的口,发现控制LED的是P2寄存器
    在这里插入图片描述

在这里插入图片描述

5.单片机的进制转换问题

  • 在单片机中: 一般都是把 二进制 转换成 十六进制
  • 原因:比较好看出来,十六进制事实上是二进制的一种简写
  • 0x是一个前缀,代表后面的是十六进制数
    在这里插入图片描述

6.单片机控制硬件(单片机)的原理+(1位控制,8位控制的区别)

  • CPU通过配置控制的寄存器P2(0/1)来控制硬件电路(高低电平),(PS:该过程还要经过驱动器驱动)
  • 如下图所示:我们给P20置0,对应低电平,LED低接低高接高,第一个D1LED灯亮,其余不亮
    在这里插入图片描述

根据以上原理我们知道:

  • 我们 既可以8位方式直接控制P2寄存器 ,来控制8盏LED灯
  • 可以通过1位方式 ,如下图所示,通过控制该引脚高低电平来单独控制某一盏LED
    在这里插入图片描述
  • 相对应的代码设置会出现如下,于是我们要利用进制转换来解决这个问题
    在这里插入图片描述
  • 经过进制转换后,代码变化如下:
    在这里插入图片描述

7.添加头文件让编译器识别寄存器P2

  • 针对如下代码,编译后会报错
    在这里插入图片描述
    在这里插入图片描述
  • 我们只要包含头文件就可以解决这个问题,右键编辑栏即可
    在这里插入图片描述
  • 包含头文件成功
    在这里插入图片描述
  • 头文件展开后我们可以发现,头文件中定义了P2寄存器的地址
    在这里插入图片描述

8.将代码下载到单片机中

  • 因为Keil默认不生成程序下载的文件,所以需要我们点击下图所示图标生成
    在这里插入图片描述
  • 再次点击编译则生成下载程序文件
  • 打开软件STC-SIP
  • 选择单片机型号
    在这里插入图片描述
  • 插上单片机后,串口号会出现带USB的字样,直接选择就行
    在这里插入图片描述
  • 点击“打开程序文件”,选择文件夹中的下载程序文件
    在这里插入图片描述
  • 程序打开完毕后,点击“下载”
    在这里插入图片描述
  • 重新打开单片机开关
    在这里插入图片描述
  • 再次点击开关,点亮成功
    在这里插入图片描述

二.LED闪烁(1s为周期)

1.用循环让二极管能够反复接收到信号

  • 在明白点亮LED灯的操作后,我们引入“循环”的概念;每一次while循环,二极管都会接到一次信号;
  • 我们如下所示设计代码,会发现由于循环发生的频率太快,人眼无法捕捉到亮灭,只能一直看到微弱灯光;形成一种视觉暂停效应
    在这里插入图片描述
  • 解决方法:我们要让他每次执行后,都要有一定的延时;

2.利用STC-ISP的软件延时计算器

  • 如下图所示得到延时子程序
    在这里插入图片描述
  • 复制粘贴到程序中
    在这里插入图片描述
  • 添加_nop函数的头文件
    在这里插入图片描述

3.完整代码(重复第二大点中,写入开发板的过程)

  • 写入过程参考第二大点所示,略
    在这里插入图片描述

三.LED流水灯

  • 大体操作和第四步的LED闪烁项目一致,主要区别是代码区别
  • 先写出二进制下的状态,再转换成十六进制
  • 代码:
    在这里插入图片描述

相关文章:

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…...

Day 17------C语言收尾之链表的删除、位运算、预处理、宏定义

链表 空链表: 注意:函数不能返回局部变量的地址 操作: 1.创建空链表 2.头插 3.尾插 4.链表遍历 5.链表的长度 free:释放 删除: 头删 void popFront(struct Node *head) { //1.p指针变量指向首节点 //2.断…...

python_蓝桥杯刷题记录_笔记_全AC代码_入门5

前言 关于入门地刷题到现在就结束了。 题单目录 1.P1579 哥德巴赫猜想(升级版) 2.P1426 小鱼会有危险吗 1.P1579 哥德巴赫猜想(升级版) 一开始写的代码是三重循环,结果提交上去一堆地TLE,然后我就给减少…...

二叉树的详解

二叉树 【本节目标】 掌握树的基本概念掌握二叉树概念及特性掌握二叉树的基本操作完成二叉树相关的面试题练习 树型结构(了解) 概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。…...

【第三十五节】idea项目的创建以及setting和Project Structure的设置

项目创建 Project Structure的设置 点击file ~ Project Structure 进入...

【c++】跟webrtc学引用计数

rtc::RefCountInterface 接口类 G:\CDN\rtcCli\m98\src\rtc_base\ref_count.h引用计数想形成一种树状结构 // Interfaces where refcounting is part of the public api should // inherit this abstract interface. The implementation of these // methods is usually provid…...

开源免费的物联网网关 IoT Gateway

1. 概述 物联网网关,也被称为IOT网关,是一种至关重要的网络设备。在物联网系统中,它承担着连接和控制各种设备的重要任务,将这些设备有效地连接到云端、本地服务器或其他设备上。它既能够在广域范围内实现互联,也能在…...

华为OD机试真题C卷-篇3

文章目录 查找一个有向网络的头节点和尾节点幼儿园篮球游戏 查找一个有向网络的头节点和尾节点 在一个有向图中,有向边用两个整数表示,第一个整数表示起始节点,第二个整数表示终止节点;图中只有一个头节点,一个或者多…...

[SWPUCTF 2021 新生赛]include

他让我们传入一个flag值 我们传入即可看到代码部分 传入一个php的伪类即可 得到经过Base64加密的flag,解密即可...

LeetCode、17. 电话号码的字母组合【中等,dfs回溯】

文章目录 前言LeetCode、17. 电话号码的字母组合【中等,dfs回溯】题目与类型思路递归回溯优化:StringBuilder来回溯补充代码:2024.1.31(简化) 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博…...

SSRF漏洞给云服务元数据带来的安全威胁

文章目录 前言元数据服务威胁1.1 Metadata元数据1.2 RAM资源管理角色1.3 STS 临时凭据利用1.4 CF云环境利用框架1.5 元数据安全性增强 TerraformGoat2.1 永久性AccessKey2.2 SSRF靶场环境搭建2.3 腾讯云CVM配角色2.4 接管腾讯云控制台 SSRF组合拳案例3.1 上传图片功能SSRF3.2 文…...

【C++】强制类型转换

强制类型转换分为显式和隐式 显式直接用小括号强制转换,float b (int)a; 隐式直接 float b 0.5; int a b; C中更推荐用四个强制类型转换的关键字: 1、static_cast, 2、const_cast, 3、reinterpret_cast, 4、dynami…...

java日志框架总结(四 、JCL日志门面技术)

日志框架出现的历史顺序:Log4j → JUL → JCL → slf4j → logback → log4j2 一、背景 在前面博文中,我们分别讲述了常用的2个日志框架:JUL(Java Util Logging)、Log4J。那么如何选择使用哪一个呢? 根据项…...

mfc140.dll丢失的几种修复方式,有效的解决文件丢失问题

mfc140.dll是Microsoft Foundation Class (MFC)库中的一个非常重要的DLL文件。它承载了许多被执行程序使用的函数和资源。这个库主要被广泛应用于开发Windows操作系统上的应用程序。然而,有时候我们可能会遭遇到mfc140.dll缺失或损坏的情况,这会导致依赖…...

从一个小故事讲解观察者模式~

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 什么是观察者模式? 观察者模式在我们的日常生活中极其常见。 先来看看观察者模式的定义: 观察者模式定义了对象之间…...

LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】

文章目录 前言LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】题目与分类思路一维动态规划 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术…...

Python爬虫urllib详解

前言 学习爬虫,最初的操作便是模拟浏览器向服务器发出请求,那么我们需要从哪个地方做起呢?请求需要我们自己来构造吗?需要关心请求这个数据结构的实现吗?需要了解 HTTP、TCP、IP 层的网络传输通信吗?需要知…...

Linux嵌入式开发+驱动开发-中断

swi汇编指令可以产生软中断,以下是硬件中断的产生到执行完毕的全过程: 在自己设计的芯片“CPU响应中断”程序的第四个步骤可以转向“中断向量控制器”,中断向量控制器中存储中断元服务地址即处理中断处理程序的地址,而不用使用0X1…...

android tv开发-1,leanback

目录 1.leanback库的一些事 2.leanback在使用时遇到的一些麻烦 视频卡片 页面空白 关于左侧菜单的一些设置 数据加载异常与加载中的一些操作 如果页面无数据,如何显示错误的页面....

chisel RegInit/UInt/U

val reg RegInit(0.U(8.W)) //ok val reg RegInit(0.UInt(8.W)) //errU 使用在数字 . 后边50.U UInt 使用在IO(new Bundle val a Input(UInt(8.W)) 或者 def counter(max:UInt, a1:UInt) package emptyimport chisel3._ import chisel3.util._class MyCounter extends …...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...