初级会员

- 积分
- 127
- 金钱
- 127
- 注册时间
- 2016-6-1
- 在线时间
- 32 小时
|
发表于 2018-10-6 10:19:47
|
显示全部楼层
本帖最后由 xupc 于 2018-10-6 10:21 编辑
这就是C语言字符串操作的问题了,下面是我的某个程序的一部分。根据需要,还可以比较收到的字符串的某一位是什么来确定功能。多看看C语言的字符串拷贝、字符串比较,不分大小写字符串比较等函数。
这里面有个简单协议,如果是S表示命令起始位,如果是E表示命令信息传送完毕,比如"Sopen_beepE",也可以用其他协议或者无协议。
void USART3_IRQHandler(void)
{
u8 rec_data;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //½ÓÊÕÖжÏ
{
rec_data =(u8)USART_ReceiveData(USART3); //(USART1->DR) ¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý
if(rec_data=='S') //Èç¹ûÊÇS£¬±íʾÊÇÃüÁîÐÅÏ¢µÄÆðʼλ
{
uart_byte_count=0x01;
}
else if(rec_data=='E') //Èç¹ûE£¬±íʾÊÇÃüÁîÐÅÏ¢´«Ë͵ĽáÊøÎ»
{
if(strcmp("open_beep",(char *)receive_str)==0) BEEP=1; //·äÃùÆ÷Ïì
else if(strcmp("close_beep",(char *)receive_str)==0) BEEP=0; //·äÃùÆ÷²»Ïì
for(uart_byte_count=0;uart_byte_count<32;uart_byte_count++) receive_str[uart_byte_count]=0x00;
uart_byte_count=0;
}
else if((uart_byte_count>0)&&(uart_byte_count<=UART3_REC_NUM))
{
receive_str[uart_byte_count-1]=rec_data;
uart_byte_count++;
}
}
}
|
|