CC2530串口命令控制LED灯开关

文章目录:

实验要求

代码实现


实验要求

代码实现

#include "ioCC2530.h"

#define D4 P1_1
#define D6 P1_4

unsigned char temp=0;//接收命令变量

//系统时钟切换函数从16M——32M
void Set_Clock_32M()
{
  CLKCONCMD &=~0x40;
  while(CLKCONSTA &0X40)
  {
    
  }
  CLKCONCMD &=~0x47;
}

//端口初始化函数
void Init_Prot()
{
//配置4个LED灯的引擎
  //选择端口的功能
  P1SEL &=~0x1B;//设置通用io端口
  //配置端口的方向
  P1DIR |=0x1B;
  //关闭LED灯
  P1 &=~0x1B;
}

//串口初始化函数
void Init_Uart0()
{
  //1.设置串口的引脚功能,将P0_2和P0_3设置为外设功能
  PERCFG &=~0X01;
  P0SEL |=0x0C; //0000 1100
  //2.设置串口的波特率:32M——9600
  U0BAUD = 59;
  U0GCR = 8;
  //3.设置一个UART控制寄存器 U0UCR
  U0UCR |=0x80;
  //4.设置控制与状态寄存器 U0CSR
  U0CSR |=0xc0; //1100 0000
  
  //5.清除中断标志
    //发送
    UTX0IF = 0;
    //接收
    URX0IF = 0;
  //6.使能串口数据接收完成中断和总中断
  URX0IE = 1;
  EA = 1;
}

//串口字节发送函数
void URD_SendByte(unsigned char dat)
{
  U0DBUF =dat;
  while(UTX0IF==0);
  UTX0IF=0;
}

//串口字符串发送函数
void URD_SendString(unsigned char *str)
{ 
  while(*str !='\0')
  {
    URD_SendByte(*str++);
  }
}


//串口数据接受完成中断服务函数
#pragma vector = URX0_VECTOR //起始语句
//中断服务函数
__interrupt void Service_UR0Recv()
{ 
  temp=U0DBUF;
}  
   

//命令控制灯光开关函数
void Control_LED()
{
  switch(temp)
  {
  case 0xA1:
      D4=1;
      URD_SendString("D4 is open\r\n");
  break;
    
  case 0xA2:
      D4=0;
      URD_SendString("D4 is closed\r\n");
  break;
    
  case 0xB1:
      D6=1;
      URD_SendString("D6 is open\r\n");
  break;
    
  case 0xB2:
      D6=1;
      URD_SendString("D6 is closed\r\n");
  break;
  }
  
  
  temp=0;
}


void main(void)
{
  Set_Clock_32M();
  //端口初始化
  Init_Prot();
  Init_Uart0();
  while(1)
  {
    if(temp!=0)
    {
      Control_LED();
    }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘鑫磊up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值