【51单片机】独立按键控制LED灯(四种形式)

本文详细介绍了独立按键的工作原理,如何通过C51编程控制LED灯的亮灭、状态变化、二进制显示和移位。涉及数据运算、基本语句、消抖处理等内容,适合初学者和进阶者参考。

💖 作者简介:大家好,我是泽奀。🏆全栈领域新星创作者  作者周榜:81  总排名:6434 👑 

📝 个人主页:weixin_52632755的博客_泽奀_CSDN博客

🎉 点赞➕评论➕收藏 == 养成习惯😊

📣 系列专栏:【51单片机】系列_泽奀的博客-CSDN博客

💬 总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊

✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本。

💬本系列哔哩哔哩江科大51单片机的视频为主以及自己的总结梳理📚 

目录

🎃独立按键介绍 

🏓独立按键原理图

🎡独立按键控制LED灯亮灭

🎉C51数据运算 

🎉C51基本语句C51数C51数据运算C51数据运算据运算

🎄独立按键控制LED灯状态

🎋按键的抖动

🏒独立按键控制LED显示二进制

🥍独立按键控制LED灯移位


🎃独立按键介绍 

  • 轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
  • 英文:independent press button
  • 了解:独立按键具有四个"头",独立按键主要有四个部分:1、底座,2、金属弹片(这个金属弹片是鼓起来的,当你按下去的时候它会变平,松手的时候又会鼓起来的),3、就是按键的头,4、就是金属的盖子。那么在相同的两个引脚当中其实它就是内部连接起来的金属片,无论你按不按下去,它前后的两个引脚都是连接起来的。就是始终都是具有导通性质的,向外具有两个接触的点。按下的时候四个引脚全部都是连接的,松手的时候两边分别连接,之间是断开的。
  • 如下图实物所示:

🏓独立按键原理图

  •  这里总共有四个独立按键,它们公共的一段都接到了GND电源的负极,另一端引出了四个编号是连接到单片机板子中的MCU上面,还有一段是接到了IO口上。如下图所示:

  • 那我们就知道了单片机上电的时候所有的IO口默认都是高电平,那么就是当是如果按键没有按下的时候那么这个IO口保证的就是高电平,按下的话那么这个IO口就变成低电平了。寄存器会检测IO口的电平,然后在读回来这个寄存器当中。如果按键松开"我"因该去读取这个寄存器那么它其实就是一个高电平默认为1的一个高电平,反之。那么根据这个现象我们可以得知我们的独立按键是不是被按下了。

🎡独立按键控制LED灯亮灭

#include <REGX52.H>
int main(void)
{
	while(1)
	{
		if(P3_1==0 || P3_0==0)	//如果K1按键或K2按键按下
		{
			P2_0=0;		//LED1输出0,点亮
		}
		else
		{
			P2_0=1;		//LED1输出1,熄灭
		}
	}
}

 注意:独立按键K1按键与K2按键按键网络编号是相反的,K1=P3_1、K2=P3_0。

🎉C51数据运算 

算术运算符:加减没什么好说的,乘法和除法注意一下符号!以及除法是取整的不是四舍五入按照数学的运算来的,比方举个例子:五除以二,按照数学的方式是:2.5,在C语言当中是2取最小整数,当然这是int数据类型当中是这个样子。也有单精度浮点型(float)和双精度浮点型(double)它们依旧是等于2.5的。那么取余(%)是什么意思呢?其实很简单就是还是以五除以二的话在小学当中是2...1,那么这个其实就是5%2=1了。再比方说102/10 = 10...2 那么102%10 = 2,所以除号与取余就是这个意思了。赋值就是把右边得出的值或者说是结果赋值到你左边的这个变量。

判断运算符:这个没什么好说的,就是在表达式的值经常有判断表达式,如果你的表达式的值为真,那么就执行表达式里面大括号(作用域)里面的内容。在这里注意下等于的判断表达式的符号。

逻辑运算符:假设 a = 1,b = 0;

  • && 称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
  •  ||   称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真 (A || B) 为真。
  •  !    称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

位运算

  • 按位与操作,按二进制位进行"与"运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
  • 按位或运算符,按二进制位进行"或"运算。运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

  • 异或运算符,按二进制位进行"异或"运算。运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

  • 取反运算符,按二进制位进行"取反"运算。运算规则:~0001 = 1110;

  • << 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)

  • >> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

🎉C51基本语句C51数C51数据运算C51数据运算据运算

这些语句都是单片机以及变成语言比较重要的语句!像这个判断语句if以及switch语句,以及while和for的循环语句在单片机中都是很重要的。这些都是必须要掌握的知识点!大家可以多上手代码,熟练掌握这些判断语句和循环语句。任何复杂的程序都可以由顺序、选择、循环来进行程序代码的实现,上面的代码就是典型的if—else的语句。

🎄独立按键控制LED灯状态

#include <REGX52.H>
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
int main(void)
{
	while(1)
	{
		if(P3_1==0)			//如果K1按键按下
		{
			Delay(20);		//延时消抖
			while(P3_1==0);	//松手检测
			Delay(20);		//延时消抖
			
			P2_0=~P2_0;		//LED1取反
		}
	}
}

