欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
狀態(tài)機(jī)思想在單片機(jī)中的應(yīng)用 附程序和大量資料
[打印本頁]
作者:
saiyqx
時(shí)間:
2017-2-28 10:54
標(biāo)題:
狀態(tài)機(jī)思想在單片機(jī)中的應(yīng)用 附程序和大量資料
FSM,有限狀態(tài)機(jī)。在一個(gè)高效的程序中,一般都能看到狀態(tài)機(jī)的身影。最近自己在試著將自己寫的程序用狀態(tài)機(jī)的思想重新整一遍,找了一些資料,分享下。如有侵權(quán),望告知,馬上刪除。。
0.png
(77.1 KB, 下載次數(shù): 78)
下載附件
2017-2-28 15:51 上傳
單片機(jī)狀態(tài)機(jī)的全部資料下載:
狀態(tài)機(jī).rar
(12.5 MB, 下載次數(shù): 135)
2017-2-28 10:54 上傳
點(diǎn)擊文件名下載附件
狀態(tài)機(jī)的一些資料
下載積分: 黑幣 -5
我自己參考別人更改的狀態(tài)機(jī)按鍵掃描程序:
enum FSM_key_status
{
_Idle = 0,
_Key1_Down,
_Key1_Press,
_Key1_Up,
_Key2_Down,
_Key2_Press,
_Key2_Up,
};
uchar event_key_scan(void)
{
static volatile uchar key_status = 0; //按鍵狀態(tài)累計(jì)
static volatile uchar key_restate = 0; //按鍵狀態(tài)累計(jì)
static volatile uint key_count = 0; //按鍵保持時(shí)間累計(jì)
volatile uchar key_return = 0; //按鍵返回值
static uchar key_type=0;
uchar num = 0;
uchar new_key=0;
new_key = _pa & 0x06;
// num = Judge_key(new_key); //存在多個(gè)按鍵連按時(shí)
if(num == 1)
LED_G_ON;
switch(key_status)
{
case _Idle: //空閑狀態(tài)時(shí)判斷按鍵是否按下,判定為按下時(shí)按鍵狀態(tài)累計(jì)加1
{
switch(num)
{
case 1:
{
key_restate = new_key;
key_status = _Key1_Down;
} break;
case 2:
{
key_restate = new_key;
key_status = _Key2_Down;
} break;
default: break;
}
key_status = 0;
key_count = 0;
key_return = 0; //未按下時(shí)清除相應(yīng)的變量
key_type = 0;
} break;
case _Key1_Down:
{
switch(num)
{
case 1:
{
if(key_restate == new_key)
key_status++;
else
key_status = _Idle;
} break;
case 2:
{
key_restate = new_key;
key_status = _Key2_Down;
} break;
default: key_status = _Idle; break;
}
} break;
case _Key1_Press: //按鍵為按下狀態(tài)時(shí),累計(jì)按下的時(shí)間
{
switch(num)
{
case 1:
{
if(key_restate == new_key)
key_count++;
else
key_status++;
if(key_restate == K_LED)
key_type = 1;
else
key_type = 2;
} break;
case 2:
{
key_restate = new_key;
key_status = _Key2_Down;
key_type = 0;
key_count = 0;
} break;
default:
{
key_status = _Idle;
key_type = 0;
key_count = 0;
} break;
}
} break;
case _Key1_Up: //按鍵放開后,根據(jù)保持時(shí)間來判斷是長按還是短按
{
if(key_count < 100)
{
if(key_type == 1)
key_return = _LED_Short_Press;
else
key_return = _MIST_Short_Press;
}
else
if(key_type == 1)
key_return = _LED_Long_Press;
else
key_return = _MIST_Long_Press;
key_count = 0;
key_type = 0;
key_status = _Idle;
key_restate = new_key;
} break;
case _Key2_Down:
{
if(key_restate == new_key)
key_status++;
else
key_status = _Idle;
} break;
case _Key2_Press:
{
if(key_restate == new_key)
key_count++;
else
key_status++;
} break;
case _Key2_Up:
{
if(key_count > 100)
key_return = _Double_Press;
key_count = 0;
key_type = 0;
key_status = _Idle;
key_restate = new_key;
} break;
default: break;
}
return key_return;
}
復(fù)制代碼
作者:
神出沒
時(shí)間:
2020-1-14 13:06
好帖子,學(xué)習(xí)一下
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1