这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » cc2530通过按键唤醒睡眠程序

共2条 1/1 1 跳转至

cc2530通过按键唤醒睡眠程序

工程师
2013-10-23 15:50:47     打赏

//#include <ioCC2530.h>

#define uint unsigned int
#define uchar unsigned char
#define DELAY 15000

#define RLED P1_0
#define YLED P1_1       //LED灯控制IO口定义

void Delay(void);
void Init_IO_AND_LED(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++);
}

/****************************************************************
系统工作模式选择函数           
* 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 = 0x10;         //进入睡眠模式
  }
 else
 {
     PCON = 0x00;             //系统唤醒
  }
}

/****************************************************************
      LED控制IO口初始化函数   
****************************************************************/
void Init_IO_AND_LED(void)
{
    P1DIR = 0X03;
    RLED = 0;
    YLED = 0;
    //P0SEL &= ~0X32;
    //P0DIR &= ~0X32;
    P0INP  &= ~0X10;   //设置P0口输入电路模式为上拉/下拉
    P2INP &= ~0X20;    //选择上拉
    P0IEN |= 0X10;     //P01设置为中断方式
    PICTL |= 0X10;     //下降沿触发
    EA = 1;
    IEN1 |= 0X10;      // 开P0口总中断
    P0IFG |= 0x10;     //清中断标志
};
/****************************************************************
    主函数 
****************************************************************/
void main()
{
 uchar count = 0;
 Init_IO_AND_LED();
 RLED = 1 ;       //开红色LED,系统工作指示
 Delay();         //延时 
 while(1)
 {
  YLED = !YLED;
                RLED = 1;
  count++;
  if(count >= 20)
                {
                 count = 0;    
                  RLED = 0;
                  SysPowerMode(3);
    //10次闪烁后进入睡眠状态PM3
                }
   //Delay();
     Delay();
                 //延时函数无形参,只能通过改变系统时钟频率或DEALY的宏定义
                 //来改变小灯的闪烁频率
 };
}
/*****************************************
    中断处理函数-系统唤醒
*****************************************/
#pragma vector = P0INT_VECTOR
 __interrupt void P0_ISR(void)
 {
      if(P0IFG>0)
    {
         P0IFG = 0;
     }
         P0IF = 0;
         SysPowerMode(4);
 }


工程师
2013-10-23 15:55:01     打赏
2楼
求助要把输出改为P00,P01,中断按键改为P04,怎么改

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]