独立按键控制led灯的亮灭

独立按键控制一个led灯的亮灭

直接可以控制指定位的变化

#include 

void main(){//实现独立按键控制一个led灯的亮灭
		while(1){
			//按下时亮松开时灭
		    if(P3_1==0){
						P2_0=0;
				}else{
						P2_0=1;
				}
		}
}

独立按键控制灯的循环亮灭(单向循环)

这里实现灯的亮灭是使用在我之前的文章中《单片机:流水灯》提到的实现灯亮灭的方法。

文章链接:http://t.csdn.cn/mlXy2

识别到k1键被按下,或者k2键被按下,因为机器再按的时候程序一直执行,程序的执行是相当快的,这样就多次识别到k1(k2)键被按下,这样就多个灯的状态被改变,我们本意想按下一次只识别一次,采用延时可以实现,当按下键后,延时500ms在这500ms内就只识别了1次,只改变一个灯的状态,(缺点:因为延时是固定的,所以在延时时间内无论你按下多少次按键都不会识别)

#include 
#include 
void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void main(){
		int x=1,count=0xff;
		P2=count - x;//初始话灯
		Delay500ms();
		while(1){
			if(P3_1==0){//识别按键是否按下,按下则改变灯的状态
				x*=2;
				if(P2==0x7f){
					x=1;
				}
				P2=count-x;
				Delay500ms();//延时
			}
		}
}

独立按键控制led灯的循环亮灭(双向循环)

是在单向循环控制的基础上增加了一个反向循环

#include 
#include 
void Delay500ms()//延时		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void main(){
		int x=1,count=0xff;
		P2=count - x;//一开始亮一个灯
		Delay500ms();//通过延时来实现按键循环
		while(1){
			if(P3_1==0){//检测到k1按键被按下,下一个灯亮,此灯灭(正向)
				x*=2;
				if(P2==0x7f){//到达最后一个灯后,需要重置成第一个灯
					x=1;
				}
				P2=count-x;
				Delay500ms();
			}
			if(P3_0==0){//反向
				x/=2;
				if(x==0){//到达第一个灯后,需要重置为最后一个灯
					x=2*2*2*2*2*2*2;
				}
				P2=count-x;
				Delay500ms();
			}
		}
}

独立按键控制led灯实现二进制

使P2接口的值按照顺序递减即可实现,同样是使用延时来防止按键的多次识别。

#include 
#include 
void Delay100ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 195;
	j = 138;
	do
	{
		while (--j);
	} while (--i);
}

void main(){
	P2=0XFF;//全灭
	while(1){
		if(P3_1==0){//识别一次
			P2--;
			Delay100ms();//一定时间只识别一次
			if(P2==0){
				P2=0xff;
			}
		}
	}
}

你可能感兴趣的:(单片机学习,开发语言,c语言,单片机)