1、学习strstr函数、strcmp函数
(1)strstr函数:
原型:strstr(const char *haystack, const char *needle):
功能:在字符串中查找第一次出现指定字符c的位置。
返回值:指向第一次出现指定字符的指针,如果未找到则返回NULL。如:strstr(str1,str2)用于判断字符串str2是否是str1的子串。
(2)strcmp函数 原型:strncmp(const char *str1, const char *str2, size_t n)
功能:比较str1,str2前n个字符是否相同;
返回值:整数值,当str1<str2时返回值小于0,当str1==str2时返回值等于0,当str1>str2时大于0。
2、在这里我们使用strstr函数比较电脑发送过去的指令与我们设置的值进行比较,来控制开发板上LED灯的亮与灭。 (1)代码:
int main(void)
{
//局部变量定义数组不能太大,防止程序卡死
int cnt=0;
KEY_Init();
LED_Init();
USART1_Init(115200);
while(1)
{
//程序主函数中只能写一个死循环,其他函数采用轮询的方式
if(USART1->SR&1<<5)//表示接收到了数据
{
buff_rx[cnt]=USART1->DR;//读了寄存器就相当于标志寄存器位已经清零,不需手动清零
if(buff_rx[cnt]=='\n')
{
buff_rx[cnt-1]='\0';//添加结束符
cnt=0;//下标归0,方便下次接收
//开启LED0
if(strstr((const char*)buff_rx,"LED0_ON")!=NULL)
{
LED0=1;
}
if(strstr((const char*)buff_rx,"LED0_OFF")!=NULL)
{
LED0=0;
}
//开启LED0
if(strstr((const char*)buff_rx,"LED1_ON")!=NULL)
{
LED1=1;
}
if(strstr((const char*)buff_rx,"LED1_OFF")!=NULL)
{
LED1=0;
}
}
else
{
cnt++;
}
}
}
}
(2)、实验效果 代码执行前:
发送指令:
指令接收后: