泰凌微8258学习日记-3:用定时器检测按钮长按从而控制小灯开关

        在学会点亮小灯、按钮控制小灯、按钮控制RGB以后,可以开始学用定时器检测按钮长按从而控制小灯,在只有独立按钮的时候,如何区分单击、双击、跟长按?打个比方,以0.5S为界限,0.5S内按一次按钮算单击,0.5秒之内按两次按钮算双击,长按的话我们以按住按钮两秒作为标准,那怎么做呢?就可以用到定时器来捕捉按键的状态。

        一样的,我们也要开启定时器,我这里用的是定时器0(好像定时器1被用作看门狗定时了,忘记了记不太清了😄),250us做一次,后面我们定义一个static unsigned int k=0;K*250us就是我们定时的时间。

#define			IRQ_TIMER0_ENABLE  			    1
#define			IRQ_TIME0_INTERVAL			    250 //us

        然后我们就可以做个简单的测试了,看看你的定时器能不能正常使用,这里是1秒交替闪红光。代码如下:

void shine(void)
{
	static unsigned char i;
	static unsigned int k;
	if(++k>=4000)
	{
		k=0;
		if(i==0)
		{	
			light_adjust_RGB(100,0,0,50);
			gpio_write(LED_ON_OFF_Pin,1);
			i=1;
		}
		else if(i==1)
		{	
		
			gpio_write(LED_ON_OFF_Pin,0);
			i=0;
		}

}

        可以玩的更花一点,开始绿灯一亮一灭(各0.5S),然后亮一秒红灯,再亮一秒红灯,然后回到红灯,循环往复。代码如下:

void test(void)
{
	static unsigned int k=0;
	static int lum=30;
	static int i=0;
		if(i==0)

	{
			gpio_write(LED_ON_OFF_Pin,1);
			light_adjust_RGB(0,200,0,lum);
			sleep_us(500000);
			gpio_write(LED_ON_OFF_Pin,0);
			i++;

	}
	else  if(i==1)
	{
		++k;
		if(k>4000&&k<4000*2)
		{
		gpio_write(LED_ON_OFF_Pin,1);
		light_adjust_RGB_hw(255,0,0,lum);
		i++;
		}
	}
	else if(i==2)
	{
		++k;
		if(k>40002&&k<4000*3)
		{
		light_adjust_RGB_hw(0,0,255,lum);
		i++;
		}
	}

	else if(i==3)
	{
		++k;
		if(k>4000*3&&k4<000*4)
		{
			light_adjust_RGB_hw(0,0,0,lum);
			k=0;
			i=1;
		}

	}
	
}

        我们把它运用到按钮那里,效果为:初始白光,长按2S后红光,再次长按2S后关闭,循环往复。代码如下:

void long_key(void)
{
	static unsigned int k=0;

			    	static int  led_state=0;
			    	gpio_write(LED_ON_OFF_Pin,1);
			    	if(gpio_read(KEY_ON_OFF_Pin)==0&&led_state==0)
			    	{

						if(++k>8000)
						{
							light_adjust_RGB_hw(255,0,0,10);
							led_state=1;
							k=0;
						}
			    	}
					else if(gpio_read(KEY_ON_OFF_Pin)==0&&led_state==1)
						{

							if(++k>8000)
							{
								light_adjust_RGB_hw(0,0,0,10);
							 led_state=0;
							 k=0;
							}

						}
}

        至此你已经学会使用定时器啦,快去用它做点新东西吧。下期再见,ヾ(•ω•`)o88!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值