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)//利用此变量为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_Flag值由0变1来表示已经按下,松开后判断LED_Flag是否为1,为1代表按下并已经松开,此时执行LED_Flag归0并整体实现P0移位赋值。

按键控制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);
	}
}

将判断是哪一个按键的程序单列出来,按下不同的按键分别执行不同的程序,主程序再判断函数执行后的内容,执行对应的程序。

  • 14
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值