1. 程式人生 > >【CC2530強化實訓02】普通延時函式實現按鍵的單擊與雙擊

【CC2530強化實訓02】普通延時函式實現按鍵的單擊與雙擊

【題目要求】

      用一個按鍵實現單擊與雙擊的功能已經是很多嵌入式產品的常用手法。使用定時器的間隔定時來計算按鍵按下的時間是通用的做法,然而,使用普通的延時函式實現按鍵單擊與雙擊的區分也是一個快速的處理手段。按鍵SW1單擊的時候,切換D3燈的開關狀態;按鍵SW1雙擊的時候,切換D4燈的開關狀態。其中:

      按鍵SW1--------P1_2

      D3燈--------------P1_0(高電平點亮)

      D4燈--------------P1_1(高電平點亮)

【實現思路】

  <1> 定義一個普通的延時函式Delay()、一個計算時間的變數count和一個延時閾值TT。

  <2> 當SW1第一次按下的時候,等待按鍵鬆開後,只要count小於TT時,呼叫Delay()進行延時,然後累計count變數。

  <3> 在count小於TT時,發現SW1按鍵再次按下,則為雙擊按鍵。

  <4> 如果在count大於等於TT的延時過程中都沒有第二次按鍵按下,則為單擊按鍵。

【實現程式碼】

#include "ioCC2530.h"

#define D3 P1_0
#define D4 P1_1
#define K1 P1_2
#define TT 2000
unsigned int count = 0;

void Delay(unsigned int t)
{
  while(t--);
}

void Init_Port()
{
  P1SEL &= ~0x03;   //將P1_0和P1_1設定為通用I/O埠
  P1DIR |= 0x03;    //將P1_0和P1_1設定為輸出模式  
  P1SEL &= ~0x04;   //將P1_2設定為通用I/O埠 
  P1DIR &= ~0x04;   //將P1_2設定為輸入模式
}

void Scan_Keys()
{
  if(K1 == 0)
  {
    Delay(100);       //按鍵去抖動處理
    if(K1 == 0)       //確認有按鍵按下
    {
      while(K1 == 0);
      while(count < TT)
      {
        Delay(100);
        count++;
        
        if(K1 == 0)         //雙擊處理
        {
          Delay(100);
          if(K1 == 0)
          {
            while(K1 == 0);
            D4 = ~D4;
            count = 0;
            break;
          }
        }
      }
      
      if(count >= TT)       //單擊處理
      {
        D3 = ~D3;
        count = 0;
      }
    }
  }
}

void main()
{
  Init_Port();      //初始化埠
  D3 = 1;
  D4 = 1;
  Delay(50000);
  D3 = 0;
  D4 = 0;
  while(1)
  {
    Scan_Keys();    //掃描按鍵
  }
}

【廣東職業技術學院  歐浩源 <小蜜蜂老師>  [email protected]

相關推薦

CC2530強化02普通函式實現按鍵

【題目要求】       用一個按鍵實現單擊與雙擊的功能已經是很多嵌入式產品的常用手法。使用定時器的間隔定時來計算按鍵按下的時間是通用的做法,然而,使用普通的延時函式實現按鍵單擊與雙擊的區分也是一個快速的處理手段。按鍵SW1單擊的時候,切換D3燈的開關狀態;按鍵SW1雙擊的

CC2530強化02普通函數實現按鍵的長按短按

掃描 -- 技術 unsigned int 切換 pan code count 【CC2530強化實訓02】普通延時函數實現按鍵的長按與短按 【題目要求】 用一個按鍵實現單擊與雙擊的功能已經是很多嵌入式產品的常用手法。使用定時器的間隔定時來計算按鍵按下的時間是通用

CC2530強化03定時器間隔定時實現按鍵長按短按

【題目要求】       雖然用普通的延時函式能夠實現按鍵長按與短按的判別,但是在實際的工程應用和專案開發中並不好用也不靈活。更多得是藉助定時器的間隔定時來計算按鍵從按下到鬆開的時間間隔,然後通過判斷該時間值來區分按鍵長按與短按的狀態。       在新大陸國賽裝置的黑色

CC2530強化03定時器間隔定時實現按鍵N連

eight -- del 周期 sta 通用 學院 處理 char 【CC2530強化實訓03】定時器間隔定時實現按鍵N連擊 【題目要求】 2018年全國職業院校技能大賽“物聯網技術應用”國賽(高職組)中關於感知層開發的難度陡然增大,三個題目均在Zigbee協議棧

720科技springmvc-知識點彙總

關鍵詞:springmvc 常見知識點知識來源:720科技實訓課1.什麼是spring mvc?    Spring MVC基於模型-檢視-控制器模式實現.     M----Model 模型     V ----View  檢視     C----Controller

物聯網專案------(七)家庭智慧安防系統之人臉驗證

主要是使用OpenCV和Python進行人臉面部的檢測。 1.在linux上安裝OpenCV等軟體 sudo apt-get update sudo apt-get install  vim build-essential python-software-propert

