⑴ 求VB高手,需要VB通过串口接收51单片机采集到的温度,并在VB上显示出来温度值,不需要曲线
仅供参考
Private Sub Form_Load()
Dim i As Integer
With MSComm1
If .CommPort <> 2 Then .CommPort = 2 '设置Com2为通信端口
.Settings = "9600,N,8,1" '设置通信端口参数 9600赫兹、无校验、8个数据位、1个停止位.(这里需要进一步说明的是:.Setting=”BBBB,P,D,S”。
'含义是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit)
.InBufferSize = 1024 '设置缓冲区接收数据为1024字节
.OutBufferSize = 512
.InputMode = comInputModeText '设置数据接收模式为16进制形式
.InputLen = 1 '设置Input一次从接收缓冲读取字节数为1
.RThreshold = 1 '设置接收一个字节就产生OnComm事件
.OutBufferCount = 0 '清空发送缓冲区
.InBufferCount = 0 '滑空接收缓冲区
If Not .PortOpen Then
.PortOpen = True '打开通信端口
End If
End With
⑵ 使用51单片机与PC进行串口通信时,怎么将一个温度值(带两位小数)发送到VB编写的上位机界面上显示
使用51单片机与PC进行串口通信时,需将一个温度值(带两位小数)按通信协议规范组成的数据帧发送到PC机,VB则按通信协议规范组成的数据帧编写的上位机程序,接收和处理数据帧,并显示于运行程序界面或控件上。
数据帧组成:分帧长、帧首、数据和帧尾等。
数据:
带两位小数的温度值发送需要制定好合适的数据约定,假释温度值是在1000摄氏度以内。
可以使将实际温度值乘100倍取整,以两字节的整形变量传送。
也可以使将实际温度值乘100倍取整,以5个ASCII字符直接传送。
51单片机按上述方案取一组成数据帧发送给上位机串口。
VB编写的上位机串口接收程序的数据接收处理代码,按下位机采取的数据约定和数据帧格式接收和处理数据,取出数据除以100,获得所需的带两位小数在程序界面显示。
需要注意的是整形变量方式接收需要按二进制模式接收,字符串方式接收以文本模式接收。
⑶ 这个单片机程序可以往VB里面传送数据 可以正常显示温度,但是发送到VB里边显示00
数据头校验加上AA,随便你加,解包的时候,判断这个标志位就行了,校验位,加不加都可以,常见的加奇偶校验,就是多发一个位过去,实际上串口一旦出错,都是很明显的错误,奇偶校验的作用非常小,串口常常都会收到多数据帧的情况,一般把这些筛选掉就可以了,想要安全,就考虑USB来,说一下你的程序。初步估计你这个程序本身就有问题, 程序发送出去的数据是否正确,这个很容易办,借助串口调试助手这个是很多工程师都在用的,就不用考虑PC接收数据部准确的情况,网上下一个,看电脑上显示的数据,是否正常。找出错误的原因,是在单片机发送程序还是你自己写的VB程序,个人感觉是你单片机端不正确,这个我没有运行你的程序,因为你前面提到一秒发送好多次数据。你的目的应该是想1S更新一次数据到电脑上去吧。也不排除VB端接收数据也出现了错误,
⑷ 我需要将单片机采集到的温湿度 通过485 传送到电脑上用VB做的上位机进行显示 请问vb与485这块要注意什么呢
单片机UART转RS485,即串口接一个MAX485就可以了
PC端需要用USB转RS485的模块
软件上只要具有统一的通信握手协议就可以了
⑸ vb进行编程,接收单片机发送来的数据温度和湿度,显示在指定文本里。
1.将单片机与PC 连接,并在计算机管理的硬件中找到端口为COM*的设备,USB的也一样
2.用MSCOMM控件进行连接,要点是要侦测到指定的端口和数据返回,意思是你要编写代码查询COM1-16号端口有没连接设备,并返回单片机传送的起始数据,
3.根据数据调用中断或者事件触发编程即可,非常简单。如手头没有单片机用手机即可。
⑹ 基于VB的单片机温度数据采集,将单片机数据送入VB时,数据要怎么处理,为什么VB会显示乱码
你的数据格式完全是数字的话,估计你发送的是ASCII码,每个字节减去48(十进制)就可以得到实际数字,比如收到0x34 0x33,各减去48得到21,21就是最终的值,不知道说清楚没有
⑺ 把单片机采集的温度经过串口传输到PC机上,在PC机上如何用VB做出曲线图显示温度的变化
根据从串口收到的温度值,一个一个的描点到曲线图,点多了就组成了曲线。
⑻ 做一个温度采集系统,程序是单片机温度显示部分可以正常显示温度,要把采集的温度发送到VB里,
回答1:
用串口前请初始化串口。
回答2:
看数据定义
float tp; //设定为单精度
display((uint) tp); //将单精度浮点型小数转换成无符号整型,这里会丢弃小数部分数据,但对tp本身无影响
send_char((uchar) tp);//将单精度浮点型小数转换成无符号字符型,尼玛还不是丢掉了小数部分。然后发送了个8位的tp过去。
回答3:
t1=(a&0x0f)*0.0625;//取小数部分
t=((b<<4)|(a>>4));//取整数部分
//尼玛你非得要这样表示小数?难道你就不可以用2个uchar接收小数和整数,然后去发送?
if(t>128)
{
t=t+1;
}
t=t+t1;
//上面是不是这个意思 如果整数部分大于128就让整数部分加1.如果不是那么就让整数部分加上小数部分。你的意思是不是大于128就不要小数了,小于128就要个小数。
解决方案先给我分我再给你附上代码
⑼ 用VB编写上位机界面, 将单片机传来的温度信号进行显示,界面包括温度曲线,当前温度,最高温度,急需。
这个不难,只不过现在没时间,需要的话,周末可以帮你编一个。