ZigBee

按键点灯

/*第1次按下SW1键时,LED1点亮;第2次按下SW1键时,LED2点亮;第3次按下SW1键时,
LED1和LED2都熄灭;第4次按下SW1键时,LED1点亮;这样依次循环*/


#include <ioCC2530.h>
#define 	LED1 	P1_0       //P1.0端口控制LED1发光二极管  
#define 	LED2 	P1_1       //P1.1端口控制LED1发光二极管  
#define 	SW1  	P1_2       //P1.2端口与按键SW1相连
unsigned char count;    	   //用于计算按键按下次数
//**********************************************************************************
void initial_gpio()
{   P1SEL &= ~0x07;         //设置P1.0 P1.1 P1.2为GPIO
    P1DIR |= 0X03;          //设置P1.0 P1.1端口为输出
    P1DIR &= ~0X04;         //设置P1.2端口为输入
    P1=0X00;                //关闭LED灯        
    P1INP &= ~0X04;         //P1.2端口为"上拉/下拉"模式
    P2INP &= ~0X40;         //对所有P1端口设置为"上拉"  
 }
//**********************************************************************************
void initial_interrupt()
{   EA = 1;                 //使能总中断
    IEN2 |= 0X10;           //使能P1端口中断源
    P1IEN |= 0X04;          //使能P1.2位中断
    PICTL |= 0X02;          //P1.2中断触发方式为:下降沿触发   
}
//**********************************************************************************
#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
{   if(P1IFG==0x04)                           //判断P1.2是否产生中断
    {   count++;
        switch(count)
        {   case 1: LED1=1;break;               //点亮LED1
            case 2: LED2=1;break;               //点亮LED2
            default: P1=0X00;count=0x00;break;   //灭掉LED1~LED4,并把count清零
        }   }    
    P1IF = 0;                //清除P1端口中断标志位
    P1IFG = 0x00;              //清除P1.2中断标志位  
 }
//**********************************************************************************
void main(void)
{  initial_gpio();                  //GPIO初始化 
   initial_interrupt();              //中断初始化
   while(1)
   {   ;   }
}


串口发送信息

/**********************************************************************************
程序名称:USART_RX_TX.c
功能描述:CC2530开发板通过串口向PC机发送字符串"What is your name",PC机接收到串口信息后,
          发送名字给开发板,并以#号作为结束符;开发板接收到PC信息后,再向PC机发送"Hello +名字"字符串。
          要求采用到USART中断和奇偶校验技术.
          注意事项:
          1.可以采用接收中断和接收中断标志位查询两种方式,本程序为中断方式,程序文件名为usart_rx.c为查询方式程序。
          2.PC机串口调试器发送数据为16进制格式,也可以为字符格式,但case 0x01:等比较语句要修改为case '1':方式
          3.
编程时间:2015-3-7
编程作者:
**********************************************************************************/
#include <ioCC2530.h>
char data[]="What is your name?\n";
char name_string[20];
unsigned char temp,RX_flag,counter=0;
//*********************************************************************************
void delay(unsigned int i)
{   unsigned int j,k;
    for(k=0;k<i;k++)
    { for(j=0;j<500;j++);
    }
}
//*********************************************************************************
void initial_usart()
{   CLKCONCMD &= ~0X7F;                  //晶振设置为32MHz
    while(CLKCONSTA & 0X40);             //等待晶振稳定
    CLKCONCMD &= ~0X47;                   //设置系统主时钟频率为32MHz
    PERCFG = 0X00;                       //usart0 使用备用位置1 TX-P0.3 RX-P0.2
    P0SEL |=0X3C;                         //P0.2 P0.3 P0.4 P0.5用于外设功能
    P2DIR &= ~0xC0;                         //P0优先作为UART方式
    U0CSR |= 0XC0;                         //uart模式 允许接收    
    U0GCR = 9;
    U0BAUD = 59;                          //波特率设为19200
    URX0IF = 0;                           //uart0 tx中断标志位清零    
    IEN0 = 0X84;                          //接收中断使能 总中断使能
}
//*********************************************************************************
void uart_tx_string(char *data_tx,int len)
{   unsigned int j;
    for(j=0;j<len;j++)
    {   U0DBUF = *data_tx++;
        while(UTX0IF == 0);
        UTX0IF = 0;
    }
}
//*********************************************************************************
#pragma vector = URX0_VECTOR
__interrupt void UART0_RX_ISR(void)
{   URX0IF = 0;
    temp = U0DBUF;
    RX_flag=1;
}
//*********************************************************************************
void main(void)
{   initial_usart();                                    //调用UART初始化函数
    uart_tx_string(data,sizeof(data));                  //发送What is your name?
    while(1)
    {   if(RX_flag == 1)
        {   RX_flag = 0; 
            if(temp !='#')
            {   name_string[counter++] = temp;              //存储接收数据:名字+#
            }
            else
            {   U0CSR &=~0X40;                              //禁止接收
                uart_tx_string("Hello ",sizeof("Hello "));    //名字接收结束,发送Hello字符串+空格
                delay(1000);
                uart_tx_string(name_string,counter);        //发送名字字符串
                counter=0;
                U0CSR |=0X40;                               //允许接收
            }
        }
    }
}


五秒闪烁

//LED1灯每隔5s闪烁一次


#include <ioCC2530.h>
#define LED1 P1_0       		//P1.0端口控制LED1发光二极管  第3个
unsigned int count;     		//定义中断次数变量
//**********************************************************************************
void initial_t1()
{   T1IE = 1;                 	//使能T1中断源
    T1CTL = 0X05;            	//启动定时器1,设8分频 自由运行模式
    TIMIF |= 0X40;            	//使能T1溢出中断
    EA = 1;                   	//使能总中断    
}
//**********************************************************************************
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{   
    //IRCON = 0X00;             	//清中断标志位,硬件会自动清零,即此语句可省略
    if(count>300)
    {   count = 0x00;
        LED1 = !LED1;    }
    else
    {   count++;    }
}
//**********************************************************************************
void main(void)
{
    CLKCONCMD &= ~0X7F;       	//晶振设置为32MHz
    while(CLKCONCMD & 0x40);   	//等待晶振稳定
    initial_t1();              	//调用T1初始化函数
    P1SEL &= ~0x01;             	//设置P1.0为GPIO
    P1DIR |= 0X01;              	//定义P1.0端口为输出
    LED1=0;                    	//关闭LED1
    while(1);  
}

版权声明:本文为CSDN博主「安之海」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_50006364/article/details/121909586

生成海报
点赞 0

安之海

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

趣聊51之串口通信(概念篇)

对于刚刚接触单片机的同学们来说,串口通信似乎是一个神秘感十足的东西,笔者在刚刚开始学习51单片机时,读的是郭天祥先生的那本著名的《新概念51单片机教程》,贼厚的一本书,但是等