其他分享
首页 > 其他分享> > ZigBee-CC2530单片机 - 按键控制跑马灯的启停

ZigBee-CC2530单片机 - 按键控制跑马灯的启停

作者:互联网

ZigBee-CC2530单片机 - 按键控制跑马灯的启停

程序源码

#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口中断标志位
}

标签:LED1,P1,单片机,ZigBee,delay,跑马灯,flag,LED2,Pause
来源: https://blog.csdn.net/qq_35094756/article/details/113810435