首页 > 其他分享 >独立按键控制LED

独立按键控制LED

时间:2024-07-02 19:27:53浏览次数:15  
标签:P2 LED 独立 Delay while 按键 xms

目录

1.按键介绍​编辑

2.通过独立按键控制LED灯亮灭

3. 按位与 &

4.按位或 |

5.按位异或 ^   

7.按键的抖动​编辑

8.独立按键控制LED灯状态

9. 独立按键控制LED灯显示二进制

10. 独立按键控制LED灯移位​编辑


1.按键介绍

轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开

 

2.通过独立按键控制LED灯亮灭
#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1==0)
		{
		P2_0=0;
		}
		else
		{
			P2_0=1;
		}
	}
}

当P3_1按下时为0,P2_0=0 LED灯亮 ,当P3_1未按下时为1,P2_0=1 LED灯灭 

3. 按位与 &

例如 1010 1100 &

        1001 1010

------------------------------------

         1000 1000

1&1-> 1    1&0-> 0   0&0-> 0

4.按位或 |

例如 1010 1100 |

        1001 1010

------------------------------------

         1011 1110

1|1-> 1    1|0-> 1   0|0-> 0

5.按位异或 ^   

(一样-> 0 不一样-> 1)

例如 1010 1100 ^

        1001 1010

------------------------------------

         0011 0110

1^1-> 0    1^0-> 1   0^0-> 0

6.按位取反 (~ 1->0 ~0->1)

例如 ~1010 1100->0101 0011

7.按键的抖动

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

未按下时高电平,一段时间后稳定,进入低电平

我们可以通过延时函数Delay 进行消抖

8.独立按键控制LED灯状态
#include <REGX52.H>
void Delay(unsigned int xms)		//1ms延时函数
{
	unsigned char i, j;
while(xms)                          //xms ms
{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	xms--;
}
}
void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);  //延时20 ms
			while(P3_1==0); //按下时LED灯不亮 松手时LED灯亮 一直按着不松手LED灯就不会亮
			Delay(20);
			P2_0=~P2_0; //按位取反 一个周期后灭  亮 灭 亮 灭 亮 灭
		}
	}
	
}

9. 独立按键控制LED灯显示二进制
#include <REGX52.H>
void Delay(unsigned int xms)		//xms ms
{
	unsigned char i, j;
while(xms)
{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	xms--;
}
}
unsigned int a =0;
void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			a++;
			P2=~a;  //1 为灭 0为亮 所以取反
		}
	}
	
}

由于上电后默认都是高电平

如果是P2++,因为默认都是高电平,P2->1111 1111   

                                                         P2++->0000 0000 

                                                       ~ P2++->1111 1111 

所以定义一个变量a

10. 独立按键控制LED灯移位

LED灯向左移动 

定义num 

num从0->7  当num==8时  num=0

0x01<<num

取反赋值给P2

LED灯向右移动同理   

#include <REGX52.H>
void Delay(unsigned int xms)		//xms ms
{
	unsigned char i, j;
    while(xms)
    {
	    i = 2;
	    j = 239;
	    do
	    {
		    while (--j);
	    } while (--i);
	    xms--;
    }
}
unsigned int num;
void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);//消抖
			while(P3_1==0); //检测是否松手
			Delay(20);//第二次消抖
			if(num==8)
			{
				num=0;
			}
			P2=~(0x01<<num);//存在运算符优先级
			num++; 
		}                
		if(P3_0==0)
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			if(num==0)
			{
				num=7;
			}
			else
				num--;
			P2=~(0x01<<num);
		}
	}
}

谢谢观看

标签:P2,LED,独立,Delay,while,按键,xms
From: https://blog.csdn.net/Limerence_Aries/article/details/140107698

