#include <ioCC2430.h>
#define uint unsigned int
#define uchar unsigned char
#define DELAY 10000
//小灯控端口定义
#define RLED P1_0
#define YLED P1_1
void Delay(void);
void Init_IO_AND_LED(void);
void PowerMode(uchar sel);
/****************************************************************
*函数功能:延时
*入口参数:无
*返回值 :无
*说 明 :可在宏定义中改变延时长度
****************************************************************/
void Delay(void)
{
uint tt;
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
}
/****************************************************************
*函数功能:初始化电源
*入口参数:para1,para2,para3,para4
*返回值 :无
*说 明 :para1,模式选择
* *
* para1 0 1 2 3 *
* mode PM0 PM1 PM2 PM3 *
* *
****************************************************************/
void PowerMode(uchar sel)
{
uchar i,j;
i = sel;
if(sel<4)
{
SLEEP &= 0xfc;
SLEEP |= i;
for(j=0;j<4;j++);
PCON = 0x01;
}
else
{
PCON = 0x00;
}
}
/****************************************************************
* 函数功能:初始化I/O,控制LED
* 入口参数:无
* 返回值 :无
* 说 明 :初始化完成后关灯
****************************************************************/
void Init_IO_AND_LED(void)
{
P1DIR = 0X03;
RLED = 1;
YLED = 1;
P1SEL &= ~0X0C;
P1DIR &= ~0X0C;
P1INP &= ~0X0c;//有上拉、下拉
P2INP &= ~0X40; //选择上拉
P1IEN |= 0X0c; //P12 P13
PICTL |= 0X02; //下降沿
EA = 1;
IEN2 |= 0X10; //P1IE = 1;
P1IFG |= 0x00; //P12 P13
};
/****************************************************************
* 函数功能:主函数
* 入口参数:
* 返回值 :无
* 说 明 :10次绿色LED闪烁后进入睡眠状态
****************************************************************/
void main()
{
uchar count = 0;
Init_IO_AND_LED();
RLED = 0 ; //开红色LED,系统工作指示
Delay(); //延时
Delay();
Delay();
Delay();
while(1)
{
YLED = !YLED;
RLED = 0;
count++;
if(count >= 20)
{
count = 0;
RLED = 1;
PowerMode(3);
//10次闪烁后进入睡眠状态
}
//Delay();
Delay();
//延时函数无形参,只能通过改变系统时钟频率
//来改变小灯的闪烁频率
};
}
/*****************************************
//唤醒系统
*****************************************/
#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
{
if(P1IFG>0)
{
P1IFG = 0;
}
P1IF = 0;
} |