Zigbee實驗05——Key控制(跑馬燈)

/****************************************************************************
* 描    述: 按下按鍵KEY1控制LED1.LED2實現跑馬燈效果
* 修    改: 添加LED3跑馬燈效果
****************************************************************************/
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int  uint;
#define LED1 P1_0        // 定義P1.0口爲LED1控制端
#define LED2 P1_1        // 定義P1.1口爲LED2控制端   
#define LED3 P1_2        // 定義P1.1口爲LED2控制端 
#define LED4 P1_3

#define KEY1 P0_4        // 定義P0.4口爲S1控制端
#define ON      0
#define OFF     1

/****************************************************************************
* 名    稱: DelayMS()
* 功    能: 以毫秒爲單位延時,系統時鐘不配置時默認爲16M(用示波器測量相當精確)
* 入口參數: msec 延時參數,值越大,延時越久
* 出口參數: 無
****************************************************************************/
void DelayMS(uint msec)
{ 
    uint i,j;
    
    for (i=0; i<msec; i++)
        for (j=0; j<535; j++);
}

/****************************************************************************
* 名    稱: LedOnOrOff()
* 功    能: 點亮或熄滅所有LED燈    
* 入口參數: mode爲0時LED燈亮  mode爲1時LED燈滅
* 出口參數: 無
****************************************************************************/
void LedOnOrOff(uchar mode)
{
    LED1 = mode;
    LED2 = mode;
    LED3 = mode;
    LED4 = mode;
}

/****************************************************************************
* 名    稱: InitLed()
* 功    能: 設置LED相應的IO口
* 入口參數: 無
* 出口參數: 無
****************************************************************************/
void InitLed(void)
{
    
    P1DIR |= 0x0F;  // P1.0、P1.1定義爲輸出 0000 1111
    LedOnOrOff(1);  // 使所有LED燈默認爲熄滅狀態  
}

/****************************************************************************
* 名    稱: InitKey()
* 功    能: 設置按鍵相應的IO口
* 入口參數: 無
* 出口參數: 無
****************************************************************************/
void InitKey(void)
{
    P0SEL &= ~0x10;     //設置P0.4爲普通IO口  
    P0DIR &= ~0x10;     //按鍵接在P0.4口上,設P0.4爲輸入模式 
    P0INP|= 0x10;
}

/****************************************************************************
* 名    稱: KeyScan()
* 功    能: 讀取按鍵狀態
* 入口參數: 無
* 出口參數: 0爲擡起   1爲按鍵按下
****************************************************************************/
uchar KeyScan(void)
{
    if (KEY1 == 0)
    {
        DelayMS(10);      //延時10MS去抖
        if (KEY1 == 0)
        {
            while(!KEY1); //鬆手檢測
            return 1;     //有按鍵按下
        }
    }
    
    return 0;             //無按鍵按下
}

/****************************************************************************
* 程序入口函數
****************************************************************************/
void main(void)
{
    InitLed();		      //設置LED燈相應的IO口
    InitKey();            //設置按鍵S1相應的IO口
    uchar i;
    while(1)
    {
        DelayMS(2);
        if (KeyScan())    //掃描按鍵當前狀態,按下時執行跑馬燈效果
        {
            for (i=0; i<8; i++)  //所有燈閃爍2次
           {
            LED1 = ON;    //點亮LED1      
            DelayMS(500); 
            LED1 = OFF;   //熄滅LED1 
            
            LED2 = ON;                
            DelayMS(500); 
            LED2 = OFF; 
            
            LED3 = ON;                
            DelayMS(500); 
            LED3 = OFF;
            
            LED4 = ON;                
            DelayMS(500); 
            LED4 = OFF;
          }      
            
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章