51单片机9(使用左移实现流水灯编程)

news2024/9/21 14:41:09

一、序言:下面我们来给大家介绍一下这个流水灯,流水灯如何来实现?我们依然使用这个工程来完成它。

1、那要使用实现这个流水灯,那我们只需要让D1到D8逐个的点亮,那同样要实现它足够的点亮,也会涉及到延时,那么这个延时的实现呢,我们这里就不再重复。

2、那么要实现这个循环,点亮呢,可以最容易理解的方法就是点亮D1,把D2到D8熄灭,然后延时一段时间再点亮D2,把D1,D3到D8熄灭,以此来类推,以此类推,那么这样就可以很简单的去实现LED流水灯。

3、当然,我们不推荐这种方法,在前面呢,我们学习了C语言相关的这个基础知识,我们知道里面有一个移位以及循环语句的操作,那么根据流水灯实现的原理,也就是I口,是由D,我们看到连接的D1是连接在P2.0,D8是连接在P2.7,那么他的要逐个的点亮,是不是相当于我们的管脚,P20,P21,P22,P23。这个管脚相当于它是由低到高进行逐个的输出,低电平的特点。那么我们可以将移位操作以及循环操作结合,因为它要一个一个这样的操作,就相当于循环八次对吗?那怎么来实现这么一个代码呢。

4、首先,我们先来介绍我们的移位和for语句的一个使用来让这个指示灯进行循环,那么我们要让这个八个灯循环的一个点亮,那我这里是不是要对这八个I口都要进行操作,那为了方便,我这里是通过一个宏定义,宏定义的方式,我就不单独定义广角号,我就通过define,那么在定义的这个宏的时候,使用的这个C语言的一个语句呢,是通过一个井号再加define,这是关键字。

5、通常我们在定义宏定义的时候,都会使用大写字母,那我现在要定义控制八个灯,那这八个灯,是连接在PR端口的,所以我这里是LED命名为LED端口。在哪里,P2。这里是使用宏定义的方式将我们的P2端口定义,定义P2端口是连接我们的LED,所以这里,直接可以代替P2来使用,如果说我们客户自己使用别的开发板,你可能连接到P0或者P1,那你只需要改这个端口名称就可以了,把这个2改成0或者1。那这样我们后续的代码都是用这个,就不需要再改了,这样就提高了我们的代码的一个移植性,移植性和兼容性。

4、接下来,我们再来进行一个循环的一个操作,如何来让它进行一个循环点亮。LED要实现一个跑马灯,是不是要在不断地循环,不断的循环呢?那我们的代码依然是要放在while循环里面,不断的让它在这里反复的进行操作。

5、那要进行一个循环,我们就要一个一个的点亮,那这里就要用到for循环,for循环它的条件是我们就要用一个变量来u8类型,因为这个条件,我只要循环8次,所以定一个字节的变量就足够了,我们定一个i吧,定义个i,那么这个i呢,我们起到一个次数的,一个累加到for循环里面

6、首先for语句,我们前面说过,第一个是它的一个初始条件,我们i=0,I就是它的一个循环条件,循环一个条件I小于8,说明等一下,我们后面是i++。就是说我们每一次这个加了一次,又要跳到这个条件来对比,如果是满足它进行,就会进入到我们的for语句里面,执行它的循环体,这相当于我们要执行8次,每一次是只加1的i+1,那么就相当于循环8次了。

7、那么这循环体里面怎么实现呢?我们看一下,首先让D1指示灯点亮,D1指示灯点亮,是不是P20输出一个低电平,那么接着延迟一段时间,让D2指示灯点亮,D2指示灯是不是让这个P21输出低电平,其他的输出高电平。这里我们可以写一下,首先我们让其输出低电平,其他的输出高电平,延迟一段时间之后,D2指示灯点亮,D2输出低电平,其他的输出高电平。以此类推,相当于这个0,是不是一直往下,一直往下的移位。

