亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
一個(gè)簡(jiǎn)單的PWM產(chǎn)生器頻率占空比可調(diào) 單片機(jī)程序及仿真
[打印本頁(yè)]
作者:
a89163930
時(shí)間:
2016-11-30 10:59
標(biāo)題:
一個(gè)簡(jiǎn)單的PWM產(chǎn)生器頻率占空比可調(diào) 單片機(jī)程序及仿真
廢話不多說(shuō)直接上程序仿真圖
0.png
(30.96 KB, 下載次數(shù): 63)
下載附件
2016-12-4 00:02 上傳
0.png
(62.23 KB, 下載次數(shù): 59)
下載附件
2016-12-4 00:02 上傳
仿真工程文件下載:
PWM.rar
(25.81 KB, 下載次數(shù): 101)
2016-11-30 10:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
單片機(jī)源程序:
#include <reg52.h>
unsigned char HighRH = 0; //高電平重載值的高位
unsigned char HighRL = 0; //高電平重載值的低位
unsigned char LowRH = 0; //低電平重載值的高位
unsigned char LowRL = 0; //低電平重載值的低位
unsigned int cnt=0; //記錄T1中斷次數(shù)
unsigned int i=0;
unsigned char dc=0;//PWM占空比
unsigned char fr=0; //PWM頻率
unsigned char out=0; //PWM輸出指示
sbit PWMOUT=P3^7; //PWM輸出端口
void ConfigPWM();
void ClosePWM();
sbit k0=P1^0; //占空比+5
sbit k1=P1^1; //占空比-5
sbit k2=P1^2; //頻率+
sbit k3=P1^3; // 頻率-
sbit k4=P1^4; //輸出PWM
sbit k5=P1^5; //停止輸出PWM
unsigned char code LEDChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char code LEDBuff[]={0xF7,0xFB,0x7F,0xBF};
void delay(int ms) //延時(shí)函數(shù)用于數(shù)碼管的顯示
{
unsigned int x,y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--);
}
void LEDstate()
{
P0=LEDBuff[0];
P2=LEDChar[dc%10];
delay(3);
P0=LEDBuff[1];
P2=LEDChar[dc/10];
delay(3);
P0=LEDBuff[2];
P2=LEDChar[fr%10];
delay(3);
P0=LEDBuff[3];
P2=LEDChar[fr/10];
delay(3);
}
void Key(void)
{
if(out==0)
{
if(k0==0) //停止輸出波形才能進(jìn)行調(diào)整
{
if(dc<100) //占空比+5
dc+=5;
while(k0==0);
}
if(k1==0) //占空比-5
{
if(dc=0)
dc-=5;
while(k1==0);
}
if(k2==0) //頻率+1
{
fr+=10;
while(k2==0);
}
if(k3==0) //頻率-1
{
if(fr!=0)
fr-=10;
while(k3==0);
}
}
if(k4 == 0) //輸出波形
out =1;
if(k5 == 0) //停止輸出波形
out =0;
}
void main()
{
while (1)
{
LEDstate();
Key();
ConfigPWM(); //調(diào)用PWM配置函數(shù)
/* if(out==0)
ClosePWM();
*/
}
}
/* 配置PWM,fr頻率,dc-占空比 */
void ConfigPWM()
{
unsigned int high, low;
unsigned long tmp;
tmp = (11059200/12)/100/fr; //計(jì)算一個(gè)周期所需要的計(jì)數(shù)值
high = (tmp*dc)/100; //計(jì)算高電平所需要的計(jì)數(shù)值
low = tmp - high; //計(jì)算低電平所需要的計(jì)數(shù)值
high = 65536 - high + 12; //計(jì)算高電平的重載值并補(bǔ)償中斷延時(shí)
low = 65536 - low + 12; //計(jì)算低電平的重載值并補(bǔ)償中斷延時(shí)
HighRH = (unsigned char)(high>>8); //高電平重載值拆分高低字節(jié)
HighRL = (unsigned char)high;
LowRH = (unsigned char)(low>>8); //低電平重載值拆分高低字節(jié)
LowRL = (unsigned char)low;
TMOD &= 0xF0; //清除T0的控制段?
TMOD |= 0x01; //T0為模式1
TH0 = HighRH; //加載T0重載值
TL0 = HighRL;
ET0 = 1; //使能T0中斷
TR0 = 1; //啟動(dòng)T0
EA = 1; //開(kāi)關(guān)總使能
PWMOUT=1; //輸出高電平
}
/*關(guān)閉PWM */
void ClosePWM()
{
TR0 =0; //停止定時(shí)器
ET0 =0; //禁止中斷
PWMOUT=1; //輸出高電平
}
/* T0中斷服務(wù)程序,產(chǎn)生PWM波 */
void InterruptTimer0() interrupt 1
{
if (PWMOUT==1) //當(dāng)輸出為高電平,加載低電平值并輸出低電平
{
TH0 = LowRH;
TL0 = LowRL;
PWMOUT = 0;
}
else //當(dāng)輸出為低電平,加載高電平值并輸出高電平
{
TH0 = HighRH;
TL0 = HighRL;
PWMOUT = 1;
}
}
復(fù)制代碼
作者:
關(guān)外秀才
時(shí)間:
2018-8-31 14:01
好東西,謝謝分享,學(xué)習(xí)了~
作者:
關(guān)外秀才
時(shí)間:
2018-9-1 10:19
請(qǐng)問(wèn)樓主使用什么軟件仿真?我用Proteus仿真會(huì)閃退~
作者:
asdfgwqe
時(shí)間:
2019-5-23 09:11
這個(gè)是Proteus仿真嘛
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1