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

单片机原理及应用:开关控制LED多种点亮模式

从这篇文章开始,我们不再只研究单一的外设工作,而是将LED、数码管、开关、按键搭配在一起研究,这篇文章主要介绍LED和开关能擦出怎样的火花,同时也介绍一些函数封装的知识。

由于开关有闭合与打开两种状态,LED有左移流水灯、右移流水灯、全部闪烁、高低位点亮、奇偶位点亮和内外位点亮等状态,它们之间两两组合的情况十分复杂,所以我们首先要介绍一下函数封装的思想以简化代码。

函数封装是将一段代码逻辑封装在一个函数中,以便在需要时可以重复使用。封装函数有以下几个优点:

  1. 提高代码的复用性:将一段常用的代码逻辑封装成函数后,可以在不同的地方进行调用,提高代码的复用性。

  2. 简化代码结构:将一段复杂的代码逻辑封装成函数后,可以通过函数名来调用该逻辑,使代码结构更加清晰简洁。

  3. 提高代码的可维护性:将代码逻辑封装到函数中,可以方便地对该逻辑进行修改和维护,不影响其他部分的代码。

函数封装的基本步骤如下:

  1. 定义函数名:选择一个合适的函数名,一般采用动词开头的命名方式,表示该函数所完成的操作。

  2. 定义函数参数:根据函数的需求,定义合适的参数列表,可以有多个参数,也可以没有参数。

  3. 编写函数体:在函数体中编写具体的代码逻辑,实现函数的功能。

  4. 返回结果:如果函数需要返回结果,使用 return 语句返回结果。

//头文件
#include <reg52.h>
#include<intrins.h>
//宏定义
#define  uchar unsigned char
//变量定义
sbit SW=P3^0;          
uchar temp;
//函数定义 
void  Delay()            
{uchar i, j;for (i=0;i<255;i++)for (j=0;j<255;j++);
}
void leftmove() //执行流水灯左移操作
{P1 = temp;temp = _crol_(temp,1);Delay();Delay();Delay();
}
void rightmove() //执行流水灯右移操作
{P1 = temp;temp = _cror_(temp,1);Delay();Delay();Delay();
}void shine()   //执行LED闪烁
{temp = 0;P1 = temp;Delay();Delay();Delay();temp = 0xff;P1 = temp;Delay();Delay();Delay();
}
void highorlow()   //执行高低位切换
{temp = 0x0f;P1 = temp;Delay();Delay();Delay();temp = 0xf0;P1 = temp;Delay();Delay();Delay();
}
void oddoreven()   //执行奇偶位切换
{temp = 0x55;P1 = temp;Delay();Delay();Delay();temp = 0xaa;P1 = temp;Delay();Delay();Delay();
}
void inorout()   //执行内外位切换
{temp = 0x3c;P1 = temp;Delay();Delay();Delay();temp = 0xc3;P1 = temp;Delay();Delay();Delay();
}
void main()
{P1 = 0xff;		 //上电全灭temp = 0xfe;	 //共阳极接法//temp  = 0x01;	 //采用取反操作,初值比较好设置while(1){//P1 = ~temp;{//按键判断if(SW==1){leftmove(); //需要执行什么操作封装成函数即可//shine();//oddoreven();}else{rightmove();//highorlow();//inorout();}}			}
} 

需要注意左右移动流水灯的初值在while(1)循环外,其他模式的初值都在相应的封装函数中。这是因为流水灯的temp值无法直接指定,而是在每次判断SW数值时,由库函数赋予。大家在编写代码时要注意这点。

电路如图所示,和之前的流水灯电路相比在右侧多加了一个控制开关:

 

开关控制LED点亮模式

另外笔者在学习过程中,觉得老师发的这一段代码很有意思,是一个能够自动调整的奇偶位流水灯,在函数封装里用一行顺序流水灯代码调整了奇偶位置,发出来和大家一起学习。

#include<reg52.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit sw=P3^0;
uint fl=0;
uchar tmp;
void delay(ui t)
{ui i,j;for(i=0;i<t;i++){for(j=0;j<225*225;j++){}}
}
void get_lf()
{if(tmp==0x80)tmp=0x01;else tmp=tmp<<1;delay(3);
}
void get_rt()
{if(tmp==0x01)tmp=0x80;else tmp=tmp>>1;delay(3);
}
void odd()
{if(fl==1)get_rt();if(tmp==0x40)tmp=0x01;else tmp=tmp<<2;delay(3);
}
void eve()
{if(fl==0)get_rt();if(tmp==0x80)tmp=0x02;else tmp=tmp<<2;delay(3);
}
void main()
{P1=0xff; tmp=0x01;while(1){P1=~tmp;if(sw==1){	odd();fl=0;}else {eve();fl=1;}}
}

