/****************************************************************************
* 描 述: 按下按鍵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;
}
}
}
}