|
1. 本程序模塊僅根據(jù)STC12C2052AD系列單片機(jī)的數(shù)據(jù)手冊(cè)編寫,用于其他單片機(jī)時(shí)需要依情況修改。
2. 用于PWM輸出的引腳將不能作為I/O接口使用,除非提前關(guān)閉PWM輸出。
3. PWM脈沖的頻率由系統(tǒng)時(shí)鐘產(chǎn)生,PWM有分頻功能,在使用時(shí)需要注意。
可將其模板下載到本地硬盤,在編寫新程序的時(shí)候復(fù)制、粘貼到工程當(dāng)中,然后根據(jù)情況寫入具體內(nèi)容。


/*********************************************************************************************
函數(shù)名:PWM初始化函數(shù)
調(diào) 用:PWM_init();
參 數(shù):無(wú)
返回值:無(wú)
結(jié) 果:將PCA初始化為PWM模式,初始占空比為0
備 注:需要更多路PWM輸出直接插入CCAPnH和CCAPnL即可
/**********************************************************************************************/
void PWM_init (void){
CMOD=0x02; //設(shè)置PCA定時(shí)器
CL=0x00;
CH=0x00;
CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同
CCAP0H=0x00; // PWM0初始時(shí)為0
//CCAPM1=0x42; //PWM1設(shè)置PCA工作方式為PWM方式(使用時(shí)刪除//)
//CCAP1L=0x00; //設(shè)置PWM1初始值與CCAP0H相同
//CCAP1H=0x00; // PWM1初始時(shí)為0
//CCAPM2=0x42; //PWM2設(shè)置PCA工作方式為PWM方式
//CCAP2L=0x00; //設(shè)置PWM2初始值與CCAP0H相同
//CCAP2H=0x00; // PWM2初始時(shí)為0
//CCAPM3=0x42; //PWM3設(shè)置PCA工作方式為PWM方式
//CCAP3L=0x00; //設(shè)置PWM3初始值與CCAP0H相同
//CCAP3H=0x00; // PWM3初始時(shí)為0
CR=1; //啟動(dòng)PCA定時(shí)器
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:PWM0占空比設(shè)置函數(shù)
調(diào) 用:PWM0_set();
參 數(shù):0x00~0xFF(亦可用0~255)
返回值:無(wú)
結(jié) 果:設(shè)置PWM模式占空比,為0時(shí)全部高電平,為1時(shí)全部低電平
備 注:如果需要PWM1的設(shè)置函數(shù),只要把CCAP0L和CCAP0H中的0改為1即可
/**********************************************************************************************/
void PWM0_set (unsigned char a){
CCAP0L= a; //設(shè)置值直接寫入CCAP0L
CCAP0H= a; //設(shè)置值直接寫入CCAP0H
}
/**********************************************************************************************/
/*********************************************************************************************
程序名: PWM模塊調(diào)試程序(僅實(shí)驗(yàn)用)
硬件支持: STC12C2052 12MHz
接口說(shuō)明: LED灌電流接P3.7接口(PWM0)
/*********************************************************************************************
說(shuō)明:
/*********************************************************************************************/
#include<STC12C2052AD.H> //頭文件
/*********************************************************************************************
函數(shù)名:PWM初始化函數(shù)
調(diào) 用:PWM_init();
參 數(shù):無(wú)
返回值:無(wú)
結(jié) 果:將PCA初始化為PWM模式,初始占空比為0
備 注:需要更多路PWM輸出直接插入CCAPnH和CCAPnL即可
/**********************************************************************************************/
void PWM_init (void){
CMOD=0x02; //設(shè)置PCA定時(shí)器
CL=0x00;
CH=0x00;
CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同
CCAP0H=0x00; // PWM0初始時(shí)為0
//CCAPM1=0x42; //PWM1設(shè)置PCA工作方式為PWM方式(使用時(shí)刪除//)
//CCAP1L=0x00; //設(shè)置PWM1初始值與CCAP0H相同
//CCAP1H=0x00; // PWM1初始時(shí)為0
//CCAPM2=0x42; //PWM2設(shè)置PCA工作方式為PWM方式
//CCAP2L=0x00; //設(shè)置PWM2初始值與CCAP0H相同
//CCAP2H=0x00; // PWM2初始時(shí)為0
//CCAPM3=0x42; //PWM3設(shè)置PCA工作方式為PWM方式
//CCAP3L=0x00; //設(shè)置PWM3初始值與CCAP0H相同
//CCAP3H=0x00; // PWM3初始時(shí)為0
CR=1; //啟動(dòng)PCA定時(shí)器
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:PWM0占空比設(shè)置函數(shù)
調(diào) 用:PWM0_set();
參 數(shù):0x00~0xFF(亦可用0~255)
返回值:無(wú)
結(jié) 果:設(shè)置PWM模式占空比,為0時(shí)全部高電平,為1時(shí)全部低電平
備 注:如果需要PWM1的設(shè)置函數(shù),只要把CCAP0L和CCAP0H中的0改為1即可
/**********************************************************************************************/
void PWM0_set (unsigned char a){
CCAP0L= a; //設(shè)置值直接寫入CCAP0L
CCAP0H= a; //設(shè)置值直接寫入CCAP0H
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:主函數(shù)
調(diào) 用:無(wú)
參 數(shù):無(wú)
返回值:無(wú)
結(jié) 果:程序開始處,無(wú)限循環(huán)
備 注:
/**********************************************************************************************/
void main (void){
PWM_init(); //PWM初始化
PWM0_set(0x10); //設(shè)置PWM占空比
while(1){
//無(wú)限循環(huán)程序
}
}
/**********************************************************************************************/
|
|
相關(guān)帖子
- • 這是定義的問題嗎,用的c語(yǔ)言,怎么都改不對(duì)
- • adc_dma進(jìn)行采集時(shí)打印數(shù)據(jù)為0,不開dma數(shù)據(jù)能夠正常顯示,想問一下是什么原因
- • 單片機(jī)不使用外部中斷,如何LED顯示程序?
- • 做了個(gè)替BF7612CM的測(cè)試
- • 要求電路如果在照明燈點(diǎn)亮期間又有新的聲源出現(xiàn),照明燈應(yīng)重新通電時(shí)間t 請(qǐng)問這個(gè)...
- • Keil程序求助,這些報(bào)錯(cuò)怎么解決,小白一個(gè),剛接觸單片機(jī)
- • 求用at89c51單片機(jī)測(cè)LM331 V/F轉(zhuǎn)化后的頻率 我的沒有顯示
- • MCU模擬SPI通信,能發(fā)送數(shù)據(jù),接收不到數(shù)據(jù)
- • 菜鳥求助
- • STM32單片機(jī)向ESP8266發(fā)送指令,設(shè)置延時(shí)1秒上傳一次數(shù)據(jù),延時(shí)不準(zhǔn)確
- • 關(guān)于51單片機(jī)定時(shí)器計(jì)數(shù)不夠長(zhǎng)的問題,想問問各位大佬有沒有什么思路
- • 單片機(jī)矩陣按鍵 原理圖+源代碼
- • 通過手機(jī)藍(lán)牙APP發(fā)出控制指令,控制3個(gè)以上LED燈亮滅和蜂鳴器報(bào)警和關(guān)閉,怎么做 求指導(dǎo)
- • 關(guān)于用51單片機(jī)驅(qū)動(dòng)AD9851的原理及其編程思路?
- • 單片機(jī)用點(diǎn)陣LED實(shí)現(xiàn)靜態(tài)字符顯示實(shí)驗(yàn)程序
- • 關(guān)于單片機(jī)矩陣鍵盤多位數(shù)的輸入程序問題
- • CCS10.2編譯器貌似不支持部分GNU的__attribute__
- • 基于89C51單片機(jī)的可調(diào)倒計(jì)時(shí)程序
- • 如何使用單片機(jī)定時(shí)器來(lái)控制一個(gè)物理按鈕的IO口的通斷。
- • 用51單片機(jī)做的溫度監(jiān)測(cè)報(bào)警裝置,手動(dòng)報(bào)警是需要按下SEND按鈕的,但是現(xiàn)在我想...
|
|
|
|
|