物聯網專案------(六)家庭智慧安防系統之智慧監控

1.Tomcat的操作 (1)tomcat2的安裝 sudo apt-get install apache2 (2)tomcat2的埠的修改 cd /etc/apache2 開啟埠配置檔案進行修改  vim ports.conf 將Listen的埠修改,這裡我修

網絡爬蟲入門02HTTP客戶端庫Requests的基本原理基礎應用

多應用 多服務器 技術學 用戶 iis unicode licensed content sed 【網絡爬蟲入門02】HTTP客戶端庫Requests的基本原理與基礎應用 廣東職業技術學院 歐浩源 1、引言 實現網絡爬蟲的第一步就是要建立網絡連接並向服務器或網頁等

黑金原創教程FPGA那些事兒-驅動篇I 實驗四:按鍵模組③ —

實驗四:按鍵模組③ — 單擊與雙擊 實驗三我們建立了“點選”還有“長點選”等有效按鍵的多功能按鍵模組。在此,實驗四同樣也是建立多功能按鍵模組,不過卻有不同的有效按鍵。實驗四的按鍵功能模組有以下兩項有效按鍵: l 單擊(按下有效); l 雙擊(連續按下兩下有效)。 圖4.1 單擊有效按鍵,時序示意圖

STM32中通過普通函式來精確

在STM32中處處會用到延時函式,一般而言,對於普通的控制延時,並不會要求特別精確,所以可以使用普通的延時函式,例如 void delay(u32 time) { while(time--);

CC2530入門教程-增強版基礎技能綜合案例(基礎版)-題目需求

情況 led 興趣 題目 嵌入式開發 廣東 難點 在一起 參數 【CC2530入門教程-增強版】基礎技能綜合實訓案例(基礎版)-題目需求 廣東職業技術學院 歐浩源 一、引用 不管是簡單的單片機應用,還是復雜的嵌入式系統,在我看來它們的本質結構是差不多的,都離不開“

雪野記錄Java-T1作業 基礎

package T1; public class t1_1 { // 1)設計顯示各種水果的定購詳情的類,詳情包括:名稱、數量、價格 // 測試資料:"蘋果", 10, 20 ; "芒果", 18, 56 ; "桔子", 25, 75 private String nam

HttpClient4.5一.HttpClient4.5模擬瀏覽器GET請求訪問新浪網(非原文教程)

更多HttpClient4.5教程請訪問點選開啟連結 ===================================================================== 問題:

專案銀行系統

main.cpp /*********************************************************** * 版權所有 (C)2015, Lingle * * 檔名稱: main.cpp * 檔案標識:無 * 內容摘要:主檔案。開啟銀行系

模擬賽 2018-11-023.老大

題目描述 因為 OB 今年拿下 4 塊金牌,學校贊助擴建勞模辦公室為勞模辦公室群,為了體現 OI 的特色,辦公室群被設計成了樹形(n 個點 n − 1 條邊的無向連通圖),由於新建的辦公室太大以至於要將獎盃要分放在兩個不同的地方以便同學們丟硬幣進去開光,OB 想請你幫幫他看看獎盃放在哪兩個辦公室使得在任意一

Net Micro Framework PortingKit - 02STM3210E平臺構建

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

ODL-Openstack學習系列-02-vxlan隧道ovs手動構建及私網互通分析

ovs vxlan隧道手動搭建及私網互通測試 1 前言 ​ 學習了openstack一段時間,本人對於linux強大的網路功能充滿興趣,因為對於linux的網路功能包括nat、vxlan隧道配置等有了一定基礎,希望通過測試配置兩個私有網路,通過vxlan隧道配置實現私有網路在跨路由器

玩轉jvm系列 02物件探祕

注意:本文描述的內容是基於HotSpot虛擬機器。 物件的建立 物件建立流程圖 物件建立流程 虛擬機器遇到一條new指令 檢查該指令引數在常量池中能否定位到對應類的符號引用 檢查該類是否被載入、解析和初始化,如果沒有必須先執行載入過程

Python例項第14講普通判別分析縮水判別分析

機器學習訓練營——機器學習愛好者的自由交流空間(qq 群號:696721295) 這個例子說明在判別分析裡使用縮水(shrinkage)的方法,可以提高分類的準確率。所謂“縮水”,是指減少預測的特徵。我們使用的資料集是模擬資料,你也可以在真實資料集上驗證縮水判別分析的分類效

CV+DL學習路02CNN視覺化學習2——Visualizing and Understanding Convolutional Networks

第二篇論文記錄,對於第一次搜尋文獻的本小白和為圖偷懶第一篇論文直接看的翻譯的本童鞋來說,真的是。。。。做科研不能偷懶,不然後面是真有點麻煩,在經過了三天的谷歌加百度加CSDN下載了10多篇文章不知道先看那一篇之後,我終於確定了要看的第二篇和第三篇論文。。。。也是無語了這篇論文