首页 > 其他分享 >一种LED灯闪烁的实现方法

一种LED灯闪烁的实现方法

时间:2023-07-10 11:47:45浏览次数:41  
标签:PwmChDutySet LED UpdataTick else PwmChDuty tickstatus 占空比 方法 闪烁

1.闪烁流程的实现

void LightFlicker(void)   //闪灯处理:清码对码
{		
if(Flicker) //有闪灯计数
{

	if(PwmAdjustmenting==0) //调节已经稳定
	{
		PwmAdjustmenting=1;  //处于不稳定态
		if(tickstatus==0)
		{	
			Brightness=0; //熄灯
			tickstatus=1;
		}
		else if(tickstatus==1)
		{
			Brightness = bkLight;//满格亮度 //清码对码后灯都为全亮状态
			tickstatus=2;
		}
		else if(tickstatus==2)
		{
    Brightness = bkLight;
			tickstatus=0;
			Flicker--; //闪灯计数减一
		}
		UpdataPwmDuty=2; //等速模式
	}
}
else
{
	tickstatus=0;
}
}

2.PWM赋值

void UpdataPwmDutyInt(void)   //在定时器0中断中更新占空比,定时器1中断时基100us
{	
static uint16_t UpdataTick; //闪烁速度限制,值越大波形变化越慢
static uint16_t UpdataCount;
uint8_t i;

if(UpdataPwmDuty)      //PWM更新触发,选择更新速度
{
	if(LightOn) //亮灯状态
	{
		PwmChDutySet[0]= CCTPer*10; //PWM0(色温)占空比设置 
		PwmChDutySet[1]= Brightness*10; //PWM1(亮度)占空比设置
	}
	else //关灯状态
	{
		PwmChDutySet[0]= CCTPer*10; //色温占空比不用清零
		PwmChDutySet[1]=0; //PWM1(亮度)占空比设为0
	}
	
	if(UpdataPwmDuty==3) //快速模式
	{
		PwmChDuty[0]=PwmChDutySet[0]; //占空比设置值直接给到
		PwmChDuty[1]=PwmChDutySet[1];
		UpdataTick=1; //更新速度等级为1
	}
	else if(UpdataPwmDuty==2)   //等速模式
	{
		if(Flicker) //闪烁模式中
		{
			UpdataTick=FlickerSpeed;   //更新速度等级为闪烁速度
		} 
  if(CCTCtnReglt) //CCT持续调节模式
  {
    UpdataTick = CCTCtnSpeed;
  }
  if(BRTCtnReglt) //亮度持续调节模式
  {
    UpdataTick = BRTCtnSpeed;
  }      
	}
	else           //等时模式
	{
		UpdataTick=10; //更新速度等级为10
	}
	UpdataPwmDuty=0; //PWM占空比更新失能

}

UpdataCount++;
if(UpdataCount>=UpdataTick)   //计数大于更新速度:更新PWM
{		
	UpdataCount=0;
	for(i=0;i<2;i++)
	{
		if(PwmChDutySet[i]!=PwmChDuty[i])
		{
			if(PwmChDutySet[i]>PwmChDuty[i])
			{
				PwmChDuty[i]++; //占空比调高
			}
			else
			{
				PwmChDuty[i]--; //占空比调低
			}				
		}
	}	  
	Pwm0SetDuty(PwmChDuty[0]); //PWM0占空比值更新(色温)
	Pwm1SetDuty(PwmChDuty[1]); //PWM1占空比值更新(亮度)  		
	if((PwmChDutySet[0]==PwmChDuty[0]) && (PwmChDutySet[1]==PwmChDuty[1])) //直到设置值稳定
	{
		PwmAdjustmenting=0; //调节已经稳定
	} 
}
}

标签:PwmChDutySet,LED,UpdataTick,else,PwmChDuty,tickstatus,占空比,方法,闪烁
From: https://www.cnblogs.com/logicexpression/p/17540553.html

相关文章

  • RF2.4G 对码清码方法
    对码原理:遥控器发出对码指令,灯具根据接收的指令,对比EEPROM存储的UID,一致则处理;未找到则,将当前第一个UID清除,并存储改UID到序列末尾。清码原理:遥控器发送清码指令,灯具根据接收指令,对比EEPROM的UID,一致则返回UID组数据,并执行清码操作(清除EEPROM存储的UID);未找到则不执行。1.检测UID......
  • 汽车ESP系统仿真建模,基于carsim与simulink联合仿真做的联合仿真,采用单侧双轮制动的控
    汽车ESP系统仿真建模,基于carsim与simulink联合仿真做的联合仿真,采用单侧双轮制动的控制方法。有完整的模型和说明YID:6220626518059758......
  • Android 返回UI线程几种方法
    runOnUiThread()方法:在Activity或Fragment中,可以使用runOnUiThread()方法来在UI线程上运行代码。它接受一个Runnable对象,将其提交到UI线程的消息队列中执行。例如:runOnUiThread{//在UI线程上执行代码}Handler和post()方法:你可以使用Handler......
  • java项目 报错 maven jdk.tools 缺失 解决方法
    一、解决方法配置文件pom.xml<dependency><groupId>jdk.tools</groupId><artifactId>jdk.tools</artifactId><version>1.7</version><scope>system</scope><systemPath>${......
  • VUE中定义全局配置方法
    方法一:main.ts中constwsapi="ws://localhost:8081";constappConfig={wsapi,};constapp=createApp(App);//ProvidetheappConfigasaglobalpropertyapp.config.globalProperties.$appConfig=appConfig;app.use(store)VUE中1、setup方法中co......
  • ENVI实现QUAC、简化黑暗像元、FLAASH方法的遥感影像大气校正
    本文介绍基于ENVI软件,实现对Landsat7遥感影像加以预处理与多种不同大气校正方法的操作。目录1数据导入与辐射定标2波段合成3编辑头文件4转换文件格式5QUAC快速大气校正6简化黑暗像元法大气校正7FLAASH大气校正8大气校正结果与其他处理对比分析8.1三种大气校正方法结果......
  • 如何一次性查询多个快递单号的方法
    做电商的小伙伴们最近都对一个话题很感兴趣:如何批量查询快递单号?今天小编在这里给大家安利一款软件:固乔快递查询助手,它支持批量查询大量的快递单号,一起来看看批量查询的具体操作方法吧。小伙伴们需要先在“固乔科技”的官网上下载辅助软件“固乔快递查询助手”,这款软件采用官方的接......
  • java 线程等待和唤醒方法
    java线程状态变迁图从图中可以看出Java线程等待方法是将线程从Runnable状态转换为Waiting状态,Java线程的唤醒方法是将线程从Waiting状态唤醒进入Runnable状态在Java中线程的等待和唤醒主要是分为3组:Object.wait()和Object.notify()LockSupport.park()和LockSupport.unp......
  • 2023-07-09:给定N、M两个参数, 一共有N个格子,每个格子可以涂上一种颜色,颜色在M种里选, 当
    2023-07-09:给定N、M两个参数,一共有N个格子,每个格子可以涂上一种颜色,颜色在M种里选,当涂满N个格子,并且M种颜色都使用了,叫一种有效方法。求一共有多少种有效方法。1<=N,M<=5000。返回结果比较大,请把结果%1000000007之后返回。答案2023-07-09:这两种算法用于计算涂色的......
  • docker with non root priviledge
    RunningDockerContainersasNon-RootUserhttps://www.geeksforgeeks.org/running-docker-containers-as-non-root-user/Bydefault,DockerContainersrunasRootUsers.Now,ifyouarerunningapplicationsinsideDockerContainers,youhaveaccesstoallth......