怎么让51单片机输出可调占空比的脉冲波,要哪个管脚引出,用什么程序?我是刚学单片机的,什么都不懂求帮助

能不能详细一点不然看不懂哦!非常感谢啊

//51单片机PWM占空比调整演示程序
//(通过测试,注意:AT89S51单片机,有的单片机P3_7需要改为P3^7)

/*****************************************************************************
* 程序名称:PWM占空比调整演示程序 *
*程序思路说明: *
* 只需要4个按键。 *
*关于频率和占空比的确定,对于12M晶振,输出频率为1KHZ,这样定时中断次数设定为 *
*10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样可以设 *
*定占空比可从1-99%变化。即0.01ms*100=1ms *
******************************************************************************/

#include<regx51.h>
#define uchar unsigned char
#define uint unsigned int
uchar timer0_tick,ZKB=1;//timer0_tick计数,ZKB占空比
uchar i=0,n=0,temp=0;
code seven_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//1,2,3, 4, 5, 6, 7, 8, 9
code scan[2]={0xfd,0xfe};
uchar counter[2]={0,0};
sbit AN1=P3^2;//调整个位
sbit AN2=P3^3;//调整十位
sbit AN3=P3^4;//启动按键
sbit AN4=P3^5;//确认按键
void delay(uint z)//软件延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
static void timer0_isr(void) interrupt 1 using 0 //中断函数
{
TR0=0;
TL0=0xf6;
TH0=0xff;
TR0=1;
if (ZKB>99) ZKB=1;
if (ZKB<1) ZKB=99;
counter[0]=ZKB%10;
counter[1]=ZKB/10;
n++;
if(n==100)
{
n=0;
i++;
if(i==2) i=0;
P0=seven_seg[counter[i]];
P2=scan[i];
}
timer0_tick++;
if(timer0_tick++==100)
{
timer0_tick=0;

}
if(AN2==0)
{
delay(100);
if(AN2==0)
{
temp=1;
counter[0]++;
if(counter[0]==10)
{
counter[0]=0;
}

}
}
if(AN1==0)
{
delay(100);
if(AN1==0)
{
temp=1;
counter[1]++;
if(counter[1]==10)
{
counter[1]=0;
}

}
}
ZKB=counter[0]+counter[1]*10;
if(AN4==0)
{
delay(5);
if(AN4==0)
temp=0;
}
if(temp==1)
P3_7=0;// P3_7为脉冲输出引脚
else
{
if (timer0_tick<=ZKB) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
{
P3_7=1;
}
else
{
P3_7=0;
}

}
}
static void timer0_initialize(void)//中断初始化
{
EA=0;
timer0_tick=0;
TR0=0;
TMOD=0x01;
TL0=0xf6;
TH0=0xff;
PT0=0;
ET0=1;
TR0=1;
EA=1;
}
void main(void)
{
STAR: delay(100);
if(AN3!=0) goto STAR;//按键3启动脉冲
timer0_initialize();
while(1);
}
//按按键3启动脉冲器,初始设置占空比为1%,按键1调整十位,
//按键2调整个位,一旦调整,输出为0,必须按确认键确认,
//输出正确脉冲.可以占空比1-99%任意调节。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-21
#include<AT89X52.H>
#include<intrins.h>
#include<stdio.h>
sbit out=P3^4;
void delay(unsigned int);//延迟
unsigned int i,j,k,l,m;
void main()
{

while(1)
{
i=0;
j=1000;
for(l=0;l<1000;l++)
{
out=1;
delay(i);
i++;
out=0;
delay(j);
j--;
}

}
}

void delay(unsigned int i)//延迟2
{
while(i>0)
{
i--;
}
}
你试试吧 建议查一下占空比的定义 就明白了

...想用51单片机通过按键触发来输出一个可调占空比的的PWM波形。用C语 ...
开个定时器,0.1ms的中断周期,中断100次为一个PWM周期,得出10ms周期的PWM波,然后在这100次的中断中,前30次中断让IO口输出高,后70次让IO口输出低,然后就得出了30%占空比的PWM波,根据这个方法即可实现你的要求。