相关文章

  • 51单片机外部中断(按键识别)
    欢迎入群共同学习交流时间记录:2024/7/2一、电路原理图51单片机包含INT0、INT1两个外部中断接口二、知识点介绍1.中断寄存器位介绍(1)TCON定时控制寄存器,位0(IT0)中断INT0请求信号选择位,1表示下降沿信号、0表示低电平信号,位1(IE0)中断INT0信号标志位,1产生中断信号、0未产生......
  • No native JavaCPP library in memory. (Has Loader.load() been called?)
    Exceptioninthread"main"java.lang.RuntimeException:NonativeJavaCPPlibraryinmemory.(HasLoader.load()beencalled?) atorg.bytedeco.javacpp.BytePointer.<init>(BytePointer.java:103) atorg.bytedeco.javacv.Frame.<init>(Frame......
  • 【PWM太阳能控制器调光方案】5V升24V 6A大电流无频闪PWM调光升压恒流LED驱动芯片FP720
    目前led灯带产品应用越来越广泛,在节能环保的社会快速发展驱动下,太阳能照明产品越来越多。但是现有技术中,有些空间狭小,又长又窄的环境空间不适用于现有的太阳能灯使用,现有技术中的太阳能灯照明效果不佳且不能够实现智能化照明;因此迫切地需要重新设计一款新的太阳能led灯带以......
  • 无人机仿真,键盘操控无人机进行起飞,按键说明
    无人机仿真,键盘操控无人机进行起飞,按键说明w/x:向前增加/减少速度a/d:向左增加/减少方向(或侧移)i/,:增加/减少偏航(yaw,即绕垂直轴旋转的角度)r:返航(回到起飞点或预设的返航点)t/y:启动/停止动力系统(解锁/锁定电机,使无人机可以起飞或安全降落)v/n:起飞/降落b:切换到离机模式(Offboa......
  • 两大神器解决FP独立站引流难题!
    独立站作为跨境商家展示自身品牌和产品的重要平台,受到越来越多商家的青睐。然而,针对销售FP产品的站点来说,引流成为了一个相当棘手的问题。由于FP产品的敏感性和法律风险,许多平台和广告渠道对这类产品的广告投放持谨慎态度,这无疑增加了FP独立站的引流难度。同时,FP产品本身的......
  • 程序员想独立赚钱的几个注意点
    1、始终保持好奇心,喜欢折腾新鲜事物,并且能够很快付诸于行动,有想法立马行动起来,赶紧把东西搞出来,然后推出去。2、普通人不要沉迷于技术,时刻想着通过技术赚到钱才是最重要的。3、一切以最小的代价赚到钱为第一原则。4、要务实,哪怕是些小的事情,哪怕是别人看不上的东西,只要能赚钱就......
  • PHP8.0正常,PHP7.2,PHP7.3报错Connection failed: SQLSTATE[HY000] [2054] The server
    构建网站API接口的时候,使用了PDO进行数据库连接,原文如下 测试后发现,PHP8.0版本下,可以正常输出,但是PHP7.2和7.3则会报错:Connectionfailed:SQLSTATE[HY000][2054]Theserverrequestedauthenticationmethodunknowntotheclient经查验,发现因为所用的PHP7.2和7.3版本不支......
  • 解决TensorFlow中的FailedPreconditionError:未初始化的变量
    解决TensorFlow中的FailedPreconditionError:未初始化的变量......
  • 升级到 MySQL 8.4,MySQL 启动报错:io_setup() failed with EAGAIN
    问题最近碰到一个case,一台主机上,部署了多个实例。之前使用的是MySQL8.0,启动时没有任何问题。但升级到MySQL8.4后,部分实例在启动时出现了以下错误。[Warning] [MY-012582] [InnoDB] io_setup() failed with EAGAIN. Will make 5 attempts before giving up.[W......
  • MSPM0G3507——每隔0.5S翻转LED,并在OLED显示翻转次数
    要工程打包好的文件直接私聊我或者评论即可 主函数:#include"ti_msp_dl_config.h"#include"OLED.h"#include"stdio.h"inta=0;intmain(void){uint8_tstr[64];SYSCFG_DL_init();NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);DL_T......