5.独立按键控制LED灯

按键控制LED的打开关闭

#include<STC15F2K60S2.H>
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	while(1)
	{
		if(P30==0)P00=0;//打开
		if(P31==0)P00=1;//关闭
	}
}

按键控制一次流水灯

#include<STc15F2K60S2.H>
unsigned char LED;
void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	while(1)
	{
		if(P30==0)//按一次流水一次,且上次流水未结束时按下不起作用
		{
			for(LED=0;LED<8;LED++)
			{
				P0=~(0X01<<LED);
				Delayms(1000);
			}
		}
		
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

按键控制循环流水灯

#include<STC15F2K60S2.H>
unsigned char LED;
unsigned char LED_RUN;
void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	while(1)
	{
		if(P30==0)LED_RUN=1;//按下后变量为1且不再变化
		if(LED_RUN==1)//一直能够循环流水
		{
			for(LED=0;LED<8;LED++)
			{
				P0=~(0X01<<LED);
				Delayms(1000);
			}
		}
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

按键控制LED位移

#include<STC15F2K60S2.H>
unsigned char LED=0;//初始为0
void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	while(1)
	{
		if(P30==0)LED++;
		P0=~(0X01<<LED);//第一盏灯最开始就亮,后当一直按下时每一秒流水一次,直到超出
		Delayms(1000);
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

按键流水灯松手检测消抖

#include<STC15F2K60S2.H>
unsigned char LED=0;
void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	while(1)
	{
		if(P30==0)
		{
			Delayms(5);//消抖
			if(P30==0)
			{
				P0=~(0X01<<LED);
				LED++;
				if(LED==8)LED=0;//循环回来
			}
			while(!P30);//注意此行放的位置,实践中出现了按键不灵敏,是因为把此行放在了第一个if程序段结束后
		}
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

原程序为按下时作用,此程序为松开时作用

#include<STC15F2K60S2.H>
unsigned char LED=0;
unsigned char LED_Flag=0;
void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	while(1)
	{
		if(P30==0)
		{
			Delayms(5);
			if(P30==0)
			{
				LED_Flag=1;
			}
			while(!P30);
		}
		if(LED_Flag==1)  //此时为已经松开
		{
			LED_Flag=0;
			P0=~(0X01<<LED);
			LED++;
			if(LED==8)LED=0;
		}
	}
}
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

按键控制LED灯,子函数,四个按键

#include<STC15F2K60S2.H>
unsigned char LED=0;
unsigned char LED_Flag=0;
unsigned char LED_RUN=0;
void Delayms(int ms);
void KEY_Scan(void);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;   //初始化程序
	while(1)
	{
		KEY_Scan();
		if(LED_Flag==1)      //按键流水灯
		{
			LED_Flag=0;
			P0=~(0X01<<LED);
			LED++;
			if(LED==8)LED=0;
		}
		else if(LED_RUN==1)        //自动流水灯
		{
			P0=~(0X01<<LED);
			LED++;
			if(LED==8)LED=0;
			Delayms(1000);
		}
	}
}

void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

void KEY_Scan(void)
{
	if(P30==0)					//按键s7,作用是按一下流水灯走一下
	{
		Delayms(5);
		if(P30==0)
		{
			LED_Flag=1;
		}
		while(!P30);
	}
	else if(P31==0)					//按键s6,作用是开启自动流水灯
	{
		Delayms(5);
		if(P31==0)
		{
			LED_RUN=1;
		}
		while(!P31);
	}
	else if(P32==0)					//按键s5,作用是点亮第一盏LED灯
	{
		Delayms(5);
		if(P32==0)
		{
			P00=0;
		}
		while(!P32);
	}
	else if(P33==0)					//按键s4,作用是熄灭第一盏LED灯
	{
		Delayms(5);
	  if(P33==0)
		{
			P00=1;
		}
		while(!P33);
	}
}

发布了6 篇原创文章 · 获赞 1 · 访问量 1239

猜你喜欢

转载自blog.csdn.net/qq_44628230/article/details/104171976