求一个频率为1KHz占空比在10%到90%之间可调的方波发生器,按键K1使占空比增大,K2使占空比减小的51单片机

2024-11-07 16:48:29
有3个网友回答
网友(1):

/***********************************************************
文件名称: pwm1.1.c
作 者: 略
版 本: 1.1
说 明: P1^0口输出一路可调方波;
用键盘调节频率与占空比的方波发生器;
键盘的扫描列(有电阻)接P2的低四位,高四位接行。
修改记录: 2010年4月16日,改用T0定时方式2,8位自动重载,会更精确;
加上4路方波

***********************************************************/
#include"reg52.h"
#define unchar unsigned char
#define TH_H (256-10)
#define TH_L (256-10)
sbit output0 = P1^0;
sbit output1 = P1^1;
sbit output2 = P1^2;
sbit output3 = P1^3;
sbit s1=P2^0;
sbit s2=P2^1;
sbit s3=P2^2;
sbit s4=P2^3;
unchar count_H[4],count_L[4];
unchar count1[4],count2[4];
unchar i;
unchar P2_H[]={0xef,0xdf,0xbf,0x7f};
/***********************************************************/
void t0(void) interrupt 1
{
count_H[i]++;
count_L[i]++;
TH0=TH_H;
TL0=TH_L;
}
/***********************************************************/
void main(void)
{
unchar Fre_ct[4]={100,50,10,5};//
unchar pwm[4]={50,60,80,100};//设不同的初值频率与占空比
TMOD=0x02;
IE=0X82;
TH0=TH_H;
TL0=TH_L;
TR0=1;
P1=0x0f;
while(1)
{
for(i=0;i++;i<4)
{ P2=P2_H[i];
if(s1==0)
{
while(s1==0);
Fre_ct[i]+=5;

}
if(s2==0)
{
while(s2==0);
Fre_ct[i]-=5;
}
if(s3==0)
{
while(s3==0);
pwm[i]++;
}
if(s4==0)
{
while(s4==0)
;
pwm[i]--;
}
count1[i]=Fre_ct[i]*pwm[i]/100;
count2[i]=Fre_ct[i]*(100-pwm[i])/100;
}
if(count_H[0]==count1[0])
{ output0=0;
count_L[0]=0;
}
if(count_L[0]==count2[0])
{ output0=1;
count_H[0]=0;
}
if(count_H[1]==count1[1])
{ output1=0;
count_L[1]=0;
}
if(count_L[1]==count2[0])
{ output1=1;
count_H[1]=0;
}
if(count_H[2]==count1[2])
{ output2=0;
count_L[2]=0;
}
if(count_L[2]==count2[2])
{ output2=1;
count_H[2]=0;
}
if(count_H[3]==count1[3])
{ output3=0;
count_L[3]=0;
}
if(count_L[3]==count2[3])
{ output3=1;
count_H[3]=0;
}
}

}

网友(2):

我来帮你设计一个!

网友(3):

悬赏分:0