普通MCU如何LED渐亮渐灭

[复制链接]
9342|50
 楼主| OUCHANGHUA 发表于 2010-7-27 14:33 | 显示全部楼层 |阅读模式
本帖最后由 OUCHANGHUA 于 2010-8-18 09:47 编辑

小弟初入门单片机,有高手能帮编个3秒渐亮渐灭的例子吗,,,要用汇编,,附件是要用的IC,,大侠们都看看,指点下小弟,,,多谢了,,路过的都指点下小弟吧,,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
此心向学 发表于 2010-7-27 14:36 | 显示全部楼层
 楼主| OUCHANGHUA 发表于 2010-7-27 14:36 | 显示全部楼层
自已顶下,,,我要做的芯睿的MCU(MK7A11P)有高手能帮编个3秒渐亮渐灭的例子吗,MUC,4M内振
 楼主| OUCHANGHUA 发表于 2010-7-27 14:37 | 显示全部楼层
可这个MCU没有PWM吖
 楼主| OUCHANGHUA 发表于 2010-7-27 14:46 | 显示全部楼层
网上有人说有占空比程序,,,,有人能帮忙解释下吗
ayb_ice 发表于 2010-7-27 15:26 | 显示全部楼层
软件模拟PWM
baiyi5219 发表于 2010-7-27 15:49 | 显示全部楼层
PMW是可以做到的...
 楼主| OUCHANGHUA 发表于 2010-7-27 16:00 | 显示全部楼层
软件模拟PWM,,怎么来搞电IC只有一个定时器,,
zuoxuqi 发表于 2010-7-27 16:09 | 显示全部楼层
8# OUCHANGHUA
用软件延时代替
板砖横飞 发表于 2010-7-27 16:22 | 显示全部楼层
先用定时器,定时一个基准时间,在中断程序里,设置变量,比如1倍,2倍等,就可以产生多路PWM了
yczhang 发表于 2010-7-27 19:51 | 显示全部楼层
for(i=0;i<100;i++)
  for(j=0,led=0;j<100;j++)
    {
      if(i==j)led=1;
      delay(us);
     }
杜专 发表于 2010-7-27 20:25 | 显示全部楼层
超简单
延时 PWM 都不要
杜专 发表于 2010-7-27 20:26 | 显示全部楼层
台企 最喜欢面试这个题目了
xlsbz 发表于 2010-7-27 21:54 | 显示全部楼层
楼上所有的建议 个人觉得都不咋地。

我觉得既然刚入门 那么先不要搞这么复杂的。

步子放慢一点 稳重一点  以后有的是机会搞

注:某些情况下本理论不正确
cleaver.Yeh 发表于 2010-7-28 09:18 | 显示全部楼层
软件模拟PWM+1 I/O;或者奢侈些,用几个I/O做个DAC.增加硬件成本,软件就简单些,CPU loading也少一些.
cubasa 发表于 2010-7-28 09:31 | 显示全部楼层
PWM(占空比调制)是一种技术而不是一种外设,是用数字量控制LED亮度唯一的方法。
只要是个单片机都能做到,即使不带PWM输出。
非常非常的简单,建议用定时器。

先用PWM做个控制LED亮度的函数,比如LED_PWM(uchar x)。比如255级亮度,就让x从0增加到255再减小到0,如此循环……这是理论,实际上会由于LED亮度的非线性导致变化并不平滑,所以要做一些调整,来达到比较舒服的效果。
sherwin 发表于 2010-7-28 10:15 | 显示全部楼层
给楼主一个最简单的方案:外接一个电子电位器。

网上搜一下,一大把。推荐MAXIM的,质量比较好。软件控制一般就是i2c接口,写写寄存器值就可以了。呵呵。

等你入门了,再考虑PWM吧。虽然PWM不难,但是你连基本的概念都还没有,的确不好搞了,呵呵。
cubasa 发表于 2010-7-28 10:34 | 显示全部楼层
最简单的方案就是PWM。如果是普通LED的话,LED正极接VCC,负极串个限流电阻然后接IO。其他什么都可以不要。大功率要加驱动电路,但不至于用上电子电位器。
如果是自己想玩电子电位器,当然没有问题。如果做产品,楼上绝对是误导。
ligpg 发表于 2010-7-28 13:54 | 显示全部楼层
#define PWM_FADE_IN  1
#define PWM_FADE_OUT 2

#define PWM_INIT_DUTY_IN   0
#define PWM_INIT_DUTY_OUT  248

#define PWM_DUTY_STEP   1

#define PWM_SIZE   250


byte pwm_duty=PWM_INIT_DUTY_IN;
byte pwm_counter=0;
byte pwm_fade_mode=0;


void pwm_init_fadein()
{       
        pwm_duty=PWM_INIT_DUTY_IN;
        pwm_counter=0;
        pwm_fade_mode=PWM_FADE_IN;

}


void pwm_init_fadeout()
{       
        pwm_duty=PWM_INIT_DUTY_OUT;
        pwm_counter=0;
        pwm_fade_mode=PWM_FADE_OUT;

}


timer_isr()
{
  if( pwm_fade_mode == PWM_FADE_IN )
  {
                  pwm_counter ++;
                 
                  if( pwm_counter > PWM_SIZE )
                  {
                            pwm_duty += PWM_DUTY_STEP;
                            
                            if( pwm_duty > PWM_SIZE )   
                            {
                                            pwm_duty = PWM_SIZE;  
                                           
                                            pwm_fade_mode = 0;                                         
                            }
                            
                            pwm_counter = 0;
                  }
                 
                  if( pwm_counter > pwm_duty ) LED_OFF;
                  else                          LED_ON;
            
  }
  else   if( pwm_fade_mode == PWM_FADE_OUT )
  {
                  pwm_counter ++;
                 
                  if( pwm_counter > PWM_SIZE )
                  {
                            pwm_counter = 0;
                            
                            if( pwm_duty > PWM_DUTY_STEP ) pwm_duty -= PWM_DUTY_STEP;
                            else
                            {
                                            pwm_duty = 0;  
                                           
                                            pwm_fade_mode = 0;       
                                                                                       
                                            pwm_counter = 1;                                 
                            }
                            
                  }
                 
                  if( pwm_counter > pwm_duty )  LED_OFF;
                  else                          LED_ON;
            
  }
}
xxfhq 发表于 2010-7-28 13:59 | 显示全部楼层
LZ,你这个东西是我刚做的一个项目,听你的描述非常类似,而且IC也一样,新睿的片子,我这有调好的程序,RGB三基色LED流水灯,带渐变控制。有兴趣可以联系我 xxfhq@hotmail.com.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

109

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部