51单片机实验02- P0口流水灯实验

目录

一、实验的背景和意义

二、实验目的

三、实验步骤

四、实验仪器

五、实验任务及要求 

1,从led4开始右移

1)思路 

①起始灯 (led4)

②右移

2)效果

3)代码☀

 2,从其他小灯并向右依次点亮其他小灯 

1)从led3开始右移

2)从led5开始右移

3)从led6开始右移

4)从led7开始右移

5)从led8开始右移

6)从led9开始右移

3,完成一个左移到头接着右移,右移到头再接着左移的花样流水灯程序。

 1)效果

2)代码


一、实验的背景和意义


通过流水灯实验进一步增进对51单片机电路的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。
本实验采用STC89C52RC单片机为中心器件来实现P0并行口控制8只LED小灯进行流水灯显示实验。

二、实验目的


1、进一步掌握编程软件Keil uVision4和下载软件STC-ISP-v4.80等的使用方法;
2、掌握51单片机并行口输出方式的编程;
3、掌握延时程序的编写和应用。

三、实验步骤


同51单片机实验01-点亮LED小灯-CSDN博客相应操作。

四、实验仪器


计算机1台、KST-51开发板1套。

五、实验任务及要求 

1,从led4开始右移


学号末位和小灯对应关系同51单片机实验01-点亮LED小灯-CSDN博客。具体操作见本实验的后续要求。按照上述学号末尾对应的小灯作为开始,依次向右点亮其他小灯并循环,进行流水灯显示实验,编写完整c语言代码。 

 相关资料请通过链接下载👇

链接:https://pan.baidu.com/s/1QEDpuNhcYVB6lmxFNW2z4Q?pwd=6666 
提取码:6666 
--来自百度网盘超级会员V1的分享

1)思路 

 因为我学号末尾时4,因此这里先以led4作为讨论的对象,其他的led灯皆可以此类推,进行点亮。

①起始灯 (led4)

在实验01中,因为我只需要点亮一个小灯,因此需要用到P0口的只有一位,但是如果我要实现流水灯的效果,就需要使用到P0口的其他七位,来依次点亮led灯,即用到P0.0~P0.7,分别对应led2~led9。

最右边的小灯led2的P0口需要输入0b1111 1110 ,就是将最后一个led灯输入为低电平。其它为高电平,就会亮指定的led灯。

同理,led3亮起的二进制为0b1111 1101,led4为0b1111 1011,led5为0b1111 0111.......

通过观察,不难发现,都是0的移动。如果想要实现小灯向右移动,就需要0向左移,其它位为1。这个时候就引入了位移(<<左移和>>右移)这个概念,顾名思义,位移需要在二进制中进行,因为只有二进制数的每一个位都是显示出来的。当一个数开始向左移动时,它的左边就会溢出舍弃,右边就会产生空位,且产生的空位会自动给零补全。

这个时候我将led4(0b1111 1011)向左平移<<一位

就会得到 0b1111 0110和led3的0b1111 1011不相等。显然,光通过位移是没法满足我的需求的,这个时候就可以再加上取反(~)这一运算,可以先将led4(0b1111 1011)取反→变成0b 0000 0100→之后再右移一位→得到0b 0000 0010。该二进制和led3 的0b1111 1011就差了取反。再次取反,就可得到led3。

【为什么会想到取反?主要是因为当用到位移,当一个二进制数中只有一个0,而其他位为1时,就可以对该二进制取反,进行位移,来得到我想要的效果。】

现在,我直接拿led4(0b1111 1011)取反后的结果0b 0000 0100来进行右移,最后再取反,来实现流水灯的效果。

一般来说,在代码中建议使用16进制来表示一个数,因此我将0b 0000 0100换算成十六进制,结果为0x04,之后再对0x04取反就可以表示led4这个灯,所以i编写语句:P0=~0x04。

就可以让led4灯作为起始灯亮起来。

②右移

实现右移就是让起始灯led4(因为我学号是4,就led4为例)的值0x04依次向右移>>1,并进行取反。并且需要在main方法里面定义一个变量r_move来控制向右移动的位数,当r_move为0时,表示没有移位,亮的是当前的起始灯led4,r_move=1时,向右移动1位,亮起led3,以此类推。

2)效果

从指定位置的led开始右移

3)代码☀

