发 帖  
原厂入驻New
[问答]

单片机隔半秒发送数据搞的VB界面显示的波形很乱的解决办法?

204 单片机
分享
谁有串口接收请求之后,发送数据的例程,
小弟现在只会单片机隔半秒发送数据搞的VB界面显示的波形都很乱。
0
2020-7-23 07:53:35   评论 分享淘帖 邀请回答
17个回答
哦,就是实验3,串口实验,还有些不懂诶
2020-7-23 07:23:02 评论

举报

我VB发送1、2、3等数值单片机分别发送通道1、2、3等的数据,这些如何搞?还有0x0d,0x40这种是什么意思?
2020-7-23 07:42:19 评论

举报

2020-7-23 08:01:38 评论

举报

我的代码需要加入回车才能返回的.
2020-7-23 08:18:48 评论

举报

就是现在我的单片机是就如下发送。而VB是发送1、2、3、4等数值请求,要单片机再分别返回8通道的数值。
现在这样就是没有应答请求,直接每隔半秒发送,使得我的VB显示很乱。
          printf(" AD value1 = %4.2fV \r\n", AD_value1);
  delay_ms(500);
  printf(" AD value2 = %4.2fV \r\n", AD_value2);
  delay_ms(500);
  printf(" AD value3 = %4.2fV \r\n", AD_value3);
  delay_ms(500);
  printf(" AD value4 = %4.2fV \r\n", AD_value4);
  delay_ms(500);
  printf(" AD value5 = %4.2fV \r\n", AD_value5);
  delay_ms(500);
  printf(" AD value6 = %4.2fV \r\n", AD_value6);
  delay_ms(500);
  printf(" AD value7 = %4.2fV \r\n", AD_value7);
  delay_ms(500);
  printf(" AD value8 = %4.2fV \r\n", AD_value8);
2020-7-23 08:27:14 评论

举报

 就是现在我的单片机是就如下发送。而VB是发送1、2、3、4等数值请求,要单片机再分别返回8通道的数值。 现在这样就是没有应答请求,直接每隔半秒发送,使得我的VB显示很乱。           printf(" AD value1 = %4.2fV \r\n", AD_value1);   delay_ms(500);   printf(" AD value2 = %4.2fV \r\n", AD_value2);   delay_ms(500);   printf(" AD value3 = %4.2fV \r\n", AD_value3);   delay_ms(500);   printf(" AD value4 = %4.2fV \r\n", AD_value4);   delay_ms(500);   printf(" AD value5 = %4.2fV \r\n", AD_value5);   delay_ms(500);   printf(" AD value6 = 
......
---------------------------------
你把原子哥的串口通讯理解清楚了,你的问题就解决了,我就是这么过来的,呵呵
通讯协议可以自己定义
2020-7-23 08:37:59 评论

举报

0x0d  这个就是定义回车吗
2020-7-23 08:44:20 评论

举报

注释有说:回车=0X0D+0X0A
2020-7-23 08:57:31 评论

举报

原子哥,我现在已经可以串口助手发送1,单片机返回1通道数据;程序如下。但是发送一次它只返回一个数据,咋么写它才会当串口助手发送1时,它不停的发送1通道的数据;当串口助手发送2时,它不停的发送2通道的数据
u8  RX_status;
if(USART_GetITStatus(USART1, USART_IT_RXNE))
   { RX_status = (USART_ReceiveData(USART1));
if(RX_status =='1')
  { printf(" %4.2fV \r\n", AD_value1);
   }
if(RX_status =='2')
  { printf(" %4.2fV \r\n", AD_value2);
   }
   if(RX_status =='3')
  {printf(" %4.2fV \r\n", AD_value3);
    }
   if(RX_status =='4')
  { printf(" %4.2fV \r\n", AD_value4);
  }
  if(RX_status =='5')
  { printf(" %4.2fV \r\n", AD_value5);
  }
  if(RX_status =='6')
  { printf(" %4.2fV \r\n", AD_value6);
   }
  if(RX_status =='7')
  { printf(" %4.2fV \r\n", AD_value7);
  }
  if(RX_status =='8')
  { printf(" %4.2fV \r\n", AD_value8);
  }
   USART_ClearITPendingBit(USART1, USART_IT_RXNE);
   
   }
2020-7-23 09:11:10 评论

举报

不停发,就得发死循环中。
2020-7-23 09:23:43 评论

举报

写错了。
是放死循环中。
2020-7-23 09:35:41 评论

举报

你用状态判断,判断完发一次,然后清状态了。
在串口中断设置一个标志,接收到1,然后标志置1.
在主循环中判断标志为1,不停发就可以了。
1, bool  CommRecFlag =0;
2,中断接收成功 CommRecFlag =1;
3,在main  
     while(1)
{
if(CommRecFlag ==1) 
  {  
printf(" %4.2fV \r\n", AD_value1); 
   } 
}
2020-7-23 09:55:23 评论

举报

2020-7-23 10:04:31 评论

举报

这个已经在while(1)中了
2020-7-23 10:10:24 评论

举报

这个已经在while(1)中了啊
2020-7-23 10:17:46 评论

举报

2020-7-23 10:23:28 评论

举报

那这8个是否要标志8个
2020-7-23 10:35:56 评论

举报

只有小组成员才能发言,加入小组>>

86个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表