单片机原理及应用:开关控制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点亮的内容就介绍到这里,谢谢大家。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

el-table表格自动循环向上滚动鼠标放上去停止,移开恢复

排序的图标是两个图片&#xff0c;点击向后端发请求带不同的参数 <template><div style"height: 100%" class"table-content"><div :style"{ position: absolute, z-index: 9999, right: 3%, top: 0 }":class"tagBtn bg${c…

MySQL例行检查

MySQL例行检查 1.实例例行检查1.1线程1.2索引1.3临时表1.4连接数1.5BINLOG1.6锁1.7WAIT事件1.8MySQL状态 2.事务与锁例行检查2.1查看索引的cardinality2.2查看是否存在事务阻塞现象2.3查看事务执行时长以及执行的所有SQL2.4事务与锁 3.库表例行检查3.1查看缺失主键的表3.2冗余索…

【网络安全 | Misc】miss_01 太湖杯

解压时提示输入密码&#xff1a; 如果 frFlags 或 deFlags 不为0会导致zip的伪加密 将deFlags的值修改为0 将9改为0&#xff0c;另存为123.zip&#xff1a; 即可绕过加密&#xff1a; 得到一个zip一个docx&#xff0c;但zip需要密码&#xff1a; 因此看docx有无敏感信息&#x…

文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题

一、用go语言&#xff0c;写出 RIGHT-ROTATE 的伪代码。 文心一言&#xff1a; 在计算机科学中&#xff0c;右旋转&#xff08;RIGHT-ROTATE&#xff09;是一种常见的操作&#xff0c;通常用于数组或链表。以下是一个使用Go语言实现右旋转的伪代码&#xff1a; func rightRo…

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可&#xff0c;Maven会自动获取对应的jar包&#xff0c;但是oracle驱动依赖添加后会显示红色&#xff0c;代表找不到依赖项&#xff0c;是因为Oracle授权问题&#xff0c;Maven3不提供Oracle JDBC driver&#xff0c;为了在Maven项目中…

基于JAVA的农家乐订餐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

springmvc中controller路由出现404

[java]springmvc中controller路由出现404 problem [java]springmvc中controller路由出现404 reason 可能原因有很多 idea配置不对编译配置不对xml配置jsp位置 solution 核对idea配置 mac: idea->File -> Project Structure 最重要的是 Artifacts&#xff0c;默认配…

金三银四-JAVA核心知识高频面试题

又要快到一年一度的金三银四&#xff0c;开始复习啦&#xff5e;&#xff01; 每天一点点。。 目录 一、内存模型设计 二、synchronized和ReentrantLock的区别 三、垃圾回收机制 四、优化垃圾回收机制 4.1 了解应用需求 4.2. 调整堆大小 4.3. 减少对象分配 4.4. 使用合…

进阶学习——Linux系统服务器硬件认识与RAID磁盘

目录 一、服务器知识补充 1.硬件 2.服务器常见故障 二、认识RAID 1.什么是RAID 2.RAID的优点 3.RAID的实现方式 三、RAID磁盘陈列 1.RAID 0 磁盘陈列介绍——RAID 0 2.RAID 1 磁盘陈列介绍——RAID 1 3.RAID 5 磁盘陈列介绍——RAID 5 4.RAID 6 磁盘陈列介绍——RA…

基于SpringBoot实现的前后端分离电影评分项目,功能:注册登录、浏览影片、热门影片、搜索、评分、片单、聊天、动态

一、项目介绍 本项目主要基于SpringBoot、Mybatis-plus、MySQL、Redis实现的影片评分项目。 本系统是前后端分离的&#xff0c;分别由三个子项目构成&#xff1a;java服务端、用户前端、管理员管理前端 关键词&#xff1a;springboot java vue mysql reids websocket 毕业设计…

Windows 10启用Hyper-V

Windows 10启用Hyper-V 官网教程PowerShell 启用 Hyper-V启用 Hyper-V 角色 我们知道VMware是创建虚拟机的好工具&#xff0c;那Windows平台上有没有虚拟工具呢&#xff1f; 今天我们要讲解的就是Windows才入局的虚拟工具&#xff1a;Hyper-V 官网教程 https://learn.microsof…

【中南林业科技大学】计算机组成原理复习包括题目讲解(超详细)

来都来了点个赞收藏关注一下再走呗&#x1f339;&#x1f339;&#x1f339;&#x1f339; 第1章&#xff1a;绪论 1.冯诺依曼机特点&#xff0c;与现代计算机的区别 冯诺依曼计算机的基本思想是&#xff1a;程序和数据以二进制形式表示&#xff0c;存储程序控制。在计算机中&…

结构体:搜索链表

#include<iostream> #include<iomanip> using namespace std; struct Student //创建结构体Student {int number; //学号char name[20]; //姓名float Chinese, Math, English; //成绩语数英Student* next; //下一个节点 }; Student* CreateList() //创建链表 {Stud…

【CSS】基础知识梳理和总结

1. 前言 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;用来为HTML文档添加样式的计算机语言。HTML中加载样式的方法有三种&#xff1a; 通过<link>标签加载外部样式表&#xff08;External Style Sheet&#xff09;&#xff0c…

test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking

拓展阅读 test 之 jmockit-01-overview jmockit-01-test 之 jmockit 入门使用案例 mockito-01-overview mockito 简介及入门使用 PowerMock Mock Server ChaosBlade-01-测试混沌工程平台整体介绍 jvm-sandbox 入门简介 wiremock WireMock是一个流行的开源工具&#xf…

副业类小报童热门专栏TOP15

今天介绍15个副业小报童&#xff0c;可以说是当前小报童平台&#xff0c;副业类专栏的天花板内容了 这些专栏&#xff0c;都有免费内容可以查看&#xff0c;而且还是3天无理由退款的&#xff0c;完全可以尝试着订阅一波 关键单价都非常亲民&#xff0c;怎么都不亏&#xff01…

C++/CLI——1简介

C/CLI——1简介 如果你是.net程序员&#xff0c;不免会用到C/C写的库。对于简单的调用&#xff0c;可以直接使用DllImport来完成就可以&#xff0c;详情可参考C#调用C/C从零深入讲解。但是对于复杂的C类和对象&#xff0c;尤其是类似于OCC的大型C项目&#xff0c;DllImport可能…

简单几步制作翻页电子画册

翻页电子画册是一种非常流行的电子书形式&#xff0c;它能够以生动、美观、有趣的方式展示您的内容。如果您想要制作自己的翻页电子画册&#xff0c;以下是一些简单的步骤&#xff0c;可以帮助您轻松上手。 首先&#xff0c;你需要一款在线制作电子杂志平台。比如FLBOOK&#x…

再薅!Pika全球开放使用;字节版GPTs免费不限量;大模型应用知识地图;MoE深度好文;2024年AIGC发展轨迹;李飞飞最新自传 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f440; 终于&#xff01;AI视频生成平台 Pika 面向所有用户开放网页端 https://twitter.com/pika_labs Pika 营销很猛&#xff0c;讲述的「使…

elasticsearch列一:索引模板的使用

概述 近期一直在负责es这块&#xff0c;就想着和大家分享一些使用经验&#xff0c;我们从存储、查询、优化、备份、运维等几个方面来做分享。今天咱们先看下如何更加合理的存储数据。 初见索引模板 记得刚接触es还是18年那会&#xff0c;项目上线后因一些原因导致日志这部分的…