#include<reg52.h> 
sbit addr0=P1^0;  // 138译码器低位输入
sbit addr1=P1^1; // 138译码器中位输入
sbit addr2=P1^2;// 138译码器高位输入
sbit addr3=P1^3; // 使能端es
sbit enled=P1^4; // 使能端 e1和e2
void main(){unsigned int r_move=0;  // 右移变量unsigned int i=0;  // for循环的形参addr2=1;   // 高电平addr1=1;addr0=0;   // 低电平enled=0;addr3=1; 	 while(1){P0=~(0x04>>r_move);  // 从led4开始右移for(i=0;i<40000;i++);	  //软件延时r_move++;			 //右移的位数自增if(r_move==3){   // 如果移到最右边了,就右移位数重置位0r_move=0;}}}

 2,从其他小灯并向右依次点亮其他小灯 

以下是我的草稿:

 

呈现效果都测试过,都OK。如果不OK就评论区留言或者是私信我,最近放假,都在线。 

1)从led3开始右移

P0= ~(0x02>>r_move);

 因为led3加上右边的led2,只需要进行两个位移,所以需要修改下面代码👇

 if(r_move==2){   // 如果移到最右边了,就右移位数重置位0r_move=0;}

2)从led5开始右移

只需要修改下面两处👇 

3)从led6开始右移

 只需要修改下面两处👇

4)从led7开始右移

只需要修改下面两处👇

5)从led8开始右移

只需要修改下面两处👇

6)从led9开始右移

只需要修改下面两处👇

3,完成一个左移到头接着右移,右移到头再接着左移的花样流水灯程序。

 1)效果

从左到右再从右到左的流水灯1

2)代码