开关控制LED点亮的内容就介绍到这里,谢谢大家。

相关文章:

单片机原理及应用:开关控制LED多种点亮模式

从这篇文章开始&#xff0c;我们不再只研究单一的外设工作&#xff0c;而是将LED、数码管、开关、按键搭配在一起研究&#xff0c;这篇文章主要介绍LED和开关能擦出怎样的火花&#xff0c;同时也介绍一些函数封装的知识。 由于开关有闭合与打开两种状态&#xff0c;LED有左移流…...

你真的了解UVM sequence的运行机制吗

1. 前言 UVM在sequence里提供了很多的callback方法给用户&#xff0c;从而更灵活地完成各种复杂场景的交互和控制执行顺序。我们可能在很多情况下只使用了body()方法&#xff0c;本文将介绍sequence里常见的callback方法&#xff0c;以及在不同场景下&#xff0c;它们的是否被…...

Bug升级记

2023.12.28 &#xff08;1) 小程序session_key泄露隐患 核心&#xff1a;session_key这个字段及对应值不应该传到小程序客户端等服务器外的环境 错误操作&#xff1a;直接在小程序调用https://api.weixin.qq.com/sns/jscode2session并将session_key作为参数进行明文传输 正确操…...

爬虫详细教程第1天

爬虫详细教程第一天 1.爬虫概述1.1什么是爬虫&#xff1f;1.2爬虫工具——Python1.3爬虫合法吗&#xff1f;1.4爬虫的矛与盾1.4.1反爬机制1.4.2反爬策略1.4.3robots.txt协议 2.爬虫使用的软件2.1使用的开发工具: 3.第一个爬虫4.web请求4.1讲解一下web请求的全部过程4.2页面渲染…...

[Linux] MySQL数据库的备份与恢复

一、数据库备份的分类和备份策略 1.1 数据库备份的分类 1&#xff09;物理备份 物理备份&#xff1a;对数据库操作系统的物理文件&#xff08;如数据文件、日志文件等&#xff09;的备份。 物理备份方法&#xff1a; 冷备份(脱机备份) &#xff1a;是在关闭数据库的时候进…...

Django、Python版本升级问题大汇总

Django3.0升级到4.1,Python3.8升级到3.11.6问题大汇总 报错1:ERROR: Could not build wheels for cffi, uWSGI, which is required to install pyproject.toml-based projects ERROR: Could not build wheels for cffi, uWSGI, which is required to install pyproject.tom…...

2023-12-30 AIGC-LangChain介绍

摘要: 2023-12-30 AIGC-LangChain介绍 LangChain介绍 1. https://youtu.be/Ix9WIZpArm0?t353 2. https://www.freecodecamp.org/news/langchain-how-to-create-custom-knowledge-chatbots/ 3. https://www.pinecone.io/learn/langchain-conversational-memory/ 4. https://de…...

pytorch01:概念、张量操作、线性回归与逻辑回归

目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量&#xff1f;2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…...

storyBook play学习

场景 在官方给出的案例中&#xff0c; Page.stories.js import { within, userEvent } from storybook/testing-library import MyPage from ./Page.vueexport default {title: Example/Page,component: MyPage,parameters: {// More on how to position stories at: https:/…...

Android Matrix画布Canvas旋转Rotate,Kotlin

Android Matrix画布Canvas旋转Rotate&#xff0c;Kotlin private fun f1() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.…...

私有部署ELK,搭建自己的日志中心(三)-- Logstash的安装与使用

一、部署ELK 上文把采集端filebeat如何使用介绍完&#xff0c;现在随着数据的链路&#xff0c;继续~~ 同样&#xff0c;使用docker-compose部署&#xff1a; version: "3" services:elasticsearch:container_name: elasticsearchimage: elastic/elasticsearch:7.9…...

2023就这样过去了,2024会更好吗?

2023年&#xff0c;不是很好 2023年是疫情后的第一年&#xff0c;疫情过去了&#xff0c;大家都有大多的希望&#xff0c;希望经济可以恢复&#xff0c;希望信心可以恢复&#xff0c;但是整体都是远远低于预期的。年初的一片热潮&#xff0c;年中的一片哀嚎&#xff0c;年底基…...

SpringBoot加载配置的6种方式

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一&#xff0c;简单回顾一下这六种的使用方式&#xff1a; 说明Environment对象Environment是springboot核心的环境配置接口&#xff0c;它提供了简单的方法来访问应用程序属性&#xff0c;包括系统属性、操作系统…...

大语言模型(LLM)训练平台与工具

LLM 是利用深度学习和大数据训练的人工智能系统&#xff0c;专门 设计来理解、生成和回应自然语言。 大模型训练平台和工具提供了强大且灵活的基础设施&#xff0c;使得开发和训练复杂的语言模型变得可行且高效。 平台和工具提供了先进的算法、预训练模型和优化技术&#xff0c…...

docker配置buildx插件

一、介绍 Docker buildx是docker的一个插件 支持Moby BuildKit的所有特性 可以跨CPU架构编译镜像 可以在多节点编译镜像 二、前提 使用 buildx 作为 docker CLI 插件需要使用 Docker 19.03 或更新版本。 三、配置步骤 1&#xff09;客户端&#xff1a;在客户端的配置文…...

mysql 空间函数

ST_GeomFromText&#xff1a;将文本表示的几何对象转换为几何对象。 SELECT ST_GeomFromText(POINT(1 1)); ST_AsText&#xff1a;将几何对象转换为文本表示。 SELECT ST_AsText(ST_GeomFromText(POINT(1 1))); ST_Contains&#xff1a;判断一个几何对象是否包含另一个几何对象…...

vscode调试 反汇编c/c++ 查看汇编代码gdb/lldb

先看下流程&#xff01; 先看下流程&#xff01; 有问题请留言&#xff01; 文章目录 必备F5开启调试左侧侧边栏->确保打开回调栈右键函数栈->查看反汇编 方法二&#xff1a;手动输入命令查看 必备 使用c/c 插件&#xff0c;这应该是必备的。 F5开启调试 左侧侧边栏-&…...

总结项目中oauth2模块的配置流程及实际业务oauth2认证记录(Spring Security)

文章目录 简单示例添加oauth2的依赖配置认证服务器配置资源服务器配置安全使用http或者curl命令测试 实际业务中工具类&#xff08;记录&#xff09;&#xff1a;认证服务器资源服务器、配置安全用户验证登录控制层配置文件application.yml 项目中用过的spring security&#x…...

传感器原理与应用复习

测量与误差 传感器原理与应用复习—测量概述与测量误差 传感器特性与应变式传感器 传感器原理与应用复习–传感器基本特性与应变式传感器 电感式传感器 传感器原理与应用复习–电感式传感器 电容式与电压式传感器 传感器原理与应用复习–电容式与压电式传感器 电磁式与…...

蓝桥杯python比赛历届真题99道经典练习题 (8-12)

【程序8】 题目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 2.程序源代码: #include "stdio.h" main() {int i,j,result;printf("\n");for (i=1;i<10;i++){ for(j=1;j<10;j++){result=i*j;printf("%d*%d=%-3…...

八个理由:从java8升级到Java17

目录 前言 1. 局部变量类型推断 2.switch表达式 3.文本块 4.Records 5.模式匹配instanceof 6. 密封类 7. HttpClient 8.性能和内存管理能力提高 前言 从Java 8 到 Java 20&#xff0c;Java 已经走过了漫长的道路&#xff0c;自 Java 8 以来&#xff0c;Java 生态系统…...

使用poi将pptx文件转为图片详解

目录 项目需求 后端接口实现 1、引入poi依赖 2、代码编写 1、controller 2、service层 测试出现的bug 小结 项目需求 前端需要上传pptx文件&#xff0c;后端保存为图片&#xff0c;并将图片地址保存数据库&#xff0c;最后大屏展示时显示之前上传的pptx的图片。需求看上…...

【微服务】springboot整合skywalking使用详解

目录 一、前言 二、SkyWalking介绍 2.1 SkyWalking是什么 2.2 SkyWalking核心功能 2.3 SkyWalking整体架构 2.4 SkyWalking主要工作流程 三、为什么选择SkyWalking 3.1 业务背景 3.2 常见监控工具对比 3.3 为什么选择SkyWalking 3.3.1 代码侵入性极低 3.3.2 功能丰…...

electron——查看electron的版本(代码片段)

electron——查看electron的版本(代码片段)1.使用命令行&#xff1a; npm ls electron 操作如下&#xff1a; 2.在软件内使用代码&#xff0c;如下&#xff1a; console.log(process) console.log(process.versions.electron) process 里包含很多信息&#xff1a; process详…...

