欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4364|回復: 4
收起左側

單片機狀態機的學習與分享

[復制鏈接]
ID:190577 發表于 2019-10-8 16:15 | 顯示全部樓層 |閱讀模式
有限狀態機由有限的狀態和相互之間的轉移構成,在任何時候只
能處于給定數目的狀態中的一個。當接收到一個輸入事件時,狀態機產生一個輸出,同時也可能伴隨著狀態的轉移。
#define key_input    PIND.7      // 按鍵輸入口
#define key_state_0  0
#define key_state_1  1
#define key_state_2  2
char read_key(void)
{
static char key_state = 0;
char key_press, key_return = 0;
key_press = key_input;        // 讀按鍵 I/O (狀態機的輸入)
switch (key_state)
{
case key_state_0:        // 按鍵初始態
        if (!key_press) key_state = key_state_1;  // 鍵被按下,狀態轉換到鍵確認態 , 確定下一次按鍵的狀態值
break;
case key_state_1:        // 按鍵確認態
if (!key_press)
{
            key_return = 1;      // 按鍵仍按下,按鍵確認輸出為“1”
            key_state = key_state_2;  // 狀態轉換到鍵釋放態
}
else
            key_state = key_state_0;  // 按鍵已抬起,轉換到 按鍵初始態
       break;
case key_state_2:
            if (key_press) key_state = key_state_0;  //按鍵已釋放,轉換到按鍵初始態
       break;
}  
      return key_return;
}
該簡單按鍵接口函數 read_key()在整個系統程序中應每隔10ms
調用執行一次,每次執行時將先讀取與按鍵連接的 I/O 的電平到變量 key_press 中,然后進入用 switch 結構構成的狀態機。switch 結構中的 case 語句分別實現了 3 個不同狀態的處理判別過程,在每個狀態中將根據狀態的不同,以及 key_press 的值(狀態機的輸入)確定輸出值(key_return),和確定下一次按鍵的狀態值(key_state) 。 函數 read_key()的返回參數提供上層程序使用。返回值為 0 時,表示按鍵無動作;而返回 1 表示有一次按鍵閉合動作,需要進入按鍵處理程序做相應的鍵處理。在函數 read_key()中定義了 3 個局部變量,其中 key_press和key_return為一般普通的局部變量,每次函數執行時,key_press 中保存著剛檢測的按鍵值。key_return 為函數的返回值,總是先初始化為 0,只有在狀態 1 中重新置 1,作為表示按鍵確認的標志返回。變量 key_state 非常重要,它保存著按鍵的狀態值,該變量的值在函數調用結束后不能消失,
必須保留原值,因此在程序中定義為“局部靜態變量” ,用static 聲明。如果使用的語言環境不支持 static 類型的局部變量,應將 key_state 定義為全局變量(關于局部靜態變量的特點請參考相關介紹 C 語言程序設計的書籍) 。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:621334 發表于 2019-10-10 22:28 | 顯示全部樓層
如果程序的用Tab鍵排版那就更好了,讀起來不會很亂
回復

使用道具 舉報

ID:253767 發表于 2019-10-11 07:30 | 顯示全部樓層
謝謝分享!!!
回復

使用道具 舉報

ID:190577 發表于 2019-10-13 17:29 | 顯示全部樓層

技術在于交流,我看了您寫請工程化,定制化你的單片機代碼帖子,很不錯,技術在于交流,我現在在學PIC單片機,我也會分享自己學習的點點滴滴,希望能幫助需要幫助的人。
回復

使用道具 舉報

ID:190577 發表于 2019-10-13 17:30 | 顯示全部樓層
晨晨晨晨晨晨 發表于 2019-10-10 22:28
如果程序的用Tab鍵排版那就更好了,讀起來不會很亂

好的,謝謝好的建議。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表