新闻  |   论坛  |   博客  |   在线研讨会
STC11F系列实现可调占空比PWM
juste08301 | 2013-11-28 01:50:08    阅读:58077   发布文章

STC11F系列不带PCA PWM输出功能。若需要可以使用12系列。这里提供一个11F系列的解决办法,但是占用一个定时器。废话少说,贴出主要代码:

#include <reg51.h>
#include <string.h>
#define uchar unsigned char
#define uint  unsigned int

 

sbit SubKey = P3^3; //PWM占空比下调按钮
sbit AddKey = P3^4; //PWM占空比上调按钮
sbit AdjKey = P3^5; //调节幅度按钮

sbit PWM = P1^3;    //PWM输出引脚

unsigned char Total = 0; //总计数
unsigned char zkb =  0;  //占空比
unsigned char tj  =  2;  //控制当前调节键减价幅度
unsigned char Cur =  0;  //当前计数

void initTimer(void)
{
 TMOD=0x1;
 TH0=0xff;
 TL0=0xf7;
}


void Dealy5Ms()
{
    unsigned int Count = 500;
    while(Count --);
}


  
void main(void)

   PWM = 1;
   initTimer();
    TR0=1;
    ET0=1;
    EA=1;

 while(1)
 {
        if(!AdjKey)
        {
            Dealy5Ms();
             if(!AdjKey)
             {
                if(tj < 10)
                {
                     tj++; 
                }
                else
                {
                   tj =0;
                }
             }
             while(!AdjKey);
        }

        if(!AddKey)
        {
            Dealy5Ms();
             if(!AddKey)
             {
                if(zkb < 101-tj)
                {
                    zkb = zkb + tj;
                   
                }
             }
             while(!AddKey);
        }

        if(!SubKey)
        {
            Dealy5Ms();
             if(!SubKey)
             {
                if(zkb > tj)
                {
                    zkb= zkb - tj;
                }
             }
             while(!SubKey);
        }  //end if    

    } //end while

}//end main

 

void timer0(void) interrupt 1
{
    if(Cur <101)
        Cur ++;
    else
        Cur = 0;

    if(Cur < zkb)
        PWM = 1;
    else
        PWM = 0; 

 
    TH0=0xff;
    TL0=0xf7;

}

  

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客