51单片机学习(3)-----独立按键控制LED的亮灭状态

本文介绍了51单片机中独立按键的工作原理,如何在开发板上布局和连接,以及如何通过软件设计消除按键抖动。详细讲解了延时函数的使用和两种按键消抖方法。提供了两个示例程序,分别控制LED1-4的亮灭,配合实验视频帮助读者理解和实践。
摘要由CSDN通过智能技术生成

 

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

 

e6d98440ee274d5f9ee0ee6b6ac7f36a.jpeg

目录

一.  器件介绍及实验原理

1.独立按键

(1)独立按键在开发板中的位置:

(2)按键介绍:

(3)按键的抖动:

(4)开发板中独立按键模块:

2.LED模块 

3.独立按键与核心的连接:

二.  程序软件设计

1.延时函数的设置 :

2.按键抖动的消除: 

3.补充符号:

4.程序设计: 

程序1:K1,K2控制同时控制LED1

程序2:K1控制LED1,K2控制LED2,K3控制LED3,K4控制LED4

三.实验视频 

   


 

一.  器件介绍及实验原理

 

1.独立按键

(1)独立按键在开发板中的位置:

f830656140d948b19df77de168c8e81a.png

 

(2)按键介绍:

  按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开。开发板上使用的按键及内部简易图:

f66cbe412eb24e72bb9ce17f567e78bf.png

 

  按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态, 如 果按键按下,初始导通状态变为断开,初始断开状态变为导通。 

 

(3)按键的抖动:

  通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号 如下图所示:

86ed13eccebd4a7f9b3a7cbc06c4867b.png

   由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间 的长短由按键的机械特性决定的,一般为 5ms 到 10ms。按键稳定闭合时间的长 短则由操作人员的按键动作决定的,一般为零点几秒至数秒。按键抖动会引起按 键被误读多次。为了确保 CPU 对按键的一次闭合仅作一次处理,必须进行消抖。 

 

(4)开发板中独立按键模块:

2d6019e471eb4d94920fc256265317f9.png

注意:1.这里开关K1对应P3-1,K2对应P3-0,K3对应P3-2,K4对应P3-3

           2.GND为接地符号,用于为电路提供一个电势参考点,通常与电路的电源负极相连,即表示低电势一端。

 

2.LED模块 :

LED模块图:7a461cbebc1c4077b306baa4a641a3a9.png 

注意:1.具体介绍可见51单片机博客2(LED流水灯)

           2.这里VCC代表电源正极或者电路的供电电压,即表示高电平一端 

 

3.独立按键与核心的连接:

连接图:

73a637b29a6e448889606405968a727b.png  

 

二.  程序软件设计

 

1.延时函数的设置 :

这里关于自定义的延时函数的获取可以参考51单片机2(LED流水灯),具体程序如下:

void Delay(unsigned int xms)	//@11.0592MHz
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

 

2.按键抖动的消除: 

   按键消抖有两种方式,一种是硬件消抖,另一种是软件消抖。为了使电路更 加简单,通常采用软件消抖。我们开发板也是采用软件消抖,一般来说一个简单 的按键消抖就是先读取按键的状态,如果得到按键按下之后,延时 10ms,再次 读取按键的状态,如果按键还是按下状态,那么说明按键已经按下。其中延时 10ms 就是软件消抖处理,这里给大家列出单片机常用的软件去抖动方法:

(1)先设置 IO 口为高电平(由于开发板 IO 都有上拉电阻,所以默认 IO 为高 电平)。          (2)读取 IO 口电平确认是否有按键按下。      (3)如有 IO 电平为低电平后,延时几个毫秒。                                                                   

(4)再读取该 IO 电平,如果仍然为低电平,说明按键按下。                                                       

(5)执行按键控制程序。 

     独立按键电路构成是由各个按键的一个管脚连接在一起接地,按键其他引脚 分别接到单片机 IO 口。 我们知道单片机的 IO 口既可作为输出也可作为输入使用,当检测按键时用 的是它的输入功能,独立按键的一端接地, 另一端与单片机的 I/O 口相连,开 始时先给该 IO 口赋一高电平,然后让单片机不断地检测该 I/O 口是否变为低 电平,当按键闭合时,即相当于该 I/O 口通过按键与地相连,变成低电平,程序一旦检测到 I/O 口变为低电平则说明按键被按下,然后执行相应的指令。

 

3.补充符号:

6f50799ffa614b939ae5d0274cb767fc.png

这里我们写的程序中主要含等于,逻辑或,按位取反符号。 

 

4.程序设计: 

程序1:K1,K2控制同时控制LED1

#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状态改变
		}
	}
}

注意:这里对于端口的定义也可以参考流水灯博客一文,即对于0与1所对应的含义,及端口所代表的连接地方和功能。 

 

程序2:K1控制LED1,K2控制LED2,K3控制LED3,K4控制LED4

#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;
		}
			if(P3_0==0)
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			P2_1=~P2_1;
		}
			if(P3_2==0)
		{
			Delay(20);
			while(P3_2==0);
			Delay(20);
			P2_2=~P2_2;
		}
			if(P3_3==0)
		{
			Delay(20);
			while(P3_3==0);
			Delay(20);
			P2_3=~P2_3;
		}
	}
}

 

三.实验视频 

 

51单片机独立矩阵控制LED 

51单片机独立矩阵控制LED

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

 

 

 

 

   

  • 88
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 125
    评论
评论 125
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

袁满满满满

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

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

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

打赏作者

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

抵扣说明:

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

余额充值