stc单片机实现PWM变频输出的设计

控制/MCU

1842人已加入

描述

利用stc的一款单片机提供的PWM实现变频输出。程序将变频pwm输出到LED上作测试。


 

#include

sfrCCON = 0xD8;

sfr CMOD = 0xD9;

sfr CL = 0xE9;

sfr CH = 0xF9;

sfr CCAP0L = 0xEA;

sfr CCAP0H = 0xFA;

sfr CCAPM0 = 0xDA;

sfr CCAPM1 = 0xDB;

sbit CR = 0xDE;

sbit led = P2^0;

unsigned char duty = 0x80;

unsigned int fre = 0xffff;

void timer0_int (void) interrupt 1 using 1

{

TH0 = fre 》》 8;

TL0 = fre & 0xff;

led = ~led;

}

void timer0_init(void)

{

TMOD &= 0xf0;/* Set timer 0 */

TMOD |= 0x1;/* mode 1 */

TH0 = 0xff;

TL0 = 0xff;

TR0 = 1;/* Enable timer 0 */

ET0 = 1;/* Enable timer 0 interrupt */

}

void pwm_init(void)

{

CMOD = 0x4; // Use timer0

CL = 0x0;

CH = 0x0;

CCAP0H = duty; //Duty Cycle

CCAPM0 = 0x42; // PWM mode

CR = 1; //Start PCA Timer.

}

voidSOFt_delay(unsigned int _1ms)

{

unsigned int tmp;

while(_1ms--!=0) {

for(tmp=0;tmp《144;tmp++);

}

}

void check_key(void)

{

unsigned char key1,key2;

key1 = P1 & 0xf;

soft_delay(20);

key2 = P1 & 0xf;

if(key1 == key2 && key1 != 0xf){

if(key1 == 0xe)

duty += 16;

else if(key1 == 0xd)

duty -= 16;

else if(key1 == 0xb)

fre += 0xff;

else if(key1 == 0x7)

fre -= 0xff;

while((P1 & 0xf) != 0xf);

}

}

void main (void)

{

pwm_init();

timer0_init();

EA= 1;

while(1){

CCAP0H = duty;

check_key();

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_78290694 2020-03-14
0 回复 举报
频率能到多少 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分