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