51单片机学习(4)-----独立按键进一步控制LED灯

 

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。

 

 

目录

一.  独立按键灵活控制LED 

程序一:单个独立按键控制多个LED灯

程序二:多个独立按键同时控制LED 

二.  独立按键实现LED的位移控制 

1.位运算介绍:

2.具体运用:

三.  实验视频 

 


 

一.  独立按键灵活控制LED 

 

  对于独立按键的具体介绍可以参考:51单片机学习(3),这里我们借助一些算术运算符以及一些逻辑运算符来实现不同的控制。

运算符如下:

 

 

例如:

程序一:单个独立按键控制多个LED灯

#include <REGX52.H>

void Delay(unsigned int xms)	//@11.0592MHz
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
void main()
{
	while(1)
	{
			if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			P2_0=~P2_0, P2_1=~P2_1;  //实现K1控制LED1和LED2
		}
	}
}

 

程序二:多个独立按键同时控制LED 

#include <REGX52.H>

void Delay(unsigned int xms)	//@11.0592MHz  //延时函数设置
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
void main()
{
	while(1)   //while循环语句
	{
		if(P3_1==0||P3_0==0)   //if语句,并且运用逻辑或
		{
			Delay(20);    //延时20ms,去除第一段抖动
			while(P3_1==0||P3_0==0);
			Delay(20);  //去除第二段抖动
			P2_0=~P2_0;   //按位取反,即对应的LED状态改变
		}
	}
}

 

二.  独立按键实现LED的位移控制 

 

1.位运算介绍:

按位与(&): 按位与为双位运算符,其作用于将两个二进制数逐位相与,即只要对应的两个二进制都为1时,结果为1,否则为0。

例如:1&1=1,1&0=0,0&0=0。

按位或(|):按位或也为双目运算符,其作用于将两个二进制数逐位相或,即只要对应的两个二进制中有一个为1,其结果为1,否则为0。

例如:1|1=1,1|0=1,0|0=0。

按位异或(^):进行异或运算时,当两个二进制表示不同时为1,相同则为0。

例如:1^1=0,1^0=1。

按位取反(~):按位取反即对于二进制的每一位都取反。

例如:假设1的二进制为0000 0001,则按位取反后为1111 1110。

按位左移(<<):将操作数的二进制所有位向左移动指定的位数。

例如:1的二进制0000 0001,0000 0001<<2即1的二进制数按位左移动2位,则为0000 0100。

按位右移(>>):将操作数的二进制所有位向左移动指定的位数。

例如:10的二进制为0000 1010,0000 1010>>2即10的二进制数按位右移动2位,则为0000 0010(右移两位时高位补0即右移后的第一位补0)。

注意:这里的按位左移与右移均只对于正数而言,且左移时为低位补0,右移时为高位补0。

 

2.具体运用:

源程序:

#include <REGX52.H>
void Delay(unsigned int xms)	//@11.0592MHz
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	unsigned int LEDNUM=0;  //定义移动的位数
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			LEDNUM++;   //移动的位数逐渐增加来实现逐次控制不同LED
			if(LEDNUM>=8)
			{
				LEDNUM=0;   //当移动的位数超过8时重新令位数为0,从而实现不断的逐次循环
			}
			P2=~(0x01<<LEDNUM);  //0x01本应该是第一个LED亮,但是这里马上进行了位运算,所以第一个点亮的为第二个LED然后依次被控制点亮。
		}
	}
}

 

三.  实验视频 

 

51单片机独立按键依次控制LED

感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

C语言——实用调试技巧——第2篇——(第23篇)

坚持就是胜利 文章目录 一、实例二、如何写出好&#xff08;易于调试&#xff09;的代码1、优秀的代码2、示范&#xff08;1&#xff09;模拟 strcpy 函数方法一&#xff1a;方法二&#xff1a;方法三&#xff1a;有弊端方法四&#xff1a;对方法三进行优化assert 的使用 方法五…

SORA技术报告

文档链接&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

【C++】字符类型和字符数组-string

STL-容器 - string 字符串必须具备结尾字符\0 #include<iostream> #include<string> using namespace std; //STL-容器 - string char ch[101];//字符串必须具备结尾字符\0 int main() {int n; cin >> n;for (int i 0; i < n; i) {cin >> ch[i];}…

iptables和五链四表相关规则说明

文章目录 1. iptables的作用2. iptables和netfilter的联系和区别3. 四表五链说明3.1 四表3.2 五链3.3 表与链之间的包含关系 4. iptables规则的常用命令和使用方法4.1 iptables规则组成4.2 规则数据管理 5. 常用的iptables场景5.1 禁止外部主机ping内部主机5.2 禁止某些端口访问…

Linux——动态库

Linux——动态库 gcc 指令生成动态库动态库的使用动态库与静态库区别直接装到系统中软连接LD_LIBRARY_PATH直接修改动态库的配置文件 上一次我们了解了静态库&#xff0c;这次我们来了解动态库&#xff0c;如果还有没看过上一篇静态库的小伙伴&#xff0c;可以点击这里&#xf…

【深度学习笔记】3_6 代码实现softmax-regression

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.6 softmax回归的从零开始实现 这一节我们来动手实现softmax回归。首先导入本节实现所需的包或模块。 import torch import torchvision import numpy as np import…

