<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于51單片機的pwm波產(chǎn)生

基于51單片機的pwm波產(chǎn)生

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò ) 收藏
利用定時(shí)器的中斷來(lái)實(shí)現PWM調制。如果我們設定脈沖的周期為1000毫秒;每20毫秒產(chǎn)生一次中斷,則知道要中斷50次。
那么我們可以這樣編寫(xiě)程序
TH0=0XFF;
TL0=0XEC;這是定時(shí)器0產(chǎn)生一次中斷的時(shí)間,即20毫秒產(chǎn)生一次中斷。我們再定義一個(gè)計數的變量NUM,讓NUM從0開(kāi)始加到50,程序如下
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FE;
TL0 = 0x0C;
NUM++;
if(NUM==33)
{
NUM=0;
}
if(NUM<=PWM)P1=0x00;
if(NUM>PWM)P1=0xff;

}
其中的PWM為0到50的數值,這樣通過(guò)控制PWM的值讓小于PWM的NUM值里所產(chǎn)生的中斷全為低電平,大于PWM的為高電平,這樣通過(guò)控制計數就實(shí)現了PWM。
所有程序如下
#include
#define uint unsigned int
#define uchar unsigned char
sbit k1=P3^2;
sbit k2=P3^3;
sbit beep=P2^7;
uchar PWM=10; //用來(lái)控制脈寬
uchar NUM;//中斷次數變量
void delay(uint t)
{
uchar j;
while(t--)for(j=0;j<120;j++);
}
void bee()
{
beep=0;
delay(10);
beep=1;
delay(10);

}
void keycheck()
{
if(k1==0)
{
delay(10);
if(k1==0)
{
if(PWM!=0X20)
{
PWM++;
delay(20);
}
}
else
bee();
}
if(k2==0)
{
delay(10);
if(k2==0)
{
if(PWM!=0X01)
{
PWM--;
delay(20);
}
}
else
bee();
}
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0xfe; //我們設定500毫秒中斷一次 共中斷32次即一個(gè)周期
TL0 = 0x0c;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
InitTimer0();
while(1)
{

keycheck();
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FE;
TL0 = 0x0C;
NUM++;
if(NUM==33)
{
NUM=0;
}
if(NUM<=PWM)P1=0x00;
if(NUM>PWM)P1=0xff;

}


關(guān)鍵詞: 51單片機pwm

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>