复盘局:
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端口控制器配置
}
中断服务函数
{
//更新中断(记录周期溢出次数)
//触发中断
}
定时中断函数
{
开始测距
}
标签:定时器,舵机,配置,flag,RGB,key,按键 From: https://blog.csdn.net/weixin_61618197/article/details/136805056