// www.frotech.com
// 2012.11.27
#include <ioCC2530.h> //把CC2530的头文件包含进来
#define uint unsigned int
#define uchar unsigned char
//定义控制灯的端口
#define RLED P1_0 //定义LED1为P10口控制
#define GLED P1_1 //定义LED2为P11口控制
#define YLED P1_4 //定义LED3为P14口控制
#define KEY1 P0_1 //定义按键为P01口控制
//函数声明
void Delay(uint); //延时函数声明
void InitIO(void); //初始化函数声明
void InitKey(void); //初始化按键函数声明
uchar KeyScan(void); //按键扫描函数声明
uchar Keyvalue = 0 ; //定义变量记录按键动作
uint KeyTouchtimes = 0 ; //定义变量记录按键次数
/****************************
//延时 如需精确延时请结合晶振计算指令周期及用示波器辅助调试
*****************************/
void Delay(uint n)
{
uint i,j;
for(j = 0; j<5; j++)
{
for(i = 0;i<n;i++);
}
}
/****************************
//按键初始化
*****************************/
void InitKey(void)
{
P0SEL &= ~0X02;
P0DIR &= ~0X02; //按键在P01口,设置为输入模式
P0INP |= 0x02; //上拉
}
/****************************
//初始化程序,将P10、P11、P14定义为输出口,并将LED灯初始化为灭
*****************************/
void InitIO(void)
{
P1DIR |= 0x13; //P10、P11、P14定义为输出
RLED = 0;
GLED = 0;
YLED = 0; //LED灯初始化为灭
}
/*****************************************
//按键动作记录函数
*****************************************/
uchar KeyScan(void)
{
if(KEY1 == 1) //高电平有效
{
Delay(100); //防抖检测,检测到按键
if(KEY1 == 1)
{
while(KEY1); //直到松开按键
return(1);
}
}
return(0);
}
/***************************
//主函数
***************************/
void main(void)
{
InitIO(); //初始化LED灯控制IO口
InitKey(); //初始化按键控制IO口
while(1) //死循环
{
Keyvalue = KeyScan(); //读取按键动作
if (Keyvalue==1)
{
KeyTouchtimes = KeyTouchtimes+1; //记录按键次数
}
if(KeyTouchtimes ==1) //第一次按下按键设置LED1灯亮
{
RLED = 1;
GLED = 0;
YLED = 0;
}
if(KeyTouchtimes == 2) //第二次按下按键设置为LED3,LED2,LED1倒序流水闪烁
{
GLED = !GLED;
Delay(20000);
YLED = !YLED;
Delay(20000);
RLED = !RLED;
Delay(20000);
}
if(KeyTouchtimes == 3) //第三次按下按键设置为LED1,LED2,LED3顺序流水闪烁
{
RLED = !RLED;
Delay(20000);
YLED = !YLED;
Delay(20000);
GLED = !GLED;
Delay(20000);
}
if(KeyTouchtimes == 4) //第四次按下按键设置为LED1,LED2,LED3全部关闭
{
RLED = 0;
GLED = 0;
YLED = 0; //关闭所有LED
KeyTouchtimes =0; //重置按键次数记录变量
}
}
}