ARM7單片機(jī)(學(xué)習(xí)ing)—(七)、脈寬調(diào)制PWM—02
好了,這個(gè)實(shí)驗(yàn)也是比較簡(jiǎn)單的~~
通過按鍵來調(diào)整PWM的輸出(這里周期不變,只是改變占空比)~~
七、脈寬調(diào)制(PWM)
七—(02)、可調(diào)整的PWM輸出(后面的程序有一般的操作步驟,我沒有進(jìn)行雙邊沿的控制模式的實(shí)驗(yàn),可以參照datasheet~~自己做做~~)
MDK7_1.c(貌似按鍵不起作用~~(*^__^*) 嘻嘻……等下回碰上我再試試吧~~)
//------------------------------------------------------------------------------
//可以調(diào)整的PWM輸出
//首先呢,還是先介紹一下操作步驟:
//1)連接PWM功能引腳,設(shè)置相應(yīng)位(PINSEL0、PINSEL1)
//2)設(shè)置PWM定時(shí)器的時(shí)鐘分頻器(PWMPR),得到所要的定時(shí)器時(shí)鐘
//3)設(shè)置比較匹配控制(PWMMCR),并設(shè)置相應(yīng)的比較值(PWMMRx)
//4)設(shè)置PWM輸出方式,并允許PWM輸出(PWMPCR)及鎖存使能控制(PWMLER)
//5)設(shè)置PWMTCR,啟動(dòng)定時(shí)器,使能PWM
//6)運(yùn)行過程中要更改比較值時(shí),更改之后要設(shè)置鎖存使能(PWMLER)
//------------------------------------------------------------------------------
//可以調(diào)整的PWM輸出
//------------------------------------------------------------------------------
#include"lpc210x.h"
#include"macroandconst.h"
//------------------------------------------------------------------------------
#define KEY 0x00004000//P0.14引腳連接KEY
//------------------------------------------------------------------------------
//key_scan()
//等待檢測(cè)按鍵函數(shù)
void key_scan()
{
uint32 i;
while(1)
{
while((IOPIN&KEY)!=0);//等待按鍵按下
for(i=0;i<50;i++);//延時(shí)消抖
if(IOPIN&KEY==0)
break;
}
while(IOPIN&KEY==0);//等待按鍵松手
}
//------------------------------------------------------------------------------
//pwm_init()
//PWM初始化函數(shù)
void pwm_init()
{
PWMPR=0X00;//不分頻,技術(shù)頻率為Fpclk
PWMMCR=0X02;//設(shè)置PWMMR0匹配時(shí)復(fù)位PWMTC
PWMMR0=2765;//設(shè)置PWM周期
PWMMR6=1382;//設(shè)置PWM占空比
PWMLER=0X41;//PWMMR0PWMMR6鎖存
PWMPCR=0X4000;//允許PWM6輸出,單邊PWM
PWMTCR=0X09;//啟動(dòng)定時(shí)器,PWM使能
}
//------------------------------------------------------------------------------
//main()
int main()
{
uint32 pwm_data;//定義PWM占空比控制變量
PINSEL0=0X00080000;//設(shè)置PWM6連接到P0.9引腳
PINSEL1=0X00000000;//其它引腳設(shè)置為GPIO
IODIR=0;//設(shè)置所有引腳為輸入
pwm_init();
pwm_data=1382;
while(1)
{
PWMMR0=2765;//設(shè)置PWM周期
PWMMR6=pwm_data;//設(shè)置PWM占空比
PWMLER=0X41;//PWMMR0、PWMMR6鎖存,更新PWM占空比
key_scan();
pwm_data+=100;
if(pwm_data>=2764)
pwm_data=0;
}
}