標題:
STC單片機的PWM,AD采集測試程序
[打印本頁]
作者:
51黑芯片
時間:
2016-1-17 04:00
標題:
STC單片機的PWM,AD采集測試程序
/*******************************************************************
*工程名稱: STC的PWM,AD采集測試
*創(chuàng)建人: 張大偉
*創(chuàng)建時間: 2012年5月19號
*隸屬模塊: STC.C
*產(chǎn)考資料:STC手冊
*模塊說明: STC8位PWM測試,上電以后LED出現(xiàn)呼吸燈效應(yīng)。 采集一路電壓,設(shè)定3個穩(wěn)壓值分別是1V,3.3V ,4.2V,讓單片機通過AD采集后
驅(qū)動PWM0控制穩(wěn)壓電路出現(xiàn)一個設(shè)定值。穩(wěn)壓電路用一個采樣電阻連接到AD的采樣端這樣形成一個閉環(huán)系統(tǒng)、!
********************************************************************/
#include <STC12C52.H>
/*******************************************************************
*函數(shù)名稱:
*入口參數(shù):
*出口參數(shù):
*函數(shù)說明: 全局變量和位定義
********************************************************************/
#define unchar unsigned char
#define unint unsigned int
#define DUTYCYCLE(x) (256-(128*x/50))//占空比計算公式256-(80/x=50/128)=XX, ** 占空比**
#define PDXBIT(x) (0x01<<x)
#define REGBIT(x) (0x01<<x)
unchar yi=1;
unchar er=0;
sbit KEY1=P3^4;
unint CYCLE;
/*******************************************************************
*函數(shù)名稱: void Delay(unint x)
*入口參數(shù): x:延時長度
*出口參數(shù):
*函數(shù)說明: 不精確的延時
********************************************************************/
void Delay(unint x) //延時子函數(shù)
{
unint y; //定義一個Y變量
for(;x>0;x--) //如果X大于0,那么X就減1.
for(y=500;y>0;y--);//給Y賦值為500,當Y大于0那么Y就減1. *******注意前面的for的語句后面沒有引號,那么會把后面的FOR語句
//也認為是他的內(nèi)部語句。也就是說X執(zhí)行一次那么Y就得執(zhí)行500次。
}
/*******************************************************************
*函數(shù)名稱: void MainInt()
*入口參數(shù):
*出口參數(shù):
*函數(shù)說明: 主函數(shù)初始化
****************************** **************************************/
void MainInt() //
{
//P4SW|==REGBIT(4);//將P4口設(shè)置為輸出
//AUXR1|=REGBIT(6);//將PWM0和PWM1從P1.3/P1.4移到P4.2/P4.3
P1M1=0x00;
P1M0|=REGBIT(4)|REGBIT(3);//設(shè)置P1.4,3口為強推挽輸出
CMOD|=REGBIT(1);//選擇SYSCLK為PWM的時鐘源//控制PWM波的頻率
CCAPM0|=REGBIT(1)|REGBIT(6);//允許比較器功能,開啟PWM0
CCAPM1|=REGBIT(1)|REGBIT(6);//允許比較器功能,開啟PWM1
CL=0x00;//計數(shù)器清零
CH=0x00;
CCAP0L=0x00;//自動裝入初始值,控制PWM占空比靠著兩個,大于這個數(shù)輸出1,反之。。
CCAP0H=0x00; // CCAPOL CCAPOH 為PWM0的最高占空比和最低占空比。
CCAP1L=0x00; //猜也猜到了這個是PWM1的低占空比。
CCAP1H=0x00; //這個也是我猜的哈哈PWM1的高占空比。
CCON|=REGBIT(6);//啟動PWM
}
/*******************************************************************
*函數(shù)名稱: void KeyScan(void)
*入口參數(shù):
*出口參數(shù):
*函數(shù)說明: 按鍵檢查函數(shù),用來調(diào)節(jié)PWM的占空比0%-100%
********************************************************************/
void KeyScan(void)
{
if(KEY1==0)
{
Delay(500);
if(KEY1==0);
CYCLE+=1;
if(CYCLE>100)
CYCLE=0;
CCAP0L=DUTYCYCLE(CYCLE);//自動裝入初始值,控制PWM占空比靠著兩個,大于這個數(shù)輸出1,反之。。
CCAP0H=DUTYCYCLE(CYCLE);//占空比計算公式256-(80/x=50/128)=XX,
CCAP1L=DUTYCYCLE(CYCLE);
CCAP1H=DUTYCYCLE(CYCLE);
}
}
/*******************************************************************
*函數(shù)名稱: void main(void)
*入口參數(shù):
*出口參數(shù):
*函數(shù)說明: 主函數(shù)
********************************************************************/
void main(void)
{
MainInt();
CYCLE=100;
while(1)
{
//****************下面語句是不斷加減CYCLE的數(shù)值來調(diào)節(jié)占空比輸出的。
if(yi==1)
{
Delay(30);
CYCLE--;
if(CYCLE==1)
er=1,yi=0;
}
if(er==1)
{
Delay(50);
CYCLE++;
if(CYCLE==100)
er=0,yi=1;
}
CCAP0L=DUTYCYCLE(CYCLE);//自動裝入初始值,控制PWM占空比靠著兩個,大于這個數(shù)輸出1,反之。。
CCAP0H=DUTYCYCLE(CYCLE);//占空比計算公式256-(80/x=50/128)=XX,
CCAP1L=DUTYCYCLE(CYCLE);
CCAP1H=DUTYCYCLE(CYCLE);
}
}
復(fù)制代碼
作者:
阿飛7812
時間:
2021-10-4 15:29
樓主謝謝你的分享最近在學(xué)這個 主要是AD部分能發(fā)過完整的嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1