亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
單片機(jī)pwm頻率和周期可調(diào)
[打印本頁]
作者:
斜月為誰明
時(shí)間:
2018-5-12 17:08
標(biāo)題:
單片機(jī)pwm頻率和周期可調(diào)
//------------------------------------------------------------------------------------
//程序功能簡(jiǎn)介:本程序產(chǎn)生15HZ~~~50KHZ的方波,并且實(shí)現(xiàn)頻率和脈寬的獨(dú)立調(diào)制,即可
//在改變頻率的同時(shí)不改變脈寬,再改變脈寬的同時(shí)不改變頻率;同時(shí)設(shè)置
//兩個(gè)調(diào)節(jié)步長(zhǎng)------在KEY鍵按下時(shí),粗調(diào),沒有按下時(shí),細(xì)調(diào);
//程序思路: 本程序用到兩個(gè)定時(shí)器------定時(shí)器0和定時(shí)器1,其中定時(shí)器0工作在定時(shí)方式下,
//決定方波的頻率;定時(shí)器1,同樣工作在定時(shí)方式下,用于設(shè)定脈寬;
//------------------------------------------------------------------------------------
#include <reg52.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
#define ALL 65536 //定時(shí)器工作方式1時(shí),最大基數(shù)長(zhǎng)度 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;//定時(shí)器0和定時(shí)器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í)全局變量,用于數(shù)據(jù)傳遞;
void delay(uchar t); //延時(shí)函數(shù),用于按鍵去抖;
void init(); //初始化函數(shù),用于定時(shí)器的初始化;
void calculate_F();
//頻率計(jì)算函數(shù),當(dāng)頻率變化,計(jì)算出定時(shí)器0初值;
void calculate_W();
//脈寬計(jì)算函數(shù),脈寬變化時(shí),計(jì)算出定時(shí)器1初值;
void key_scan(); //按鍵掃描函數(shù);
void timer0(); //定時(shí)器0中斷函數(shù);
void timer1(); //定時(shí)器1中斷函數(shù);
void delay(uchar t)
{
uchar i,j;
while(t--) //每個(gè)脈沖為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; //開定時(shí)器1;
OUTPUT=1;
}
void timer1() interrupt 3 //決定脈寬
{
TH1=TIMER1_H;
TL1=TIMER1_L;
TR1=0; //關(guān)定時(shí)器1,一定要這一步,因?yàn)槎〞r(shí)器1的定時(shí)短于定時(shí)器0;
OUTPUT=0;
}
void init()
{
TMOD=0x11; //定時(shí)器0和定時(shí)器1都工作在方式1,16位計(jì)數(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) //改變頻率時(shí)要注意要進(jìn)行脈寬的重新設(shè)置;
{
calculate_F();
calculate_W();
FLAG_F=0;
}
if(FLAG_W) // 脈寬改變,頻率不改變;
{
calculate_W();
FLAG_W=0;
}
}
}
復(fù)制代碼
作者:
寧小小
時(shí)間:
2019-5-12 15:48
很優(yōu)秀
作者:
dianzi8266
時(shí)間:
2020-1-3 13:19
void calculate_F() 是不是缺失,temp怎么變化的
作者:
快樂眼淚
時(shí)間:
2020-2-19 17:57
按按鍵沒反應(yīng)啊!是什么情況?
作者:
66huang88
時(shí)間:
2020-7-19 22:24
程序不完整?void calculate_F()調(diào)頻率調(diào)不了
作者:
Tmtz.jack
時(shí)間:
2021-9-6 13:15
同感,
程序不完整?void calculate_F()調(diào)頻率調(diào)不了
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1