用51单片机产生占空比可调的pwm,且可以定时持续输出一定占空比的...
\/\/* CMOD |= 0X02; \/\/ PCA\/PWM时钟源为 Fosc\/2 \/\/* CMOD |= 0X04; \/\/ PCA\/PWM时钟源为 定时器0的溢出,一般设为模式2,可实现可调频率PWM输出 \/\/* CMOD |= 0X06; \/\/ PCA\/PWM时钟源为 ECI\/P3.4脚的外部时钟输入(最大速率=Fosc\/2)\/\/* CMOD |= 0X08; \/\/ PCA\/...

用的是51单片机,晶振11.0592,请问怎么算出占空比,和pwm波频率,求具体...
由于中断程序要占用一定时间,因此定时器中断间隔时间不能太短,造成PWM的频率不能太高,或者占空比的调节精度较低 所以有的单片机具有硬件PWM功能

用51单片机怎么产生占空比可调的pwm波 我在网上搜的有不少但频率不高...
如果你要的话我可以晚上给你写一个。你调节是通过按键增加减少还是通过旋钮改变,如果是旋钮改变的我有现成的,只要改下平率即可。如果是按键的,给我一个晚上的时间。

求51单片机输出固定占空比c程序
SETB IT0 ;设置中断触发方式:脉冲触发 SETB EX0 ;允许外部中断EX0中断 SETB EA ;总的中断允许 MLOOP:LCALL TOBCD ;十六进制整数转换成BCD码整数 LCALL DRIVE ;驱动输出 LCALL DisplayResult ;BCD码整数拆开两个字节 LCALL DRIVE ;驱动输出 LCALL DRIVE ...

51单片机怎么控制引脚的输出电压?
首先你要了解芯片ML4435的作用及如何控制,可以看它的datasheet 我没用过这个芯片我一般控制直流电机都是用的H桥电路,你要知道芯片ML4435 5脚控制速度是 如何控制,如果是频率的高低,你可以用定时器来产生定时中断让单片机一个端口来接5脚,我用H桥控制速度都是调节其占空比 ...

利用51单片机产生一个频率为10HZ的矩形波 需要电路图 数据。占空比可调...
}} void timer0(void) interrupt 1{ TH0=0xfe; TL0=0xc; if(pwm_i<pwm_zq) { pwm_i++; if(pwm_i>=pwmH_i) { PWM = 0; } } else { PWM = 1; pwm_i = 0; }} \/\/pwmH_i越大,占空比越大。你自己根据实际情况设置。

用51单片机的定时器产生一种方波,频率60HZ,但是占空比只有约0.5%...
24MHz晶振,系统时钟周期 t =1\/24 us;单片机指令周期(机械周期)T=12t=0.5us;16位定时器的最大计数为 65536个机械周期,即 32768us=32.768ms,足够产生 16.67ms 的脉冲了。程序思路:①先计算2个值:60us = 120 ×0.5us=120T;16.67ms=33333 ×0.5us=33333T;②定时器内有个变量...

你好---可否用stc51单片机控制 NE555 脉冲发生器 输出方波
按你说的,用单片机一个I\/O脚直接控制555的第4脚是没有问题的,但要写程序来控制这一个I\/O脚的输出。还有一个条件是,555电路也得用5V电源,与单片机要共地。其实,就用单片机,就可以实现555电路的功能,输出占空比可调模块方波矩形波信号,是小菜一碟,何必再用555呢。再说了,只用555也行啊,就...

我能用51单片机控制输出0-90V直流电,2A. . 都要用到什么零件?请具体给...
假如你已经有了一个可以无级调节的0-90V直流开关电源,而该电源要求用一个0-5V电压信号来控制,那么,你只要把你的单片机输出的0-5V电接过去就行了。假如没有这样的现成开关电源,要自己做的话,那就比较复杂。而且那种情况下,通常“输出0-5V电”是没有用处的。因为这么大的电流,应该用PWM占空比...

相似回答