酒仙网的网站推广方式免费b站推广入口2023
思路
通过中断接收CC2530的信息,然后根据信息对灯光做出控制
为了简单,所以指令统一为一位
指令
0:全亮
1:全灭
b/B:改变蓝灯
y/Y:改变黄灯
代码
#include <iocc2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char//定义控制灯的端口
#define led1 P1_0
#define led2 P1_1void initUART0(void);
void InitialAD(void);
void UartTX_Send_String(uchar *Data,int len);
void UsartTX_Receive_String(); //此为接收函数char ReceiveData[3];//接收信息数组
uchar Recdata[15]="start\n";
uchar temp;//接收字符
uint datanumber = 0;//接收长度
uint stringlen;
/****************************************************************
初始化串口0函数
****************************************************************/
void initUART0(void)
{CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振while(CLKCONSTA & 0x40); //等待晶振稳定CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZPERCFG = 0x00; //位置1 P0口P0SEL = 0x0c; //P0用作串口 0011 1100P2DIR &= ~0XC0; //P0优先作为UART0 0011 1111U0CSR |= 0x80; //串口设置为UART方式 1000 0000U0GCR |= 9; // 见波特率设置表0000 1001U0BAUD |= 59; //波特率设置表,波特率设为19200UTX0IF = 1; //UART0 TX中断标志初始置位1U0CSR |= 0X40; //允许接收 0100 0000IEN0 |= 0x84; //开总中断,接收中断 1000 0100
}
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(uchar *Data,int len)
{int j;for(j=0;j<len;j++){U0DBUF = *Data++;while(UTX0IF == 0);UTX0IF = 0;}
}//接收
void UsartTX_Receive_String()
{ if(temp != 0) //接收到数据 { if(temp != '#') { ReceiveData[datanumber++] = temp; //一位一位读取//判输入指令,可更改指令if(datanumber==1&&(ReceiveData[0]=='b'||ReceiveData[0]=='B')){if(led2==1){ led2=0;UartTX_Send_String("蓝色亮\n",sizeof("蓝色亮\n")); }else{led2=1;UartTX_Send_String("蓝色灭\n",sizeof("蓝色灭\n")); }}else if(datanumber==1&&(ReceiveData[0]=='y'||ReceiveData[0]=='Y')){if(led1==1){ led1=0;UartTX_Send_String("黄色亮\n",sizeof("黄色亮\n")); }else{ led1=1;UartTX_Send_String("黄色灭\n",sizeof("黄色灭\n")); }}else if(datanumber==1&&ReceiveData[0]=='0'){led1=0;led2=0;UartTX_Send_String("全亮\n",sizeof("全亮\n")); } else if(datanumber==1&&ReceiveData[0]=='1'){led1=1;led2=1;UartTX_Send_String("全灭\n",sizeof("全灭\n")); } datanumber = 0;//重新计数 } temp = 0; }
} /****************************************************************
主函数
****************************************************************/
void main(void)
{ P1DIR = 0x03; //P1控制LEDled1 = 1;//全灭led2 = 1; initUART0();UartTX_Send_String(Recdata,sizeof(Recdata)); //把Recdata里面的字符串发送出去while(1);//一直运行}#pragma vector = URX0_VECTOR
__interrupt void URX0_ISR(void)
{ URX0IF = 0; //串口接收中断清零,准备下一次的数据接收 temp = U0DBUF; //将缓冲器中的数据保存到temp中 UsartTX_Receive_String();//接收并保存数据 }
连接好后,打开串口调试,打开串口,然后运行程序,就可以输入指令控制板子了get!٩( ‘ω’ )و