打印

PWM控制,请教高手

[复制链接]
1457|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fancyshed|  楼主 | 2007-12-11 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己(新手)仿照教程编了个PWM控制流水灯亮度的程序,但却不能控制其亮度,不知道错在什么地方,请高手指教,多谢!

void delay(unsigned char t);
void delayms(unsigned char ms);
void beep();
sbit  K1 =P1^4 ;            //PWM值增加键
sbit  K2 =P1^5 ;            //PWM值减少键
sbit  BEEP =P3^3 ;          //蜂鸣器
unsigned char PWM=0x7f ;    //赋初值

main()
{
   P1=0xff;
   TMOD=0x12;
   TH0=0xff; TL0=0xff;
   TH1=0x00; TL1=PWM;
   
   EA=1; ET0=1;  ET1=1;        //开中断
   TR0=1;TR1=0;
      while(1)
       {
         if(K1==0)            //调亮
            {
              if(PWM==0xff)  beep();
              else {PWM++;  delayms(10);}
             }

       if(K2==0)            //调亮
            {
              if(PWM==0x00)  beep();
              else {PWM--;  delayms(10);}
             }
   }
}

void time0() interrupt 1
{
 TR1=0;
 TL1=PWM;
 TR1=1;
 P0=0x00;                      //开灯
 }


void time1() interrupt 2
{
  TR1=0;
  P0=0xff;                      //关灯
}


void delay(unsigned char t)
 { 
   while(t--)   ;
 }

void delayms(unsigned char ms)
{
 unsigned char i;
 while(ms--)
  {
   for(i=0;i<120;i++);
  }
}

相关帖子

沙发
qihao| | 2007-12-11 20:11 | 只看该作者

LED 的拖尾时间,视角暂留效应

要很大的占空比差才能视觉分辨出差别来吧--就算程序正确。

使用特权

评论回复
板凳
fancyshed|  楼主 | 2007-12-12 07:51 | 只看该作者

呵呵,或许是吧,谢谢!

使用特权

评论回复
地板
zusen| | 2007-12-12 09:22 | 只看该作者

嘿嘿,我喜欢用频率来控制~~~

使用特权

评论回复
5
arm86| | 2007-12-12 09:45 | 只看该作者

频率+占空比

懒得查那个定时器是什么方式了。
感觉那个关灯的输出时间太短。倘若你的占空比是0~100%可调,不管频率如何都是可以看到亮度变化的。
用示波器看看吧,很容易看到结果。

使用特权

评论回复
6
yenz| | 2007-12-12 15:08 | 只看该作者

程序有问题


1.如果是c51,T1的中断是interrupt 3,完整的程序应有#include<..H>

2.因TMOD=0x12,time0工作在方式2;time1工作在方式1,16位定时方式,
time0发生中断时间<<time1发生中断时间,在T0中断中又
        TR1=0;
        TL1=PWM;
        TR1=1;
使T1中断不会发生.

使用特权

评论回复
7
hyh0lh| | 2007-12-12 18:20 | 只看该作者

他程序抄错了吧

        TR1=0;
        TL1=PWM;
        TR1=1;
这个应该是:
        TH1=0;
        TL1=PWM;
        TR1=1;

使用特权

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

本版积分规则

1

主题

2

帖子

1

粉丝