单片机基于定时器的呼吸灯或马达

该代码实现了一个使用中断服务函数的呼吸灯和马达控制程序。通过调整定时器和占空比,实现了灯亮度的平滑变化以及马达的PWM控制。中断服务函数中包含了计数器和状态机逻辑,用于周期性地改变LED的亮度和马达的工作状态。
摘要由CSDN通过智能技术生成
#define uint unsigned int 
#define uchar unsigned char
void int0() interrupt 0 using 1//intterrupt表示中断,0表示中断号,using1可省略
{

		//若想呼吸灯一秒,定时器是0.5us 溢出一次50us
	    static uint bright_count ;  		// 计数
		static uint LED_DUTY ; 			//有效电平的初值
		static uchar Led_status;		    //灯的状态 0暗到亮 1亮到暗
	 	uint DUTY = 100						//占空比100 可修改

	 		if(!Led_status)
			{
				if(bright_count < LED_DUTY )		LED_R = 0; //电路是低电平有效 即灯亮
				else 								LED_R = 1; // 灯灭
				/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
				if((++bright_count ) >=100 ) //暗到亮周期500ms = 500000us 占空比从1~100需要500000/(100*100)= 50us一次 
				{
					bright_count = 0;
					if((LED_DUTY ++)>= DUTY ) 
					{
						LED_DUTY  = 0;	//重置有效时间
						Led_status = 1; //改变亮灭状态
					}
				}
			}
			   /~~~~~~~~~~~~~~~~产生PWM波形~~~~~~~~~~~~~~~~~~~~~~/
		//亮到灭
		else 
		{
			if(bright_count < LED_DUTY )		LED_R = 1; //电路是低电平有效 即灯亮
			else 								LED_R = 0;	//灯亮

			if((++bright_time) >=100 )
			{
				bright_time = 0;
				if((i++)>= 100)
				{
					LED_DUTY  = 0;
					Led_status = 0;
				}
			}
		}
}
void int0() interrupt 0 using 1//intterrupt表示中断,0表示中断号,using1可省略
{
	//马达
	//若想马达工作一秒,定时器是10ms 
	    static uint MOT_count ;  		// 计数
		//static uint MOT_DUTY = 1; 			//有效电平的初值 若马达要像呼吸灯那样变化 参考呼吸灯代码
	 	uint   DUTY = 70						//占空比70 可修改

	 	
				if(MOT_count < DUTY )		MOT_EN= 1; //电路是高电平有效
				else 							MOT_EN= 0;
				/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
				if((++bright_count ) >=100 ) //运行一个周期
				{
					bright_count = 0;
					/*
						if((LED_DUTY ++)>= DUTY ) 
						{
							LED_DUTY  = DUTY ;	//重置有效时间
						}
					*/
				}
			   /~~~~~~~~~~~~~~~~产生PWM波形~~~~~~~~~~~~~~~~~~~~~~/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值