欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機的方波的輸出頻率和占空比
[打印本頁]
作者:
張自達
時間:
2014-8-13 12:34
標(biāo)題:
51單片機的方波的輸出頻率和占空比
如何改變51單片機輸出方波的頻率和占空比
作者:
admin
時間:
2014-8-13 13:57
昨天在24小時必答區(qū)還討論了這個問題,樓主你進這個去看一下
作者:
XUSHENG
時間:
2014-8-13 22:40
一起研究吧!我也要這信息!
作者:
臺老怪
時間:
2014-8-28 16:35
我在網(wǎng)上找到得找個,試試還可以,剛剛學(xué),還有好多地方不懂。
//程序功能簡介:本程序產(chǎn)生15HZ~~~50KHZ的方波,并且實現(xiàn)頻率和脈寬的獨立調(diào)制,即可
// 在改變頻率的同時不改變脈寬,再改變脈寬的同時不改變頻率;同時設(shè)置
// 兩個調(diào)節(jié)步長------在KEY鍵按下時,粗調(diào),沒有按下時,細(xì)調(diào);
//程序思路: 本程序用到兩個定時器------定時器0和定時器1,其中定時器0工作在定時方式下,
// 決定方波的頻率;定時器1,同樣工作在定時方式下,用于設(shè)定脈寬;
//制作人: 陳卓;
//制作人單位: 武漢理工大學(xué) 信息工程學(xué)院 電信0504班;
//制作時間: 2007年12月26日;
//------------------------------------------------------------------------------------
#include "reg52.h"
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
#define ALL 65536 //定時器工作方式1時,最大基數(shù)長度 65536;
#define F_osc 12000000 //晶振頻率12M;
//------------------------------------------------------------------------------------
// 各端口定義;
//------------------------------------------------------------------------------------
sbit KEY_F_UP=P0^2; //頻率上調(diào)按鈕;
sbit KEY_F_DOWN=P0^3; //頻率下調(diào)按鈕;
sbit KEY_W_UP=P0^4; //脈寬上調(diào)按鈕;
sbit KEY_W_DOWN=P0^5; //脈寬下調(diào)按鈕;
sbit KEY=P0^6; //粗細(xì)調(diào)節(jié)按鈕-----按下為粗調(diào),否則為細(xì)調(diào);
sbit OUTPUT=P1^0; //波形輸出;
//------------------------------------------------------------------------------------
//全局變量聲明;
//------------------------------------------------------------------------------------
uchar TIMER0_H,TIMER0_L,TIMER1_H,TIMER1_L; //定時器0和定時器1的初值設(shè)置;
uchar PERCENT=50; //初始占空比;
uchar FLAG_F=0,FLAG_W=0; //頻率調(diào)節(jié)標(biāo)志和脈寬調(diào)制標(biāo)志;
uint FREQ=50000; //初始頻率;
float temp; //臨時全局變量,用于數(shù)據(jù)傳遞;
//-----------------------------------------------------------------------------------
//函數(shù)聲明;
//-----------------------------------------------------------------------------------
void delay(uchar t); //延時函數(shù),用于按鍵去抖;
void init(); //初始化函數(shù),用于定時器的初始化;
void calculate_F(); //頻率計算函數(shù),當(dāng)頻率變化,計算出定時器0初值;
void calculate_W(); //脈寬計算函數(shù),脈寬變化時,計算出定時器1初值;
void key_scan(); //按鍵掃描函數(shù);
void timer0(); //定時器0中斷函數(shù);
void timer1(); //定時器1中斷函數(shù);
//-----------------------------------------------------------------------------------
//函數(shù)名稱:delay();
//入口參數(shù):uchar t;
//出口參數(shù):無;
//函數(shù)功能:延時;
//------------------------------------------------------------------------------------
void delay(uchar t)
{
uchar i,j;
while(t--)
{
for(i=0;i<100;i++)
for(j=0;j<100;j++)
;
}
}
//-----------------------------------------------------------------------------------
//函數(shù)名稱:calculate_F();
//入口參數(shù):無;
//出口參數(shù):無;
//函數(shù)功能:頻率計算函數(shù),當(dāng)頻率變化,計算出定時器0初值;
//------------------------------------------------------------------------------------
void calculate_F()
{
temp=ALL-F_osc/12.0/FREQ;
TIMER0_H=(uint)temp/256;
TIMER0_L=(uint)temp%256;
}
//-----------------------------------------------------------------------------------
//函數(shù)名稱:calculate_W();
//入口參數(shù):無;
//出口參數(shù):無;
//函數(shù)功能:脈寬計算函數(shù),脈寬變化時,計算出定時器1初值;
//------------------------------------------------------------------------------------
void calculate_W()
{
float TEMP;
TEMP=(1-PERCENT/100.0)*ALL+temp*PERCENT/100.0;
TIMER1_H=(uint)TEMP/256;
TIMER1_L=(uint)TEMP%256;
}
//-----------------------------------------------------------------------------------
//函數(shù)名稱:key_scan();
//入口參數(shù):無;
//出口參數(shù):無;
//函數(shù)功能:按鍵掃描函數(shù);
//------------------------------------------------------------------------------------
void key_scan()
{
delay(4);
if(!KEY_F_UP) //頻率上調(diào)鍵按下;
{
FLAG_F=1; //置標(biāo)志位;
if(!KEY)
FREQ+=10;
else
FREQ++;
if(FREQ>50000)
FREQ=1;
}
else if(!KEY_F_DOWN) //頻率下調(diào)鍵按下;
{
FLAG_F=1; //置標(biāo)志位;
if(!KEY)
FREQ-=10;
else
FREQ--;
if(FREQ<1)
FREQ=50000;
}
else if(!KEY_W_UP) //脈寬上調(diào)鍵按下;
{
FLAG_W=1; //置標(biāo)志位;
if(!KEY)
PERCENT+=5;
else
PERCENT++;
if(PERCENT>49)
PERCENT=1;
}
else if(!KEY_W_DOWN) //脈寬下調(diào)鍵按下;
{
FLAG_W=1; //置標(biāo)志位;
if(!KEY)
PERCENT-=5;
else
PERCENT--;
if(PERCENT<1)
PERCENT=49;
}
else ;
}
//-----------------------------------------------------------------------------------
//函數(shù)名稱timer0();
//入口參數(shù):無;
//出口參數(shù):無;
//函數(shù)功能:定時器0中斷函數(shù);
//------------------------------------------------------------------------------------
void timer0() interrupt 1
{
TH0=TIMER0_H;
TL0=TIMER0_L;
TR1=1; //開定時器1;
OUTPUT=1;
}
//-----------------------------------------------------------------------------------
//函數(shù)名稱timer1();
//入口參數(shù):無;
//出口參數(shù):無;
//函數(shù)功能:定時器1中斷函數(shù);
//制作人: 陳卓;
//制作人單位:武漢理工大學(xué) 信息工程學(xué)院 電信0504班;
//制作時間:2007年12月26日;
//------------------------------------------------------------------------------------
void timer1() interrupt 3
{
TH1=TIMER1_H;
TL1=TIMER1_L;
TR1=0; //關(guān)定時器1,一定要這一步,因為定時器1的定時短于定時器0;
OUTPUT=0;
}
//-----------------------------------------------------------------------------------
//函數(shù)名稱init();
//入口參數(shù):無;
//出口參數(shù):無;
//函數(shù)功能:定時器初始化函數(shù);
//------------------------------------------------------------------------------------
void init()
{
TMOD=0x11; //定時器0和定時器1都工作在方式1,16位計數(shù)器;
calculate_F(); //初始為1KHZ,占空比為50%;
calculate_W();
TH0=TIMER0_H;
TL0=TIMER0_L;
TH1=TIMER1_H;
TL1=TIMER1_L;
ET0=1;
ET1=1;
EA=1;
TR0=1;
TR1=1;
}
//-----------------------------------------------------------------------------------
//函數(shù)名稱main();
//入口參數(shù):無;
//出口參數(shù):無;
//函數(shù)功能:主函數(shù)入口;
//------------------------------------------------------------------------------------
main()
{
init();
while(1)
{
key_scan();
if(FLAG_F) //改變頻率時要注意要進行脈寬的重新設(shè)置;
{
calculate_F();
calculate_W();
FLAG_F=0;
}
if(FLAG_W) // 脈寬改變,頻率不改變;
{
calculate_W();
FLAG_W=0;
}
}
}
作者:
XUSHENG
時間:
2014-8-29 12:57
很好呢,學(xué)習(xí)學(xué)習(xí)了。有沒有PCA模塊來改變占空比的例子?這個是用定時器中斷。只是能單一輸出PWM。如果我要輸出三路呢,覺得就很麻煩了。最好有PCA模塊的那程序,學(xué)習(xí)學(xué)習(xí)~~~
作者:
clfpc
時間:
2014-9-3 22:02
建議你看看LED調(diào)光(PWM)的程序,細(xì)細(xì)鉆研會有幫助
作者:
沐伊雪
時間:
2018-4-23 21:18
可以用AD
作者:
關(guān)外秀才
時間:
2018-8-31 11:34
臺老怪 發(fā)表于 2014-8-28 16:35
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****
很好的東西,電路圖有嗎老鐵?可否發(fā)一下?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1