打印

普通MCU如何LED渐亮渐灭

[复制链接]
6659|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OUCHANGHUA|  楼主 | 2010-7-27 14:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 OUCHANGHUA 于 2010-8-18 09:47 编辑

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

MK6A11P V04_cn.pdf

319.3 KB

相关帖子

沙发
此心向学| | 2010-7-27 14:36 | 只看该作者
PWM

使用特权

评论回复
板凳
OUCHANGHUA|  楼主 | 2010-7-27 14:36 | 只看该作者
自已顶下,,,我要做的芯睿的MCU(MK7A11P)有高手能帮编个3秒渐亮渐灭的例子吗,MUC,4M内振

使用特权

评论回复
地板
OUCHANGHUA|  楼主 | 2010-7-27 14:37 | 只看该作者
可这个MCU没有PWM吖

使用特权

评论回复
5
OUCHANGHUA|  楼主 | 2010-7-27 14:46 | 只看该作者
网上有人说有占空比程序,,,,有人能帮忙解释下吗

使用特权

评论回复
6
ayb_ice| | 2010-7-27 15:26 | 只看该作者
软件模拟PWM

使用特权

评论回复
7
baiyi5219| | 2010-7-27 15:49 | 只看该作者
PMW是可以做到的...

使用特权

评论回复
8
OUCHANGHUA|  楼主 | 2010-7-27 16:00 | 只看该作者
软件模拟PWM,,怎么来搞电IC只有一个定时器,,

使用特权

评论回复
9
zuoxuqi| | 2010-7-27 16:09 | 只看该作者
8# OUCHANGHUA
用软件延时代替

使用特权

评论回复
10
板砖横飞| | 2010-7-27 16:22 | 只看该作者
先用定时器,定时一个基准时间,在中断程序里,设置变量,比如1倍,2倍等,就可以产生多路PWM了

使用特权

评论回复
11
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);
     }

使用特权

评论回复
12
杜专| | 2010-7-27 20:25 | 只看该作者
超简单
延时 PWM 都不要

使用特权

评论回复
13
杜专| | 2010-7-27 20:26 | 只看该作者
台企 最喜欢面试这个题目了

使用特权

评论回复
14
xlsbz| | 2010-7-27 21:54 | 只看该作者
楼上所有的建议 个人觉得都不咋地。

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

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

注:某些情况下本理论不正确

使用特权

评论回复
15
cleaver.Yeh| | 2010-7-28 09:18 | 只看该作者
软件模拟PWM+1 I/O;或者奢侈些,用几个I/O做个DAC.增加硬件成本,软件就简单些,CPU loading也少一些.

使用特权

评论回复
16
cubasa| | 2010-7-28 09:31 | 只看该作者
PWM(占空比调制)是一种技术而不是一种外设,是用数字量控制LED亮度唯一的方法。
只要是个单片机都能做到,即使不带PWM输出。
非常非常的简单,建议用定时器。

先用PWM做个控制LED亮度的函数,比如LED_PWM(uchar x)。比如255级亮度,就让x从0增加到255再减小到0,如此循环……这是理论,实际上会由于LED亮度的非线性导致变化并不平滑,所以要做一些调整,来达到比较舒服的效果。

使用特权

评论回复
17
sherwin| | 2010-7-28 10:15 | 只看该作者
给楼主一个最简单的方案:外接一个电子电位器。

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

等你入门了,再考虑PWM吧。虽然PWM不难,但是你连基本的概念都还没有,的确不好搞了,呵呵。

使用特权

评论回复
18
cubasa| | 2010-7-28 10:34 | 只看该作者
最简单的方案就是PWM。如果是普通LED的话,LED正极接VCC,负极串个限流电阻然后接IO。其他什么都可以不要。大功率要加驱动电路,但不至于用上电子电位器。
如果是自己想玩电子电位器,当然没有问题。如果做产品,楼上绝对是误导。

使用特权

评论回复
19
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;
            
  }
}

使用特权

评论回复
20
xxfhq| | 2010-7-28 13:59 | 只看该作者
LZ,你这个东西是我刚做的一个项目,听你的描述非常类似,而且IC也一样,新睿的片子,我这有调好的程序,RGB三基色LED流水灯,带渐变控制。有兴趣可以联系我 xxfhq@hotmail.com.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

109

帖子

0

粉丝