8、通过发现的这个规律,我们知道了其实就是将这个P2端口,P2端口一直由低到高进行移位,那么由低到高我们P2端口最低位是P2.0,然后最高位就是P2.7,所以我们要让这个零,一直往前移,那就相当于左移。

9、我们再回到这个PPt,我们单片机的管脚是P2.7,是高位。P2.6要一直到P2.0,这是对应的低位,我们相当于我们的一个字节,这是7位是最高的6543210,这是低位,所以我们由低到高位进行零相移动的话,是不是从低位往高,相当于左移。那么零往左移是不是就是这样零左移,左移多少,左移i这个i是跟着我们的这个循环的一个次数来的,当i=0的时候,满足这个条件,那进入循环体,i是等于0,这个0是不是相当于我们的i口所有的都是0,因为它是8位,如果只写一个0,相当于8位都是0,那这是不符合我们的一个功能要求,我们只希望第一个P2.0为零,其他的为1。 

二、代码:

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

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

相关文章

windows10 安装Anaconda

文章目录 1. 下载2. 安装3. 配置环境变量4. 检查是否安装成功 1. 下载 官网下载 https://www.anaconda.com/download 下载的最新版本,要求python的版本也高一些 清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 所有版本在这个网…

在 PostgreSQL 里如何实现数据的分布式事务的回滚和补偿机制?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的分布式事务的回滚和补偿机制一、分布式事务的概念与挑战(一…

书生大模型实战营-入门岛-第二关

Python实现wordcount def wordcount(text):words text.split()ans{}for word in words:if word not in ans: ans[word] 1 else: ans[word] 1 return ans text """Hello world! This is an example. Word count is fun. Is it fun to cou…

【日常记录】【CSS】display:inline 的样式截断

文章目录 1. 案例2. css属性:box-decoration-break参考地址 1. 案例 现在有一篇文章,某些句子,是要被标记的,加一些css 让他突出一下 可以看到,在最后,断开了,那如若要让 断开哪里的样式 和 开始…

@google/model-viewer 导入 改纹理 (http-serve)

导入模型 改纹理 效果图 <template><div><h1>鞋模型</h1><model-viewerstyle"width: 300px; height: 300px"id"my-replace-people"src"/imgApi/Astronaut.glb"auto-rotatecamera-controls></model-viewer>&…

【棋盘上的战舰】python刷题记录

目录 小前言 思路&#xff1a; 上代码 lucky ending 小前言 经过漫长的停更周期-----1个月 我决定铁血回归&#xff01;&#xff01;&#xff01; 思路&#xff1a; 两层for循环暴力最快了这种小小范围题&#xff0c;主要是第一行和第一列的边界处理&#xff0c;我分为…

STM32MP135裸机编程:定时器内核时钟频率计算方法

0 工具准备 STM32MP13xx参考手册 1 定时器内核时钟频率计算方法 1.1 定时器分组 STM32MP135的定时器按照时钟源不同分成了三组&#xff0c;如下&#xff1a; APB1: APB2: APB6&#xff1a; 1.2 定时器内核时钟频率计算方法 APB1DIV是APB1的分频系数&#xff0c;APB2DIV、…

docker和docker的安装

1什么是docker&#xff1f; docker是容器技术&#xff08;软件&#xff09;&#xff0c;提供标准的应用镜像&#xff08;包含应用&#xff0c;和应用的依赖&#xff09;可以轻松在docker里安装应用&#xff0c;每个应用独立容器 2.主要功能&#xff1a; 打包&#xff08;软件…

Go:基本变量与数据类型

目录 前言 前期准备 Hello World! 一、基本变量 1.1 声明变量 1.2 初始化变量 1.3 变量声明到初始化的过程 1.4 变量值交换 1.5 匿名变量 1.6 变量的作用域 二、数据类型 1.1 整型 1.2 浮点型 1.3 字符串 1.4 布尔类型 1.5 数据类型判断 1.6 数据类型转换 1.…

STM32 BootLoader 刷新项目 (四) 通信协议

STM32 BootLoader 刷新项目 (四) 通信协议 文章目录 STM32 BootLoader 刷新项目 (四) 通信协议1. 通信流程2. 支持指令3. 通信流程4. 指令结构5. 操作演示 前面几章节&#xff0c;我们已经介绍了BootLoader的整体程序框架&#xff0c;方案设计&#xff0c;以及STM32CubdeMX的配…

51单片机6(P0P1P2P3结构框架图)

一、GPIO结构框架图与工作原理 1、接下来我们介绍一下这个GPIO结构框图和工作原理&#xff0c;我们使用51单片机的GPIO分为了P0&#xff0c;P1&#xff0c;P2&#xff0c;P3这四组端口&#xff0c;下面我们就分别来介绍这四组端口它的一个内部结构&#xff0c;只有了解了内部的…

Python爬虫入门篇学习记录

免责声明 本文的爬虫知识仅用于合法和合理的数据收集&#xff0c;使用者需遵守相关法律法规及目标网站的爬取规则&#xff0c;尊重数据隐私&#xff0c;合理设置访问频率&#xff0c;不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失&#xff0c;由使用…

MySQl高级篇-事务、锁机制、MVCC

存储引擎的选择 在选择存储引擎时&#xff0c;应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统&#xff0c;还可以根据实际情况选择多种存储引擎进行组合。 InnoDB&#xff1a;是Mysql的默认存储引擎&#xff0c;支持事务、外键。如果应用对事务的完整性有比较…

C++知识要点总结笔记

文章目录 前言一、c基础1.指针和引用指针和引用的区别 2.数据类型整型 short int long 和 long long无符号类型 3.关键字conststaticconst和static的区别define 和 typedef 的区别define 和 inline 的区别const和define的区别new 和 malloc的区别constexprvolatileextern前置与…

用Speedtest-Tracker跟踪上网速度(续)

什么是 Speedtest Tracker ? Speedtest Tracker 是一款自托管互联网性能跟踪应用程序&#xff0c;可针对 Ookla 的 Speedtest 服务运行速度测试检查。 之前老苏介绍的另一个 https://github.com/henrywhitaker3/Speedtest-Tracker 已被放弃。现在这个是积极维护的替代品&#…

repo sync同步出错解决

当出现下面提示时 e list of known hosts. Fetching: 100% (1167/1167), done in 44.619s info: A new version of repo is available warning: repo is not tracking a remote branch, so it will not receive updates Repo command failed: RepoUnhandledExceptionError …

element UI时间组件两种使用方式

加油&#xff0c;新时代打工&#xff01; 组件官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker 先上效果图&#xff0c;如下&#xff1a; 第一种实现方式 <div class"app-container"><el-formref"submitForm":model&q…

Zabbix6.0监控Freeswitch状态

一、前提环境说明 1、最终实现Freeswitch监控指标信息&#xff1a; 2、环境需求&#xff1a; &#xff08;1&#xff09;需要使用Zabbix6.0及以上 &#xff08;2&#xff09;需要使用zabbix_agent2 二、实现步骤 1、zabbix_agent2添加监控键值 cat /etc/zabbix/conf.d/fr…

Git代码管理工具 — 3 Git基本操作指令详解

目录 1 获取本地仓库 2 基础操作指令 2.1 基础操作指令框架 2.2 git status查看修改的状态 2.3 git add添加工作区到暂存区 2.4 提交暂存区到本地仓库 2.5 git log查看提交日志 2.6 git reflog查看已经删除的记录 2.7 git reset版本回退 2.8 添加文件至忽略列表 1 获…

2.有限状态机

1. 标准三段式写法&#xff1a; 1.一段代表当前状态赋值&#xff1b; 2.一段代表下一个状态如何跳变 3.一段代表输出控制 一定要带上复位 前两段模板集合一样&#xff0c;第三段取决于具体需求 parameter IDLE_ST 4b0000&#xff1b; parameter TEST_ST 4b0001; ... re…