1. 程式人生 > >馬潮按鍵掃描狀態機思想10ms執行一次

馬潮按鍵掃描狀態機思想10ms執行一次

#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;
}

相關推薦

按鍵掃描狀態思想10ms執行

#define key_input PIND.7 // 按鍵輸入口 #define key_state_0 0 #define key_state_1 1 #define

基於有窮狀態思想的電梯系統

# 介紹 這次設計的電梯系統是一次軟體工程的小組作業~~(這門課沒安排實驗,佛)~~,我在這次小組作業中負責的是後端設計和演算法設計的部分,多虧了想出來了~~(不然只能CV了,其實我是這個系統的產品經理~~ 專案上傳到了[GitHub](https://github.com/ginkgo-code/elev

C語言高階篇 - 4.連結串列&狀態與多執行

1.連結串列的引入 1、從陣列的缺陷說起         (1)陣列有2個缺陷,一個是陣列中所有元素的型別必須一致;第二個是陣列的元素個數必須事先制定並且一旦指定之後不能更改。         (2)如何解決

css3 使用animation 只執行然後停留在執行後的狀態

 -webkit-animation:'index' 5s ease-in-out 0s 1 alternate forwards; forwards:當動畫完成後,保持最後一個屬性值(在最後一個關鍵幀中定義)。 @-webkit-keyframes 'index'{  

兩種狀態掃描按鍵,第二種只要三行!!!

狀況 變量 接下來 初始化 進一步 一次 amp 開始 not 從開始學51就接觸到按鍵掃描,起初接觸到郭天祥的delay濾波,方法雖然簡陋,但是確實有效。 用了一段時間後,偶然接觸到狀態機掃描按鍵。那會兒沒有啥數電知識懂不起狀態機,硬啃啃懂了,頓時覺得怎麽又這種機智的想法

狀態按鍵掃描

一般的按鍵輸入軟體介面程式非常簡單,在程式中一旦檢測到按鍵輸入口為低電平(有時可能為高),便採用軟體延時的方 法來進行消抖,然後再次檢測按鍵輸入,如果再次確認為低電平則表示有按鍵按下,轉入執行按鍵處理程式。如果延時後檢測的電平為高電平則放棄本次按鍵檢測, 重新開始一次按鍵檢測過程。在簡單的系統中這種方法比

狀態寫獨立按鍵的消抖

HA lte stat BE class || == 組合 off 直接上代碼 //消抖 module key_filter ( input wire clk, //E1 input wire

FPGA-11-狀態的實現例項(按鍵的消抖)

大致思路有了,如何設計實現呢?貌似這是一個很複雜的設計,實則不然,FSM的本質就是對具有邏輯規律和時序邏輯的事物的描述,採用FSM設計,問題迎刃而解!   1、從狀態變數入手,分析狀態變數:     IDLE:按鍵空閒狀態(由於上拉電阻的作用,按鍵未被按下時保持高電平);     FIL

FPGA-09-獨立按鍵的消抖(軟體消抖未用狀態

  獨立按鍵消抖在微控制器和FPGA中都是個不可避免的問題,首先,解釋一下什麼叫做按鍵抖動,如圖,按鍵在按下和鬆開的那個瞬間存在大概20ms的機械抖動:      下面就是本篇的第一個重點 —— 什麼時候需要按鍵消抖設計?如果是像復位按鍵這樣,短時間內可以多次觸發,就完全不需要

STM32F103按鍵操作的另種實現——狀態

#ifndef _KEY_H_ #define _KEY_H_ #include "HAL_gpio.h" // 換成STM32F103對應的GPIO庫 #include "type.h" // type.h主要是一些型別的重新命名 #define KEY_U

狀態寫的 按鍵短按和長按的程式

key.h #ifndef __KEY_H__ #define __KEY_H__ #define KEY_MODE_STATUS      P3_5 #define KEY_SHOOT_STATUS     P3_4 #define KEY_LONG_TIME    

怎樣刪除C/C++程式碼中的所有註釋?淺談狀態的程式設計思想

K&R習題1-23中,要求“編寫一個程式,刪除C語言程式中所有的註釋語句。要正確處理帶引號的字串與字元常量。在C語言中,註釋不允許巢狀”。 如果不考慮字元常量和字串常量,問題確實很簡單。只需要去掉//和/* */的註釋。 考慮到字元常量'\''和字串常量"he

如何以面向物件的思想設計有限狀態

# 狀態機的概念 有限狀態機又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學計算模型,用英文縮寫也被簡稱為 FSM。 FSM 會響應“事件”而改變狀態,當事件發生時,就會呼叫一個函式,而且 FSM 會執行動作產生輸出,所執行的動作會因為當前系統的狀態和輸入的事件不同而

geek青年的狀態,查表,純C語言實現

fill south 總結 target 堅持 str 分享 接收 backward geek青年的狀態機,查表,純C語言實現 1. 問題的提出。抽象 建一,不止是他,不少人跟我討論過這種問題:怎樣才幹保證在需求變更、擴充的情況下。程序的主體部分不動呢? 這是一個

卅川的狀態之路(創作中,不定時上傳)

rom 不同的 大學 核心 追溯 選擇 有限狀態機 span 任務 川的第一篇幹貨,將從講述FSM(有限狀態機)開始。 川第一次接觸狀態機這種東西,還得追溯到剛到暢遊工作,破解了別的遊戲的代碼(遊戲程序就是這麽沒節操和底線,嗯!)才知道有這麽個東西的。雖然大學學習過相

FSM(狀態)、HFSM(分層狀態)、BT(行為樹)的區別

分類 log 巡邏 其中 感到 人工智能 執行者 跳轉 藍色 遊戲人工智能AI中最常聽見的就是這三個詞: FSM 這個不用說拉,百度一大堆解釋, 簡單將就是將遊戲AI行為分為一個一個的狀態,狀態與狀態之間的過渡通過事件的觸發來形成。 比如士兵的行為有“巡邏”,“追擊敵人”,

AI 狀態機制(虛幻三的做法)

調用 設有 mode 作用 self 信息 怪物 測試 pat 1.Nav Mesh Bounds Volume (Navigate導航,操縱)指的是可以導航(操作)的區域。 2.MVC的編程模式:(Model(模型)是應用程序中用於處理應用程序數據邏輯的部分。   通

C/C++用狀態轉移表聯合函數指針數組實現狀態FSM

pre nsf div script addclass .text 特點 sed 二維 狀態機在project中使用很的頻繁,有例如以下常見的三種實現方法: 1. switch-case 實現。適合簡單的狀態機。 2. 二維狀態表state-even

4.9鏈表&狀態與多線程

new nbsp 單鏈表的實現 creat 有效 margin 必須 header 復制 4.9.1鏈表的引入 4.9.1.1、從數組的缺陷說起 (1)數組由兩個缺陷。一個是數組中所有元素的類型必須一致。數組的元素個數必須事先指定,並且一旦指定後不能更改。 (2)如何解決

OSPF的七種狀態

ospfRouter ID:在一個OSPF域內,用於標識每臺路由器的ID。選舉規則:1.手工指定(建議)2.如果沒有手工指定,使用Loopback接口中最大的IP地址作為Router ID3.如果沒有配置Loopback接口,那麽使用物理接口中最大的IP地址作為Router ID鏈路狀態信息鏈路信息包括有:1