#include <ioCC2530.h> #define uint unsigned int #define uchar unsigned char #define DELAY 15000 #define BUZZER P1_3 //定义BUZZER为P13口控制 #define KEY P2_0 //定义KEY为P20口 void Delay(void); void SysPowerMode(uchar sel); /**************************************************************** 延时函数 ****************************************************************/ void Delay(void) { uint i; for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); for(i = 0;i<DELAY;i++); } /**************************************************************** 系统工作模式选择函数 * para1 0 1 2 3 * mode PM0 PM1 PM2 PM3 ****************************************************************/ void SysPowerMode(uchar mode) { uchar i,j; i = mode; if(mode<4) { SLEEPCMD &= 0xFC; SLEEPCMD |= i; //设置系统睡眠模式 for(j=0;j<4;j++); { PCON = 0x01; //进入睡眠模式 } } else { PCON = 0x00; //系统唤醒 } } /**************************************************************** LED 控制 IO 口初始化函数 ****************************************************************/ void Init_IO_AND_BUZZER(void) { P1DIR |= 0x08; //P13定义为输出 BUZZER = 0; P2DIR &= ~0x01; //P20定义为输入 KEY = 1; P2INP &= ~0X01; //配置P2.0口上拉下拉 P2IEN |= 0X01; //P2.0为中断模式 PICTL |= 0X08; //下降沿 IEN2 |= 0X02; P2IFG &= ~0x01; EA = 1; }; /**************************************************************** 主函数 ****************************************************************/ void main() { uchar count = 0; Init_IO_AND_BUZZER(); BUZZER = 1 ; //开蜂鸣器,系统工作指示 Delay(); //延时 while(1) { BUZZER = !BUZZER; count++; if(count >= 6) { count = 0; SysPowerMode(3); //3 次蜂鸣后进入睡眠状态 PM3 } Delay(); //延时函数无形参,只能通过改变系统时钟频率或 DEALY 的宏定义 //来改变小灯的闪烁频率 }; } /***************************************** 中断处理函数-系统唤醒 *****************************************/ #pragma vector = P2INT_VECTOR __interrupt void P2_ISR(void) { if(P2IFG>0) { P2IFG = 0; } P2IF = 0; SysPowerMode(4); } |