當前位置:編程學習大全網 - 編程軟體 - 單片機下面程序是怎麽實行LED燈閃爍的?

單片機下面程序是怎麽實行LED燈閃爍的?

led的閃爍是通過壹定頻率的開關led實現的。如果開關頻率太快,人類是看不出來是在閃爍,所以開關頻率要低壹些,比較高的切換頻率可以用來控制led亮度(PWM),或者用來做數碼管顯示。

實現方式主要有兩種方式:

(1)使用代碼循環做為延時來控制led開關頻率:

eg:

#define?HIGH?1

#define?LOW?0

#define?LED?P1.1//假設為51單片機

void?delay_nms(unsigned?int?n_ms)

{

while(n_ms--)

{

delay_1ms();//延時壹毫米函數,可以根據具體單片機自己定義

}

}

void?main()

{

for(;;)

{

LED?=?HIGH;

delay_nms(500);

LED?=?LOW;

delay_nms(500);

}

}

(2)使用定時器來控制led開關頻率:

eg:

#define?HIGH?1

#define?LOW?0

#define?LED?P1.1

unsigned?char?f_500ms?=?0;

void?timer0()?interrupt?1?//假設為10ms定時

{

//xxxx

f_500ms++;

}

void?main()

{

for(;;)

{

if(f_500ms?<?100)//1秒(10ms?*?50?=?1000ms?=?1s)

{

if(f_500ms?<?50)

{

LED?=?HIGH;

}

else

{

LED?=?LOW;

}

}

else

{

f_500ms?=?0;

}

}

}

兩種方式都可以,但在實際使用中盡量不要使用循環延時,因為使用循環延時在延時過程中,單片機除了中斷的響應,不能再做任何事情了,而使用定時器,程序只需要通過判斷時間變量就可以實現同樣的效果,不會占用太多時間,所以單片機能夠做更多的事情,實現實時性的要求,這是嵌入式開發中需要重視的。

  • 上一篇:大蝦進,求matlab程序驗證數學黑洞6174!!!
  • 下一篇:趙汝飛練字怎麽樣,適合小學生去學習麽?
  • copyright 2024編程學習大全網