專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)pwm調(diào)速程序

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2012年05月21日   【字體:

  此程序是一個用51單片機(jī)來調(diào)直流電機(jī)轉(zhuǎn)速的程序。當(dāng)然也可以用來調(diào)整led燈的亮度,用定時器2來實(shí)現(xiàn).
 


#include <reg52.h> //包括一個52標(biāo)準(zhǔn)內(nèi)核的頭文件
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit PWM = P3^3; //要控制的風(fēng)扇
sbit K= P3^7; //按鍵控制轉(zhuǎn)速
uchar scale;//用于保存占空比的輸出0的時間份額,總共10份
//延時程序
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}

// 主程序
void main(void)
{
RCAP2H =0xF3; //賦T2的預(yù)置值,溢出1次是1/1200秒鐘
RCAP2L =0x98;
scale=10;
TR2=1; //啟動定時器
ET2=1; //打開定時器2中斷
EA=1; //打開總中斷
while(1) //程序循環(huán)
{
while(K==0)
{
   scale++;
   while(K==0)
   ;
   if(scale==11)
   scale=0;
}
}
}
//1/1200秒定時器2中斷
timer2() interrupt 5
{
static uchar tt=0; //tt用來保存當(dāng)前時間在一秒中的比例位置
TF2=0;
tt++;
if(tt==10) //每1/120秒整開始輸出低電平
{
tt=0;
if(scale!=0) //這里加這一句是為了消除滅燈狀態(tài)產(chǎn)生的鬼影
PWM=0;
}
if(scale==tt) //按照當(dāng)前占空比切換輸出高電平
PWM=1;
}
關(guān)閉窗口

相關(guān)文章