亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
pwm頻率占空比調(diào)節(jié)
[打印本頁]
作者:
賀蘭小胖
時間:
2017-5-29 23:53
標(biāo)題:
pwm頻率占空比調(diào)節(jié)
//------------------------------------------------------------------------------------
//程序功能簡介:本程序產(chǎn)生15HZ~~~50KHZ的方波,并且實現(xiàn)頻率和脈寬的獨立調(diào)制,即可
//在改變頻率的同時不改變脈寬,再改變脈寬的同時不改變頻率;同時設(shè)置
//兩個調(diào)節(jié)步長------在KEY鍵按下時,粗調(diào),沒有按下時,細(xì)調(diào);
//程序思路: 本程序用到兩個定時器------定時器0和定時器1,其中定時器0工作在定時方式下,
//決定方波的頻率;定時器1,同樣工作在定時方式下,用于設(shè)定脈寬;
//------------------------------------------------------------------------------------
#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ù)傳遞;
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ù);
void delay(uchar t)
{
uchar i,j;
while(t--) //每個脈沖為1us
{
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
}
void calculate_F()
{
TIMER0_H = (uint)temp/256;
TIMER0_L = (uint)temp%256;
}
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;
}
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 ;
}
void timer0() interrupt 1 //決定頻率
{
TH0=TIMER0_H;
TL0=TIMER0_L;
TR1=1; //開定時器1;
OUTPUT=1;
}
void timer1() interrupt 3 //決定脈寬
{
TH1=TIMER1_H;
TL1=TIMER1_L;
TR1=0; //關(guān)定時器1,一定要這一步,因為定時器1的定時短于定時器0;
OUTPUT=0;
}
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;
}
main()
{
init();
while(1)
{
key_scan();
if(FLAG_F) //改變頻率時要注意要進(jìn)行脈寬的重新設(shè)置;
{
calculate_F();
calculate_W();
FLAG_F=0;
}
if(FLAG_W) // 脈寬改變,頻率不改變;
{
calculate_W();
FLAG_W=0;
}
}
}
作者:
愛學(xué)習(xí)的我。
時間:
2017-6-17 12:55
挺好的
作者:
糖糖有點咸
時間:
2017-6-22 16:22
挺好的,但是不知道怎么用啊
作者:
機(jī)智的愚人
時間:
2017-6-30 20:34
挺好的,但是請問這個能夠調(diào)節(jié)直流電機(jī)的轉(zhuǎn)速快慢嗎?如果能的話,應(yīng)該怎么去實現(xiàn)?謝謝
作者:
UCAS
時間:
2017-7-1 21:00
學(xué)習(xí)了
作者:
2395
時間:
2017-7-21 10:55
真的很有用
作者:
2395
時間:
2017-7-21 10:56
這幾天 正好學(xué)到這一塊
作者:
ly19950808
時間:
2017-8-1 10:03
不錯,在學(xué)這個
作者:
11213131
時間:
2017-8-2 19:29
學(xué)習(xí)一下
作者:
VI武先生
時間:
2017-8-10 14:26
收下了
作者:
VI武先生
時間:
2017-8-10 14:28
很不錯 謝謝分享
作者:
wuqilin5
時間:
2017-9-27 21:14
請問樓主下面這個函數(shù)的temp值是從哪里來的?這個的付初始值好像沒有。謝謝。
void calculate_F()
{
TIMER0_H = (uint)temp/256;
TIMER0_L = (uint)temp%256;
}
作者:
電子迷ZZ
時間:
2017-9-27 23:17
程序確實有問題!定時器0和1工作方式在1模式定時最大值在8192,不會再65536值之間;temp值沒有賦值,初始值系統(tǒng)可能為0或任意值,定時器初值沒有設(shè)置好
void calculate_F()
{
TIMER0_H = (uint)temp/256;
TIMER0_L = (uint)temp%256;
}
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;
}
作者:
wuqilin5
時間:
2017-9-28 23:51
按照他這個程序如何改一改能執(zhí)行。
作者:
sadlucky1996
時間:
2017-9-29 21:52
謝謝樓主
作者:
mcu007_rtos
時間:
2017-10-9 14:31
用兩個TIMER,一個timer做脈寬,一個timer做周期。
作者:
kaisonchen
時間:
2017-10-9 20:10
程序感覺有點問題
作者:
kaisonchen
時間:
2017-10-9 20:35
temp=ALL-F_osc/12.0/FREQ;
作者:
AAAAAA666666
時間:
2017-10-10 11:08
嗯,對于小車編程挺有用的!
作者:
方浩
時間:
2019-1-19 14:28
程序有點小問題,頻率不可以調(diào)節(jié),占空比減不了,我看看能不能完善一下分享給大家
作者:
王秋冬
時間:
2019-1-21 10:03
期待你的完善,謝謝了。
作者:
益達(dá)。。。
時間:
2019-10-30 22:45
請問temp值怎么賦?謝謝了 急用
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1