【Electron】富文本编辑器之文本粘贴

由于这个问题导致&#xff0c;从其他地方复制来的内容 粘贴发送之后都会多一个 换行 在发送的时候如果直接&#xff0c;发送innerHTML 就 可以解决 Electron h5 Andriod 都没问题&#xff0c;但是 公司的 IOS 端 不支持&#xff0c;且不提供支持&#xff08;做不了。&#xff…...

【哈希数组】697. 数组的度

697. 数组的度 解题思路 首先创建一个IndexMap 键表示元素 值表示一个列表List list存储该元素在数组的所有索引之后再次创建一个map1 针对上面的List 键表示列表的长度 值表示索引的差值遍历indexmap 将所有的list的长度 和 索引的差值存储遍历map1 找到最大的key 那么这个Ke…...

GO语言工具函数库--Lancet

支持300常用功能的开源GO语言工具函数库–Lancet lancet&#xff08;柳叶刀&#xff09;是一个全面、高效、可复用的go语言工具函数库。lancet受到了java apache common包和lodash.js的启发。 特性 全面、高效、可复用300常用go工具函数&#xff0c;支持string、slice、dateti…...

25、商城系统(七):商城项目基础功能pom.xml(重要),mybatis分页插件

截止这一章,我们就不把重心放在前端,后台的基础代码,因为后面都是业务层面的crud。 前端直接替换这两个文件夹即可,后台代码也直接复制: 一、重新更新一下所有的pom.xml 这个地方我踩了好多坑,最后得到一个完整的pom.xml,建议大家直接用我的pom.xml替换即可。 1.comm…...

【Docker-Dev】Mac M2 搭建docker mysql

Mac M2 搭建Mysql 1、前言2、前置说明-Docker的代理访问3、前置说明-Mysql的镜像访问3.1、提取信息3.1.1、开启Mysql的实例3.1.2、Dokcer连接Mysql3.1.3、官方简易版的docker-compose3.1.4、如何登录mysql bash3.1.5、自定义my.cnf文件3.1.6、如何知道其他自定义配置项 4、M2安…...

idea中终端Terminal页面输入命令git log后如何退出

1、idea中Terminal输入命令git log后如何退出&#xff1f; 2、解决 输入q键会自动退出git log命令...

邢台网站建设服务周到/凡科建站

【2018.02】劳特利奇国防研究手册&#xff08;第一版&#xff09;Routledge Handbook of Defence Studies&#xff0c;共412页。 如果需要电子版&#xff0c;请联系QQ&#xff1a;3042075372。 Routledge是英国的一家跨国出版社&#xff0c;总部设在伦敦&#xff0c;主要在伦敦…...

昆山建设网站/地推拉新接单平台

17、字符串转换整数 (atoi) 请你来实现一个 atoi 函数&#xff0c;使其能将字符串转换成整数。 首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时&#xff0c;则将该符号与…...

济南想建设网站/百度app官方下载

centos7默认文件系统(xfs) centos6默认文件系统(ext4)XFS简介 每个单个文件系统最大支持8eb单个文件支持16tb提供备份和恢复工具文件系统的备份和恢复 XFS不需要先卸载在备份对使用中的XFS仍可保证一致性备份和恢复过程中可中断后继续高性能多线程备份操作备份简介(xfsdump) 按…...

商城网站建设咨询/郑州制作网站公司

pytorch断点续传前言一、断点续传的作用&#xff1f;二、具体步骤1.保存断点2.加载断点三、其他需注意的地方前言 当在模型训练过程中遇到下面的情况时我们就需要断点续传的技巧了 本地训练到一半但由于有其他事情或事故必须主动或被动中断正在训练的模型等待后续再继续训练云…...

wordpress微信对接/seo如何快速排名百度首页

准备材料 高筋面粉&#xff0c;分量自己把握&#xff08;据说高筋和低筋混合的比较好&#xff09;酵母粉&#xff0c;分量自己把握黄油&#xff0c;分量自己把握花生油&#xff08;有条件的可以用橄榄油&#xff09;盐糖酱油料酒番茄酱洋葱彩椒翅根芝士&#xff08;非常重要&a…...

做网站空间放哪些文件夹/猪八戒网接单平台

本例采用简单工厂模式方法实现对象的序列化&#xff0c;现已实现的三种方法为&#xff1a;Xml,Soap和Binary三种方式&#xff0c;具体实现方法如下&#xff1a; 序列化基类代码如下&#xff1a; 1 public class XSerializeTool2 {3 /// <summary>4 /…...