當前位置:編程學習大全網 - 編程語言 - STC12C5A60S2制作呼吸燈C語言程序怎麽寫

STC12C5A60S2制作呼吸燈C語言程序怎麽寫

呼吸燈的程序:

/****************************************************************************?

功能:LED燈慢慢變暗,再慢慢變亮。

用定時器模擬的PWM調制。

單片機:AT89S52

******************************************************************************/?

#include?<reg52.h>?

#define?V_TH0?0XFF?//設定定時器0,高8位的初值?

#define?V_TL0?0XF6?//設定定時器0,低8位的初值

#define?V_TMOD?0X01?//設定定時器0的工作方式為:方式1(計數位數是16位?//,由TL0作為低8位、TH0作為高8位)

#define?uchar?unsigned?char?

#define?uint?unsigned?int

void?init_sys();?//系統初始化函數

void?delay(uint);//延時函數

unsigned?char?ZKB;//占空比

void?main?(void)?

{?

init_sys();//初始化

while(1)

{?

for(ZKB=5;ZKB<40;ZKB=ZKB+2)?//每調節壹次占空比,就延時大概8ms左右,這使得LED現象更明顯

{

delay(8);?

}

for(ZKB=40;ZKB>5;ZKB=ZKB-2)

{

delay(8);?

}

}?

}

void?delay(uint?z)

{

uint?x,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);?

}

void?init_sys()/*系統初始化函數*/?

{?

/*定時器初始化*/?

TMOD=V_TMOD;?

TH0=V_TH0;?

TL0=V_TL0;?

TR0=1;?

ET0=1;?

EA=1;?

}

void?timer0(void)?interrupt?1?using?2?

{?

static?uchar?click=0;//中斷次數計數器變量

TH0=V_TH0;//重新恢復定時器初始值

TL0=V_TL0;?

++click;//每計數10次,產生壹個中斷,並且click增加壹個

if?(click>=100)

click=0;?//計滿壹百次,這重新計數。

/*因為計壹次數的時間是1us,10次產生壹個中斷,也就是壹個中斷10us。100個中斷為1ms。

則,可以在這100個數中隨便取值,用於表示占空比的多少,占空比的範圍為(1~100)*/

if?(click<=ZKB)?//當小於占空比值時輸出低電平,高於時是高電平,從而實現占空比的調整?

P1=0x00;?//P1口接的是LED燈

else?

P1=0xff;

}

此程序的總中斷時間為100ms,即頻率為:100KHZ,占空比從5?變為40(即5%~25%)。

  • 上一篇:多啦A夢劇場版那些最受歡迎
  • 下一篇:淺議如何發揮信息技術在綜合實踐課程中的能力訓練
  • copyright 2024編程學習大全網