【STM32F103RBT6】蓝桥杯旧板 三种方法实现灯的亮度控制 延时法、定时器中断法、PWM控制

此文学习总结,代码可参考

1.delay延时(蓝桥杯主板程序LED)

原理:通过延时函数控制灯使亮暗时间不一样,使得占空比不同,实现亮度控制

优缺点:类似于PWM但是无法做到精确控制亮度占比,如使某个灯的亮度为50%

void Delay_Led(u16 temp)
{
	u16 i=temp;
	for(i=i; i>0; i--);	//delay	
}

void LED_light_control(void)
{
   unsigned char i, j, k;
	for(i=0; i<16; i++)
	{
		for(j=0; j<16-i; j++)
		for(k=8; k<16; k++)
		{
  			GPIO_Write(GPIOC,~(1<<k));
			GPIO_SetBits(GPIOD,GPIO_Pin_2);
   			GPIO_ResetBits(GPIOD,GPIO_Pin_2);  //状态锁存
			Delay_Led(1<<k);
		}
	}
}

2.定时器中断

原理:频率足够大,中断足够快的条件下,使得在一定周期内,每个灯亮的概率不同,从而控制占空比的不同,使得最终灯的亮暗不同

优缺点:代码改起来不好改,灯亮度精确度并不能实现太高,因为随着精确度的增加,必须使得计数周期曾大,来确保目标亮度可计算,这样一来周期就会变大而且代码更加难改

void TIM2_IRQHandler(void)
{
	static 	u8 Tim_Count=0;
	if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update) == SET){
		//清除标志位
		TIM_ClearFlag(TIM2,TIM_FLAG_Update);
		//

		Tim_Count++;
	
		if(Tim_Count==1)GPIO_Write(GPIOC,0x00ff);
		else if(Tim_Count==2)GPIO_Write(GPIOC,0x80ff);
		else if(Tim_Count==3)GPIO_Write(GPIOC,0xC0ff);
		else if(Tim_Count==4)GPIO_Write(GPIOC,0xe0ff);
		else if(Tim_Count==5)GPIO_Write(GPIOC,0xf0ff);
		else if(Tim_Count==6)GPIO_Write(GPIOC,0xf8ff);
		else if(Tim_Count==7)GPIO_Write(GPIOC,0xfcff);
		else if(Tim_Count==8)GPIO_Write(GPIOC,0xfeff);
		else if(Tim_Count==9)GPIO_Write(GPIOC,0xffff);
		else {GPIO_Write(GPIOC,0xffff);Tim_Count=0;}		 


       	GPIO_SetBits(GPIOD,GPIO_Pin_2);
	    GPIO_ResetBits(GPIOD,GPIO_Pin_2);		
		}		
}

注:多个灯的亮暗控制,单个灯类似,控制GPIO的写入即可,须将ARR,PSC舍得足够小,不然会闪

3.PWM输出控制

原理:设置占空比,即可

优缺点:配置好PWM后只需一个循环即可,容易更改

int main(void)
{   		
	//LCD工作模式配置
	SysTickInit();
	TIM_PWM_Init();
	USART_Config();
//	TIM_SetCompare2(TIM2,500); //占空比为500/1000=50%
//	TIM_SetCompare3(TIM2,700); //占空比为700/1000=70%
    while(1){
				
	TIM_SetCompare2(TIM2,i*100);
	sprintf((char*)str,"%d%%\n",10*i);
	USART_SendString(str);
	Delay_Ms(200);
	i++;
	if(i==11){i=0;}
	}
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值