"); //-->
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;
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。