🎋按键的抖动

  • 对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。

在按键闭合的时候会产生一些抖动没有按键按下的话它就是一个高电平(1)(单片机上电的时候所有的IO口默认都是高电平。在我们按下按键的时候它就会变成(0),并且由于它的是机械触电会弹开,然后上下抖动几下,然后才会稳定的变成(0)。抖动的时间上面图中也表示的是(5~10)ms。当抖动消失的时候进入了一个稳定的低电平(0),这个持续时间是看你手什么时候松开这个按键。在松手的时候也会产生抖动,它也不会突然变成高电平(1),也会抖动产生时间为(5~10)ms。最后,松手。 

按键的消抖有两种方法:

  1. 加个线,把这个线通过这些电路里面进行一些触发器等等,通过一些电路来进行操作,把这个抖动进行一些过冲,然后再给我们单片机进行点上。比较麻烦!
  2. 通过软件来进行一个延迟函数,把这个消抖进行操作!

🏒独立按键控制LED显示二进制

#include <REGX52.H>
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
int main(void)
{
	unsigned char LEDNum = 0;
	while(1)
	{
		if(P3_1==0)			
		{
			Delay(20);		
			while(P3_1==0);
			Delay(20);		
							
			LEDNum++;	
			P2=~LEDNum;      
		}
	}
}
  • 这里用 unsigned char 类型是因为:无符号字符型(所占1字节 = 8bit位)刚好对应着8位二进制的数据,那这八位二进制的正好这个P2口和这个寄存器51单片机保持一致。
  • 注意:P2口上电之后和单片机的IO上电一样都是默认的是高电平! 1111 1111
  • LEDNum取反给P2的话,其实变量取反给P2的值上它是并不会改变这个变量的值。它的值还是没有取反的值。在等号右边的话,它并不会改变LEDNum的值。其实就是取反当中你取反的值是右值就不会被改变。

🥍独立按键控制LED灯移位

#include <REGX52.H>

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
int main(void)
{
	unsigned char LEDNum = 0;//进行初始化
	P2 = 0xFE;			
	while(1)
	{
		if(P3_1 == 0)	//如果当独立按键K1按下的话 —— LED灯移位
		{
			Delay(20);	//按键消抖
			while(P3_1 == 0);		//检测松手
			Delay(20);	//按键消抖
			
			LEDNum++;	//自增++	
	  		if(LEDNum>=8)
			{
				LEDNum=0;
			}
			P2 = ~(0x01<<LEDNum);
		}
		if(P3_0 == 0)	//第二种情况:如果当独立按键K2按下的话  —— LED灯移位
		{
			Delay(20);	//按键消抖
			while(P3_0 == 0);		//检测松手
			Delay(20);	//按键消抖
				
			if(LEDNum == 0)		
			{
				LEDNum=7;
			}
			else
			{
				LEDNum--;//自减--
			}
			P2 = ~(0x01<<LEDNum);
		}
    }
}
  • P2口当中的P一定是要大写的,标识符一定要严格区分大小写!
  • 当你在定义一个局部变量的时候一定要注意赋值初始值,在全局变量定义的话默认为0!
  • 这里的K1和K2是接错了,K1 = P3_1;K2 = P3_0;K3 = P3_2;K4 = P3_3;
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架和框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。
[入门数据分析的第一堂课]这是一门为数据分析小白量身打造的课程,你从网络或者公众号收集到很多关于数据分析的知识,但是它们零散不成体系,所以第一堂课首要目标是为你介绍:Ø  什么是数据分析-知其然才知其所以然Ø  为什么要学数据分析-有目标才有动力Ø  数据分析的学习路线-有方向走得更快Ø  数据分析的模型-分析之道,快速形成分析思路Ø  应用案例及场景-分析之术,掌握分析方法[哪些同学适合学习这门课程]想要转行做数据分析师的,零基础亦可工作中需要数据分析技能的,例如运营、产品等对数据分析感兴趣,想要更多了解的[你的收获]n  会为你介绍数据分析的基本情况,为你展现数据分析的全貌。让你清楚知道自己该如何在数据分析地图上行走n  会为你介绍数据分析的分析方法和模型。这部分是讲数据分析的道,只有学会底层逻辑,能够在面对问题时有自己的想法,才能够下一步采取行动n  会为你介绍数据分析的数据处理和常用分析方法。这篇是讲数据分析的术,先有道,后而用术来实现你的想法,得出最终的结论。n  会为你介绍数据分析的应用。学到这里,你对数据分析已经有了初步的认识,并通过一些案例为你展现真实的应用。[专享增值服务]1:一对一答疑         关于课程问题可以通过微信直接询问老师,获得老师的一对一答疑2:转行问题解答         在转行的过程中的相关问题都可以询问老师,可获得一对一咨询机会3:打包资料分享         15本数据分析相关的电子书,一次获得终身学习
评论 98
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

謓泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值