如代码所示,我通过串口发送buzz on,7蜂鸣器不响,试过buzz on,6buzz on,12buzz on,14buzz on,24buzz on,28buzz on,48buzz on,56都返回bad command.代码老师说没有问题,请问buzz on数据长度是多少?我应该发送buzz on,?
buzz on,6
buzz on,12
buzz on,14
buzz on,24
buzz on,28
buzz on,48
buzz on,56
void UartAction(unsigned char *buf, unsigned char len)
{ unsigned char i; unsigned char code cmd0[] = "buzz on"; //开蜂鸣器命令 unsigned char code cmd1[] = "buzz off"; //关蜂鸣器命令 unsigned char code cmd2[] = "showstr "; //字符串显示命令 unsigned char code cmdLen[] = { //命令长度汇总表 sizeof(cmd0)-1, sizeof(cmd1)-1, sizeof(cmd2)-1, }; unsigned char code *cmdPtr[] = { //命令指针汇总表 &cmd0[0], &cmd1[0], &cmd2[0], }; for (i=0; i<sizeof(cmdLen); i++) //遍历命令列表,查找相同命令 { if (len >= cmdLen[i]) //首先接收到的数据长度要不小于命令长度 { if (CmpMemory(buf, cmdPtr[i], cmdLen[i])) //比较相同时退出循环 { break; } } } switch (i) //循环退出时i的值即是当前命令的索引值 { case 0: flagBuzzOn = 1; //开启蜂鸣器 led = 0; break; case 1: flagBuzzOn = 0; //关闭蜂鸣器 break; case 2: buf[len] = '\0'; //为接收到的字符串添加结束符 LcdShowStr(0, 0, buf+cmdLen[2]); //显示命令后的字符串 i = len - cmdLen[2]; //计算有效字符个数 if (i < 16) //有效字符少于16时,清除液晶上的后续字符位 { LcdAreaClear(i, 0, 16-i); } break; default: //未找到相符命令时,给上机发送“错误命令”的提示 UartWrite("bad command.\r\n", sizeof("bad command.\r\n")-1); return; } buf[len++] = '\r'; //有效命令被执行后,在原命令帧之后添加 buf[len++] = '\n'; //回车换行符后返回给上位机,表示已执行 UartWrite(buf, len); }