#include<reg52.h> 
sbit addr0=P1^0;  // 138译码器低位输入
sbit addr1=P1^1; // 138译码器中位输入
sbit addr2=P1^2;// 138译码器高位输入
sbit addr3=P1^3; // 使能端es
sbit enled=P1^4; // 使能端 e1和e2
void main(){unsigned int r_move=0;  // 右移变量unsigned int i=0;  // for循环的形参addr2=1;   // 高电平addr1=1;addr0=0;   // 低电平enled=0;addr3=1; 	 while(1){   // 一直循环下面的操作if(r_move>16){   r_move=0;	  //第一次从左到右再从右到左完成后,让位移重置为0}else if(r_move<8){P0=~(0x80>>r_move);  // 从led9开始右移for(i=0;i<30000;i++);	  //软件延时}else if(r_move>=8 && r_move<=16){  P0=~(0x01<<(r_move-8));  // 如果移到最右边,就将P0重新赋值,变成左移for(i=0;i<30000;i++);	  //软件延时}r_move++;			 //移动的位数自增}}

 有问题请在评论区留言或者是私信我,一天8h在线。

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

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

相关文章

美易官方:现在不考虑降息,可能需要进一步加息

美联储密集放鹰&#xff1a;现在不考虑降息&#xff0c;可能需要进一步加息 达拉斯联储主席洛根&#xff08;Lorie Logan&#xff09;周五表示&#xff0c;考虑降息还为时过早&#xff0c;理由是近期通胀数据高企&#xff0c;且有迹象显示&#xff0c;借贷成本对经济的拖累可能…

人脸识别:Arcface--loss+code

之前只接触过传统方法的人脸识别算法&#xff0c;本以为基于深度学习的方法会使用对比损失之类的函数进行训练&#xff0c;但是Arcface算法基于softmax进行了创新&#xff0c;本文未深究其详细的loss公式原理&#xff0c;在大致明白其方向下&#xff0c;运行了代码&#xff0c;…

太阳能光伏储能系统:全周期一站式解决方案

随着全球能源结构的不断变革&#xff0c;清洁能源的重要性日益凸显。太阳能光伏储能系统作为一种高效、环保的能源解决方案&#xff0c;正逐渐成为推动能源转型的关键力量。本文将详细介绍太阳能光伏储能系统的全周期一站式解决方案&#xff0c;以期为读者提供全面、深入的了解…

MacOS - brew 和 brew cask 有什么区别?

brew 是 ruby 的包管理&#xff0c;后来看 yangzhiping 的博客介绍了 brew cask&#xff0c;感觉 cask 是更好的关联关系管理&#xff0c;但是&#xff0c;我后来使用过程中&#xff0c;发现很多软件 brew cask 里没有&#xff0c;但是 brew 里面倒是挺多&#xff01;今天来给说…

SpringBoot(48)-使用 SkyWalking 进行分布式链路追踪

Spring Boot&#xff08;48&#xff09;- 使用 SkyWalking 进行分布式链路追踪 介绍 在分布式系统中&#xff0c;了解各个服务之间的调用关系和性能表现是非常重要的。SkyWalking 是一款开源的分布式系统监控与分析平台&#xff0c;能够帮助我们实现分布式系统的链路追踪、性…

Java流操作解析:深度剖析中间操作、终端操作与并行处理机制

文章目录 一、中间操作1.1 过滤&#xff08;filter&#xff09;1.2 映射&#xff08;map&#xff09;1.3 排序&#xff08;sorted&#xff09;1.4 去重&#xff08;distinct&#xff09; 二、 终端操作2.1 收集&#xff08;collect&#xff09;2.2 计数&#xff08;count&#…

使用 ChatGPT 创建在线课程:一步一步指南与提示模板

原文&#xff1a;Creating Online Courses with ChatGPT 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 谢谢 作为对你支持的感谢&#xff0c;随意定制本书中列出的任何提示&#xff0c;并将其作为你自己的重新销售。是的&#xff0c;对你免费。 它们都结构良好且用…

二叉树算法练习day.2

102.二叉树的层序遍历 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&a…

AcWing 312. 乌龟棋(每日一题)

原题链接&#xff1a;312. 乌龟棋 - AcWing题库 小明过生日的时候&#xff0c;爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘只有一行&#xff0c;该行有 N 个格子&#xff0c;每个格子上一个分数&#xff08;非负整数&#xff09;。 棋盘第 1 格是唯一的起点&#xff0c;第…

AI绘画:实例-利用Stable Diffusion ComfyUI实现多图连接:区域化提示词与条件设置

在Stable Diffusion ComfyUI中&#xff0c;有一种高级技巧可以让用户通过细致的区域化提示词来控制图像的不同部分&#xff0c;从而实现多图连接的效果。这种方法允许艺术家在同一画布上展现多个场景&#xff0c;创造出富有层次和故事性的图像。以下是实现这一效果的详细步骤。…

搜索技术 笔记

1.提高搜索精准度&#xff1a;英文输入法下的双引号 2.ctrlF 3 intitle: 限定标题里含这个东西 4. allintitle:限定标题里含几个关键词 allintitle&#xff1a;赵丽颖 知否 5.intext&#xff1a;限定文章内容的关键词 6.李子柒 inurl:cctv 7.site:cctv.com 完整的域名 …

vue2+elementUi的两个el-date-picker日期组件进行联动

vue2elementUi的两个el-date-picker日期组件进行联动 <template><el-form><el-form-item label"起始日期"><el-date-picker v-model"form.startTime" change"startTimeChange" :picker-options"startTimePickerOption…

python-基础篇-字符串、列表、元祖、字典-列表

文章目录 2.3.2列表2.3.2.1列表介绍2.3.2.1.1列表的格式2.3.2.1.2打印列表 2.3.2.2列表的增删改查2.3.2.2.1列表的遍历2.3.2.2.1.1使用for循环2.3.2.2.1.2使用while循环 2.3.2.2.2添加元素("增"append, extend, insert)2.3.2.2.2.1append 2.3.2.2.2.2extend2.3.2.2.2…

基于Java+SpringBoot+vue3点餐/外卖管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

AWS入门实践-利用S3构建一个静态网站

使用Amazon S3托管静态网站是一个流行的选择&#xff0c;因为它简单、成本效益高&#xff0c;并且易于维护。静态网站由不含服务器端脚本的文件组成&#xff0c;如HTML、CSS和JavaScript文件。下面是使用S3托管静态网站的操作步骤&#xff1a; 如果大家没有AWS免费账号&#x…

12-1-CSS 常用样式属性

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 CSS 常用样式属性1 CSS 三角形2 CSS 用户界面样式2.1 什么是界面样式2.2 鼠标…

06-kafka及异步通知文章上下架

kafka及异步通知文章上下架 1)自媒体文章上下架 需求分析 2)kafka概述 消息中间件对比 特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高&#xff08;主从&#xff09;高&#xff08;主从&#…

App应用的服务器如何增加高并发能力

大家好&#xff01;我是你们的好朋友咕噜铁蛋&#xff01;近年来&#xff0c;随着移动互联网的蓬勃发展&#xff0c;各类App应用如雨后春笋般涌现&#xff0c;用户量呈现爆发式增长。然而&#xff0c;随之而来的高并发访问问题也开始频繁出现&#xff0c;给服务器带来了极大的挑…

vue 加 websocket 聊天

<template><div style="height: 100%; width: 100%; background-color: #fff"><div class="wrap"><!-- 头部 --><div class="titleBox"><imgsrc="@/assets/image/avatar.png"style="argin: 10p…

Oracle的物理结构解析

这些图是我自己画的&#xff0c;我也会在我的公众号【会用数据库】解析。理解起来非常简单&#xff0c;而且非常好记。不用死记硬背&#xff0c;有兴趣可以来公众号看呀。