单片机学习小组
直播中

杨言

12年用户 555经验值
私信 关注

如何利用CC2530按键控制跑马灯的启停?

如何利用CC2530按键控制跑马灯的启停?

回帖(1)

王芳

2022-1-25 10:38:55
#include "ioCC2530.h" //引用CC2530头文件


#define LED1 (P1_0)     //LED1端口宏定义
#define LED2 (P1_1)     //LED1端口宏定义


unsigned char flag_Pause=0;  //流水灯运行标志位,为1暂停,为0运行。


/**************************************************************
函数名称:delay
功    能:软件延时
入口参数:time--延时循环执行次数
出口参数:无
返 回 值:无
**************************************************************/
void delay(unsigned int time)
{
    unsigned int i;
    unsigned char j;
    for(i = 0;i < time;i++)
        for(j = 0;j < 240;j++)
        {
            asm("NOP");//asm用来在C代码中嵌入汇编语言操作,汇
            asm("NOP");//编命令nop是空操作,消耗1个指令周期。
            asm("NOP");
            while(flag_Pause);//根据flag_Pause的值确定是否在此循环
        }
}


/**************************************************************
函数名称:main
功    能:程序主函数
入口参数:无
出口参数:无
返 回 值:无
**************************************************************/
void main(void)
{
    P1SEL &= ~0x03;         //设置P1_0口和P1_1口为普通I/O口
    P1DIR |= 0x03;          //设置P1_0口和P1_1口为输出口
   
    LED1 = 0;               //熄灭LED1
    LED2 = 0;               //熄灭LED2
   
    /*************新增外部中断初始化部分****************/
    IEN2 |= 0x10;           //使能P1口中断
    P1IEN |= 0x04;          //使能P1_2口中断
    PICTL |= 0x02;          //P1_3到P1_0口下降沿触发中断
    EA = 1;                 //使能总中断
    /***************************************************/
   
    while(1)//程序主循环
    {
        delay(1000);        //延时
        LED1 = 1;           //点亮LED1
        delay(1000);        //延时
        LED2 = 1;           //点亮LED2
        delay(1000);        //延时
        LED1 = 0;           //熄灭LED1
        delay(1000);        //延时
        LED2 = 0;           //熄灭LED2
    }
}


/**************************************************************
函数名称:P1_INT
功    能:P1口外部中断服务函数
入口参数:无
出口参数:无
返 回 值:无
**************************************************************/
#pragma  vector = P1INT_VECTOR
__interrupt void P1_INT(void)
{
    if(P1IFG & 0x04)       //如果P1_2口中断标志位置位
    {
        if(flag_Pause == 0)
        {
            flag_Pause = 1;
        }
        else
        {
            flag_Pause = 0;
        }
        P1IFG &= ~0x04;    //清除P1_2口中断标志位
    }
    P1IF = 0;              //清除P1口中断标志位
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分