1. 程式人生 > >按鍵中斷消抖--2

按鍵中斷消抖--2

外部中斷按鍵處理 uchar g_ucKeyVal=0; uchar g_ucKeyCnt=0;   uchar g_ucKeySta=0;  代表有無按鍵按下 u8 KeyDeal(void) //獲取按鍵值  ---記住不要延時

   return data } //對獲取鍵值,進行一下正確性處理 //關鍵字: g_ucKeySta  代表按下狀態 //                    只要按下不鬆開,狀態一直為1 //                    只要鬆開就為0
u8 KeyScan(void)
{     key1=KeyScan();     if(key1!=0xff)     {          key2=KeyScan();          if(key1==key2)          {             g_ucKeySta=1;          }          else             g_ucKeySta=0;      }      else          g_ucKeySta=0;      return key1; } //定時器中  進行減操作
//作用:延時處理
void time0() {     if(g_ucKeyCnt) g_ucKeyCnt--;     //一直按     if(g_ucKeyCnt==0)&&(g_ucKeySta)              g_ucKeyCnt=20; } // g_ucKeyCnt   鍵值延時
// 核心 當中斷髮生後 //獲取到鍵值延時為0,則把鍵值延時賦值
//在些期間,再有中斷髮生,不會再次採集按鍵(取巧避過延時)
void ISR () {    if(g_ucKeyCnt==0)   當值為0才進行下一次採集,避免按鍵延時    {     g_ucKeyVal=KeyScan();         g_ucKeyCnt=20;     } }                         星空小蝸牛

相關推薦

按鍵中斷--2

外部中斷按鍵處理 uchar g_ucKeyVal=0; uchar g_ucKeyCnt=0;   uchar g_ucKeySta=0;  代表有無按鍵按下 u8 KeyDeal(void) //獲取按鍵值  ---記住不要延時 {     return dat

用狀態機寫獨立按鍵

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

51微控制器自學--完美的單擊、雙擊、長按、中斷

完整的單擊、雙擊、長按程式碼。 工作原理:當有按鈕第一次按下時,設定第一個標誌An,當按鈕第一次釋放後,進入中斷消抖延時計數,假如在計數範圍內第二次按鈕按下,設定第二標誌Aa,這樣就把單擊和雙擊區分開,而且是可靠的邏輯標誌,長按為大於1秒的判斷. 中斷消抖及按鈕單擊、雙擊、長按處理

FPGA-11-狀態機的實現例項(按鍵

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

FPGA-09-獨立按鍵(軟體未用狀態機)

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

stm32按鍵外部中斷,如何

討論一下stm32下按鍵外部中斷如何進行有效的消抖 工程的程式碼是直接使用stm32 cubeMX進行配置生成的,下面就一起討論吧。 1. 在中斷處理服務函式中註釋清除中斷標誌的語句,防止按鍵抖動而不斷的進入中斷服務程式中 2. 進入回撥函式後先進性延時,一般為

最好的按鍵掃描和方法,適用於復合、長按、按下或擡起響應按鍵

按鍵消抖 按鍵掃描 C語言按鍵 剛參加工作的時候,看了一些同事采用的按鍵掃描和消抖方法,對比學校裏和網上查到的按鍵處理,發現覺得不盡善盡美,有以下幾點: 1. 消抖復雜,效率低。有人直接在電平判斷後使用delay()函數,進行消抖,耽誤時間;有人在按鍵電平中斷中進行消抖和處理,導致其他的服務反應慢

FPGA—按鍵

今天簡單的說說按鍵消抖,原理特別好理解,其實就是延時,做一定時間的延時後取值一次,就能夠得到特定的消抖後的狀態了。 為什麼要消抖? 見圖: 我們可以看到,但按鍵按下的那一刻,存在一段時間的抖動,同時在釋放按鍵的一段時間裡也是存在抖動的,這就可能導致狀態在識別的時候可能檢測為多次的按鍵,

基於獨立按鍵及原理分析

獨立按鍵模型如下: 分析:在按鍵按下時,圖中電路形成通路,在實際電路設計中將按鍵的一側接到系統電源的GND上,另一側接到FPGA晶片的管腳上,這樣便可以通過FPGA IO口的狀態判斷按鍵是否按下,為了保證FPGA的管腳在按鍵沒有被按下時是一個確定的電平,所以在電路設計時加上一個上拉電阻,這樣當獨立按鍵沒

特權FPGA 按鍵檢測程式碼

按鍵去抖的原因及其分類就不羅嗦了。 在這裡解釋一段程式碼,程式碼是網上找的,看了半天沒懂,無奈查了半天想了半天,終於明白了。。。 module sw_debounce( clk, rst_n, sw1, sw2, sw3, //output led_d3, led_d4, led_d5 );

[嵌入式開發模組]機械按鈕模組 純C語言 面向物件實現 按鍵、長按、連擊

前言 嵌入式開發時,我們經常會用到各種機械按鈕,由於機械按鈕的抖動特性,一般需要保持一個狀態一段時間不變才能認為按鍵真的按下去/擡起來了,不然可能會出現明明只點擊了一下,效果確是連擊了好幾下的情況。另一方面,我們為了最大化的發揮按鈕的作用,還經常需要實現長按,連擊等功能

微控制器的按鍵與幾種按鍵電路

一、 硬體消抖 : 按鍵防抖電路控制電路 所示利用RC 積分電路來達成雜波的濾除與波形修整的電路(如圖1 )。 在S1 ON 的瞬間由於接觸彈跳的關係,會使A 點電壓呈現高速的斷續現象,再S1 OFF時亦然,詳(如圖2所示),然而由於電容兩端電壓需由電壓經電阻

FPGA 實現按鍵

module debounce(clk,rst_n,key_n,key_pulse,key_state); input clk; //system clock input rst_n; //system reset input key_n

按鍵原理

1、按鍵在按下和彈起的瞬間,由於抖動的原因,其狀態不是固定的,此時讀的資料不是穩定的資料。 2、我們等間隔(一般1ms),定時讀按鍵資料,如果在一段時間內(一般5ms),這些資料都相同,我們就認為此時讀的資料是穩定的。 3、軟體上我們可以做一個佇列(陣列),定時讀取資料。對頭資料扔掉,佇列資料向前移一位,

簡單的使用定時器實現按鍵,寫得不好,望大家給指點一二。多謝了。

/******************************** 按獨立按鍵使數碼管加1 ********************************/ #include <reg52.h> #define uchar unsigned char sbit

嵌入式C語言學習系列第1篇---微控制器按鍵操作

基本思想就是監測,延時,監測。。。,放進迴圈中可進行掃描式操作/**  * 函式功能: 讀取按鍵KEY1的狀態  * 輸入引數:無  * 返 回 值: KEY_DOWN:按鍵被按下;  *       

字元裝置驅動程式——定時器按鍵

實現方式 需要設定的結構體 struct timer_list { struct list_head entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; struct tvec_

【Tiny6410 And Linux】—(2.3)—使用工作佇列處理按鍵中斷——程式碼

做了做用工作佇列處理按鍵中斷的實驗,對中斷開始明白~~ 呵呵~~其實今天就是加了個全域性變數(雖然這在驅動程式中不是很合適吧),還有就是加了個消抖(就是通過延時等待而已)! 1、驅動程式 ①、plat_btn_dev.c #include <linux/modul

獨立按鍵與鬆手檢測

記錄下最近獨立按鍵消抖和鬆手檢測 我對獨立按鍵的處理思路是 1.獲得鍵值 2.消抖處理 3.鬆手檢測 4.鍵值解析 1.獲得鍵值 這裡把獨立按鍵做個編號,例如有兩個按鍵記為KEY0、KEY1,用一個變數來記錄當前按鍵標記值(比如Cur

標準庫按鍵中斷

prior nec handler style fall bsp 中文註釋 cte ins 由於中文註釋所以插入截圖作為參考 #include "stm32f10x_it.h" #include "stm32f10x_gpio.h" #include "stm32