本帖最后由 leiyin 于 2014-10-31 13:37 编辑
看到论坛里边有个短小的呼吸灯程序,就尝试了尝试,我这边延时配置的不好,呼吸效果不是很好,就打算用定时器写个程序测试一下,学习单片机这么久了,一直也没写个呼吸灯程序。
呼吸灯,由暗渐变亮,再由亮渐变暗,类似呼吸。
查了一下,正常吸气1.5s 呼气 1.5s;正常人每分呼吸16-18次,儿童20次。
看代码吧,代码比较烂,发上来目的两个一是给自己来个小记,二是交流学习!
代码如下:
粘贴的是部分代码,其中LED是一个灯端口,变量有cnt,TG1,flag,led_t这些均为静态变量或者全局变量,这部分代码放在定时器里边,定时器中断设置成200us中断一次!
1. 控制改变占空比的节奏,修改cnt可以调节快慢,调节TG1的上下范围即调节占空比
-
- cnt++;
- if(cnt>50)
- {
- cnt=0;
- if(flag)
- {
- TG1++;
- if(TG1>=100)
- {
- flag = 0;
- }
- }
- else
- {
- TG1--;
- if(TG1<=1)
- {
- flag = 1;
- }
- }
- }
复制代码
2.控制的是占空比PWM
- led_t++;
- if(led_t<TG1)
- {
- LED = 1;
- }
- else if((led_t>=TG1)&&(led_t<100))
- {
- LED = 0;
- }
- else
- {
- led_t = 0;
- }
-
复制代码
我用的是定时器中断处理,定时中断设置成200us
方便的话,源码贴上来,学习一下!
我的是定频PWM,定时器控制了呼吸灯的亮暗变化速度与曲线,我这是匀速的变化。延时函数也就是PWM最小因子,决定了PWM的最小时间长度。我不断匀速的调节1到129的比值又调回来,这样就实现了占空比的调节。PWM的频率等于最小因子乘以130就是PWM的周期。这样就实现了定频PWM。1S/(100US*130)约等于77HZ 20MS中断一次(我上面的代码备注是50MS那是我一开始设置的值发现有跳动,实际20MS备注没修改)用来改变PWM比值,同时也是控制亮暗的方向。频率是50HZ
一周热门 更多>