枫飞秋语 发表于 2016-9-26 14:53:01

我爱萝丽爱萝丽 发表于 2016-9-26 13:40
也没几个人回复,还以为都没人看

大神,估计大家都没懂,不敢乱回复,快公布吧

机甲老顽童 发表于 2016-9-26 15:14:11

群主,学生最怕的就是作业!一看是作业,一个头两个大。

猪猪宠物 发表于 2016-9-26 18:28:03

都在默默的看呢。每天都要来看几遍更新没有。老火。

838055757 发表于 2016-9-27 00:12:09

count=count+1;                  if(count>9)                     {                         count=0;                     }                  if(duty_R>count)                  {                         LED_R=1;               }               else               {                         LED_R=0;               }                if(duty_G>count)                  {                         LED_G=1;               }               else               {                         LED_G=0;               }                  if(duty_B>count)                  {                         LED_B=1;               }               else               {                         LED_B=0;               }

838055757 发表于 2016-9-27 00:15:11

睡了一觉醒来想出来的   就是这学习劲不知道对不对

我爱萝丽爱萝丽 发表于 2016-9-27 00:53:55

838055757 发表于 2016-9-27 00:12
count=count+1;                  if(count>9)                     {                         count ...

对,就是这样。起码的互动还是要有的,不然整天自言自语什么意思。

我爱萝丽爱萝丽 发表于 2016-9-27 01:27:42

1.3 添加PWM程序


上一小节中,留了一个小坑让大家自己填。要求实现的功能是:用每个LED的占空比独立的控制三种颜色的亮度。


一共有三位童鞋提交了自己的答案:


第一位:只能亮白色或熄灭,达不到要求;
第二位:能够实现控制亮度、颜色的目的,但逻辑不清晰,引脚只能是0或1,将0~10的duty值赋给引脚没有意义;
第三位:能够实现要求。
为什么要使用三个PWM?独立控制每个LED亮度才能实现更多的色彩,方便接下来更复杂的程序编写。

count=count+1;   //每过1ms计数+1
                if(count>9)      
                {
                        count=0;       //计数大于9后又变成0!,0~9十毫秒PWM周期
                }

                if(duty_R>count)   //在count 0~9变化中,duty大于count的次数就是占空比
                {
                        LED_R=1;       //改变duty改变高电平时间,亮度变化
                }
                else
                {
                        LED_R=0;
                }
               
                if(duty_G>count)   //绿色LED PWM
                {
                        LED_G=1;      
                }
                else
                {
                        LED_G=0;
                }
               
                if(duty_B>count)   //蓝色LED PWM
                {
                        LED_B=1;      
                }
                else
                {
                        LED_B=0;
                }

我爱萝丽爱萝丽 发表于 2016-9-27 02:33:37

1.4 更多模式怎么加


首先你应该注意到,无论什么模式,都是有它的周期性的。
举例说最简单的爆闪模式:亮半秒灭半秒,两个状态不断循环;
双闪模式:亮半秒、灭半秒、亮半秒、灭三秒,四种状态循环;
七色舞台灯的模式:每种颜色亮1秒,7个状态不断循环;
……


举例程序如何实现爆闪模式,学到以后你可以试试自己实现其他功能。


循环程序必定有有一个数据计算时间,所以你要先定义一个数据:
unsigned int delay_time;   //定义一个数据,记录时间
注意数据大于255时,必须使用unsigned int


增加了模式7,所以按键改变模式的最大值也要相应更改。
添加模式7的代码:
更多更复杂的模式程序,就要看每个人的能力自己深入练习了。第一个项目的学习算是结束。
if(mode==7)   //模式7 爆闪
                {
                        delay_time=delay_time+1;
                        if(delay_time>1000)//爆闪周期1000ms
                        {
                                delay_time=0;
                        }
                       
                        if(delay_time<400)   //前0.4秒全亮
                        {
                                duty_R=10;
                          duty_G=10;
                          duty_B=10;
                        }
                        else               //后0.6秒熄灭
                        {
                                duty_R=0;
                          duty_G=0;
                          duty_B=0;
                        }
                }

panlongdian 发表于 2016-9-27 08:20:44

谢谢老师的更新,一个PWM和三个PWM效果没有什么区别呀!只是需要更多的功能时,才能显示出led变量的用处。谢谢老师详细而渐进的引导!

我是天才 发表于 2016-9-27 22:42:17

楼主,pwm掌握的差不多了,希望楼主尽快推出ppm教程和ad检测功能,这样就可以自己做一些东西插在接收机上了,楼主辛苦

机甲老顽童 发表于 2016-9-28 00:04:02

你们都那么牛逼,咋都不上天呢,我还没学会呢,群主关键词都没教完

838055757 发表于 2016-9-28 14:22:20

unsigned char jaotishan;if(mode==8) { jaotishan=jaotishan+1;    if(jaotishan>3)      {         jaotishan=0;         }                  if(jaotishan==1)                        {                           duty_R=10;                           duty_G=0;                           duty_B=0;                         }                if(jaotishan==2)                        {                           duty_R=0;                           duty_G=10;                           duty_B=0;                         }                   if(jaotishan==3)                        {                           duty_R=0;                           duty_G=0;                           duty_B=10;                         }}

838055757 发表于 2016-9-28 19:30:37


unsigned char jaotishan;
      if(mode==8)
      {
       jaotishan=jaotishan+1;   
      if(jaotishan>3)      
             {   
            jaotishan=0;
             }               
       if(jaotishan==1)

                  {
                        duty_R=10;
                        duty_G=0;   
                        duty_B=0;               
                  }      
      if(jaotishan==2)
                  {
                        duty_R=0;
                        duty_G=10;
                        duty_B=0;
                   }               
       if(jaotishan==3)
                  {   
                     duty_R=0;
                     duty_G=0;
                     duty_B=10;
                        }
}


萝丽大师 你看下 哪里不对   我想让他交替闪

panlongdian 发表于 2016-9-28 20:31:05

838055757 发表于 2016-9-28 19:30 static/image/common/back.gif
unsigned char jaotishan;
      if(mode==8)
      {

牛,有思想。

机甲老顽童 发表于 2016-9-28 21:34:02

本帖最后由 yrj 于 2016-9-28 21:47 编辑

爆闪的编译出错,呵呵,原来自己没定义unsigned int delay_time;

我爱萝丽爱萝丽 发表于 2016-9-29 03:27:03

我是天才 发表于 2016-9-27 22:42
楼主,pwm掌握的差不多了,希望楼主尽快推出ppm教程和ad检测功能,这样就可以自己做一些东西插在接收机上了 ...

恩,会慢慢有的。这样会的人多了以后简单DIY你们可以自己搞定了

我爱萝丽爱萝丽 发表于 2016-9-29 03:31:16

838055757 发表于 2016-9-28 19:30
unsigned char jaotishan;
      if(mode==8)
      {


交替闪变化太快了,1ms变化一次看不出来。至少要200ms吧.先用delay_time等待200ms后,jiaotishan再+1

签签 发表于 2016-9-29 08:53:32

原来大神在这里呀。。找的好辛苦。

LIHUA 发表于 2016-9-29 09:10:27

催更http://www.moz8.com//mobcent//app/data/phiz/default/15.png

LIHUA 发表于 2016-9-29 09:13:09

time变量有什么用呢?      没看懂,
页: 1 2 [3] 4 5 6 7
查看完整版本: 第七课:扩展课!用掉你的单片机