独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”

各位CSDN的uu们你们好呀,今天依旧是小雅兰的51单片机的内容,内容主要是:独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位,下面,让我们进入51单片机的世界吧!!!

如果对C语言的知识有不懂的话,可以看看小雅兰的C语言的专栏!!!

https://blog.csdn.net/weixin_74957752/category_12188777.html?spm=1001.2014.3001.5482


独立按键控制LED亮灭

独立按键控制LED状态

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

独立按键控制LED移位

源代码


独立按键控制LED亮灭

首先,我们需要知道独立按键是一个什么东西:

在单片机上,也是标明了独立按键了的,是最下面的四个黑色的按钮。

这边的意思是:按下K1建,第一个LED亮,松手,就熄灭。

下面,就可以开始写代码啦!!!

cpp 复制代码
#include <REGX52.H>

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

知道了上述知识点后,如果我们想要K1和K2同时按下时再点亮第一个LED的话,应该是这么写:

cpp 复制代码
#include <REGX52.H>

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

如果是想要按下K1点亮第一个LED,按下K2也点亮第一个LED,同时按下也会点亮第一个LED,只有当两个按钮都没有按下时,才不会点亮第一个LED。

那么,这个代码应该是这么写:

cpp 复制代码
#include <REGX52.H>

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

独立按键控制LED状态

这个的意思是:按下K1键时,第一个LED不亮,然后松开之后,LED亮了。然后再按下,LED亮,松手,LED不亮。

cpp 复制代码
#include <REGX52.H>

void Delay(unsigned int xms)	//@12.000MHz
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		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;
		}
	}
}

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

这边的意思是:从1开始,显示它的二进制代码序列对应的LED亮,如果是1,那么它的二进制代码序列就是0001,也就是第一个LED亮,如果是2,它的二进制代码序列是0010,那么就是第二个LED亮,如果是3,则它的二进制代码序列为0011,也就是第一个LED和第二个LED同时亮,以此类推!!!

代码就应该得这样写:

cpp 复制代码
#include <REGX52.H>

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

void main()
{
	unsigned char LEDNum=0;
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			P2=~LEDNum;
		}
	}
}


独立按键控制LED移位

cpp 复制代码
#include <REGX52.H>

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

void main()
{
	unsigned char LEDNum=0;
	P2=~0x01;
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			if(LEDNum>=8)
			{
				LEDNum=0;
			}
			P2=~(0x01<<LEDNum);
			
		}
	}
}

上面这个代码只是按了K1,就让LED从第一个移到第二个、第三个......

那如果是想要按下K1,让LED从第一个移到第二个、第三个......按下K2,让LED从第八个移到第七个、第六个......那么,这个功能又应该怎么实现呢?

cpp 复制代码
#include <REGX52.H>

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

void main()
{
	unsigned char LEDNum=0;
	P2=~0x01;
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			if(LEDNum>=8)
			{
				LEDNum=0;
			}
			P2=~(0x01<<LEDNum);
			
		}
		if(P3_0==0)
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			if(LEDNum==0)
			{
				LEDNum=7;
			}
			else
			{
				LEDNum--;
			}
			
			P2=~(0x01<<LEDNum);
			
		}
	}
}

源代码

独立按键控制LED亮灭

#include <REGX52.H>

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

独立按键控制LED状态

#include <REGX52.H>

void Delay(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms)
{
i = 2;
j = 239;
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;
}
}
}

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

#include <REGX52.H>

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

void main()
{
unsigned char LEDNum=0;
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
P2=~LEDNum;
}
}
}

独立按键控制LED移位

#include <REGX52.H>

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

void main()
{
unsigned char LEDNum=0;
P2=~0x01;
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8)
{
LEDNum=0;
}
P2=~(0x01<<LEDNum);
}
}
}


好啦,小雅兰今天的学习内容就到这里啦,还要继续加油呀!!!

越努力越优秀!!!

相关推荐
极客小张13 分钟前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312873 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章3 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频
TeYiToKu3 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
基极向上的三极管4 小时前
【AD】3-4 在原理图中放置元件
嵌入式硬件
徐嵌4 小时前
STM32项目---水质水位检测
stm32·单片机·嵌入式硬件
徐嵌5 小时前
STM32项目---畜牧定位器
c语言·stm32·单片机·物联网·iot
lantiandianzi5 小时前
基于单片机的老人生活安全监测系统
单片机·嵌入式硬件·生活
东胜物联5 小时前
探寻5G工业网关市场,5G工业网关品牌解析
人工智能·嵌入式硬件·5g
stm32发烧友5 小时前
基于STM32的智能家居环境监测系统设计
stm32·嵌入式硬件·智能家居