CC2540/CC2541的基本操作

CC2540/CC2541的基本操作

1)操作LED

//初始化
P0SEL &= ~0x01;//设置为普通IO口 
P0DIR |= 0x01;//设置成输出模式
//LED控制
P0_0 = 1;//输出高电平,LED亮
P0_0 = 0;//低电平,LED灭

2)按键

//初始化
P0SEL &= ~0x01;//设置为普通IO口  
P0DIR &= ~0x01;//设为输入模式 
P0INP &= ~0x01;//打开上拉电阻,上拉输入
//取值
/****************************************************************************
* 名    称: KeyScan()
* 功    能: 读取按键状态
* 入口参数: 无
* 出口参数: 0为抬起   1为按键按下
****************************************************************************/
uchar KeyScan(void){
    if (P0_0 == 0){
        DelayMS(10);      //延时10MS去抖
        if (P0_0 == 0){
            while(!P0_0); //松手检测
            return 1;     //有按键按下
        }
    }
    return 0;             //无按键按下
}

3)中断方式按键

//初始化
P0IEN |= 0x1;    //P0IEN: 端口0,位7至位0中断使能。0:中断禁止;1:中断使能
PICTL |= 0x1;    //端口0,引脚7至0输入模式下的中断配置,该位为端口0的7-0脚的输入选择中断请求条件。0:输入的上升沿引起中断;1:输入的下降沿引起中断   
P0IEN |= 0x1;    //端口0,位7至位0中断使能。0:中断禁止;1:中断使能; 
P0IFG = 0x00;    //端口0,位7至位0输入中断状态标志。当某引脚上有中断请求未决信号时,其相应标志为1。
EA = 1;          //打开总中断
//按键检测的中断处理函数,不需要主动调用
/****************************************************************************
* 名    称: P0_ISR(void) 中断处理函数 
* 描    述: #pragma vector = 中断向量,紧接着是中断处理程序
****************************************************************************/
#pragma vector = P0INT_VECTOR    
__interrupt void P0_ISR(void){
    DelayMS(10);  //延时去抖
    LED1 = ~LED1; //改变LED1状态
    P0IFG = 0;    //清中断标志 
    P0IF = 0;     //清中断标志 
} 

4)ADC采样

//初始化
HalAdcInit();
HalAdcSetReference(HAL_ADC_REF_125V);//设置参考电压为内部1.25V
uint32 r=HalAdcRead(HAL_ADC_CHN_VDD3, HAL_ADC_RESOLUTION_10);//取得1/3电源值的ADC采样

5)看门狗

//初始化看门狗
void Init_Watchdog(void){
    WDCTL = 0x00;       //打开IDLE才能设置看门狗
    WDCTL |= 0x08;      //定时器间隔选择,间隔一秒
}

//喂狗, 需要不断喂狗, 因为BUG或其他原因长时间不喂狗, 系统就会复位
void FeetDog(void){
    WDCTL = 0xa0;       //清除定时器。当0xA跟随0x5写到这些位,定时器被清除
    WDCTL = 0x50; 
}

6)GPIO省电

一个接有负载的IO口,在不需要负载时如何省电呢(比如LED不需要亮时),答案是3态输入,上拉下拉输入都可能有消耗;
P0SEL &= ~0x01;//设置为普通IO口 
P0DIR &= ~0x01;//设置为输入模式
P0INP |= 0x01;//3态输入模式

你可能感兴趣的:(CC2540/CC2541的基本操作)