加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【C语言学习】51单片机PWM调速

(2015-05-18 21:14:15)
标签:

春芽

pwm

c语言

单片机

it

分类: 单片机

【春芽电子科技】【C语言学习】51单片机PWM调速

http://s16/mw690/001VMXHPgy6SmZKOKxF0f&690

// 利用定时器控制产生占空比可变的 PWM 波
// 按K1,PWM值增加,则占空比减小,LED 灯渐暗。
// 按K2,PWM值减小,则占空比增加,LED 灯渐亮。
// 当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

#include < reg51.h >
#include < intrins.h >

sbit  K1 =P1^0 ;                    //增加键
sbit  K2 =P1^1 ;                    //减少键
sbit  BEEP =P2^1 ;                //蜂鸣器
unsigned char PWM=0x7f ;          //赋初值

void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);


void main()
 

     P0=0xff; 
    TMOD=0x21 ;
    TH0=0xfc ;             //1ms延时常数 12M
    TL0=0x18 ;            //频率调节

    TH1=PWM ;            //脉宽调节
    TL1=0 ;

     EA=1;
     ET0=1;
     ET1=1;
    
     TR0=1 ;

   while(1)
   {
     do{
            if(PWM!=0xff)
           {PWM++ ;delayms(10);}
           else Beep() ; 
         }
     while(K1==0);

     do{
           if(PWM!=0x02)
          {PWM-- ;delayms(10);}
           else Beep() ; 
          }
     while(K2==0);
   }
}


// 定时器0中断服务程序.

void timer0() interrupt 1 
 
    TR1=0 ;
    TH0=0xfc ;
    TL0=0x66 ;
    TH1=PWM ;
    TR1=1 ;
    P0=0x00 ;      //启动输出
}


// 定时器1中断服务程序

void timer1() interrupt 3 

    TR1=0 ;
    P0=0xff ;     //结束输出
}


//蜂鸣器子程序

void Beep()     
  {
      unsigned char i  ;
      for (i=0  ;i<100  ;i++)
        {
          delay(100)  ;
          BEEP=!BEEP                //Beep取反
       
     BEEP=1                            //关闭蜂鸣器
     delayms(100);
 


// 延时子程序
  
void delay(unsigned char t)
 
    while(t--)   ;
 }


// 延时子程序

void delayms(unsigned char ms) 

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

 


 温馨提示:更多问题请咨询 春芽电子科技 淘宝店铺或 春芽电子科技 百度贴吧

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有