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

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

目录

[一. 器件介绍及实验原理](#一. 器件介绍及实验原理)

1.独立按键

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

(2)按键介绍:

(3)按键的抖动:

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

2.LED模块

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

[二. 程序软件设计](#二. 程序软件设计)

[1.延时函数的设置 :](#1.延时函数的设置 :)

2.按键抖动的消除:

3.补充符号:

4.程序设计:

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

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

三.实验视频


一. 器件介绍及实验原理

1.独立按键

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

(2)按键介绍:

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

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

(3)按键的抖动:

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

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

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

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

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

2.LED模块 :

LED模块图:

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

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

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

连接图:

二. 程序软件设计

1.延时函数的设置 :

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

cpp 复制代码
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.补充符号:

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

4.程序设计:

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

cpp 复制代码
#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

cpp 复制代码
#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

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

相关推荐
猷咪9 分钟前
C++基础
开发语言·c++
17(无规则自律)10 分钟前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
IT·小灰灰11 分钟前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧12 分钟前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q13 分钟前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳013 分钟前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾13 分钟前
php 对接deepseek
android·开发语言·php
2601_9498683617 分钟前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
飞机和胖和黄29 分钟前
考研之王道C语言第三周
c语言·数据结构·考研
星火开发设计31 分钟前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识