通用定时器功能案例 RGB 直流电机 舵机 超声波

复盘局:

RGB彩灯:(定时器输出比较功能)

        功能效果:按下按键1亮红灯  按下按键2亮绿灯  按下按键3亮蓝灯  按下按键4随机变色

RGB彩灯原理:通过改变三个灯不同的亮度混合在一起形成不同的颜色

总体配置思路:

        1.初始化配置

        {

                /*IO控制器配置*/

                /*定时器控制器通道配置*/

        }

       2. 定时中断函数处理随机颜色变化事件

注意点:彩灯的随机颜色变化只能在定时中断中完成每100msRGB随机变化一次颜色 同时又要配合按键一起使用所以这里需要用到标志位思想 用标志位决定要进入的状态

/***************主函数*****************/

int main(void)
{
	NVIC_SetPriorityGrouping(5);
	usart1_init(115200);
	tim3_ch1_pwm();
 	rgb_init();
	key_init();
	tim7_interrupt_ms(1);
	
	while(1)
	{
		u8 key=0xff;
		key=key_scan();
		if(key==1)
		{
			rgb_flag=0;
			RGB_R=999;
			RGB_G=0;
			RGB_B=0;
		}
		else if(key==2)
		{
			rgb_flag=0;
			RGB_R=0;
			RGB_G=999;
			RGB_B=0;
		}
		else if(key==3)
		{
			rgb_flag=0;
			RGB_R=0;
			RGB_G=0;
			RGB_B=999;
		}
		else if(key==4)
		{
			rgb_flag=1;
		}
		
	}

	
	return 0;
}
/*****每100ms进一次定时中断 满足标志位置一时 随机改变颜色*****/
if(tim7_cnt[2]==100) //RGB
	{
		tim7_cnt[2]=0;
		if(rgb_flag==1)
		{
			RGB_R+=50;
			if(RGB_R>999){RGB_R=0;}
			RGB_G+=150;
			if(RGB_G>999){RGB_G=0;}
			RGB_B+=255;
			if(RGB_B>999){RGB_B=0;}
		}

	}	

直流电机:(定时器输出比较功能)

        功能效果:用按键改变直流电机的转速 按下按键1电机启动,按下按键2电机关机,按下按键3电机加速,按下按键4电机减速

        原理:利用按键扫描函数,当按下按键时改变比较寄存器里的值从而改变电机的转速

        总体配置思路:

        初始化配置

        {

                /*IO控制器配置*/

                /*定时器控制器通道配置*/

        }

优化以及注意点:1.只有在开机状态下才能加速或者减速(定义标志位思想)

                              2.在关机时保存下关机时的速度,下次开机时还能以上次关机时的速度转动

/*********主函数******/

int main(void)
{
	u8 key;
	u16 motor_flag=0;
	u16 m_val=500; //保存每次变化的值
	NVIC_SetPriorityGrouping(5);
	usart1_init(115200);
	motor_init();     //直流电机
	key_init();
	tim7_interrupt_ms(1);
	
	while(1)
	{
		key=key_scan();
		if(key==1)
		{
			MOTOR_VAL = m_val;
			motor_flag=1;
		}
		else if(key==2)
		{
			MOTOR_VAL=0;
			motor_flag=0;
		}
		else if(key==3 && MOTOR_VAL<1000 && motor_flag)
		{
			MOTOR_VAL+=100;
			m_val=MOTOR_VAL;
		
		}
		else if(key==4 && MOTOR_VAL>0 && motor_flag)
		{
			MOTOR_VAL-=100;
			m_val=MOTOR_VAL;
		}
			
	}
		
	
	return 0;
}

舵机:(定时器输出比较功能)

         功能效果:通过红外触感按键,触碰一次转动角度增加45度,当转到180度时回到原置点0度

        原理:给舵机设置一个20ms的时基脉冲,通过改变比较寄存器的值从而改变舵机的角度转变

    初始化配置

        {

                /*IO控制器配置*/

                /*定时器控制器通道配置*/

        }

超声波:(定时器输入捕获功能)

         功能效果:每100ms测量一次距离,当距离小于3cm的时候蜂鸣器报警

          原理:给超声波模块TRIG至少10us的高电平触发测距,模块自动发送8个40hz的方波,自动检测是否有信号返回,如果有遮挡物就有信号返回,通过IO口ECHO输出一个高电平,高电平的持续时间就是超声波从发射到返回的时间。根据说明书提供的公式就能得到距离

        总体配置思路:

                定时器初始化配置函数

                {

                        ECHO端口寄存器配置

                        定时器控制器初始化配置

                        NVIC控制器配置

                }

                传感器功能函数

                {

                        定时器初始化配置函数

                        TRIG端口控制器配置

                }

                中断服务函数

                {

                        //更新中断(记录周期溢出次数)

                        //触发中断

                }

                定时中断函数

                {

                        开始测距

                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值