zigbee學習之路(三):按鍵的控制


一.前言

    通過前一次的實驗,相信大家都已經對cc2530程序的編寫有了一定的認識,這次我們來操作和實驗的是cc2530上的按鍵模塊。

二.原理分析

   我們先來看一下按鍵的原理圖:

根據原理圖我們可以得出,按鍵不按下的時候值為0,因為接地,所以,按鍵要被按下的時候,BUT1和BUT2輸入值為1,當檢測到它們為1時,按鍵就為按下的狀態,因為P0DIR默認的狀態是輸入,所以不需要配置IO寄存器,當按鍵按下時,改變led的狀態,來驗證實驗。

三.程序

#define LED1 P1_0      //LED1為P1_0端口控制

#define LED2 P1_1      //LED2為P1_1端口控制

#define LED3 P1_4      //LED3為P1_4端口控制

#define KEY1 P0_4      //KEY1為P0_4端口控制

/*****************  函 數 名  : Delayms  功能描述  : 毫秒延時  輸入參數  : xms:延時時間,如 i=xms 即延時i毫秒  輸出參數  : none  返 回 值  : none *********************/

void Delayms(uint xms)   {     uint i,j;     for(i=xms;i>0;i--)     for(j=587;j>0;j--); }

/ 函 數 名  : InitLed  功能描述  : LED IO初始化  輸入參數  : none  輸出參數  : none  返 回 值  : none *************/

void InitLed(void)

{     P1DIR |= 0xff;   //P1端口定義為輸出    

LED1 = 1;        //LED1燈熄滅    

LED2 = 1;    

LED3 = 1;    }

/********************  函 數 名  : KeyScan  功能描述  : 按鍵檢測函數  輸入參數  : none  輸出參數  : none  返 回 值  : 0:無按鍵按下  1:按鍵按下 ***********************/

uchar KeyScan(void)

{    

if(KEY1==0)    

{         Delayms(2);     //延時去抖        

if(KEY1==0)        

{             while(!KEY1);  //松手檢測,如果一直按着按鍵,將一直停在這條語句      

       return 1;      //有按鍵按下         }   

  }     return 0;           //無按鍵按下 }

/*************************  函 數 名  : main  功能描述  : KEY測試(通用IO的輸入/輸出使用)  輸入參數  : NONE   輸出參數  : NONE  返 回 值  : NONE **************************/

void main(void) {     InitLed();  //調用初始化函數    

while(1)    

{         if(KeyScan())       

  {             LED1=~LED1;       //按鍵改變LED狀態            

LED2=~LED2;            

LED3=~LED3;         }   

} }

 四.總結

     通過本次實驗,我們學習了如何使用按鍵來控制cc2530的外設,用鍵盤掃描函數來檢測按鍵狀態的改變,函數中有調用延時函數,用於延時去抖,增加系統的穩定性,可是不斷檢測會造成占用cpu的工作時間,下一講介紹一種更好的方式。

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM