独闷闷网

标题: 很难得的呼吸灯源代码!还有原理讲解! [打印本页]

作者: jianhong_wu    时间: 2015-1-6 22:38
标题: 很难得的呼吸灯源代码!还有原理讲解!
本帖最后由 jianhong_wu 于 2015-1-10 11:04 编辑

肖亚平--成都:
  1. #include<reg52.h>

  2. sbit LED=P0^0;

  3. void delay(unsigned int ms)
  4. {
  5.         unsigned int i=0,j=0;

  6.         for(i=ms;i>0;i--)
  7.                 for(j=20;j>0;j--);
  8. }

  9. void main()
  10. {
  11.         unsigned int t = 50;
  12.         unsigned int d = 1;

  13.         while(t =t+ d)
  14.         {
  15.                 LED = t%2;

  16.                 delay(t*(LED==1)+(100-t)*(LED==0));
  17.                 if(t>=95||t<=5)
  18. {
  19.                      d =-d;
  20. }
  21.         }
  22. }
复制代码
这个可以实现一个呼吸灯,最后几句,我没有硬是没有弄明白是什么意思?

鸿哥-深圳:
首先,把 delay(t*(LED==1)+(100-t)*(LED==0));看做是:
(1)当LED亮的时候(LED==1)等于1,(LED==0)等于0,此时
delay(t*(LED==1)+(100-t)*(LED==0))相当于delay(t);
(2)当LED灭的时候(LED==1)等于0,(LED==0)等于1,此时
delay(t*(LED==1)+(100-t)*(LED==0))相当于delay((100-t));

鸿哥点评:这段代码作者明显有耍酷得嫌疑,搞得有点太花俏了。以上代码相当于
  1. void main()
  2. {
  3.         unsigned int t = 50;
  4.         unsigned int d = 1;

  5.         while(t =t+ d)
  6.         {
  7.                 LED = t%2;
  8.                 if(LED==1)        
  9.                 {
  10.                    delay(t);
  11.                 }         
  12.                 else
  13.                 {
  14.                     delay(100-t);
  15.                 }
  16.                 if(t>=95||t<=5)
  17.                 {
  18.                      d =-d;
  19.                 }
  20.         }
  21. }
复制代码

肖亚平--成都:
谢谢,鸿哥,我先慢慢的看看吧。

Inc/sq-东莞:
要不要我教你一个最简单最好理解的方法?如下图代码,你看完应该会立刻懂了。

我之前教曹建的时候就是跟他说这个,他一下子懂了。你的灯就可以呼吸了。


泽坤—江夏:
呼吸灯不是要慢慢的暗再慢慢的灭吗?这样不就亮灭吗?怎么会慢慢亮起来?

Inc/sq-东莞:
看来你这个学弟/学妹想象力真的好差呀,还需努力哇.

鸿哥-深圳:
跟大家解释一下吧。其实我也不懂。我感觉你的程序应该就是亮灭两种状态.

Inc/sq-东莞:
就是在0~500这个区间中,每个时刻,大于某个阶段就亮,小于某个阶段就灭,这不就是PWM吗?所谓的呼吸灯,不就是利用占空比来控制灯的亮度吗?那么占空比,不就是1个周期中高电平所占的时间吗?如果开关频率快了,人眼不能分辨了,不就显示一定亮度了吗?呼吸灯的原理是利用PWM渐变的占空比,你根据这个思路再去想想它。

峰哥-福建:
第一次是500后面就减小了,不就时间上有变化?延迟时间。

泽坤—江夏:
说到pwm就懂了。我之前都是写pwm来控制。

Inc/sq-东莞:
我上面这个,只是逐渐亮,然后灭怎么办,反过来不就是了嘛?


鸿哥-深圳:
高,实在是高。藏得好深呐,妙极了。看到这个段程序,让我有一种想飞的感觉,飘飘然,我真的还想再活五百年。



作者: waphaoyun    时间: 2015-1-7 14:41
最近忙于期末考试,,,好几天没来了




欢迎光临 独闷闷网 (http://dumenmen.com/) Powered by Discuz! X3.2