LeetCode206: 反转链表.

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 解题方法 假设链表为 1→2→3→∅&#xff0c;我们想要把它改成∅←1←2←3。在遍历链表时&#xff0c;将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一…

详细讲解缓冲区

目录 理解回车和换行&#xff08;\r&&\n&#xff09; 那如何实现单独的回车和换行呢&#xff1f; 缓冲区 证明有缓冲区的存在 ​编辑 怎么刷新缓冲区&#xff08;显示器缓冲区&#xff09;&#xff1f; fflush函数​编辑 缓冲区出现的意义 I/O流 模拟倒计时小程…

Nodejs 第四十章(prisma)

什么是 prisma? Prisma 是一个现代化的数据库工具套件&#xff0c;用于简化和改进应用程序与数据库之间的交互。它提供了一个类型安全的查询构建器和一个强大的 ORM&#xff08;对象关系映射&#xff09;层&#xff0c;使开发人员能够以声明性的方式操作数据库。 Prisma 支持…

EasyRecovery破解版补丁免费钥匙下载

说起数据恢复软件&#xff0c;相信没有小伙伴不知道EasyRecovery这个软件吧&#xff0c;该软件具有快捷、高效、便捷的特点&#xff0c;且提供的功能也非常全面&#xff0c;不仅可以恢复各样被删除的文件、视频、图片等&#xff0c;还可以支持SD卡数据恢复&#xff0c;TF卡等各…

深入浅出CChart 每日一课——快乐高四第六十一课 飞梯十二重,CChart三维曲线图绘制

同学们好&#xff0c;今天继续介绍CChart本身的功能。接下来这几节课呢&#xff0c;笨笨老师准备对CChart的三维视图和场图功能进行详细一些的介绍。本节课首先介绍三维曲线图。 CChart软件库的开发&#xff0c;首先是从二维曲线图开始的&#xff0c;这一部分经过长时间的打磨…

SpringBoot3+Vue3 基础知识(持续更新中~)

bean 把方法的返回结果注入到ioc中 1: 2: 3: 组合注解封装 实战篇&#xff1a; 解析token&#xff1a; 统一携带token&#xff1a; 驼峰命名与下划线命名转换&#xff1a; NotEmpty!!! mybatis&#xff1a; PageHelper设置后&#xff0c;会将pageNum,和pageSize自己拼接…

ubuntu22.04@Jetson Orin Nano之OpenCV安装

ubuntu22.04Jetson Orin Nano之OpenCV安装 1. 源由2. 分析3. 证实3.1 jtop安装3.2 jtop指令3.3 GPU支持情况 4. 安装OpenCV4.1 修改内容4.2 Python2环境【不需要】4.3 ubuntu22.04环境4.4 国内/本地环境问题4.5 cudnn版本问题 5. 总结6. 参考资料 1. 源由 昨天用Jetson跑demo程…

Spring Session:入门案例

Spring Session provides an API and implementations for managing a user’s session information. Spring Session提供了一种用于管理用户session信息管理的API。 Spring Session特点 传统的Servlet应用中&#xff0c;Session是存储在服务端的&#xff0c;即&#xff1a;Ses…

聚道云软件连接器:高科技企业财务自动化,提升效率准确性!

客户介绍&#xff1a; 某互联信息技术有限公司是一家专业从事信息技术服务的高科技企业&#xff0c;在业内享有较高的知名度和影响力。近年来&#xff0c;公司业务快速发展&#xff0c;对信息化建设提出了更高的要求。 客户痛点&#xff1a; 在传统情况下&#xff0c;该公司的…

【探索Linux】—— 强大的命令行工具 P.23(线程池 —— 简单模拟)

阅读导航 引言一、线程池简单介绍二、Linux下线程池代码⭕Makefile文件⭕ . h 头文件✅Task.hpp✅thread.hpp✅threadPool.hpp ⭕ . cpp 文件✅testMain.cpp 三、线程池的优点温馨提示 引言 在Linux下&#xff0c;线程池是一种常见的并发编程模型&#xff0c;它能够有效地管理…

大模型综述总结--第一部分

1 目录 本文是学习https://github.com/le-wei/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf的总结&#xff0c;仅供学习&#xff0c;侵权联系就删 目录如下图 本次只总结一部分&#xff0c;刚学习有错请指出&#xff0c;VX关注晓理紫&#xff0c;关注后续。 2、概述…

字符函数和字符串函数(C语言进阶)(一)

前言 C语言中对字符和字符串的处理是很频繁的&#xff0c;但是c语言本身是没有字符串类型的&#xff0c;字符串通常放在常量字符串中或着字符数组中。 字符串常量适用于哪些对它不做修改的字符串函数。 1、函数介绍 1.1 strlen strlen&#xff1a;计算字符串长度 看一个代码&…

“AI教父”李一舟翻车,中国AI培训路在何方

近日&#xff0c;AIGC领域掀起了一场不小的风波&#xff0c;知名AI博主李一舟在各大平台推出的AI课程突然下架&#xff0c;其账号遭到禁止关注的情况。 这一事件不仅引发了广泛关注和热议&#xff0c;更让许多真正想学习AIGC的用户感到迷茫和困惑&#xff1a;在众多的AIGC课程中…