如何用單片機定時控制LED,當按下K1時LED亮3秒然后熄滅,當按下K2時LED亮5秒然后熄滅,按下K3時LED亮10秒然后熄滅
uj5u.com熱心網友回復:
每個按鍵賦予不同的時間值問題uj5u.com熱心網友回復:
一般就是配置一個定時器,1ms進入一次中斷,然后定義一個倒計時變數timeDown,如果timeDown大于零,就在定時中斷里遞減。讀到K1,點亮LED,設定timeDown=3000,然后在while里不斷判斷timeDown是否等于零,等于零就熄滅LED。其他同理。
uj5u.com熱心網友回復:
判斷陳述句就好了啊uj5u.com熱心網友回復:
以51系列為例,1、定義一個50ms的定時器(T0或T1都可以),作業方式不限(注意時間常數重置以及定時累計計數),做好初始化。
比如,用T0,方式1,采用中斷方式
TMOD = 0x01;
TH0 = (65536-50000) / 256; //時間常數實作方式可以多種
TL0 = (65536-50000) % 256;
ET0 = 1; //T0中斷允許
EA = 1; //總中斷開關打開
TR0 = 1; //啟動T0
2、定義一個全域變數
int lightCountDown = -1;
3、定義T0的中斷回應處理函式
void t0_int(void) interrupt 1
{
TH0 = (65536-50000) / 256;
TL0 = (65536-50000) % 256;
if (lightCountDown > 0) lightCountDown--;
if (lightCountDown == 0)
{
lightCountDown = -1;
//todo 關閉LED
}
}
4、在判定有按鍵發生時,進一步判斷K1或K2或K3,分別設定lightCountDown為60或100或200,然后打開led的控制,使其亮
如果功能單一,不采用中斷方式也能在前臺main的while回圈中達到同樣的效果。也可以在判斷有按鍵后再開啟定時及中斷處理。
uj5u.com熱心網友回復:
1、使用狀態機 + 定時器;2、使用時間片
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/9346.html
標籤:單片機/工控
上一篇:ADS1256的id
下一篇:如何學習51單片機
