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

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

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

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

相关文章

html设计(两种常见的充电效果)

第一种 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

tomcat和nginx实现动静分离

访问nginx就是静态页面&#xff0c;nginx代理index.jsp可以访问tomcat的动态页面。 实验 1、设备以及IP地址 nginx1 192.168.10.41 tomcat1 192.168.10.51 tomcat2 192.168.10.52 2、tomcat1 的配置 创建动态页面 cd /usr/local/tomcat/webapps 创建一个目录作为一个ser…

【LeetCode 链表合集】

文章目录 1. LeetCode 206 反转链表2. NC40 链表相加 1. LeetCode 206 反转链表 题目链接&#x1f517; 解题思路&#xff1a; &#x1f50d; &#x1f427;创建一个新的节点&#xff0c;使用链表头插的方法&#xff1b; 2. NC40 链表相加 题目链接&#x1f517; 解题思路…

C++入门基础(2)

C入门基础&#xff08;2&#xff09; 1.缺省函数2.函数重载3.引用3.1 引用的概念和定义3.2 引用的特性3.3 引用的使用3.3.1引用的特性 4 .const引用5. 指针和引用的关系6.inline 1.缺省函数 • 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时&#xf…

【服务器】在Linux查看运行的Python程序,并找到特定的Python程序

在Linux查看运行的Python程序并找到特定的Python程序 写在最前面1. 使用ps命令查看所有Python进程查看详细信息 2. 使用pgrep命令查找Python进程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python进程打开的文件 5. 使用nvidia-smi命令查看GPU使用情况…

【接口自动化_06课_Pytest+Excel+Allure完整框架集成】

一、logging在接口自动化里的应用 1、设置日志的配置&#xff0c;并收集日志文件 日志的设置需要在pytest.ini文件里设置。这个里面尽量不要有中文 2、debug日志的打印 pytest.ini文件的开关一定得是true才能在控制台打印日志 import allure import pytest from P06_PytestFr…

使用 YUM 仓库和 NFS 共享存储的详细指南

使用 YUM 仓库和 NFS 共享存储的详细指南 文章目录 使用 YUM 仓库和 NFS 共享存储的详细指南一、YUM 仓库服务1.1 YUM 介绍1.2 YUM 源的提供方式1.2.1 配置本地源仓库1.2.2 配置 FTP 源1.2.3 配置 HTTP 源 1.3 网络源配置1.3.1 清华源1.3.2 163 源1.3.3 阿里云源 1.4 YUM 命令1…

IntelliJ IDEA自定义菜单(Menus)、任务栏(toolbars)详细教程

本示例是基于IDEA2024.1Ultimate版本的New UI模式下 一、自定义菜单 1、打开Settings&#xff0c;找到Menus and Toolbars 2、点击右边的Main Menu&#xff0c;点击号&#xff0c;选择Add Action 3、弹出Add Action弹窗&#xff0c;搜索或者选择你要添加的指令 二、自定义工具…

Linux命令更新-Vim 编辑器

简介 Vim 是 Linux 系统中常用的文本编辑器&#xff0c;功能强大、可扩展性强&#xff0c;支持多种编辑模式和操作命令&#xff0c;被广泛应用于程序开发、系统管理等领域。 1. Vim 命令模式 Vim 启动后默认进入命令模式&#xff0c;此时键盘输入的命令将用于控制编辑器本身&…

OpenCV 寻找棋盘格角点及绘制

目录 一、概念 二、代码 2.1实现步骤 2.2完整代码 三、实现效果 一、概念 寻找棋盘格角点&#xff08;Checkerboard Corners&#xff09;是计算机视觉中相机标定&#xff08;Camera Calibration&#xff09;过程的重要步骤。 OpenCV 提供了函数 cv2.findChessboardCorners…

LeetCode 441, 57, 79

目录 441. 排列硬币题目链接标签思路代码 57. 插入区间题目链接标签思路两个区间的情况对每个区间的处理最终的处理 代码 79. 单词搜索题目链接标签原理思路代码 优化思路代码 441. 排列硬币 题目链接 441. 排列硬币 标签 数学 二分查找 思路 由于本题所返回的 答案在区间…

【C++】入门基础(引用、inline、nullptr)

目录 一.引用 1.引用的定义 2.引用的特性 3.引用的使用场景 4.const引用 5.引用和指针的区别 二.inline 三.nullptr 一.引用 1.引用的定义 引用不是新定义一个变量&#xff0c;而是给已经存在的变量取一个别名&#xff0c;编译器不会给引用变量开辟内存空间&#xff0c…

检测精度评价指标召回率和精确率

检测精度评价指标为&#xff1a; 1、召回率&#xff08;Recall Rate &#xff09; 2、平均精度均值&#xff08;mAP&#xff09; 3、平均对数漏检率&#xff08;MR-2&#xff09; 计算 TP 和 FP 的示例 假设你有一个目标检测模型&#xff0c;并使用它检测图像…

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 获…

在conda的环境中安装Jupyter及其他软件包

Pytorch版本、安装和检验 大多数软件包都是随Anaconda安装的&#xff0c;也可以根据需要手动安装一些其他软件包。 目录 创建虚拟环境 进入虚拟环境 安装Jupyter notebook 安装matplotlib 安装 pandas 创建虚拟环境 基于conda包的环境创建、激活、管理与删除http://t.cs…

(实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee

★硬件资源&#xff1a;本文章以STM32L431RCT6做主控芯片做验证&#xff1b; ★IDE开发环境&#xff1a;RT Thread stdio&#xff1b; ★RT Thread 版本&#xff1a;V4.0.3 一、RT Thread Stdio加载软件包 1、如下图所示&#xff0c;通过RT Thread Stdio加载的软件包&#…

gd32发送数据,定义参数,接收中断

void usart_receive_data(uint8_t ucch) {usart_data_receive(UART3); } void usart_send_data(uint8_t ucch) {usart_data_transmit(UART3,(uint8_t)ucch);while(usart_flag_get(UART3,USART_FLAG_TBE) RESET); } 这是在c文件中定义函数&#xff0c;之后在h文件中声明&#…

Windows终端远程登陆Linux服务器(SSH+VScode)

W i n d o w s 终端远程登陆 L i n u x 服务器&#xff08; S S H V S c o d e &#xff09; \huge{Windows终端远程登陆Linux服务器&#xff08;SSHVScode&#xff09;} Windows终端远程登陆Linux服务器&#xff08;SSHVScode&#xff09; 文章目录 写在前面通过SSH远程连接L…

4000厂商默认账号密码、默认登录凭证汇总.pdf

获取方式&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1F8ho42HTQhebKURWWVW1BQ?pwdy2u5 提取码&#xff1a;y2u5

【总线】AXI第九课时:介绍AXI响应信号 (Response Signaling):RRESP和 BRESP

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…