基于MSCOMM控件的VB程序收到89S52单片发送的数据,数量正确但是数值不对,请高手指点迷津!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于MSCOMM控件的VB程序收到89S52单片发送的数据,数量正确但是数值不对,请高手指点迷津!相关的知识,希望对你有一定的参考价值。

如题。
发送的数据为:0-255
收到的数据为:
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 81 92 93 84 95 96 87 88 99 9A 9B 9C 9D 8E 9F
90 91 82 83 94 85 86 97 88 89 9A 8B 8C 9D 9E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 A5 A6 B7 A8 A9 BA BB AC BD BE AF
A0 A1 B2 A3 A4 B5 A6 A7 B8 A9 AA BB BC AD BE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
D0 D1 D2 C3 C4 D5 C6 C7 D8 D9 CA DB DC CD DE DF
D0 C1 C2 D3 C4 C5 D6 C7 C8 D9 DA CB DC DD CE CF
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
F0 F1 F2 F3 E4 E5 F6 F7 E8 F9 FA EB FC FD EE FF
E0 F1 F2 E3 F4 E5 E6 F7 E8 E9 FA FB EC FD FE EF
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
VB程序为:
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = 2
MSComm1.InputLen = 1
MSComm1.InBufferSize = 512
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
MSComm1.InputMode = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim ii As Variant
Dim inbyte() As Byte
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputMode = comInputModeBinary
ii = MSComm1.Input
inbyte = ii
For I = 0 To UBound(inbyte)
If Len(Hex(inbyte(I))) = 1 Then
Text1.Text = Text1.Text & "0" & Hex(inbyte(I)) & " "
Else
Text1.Text = Text1.Text & Hex(inbyte(I)) & " "
End If
Next
End Select
End Sub

单片机程序为:
#include <reg51.h>
sbit ls1=P0^2; //个位
sbit ls2=P0^3; //十位
#define Out P1 //数据输出端

unsigned char Rxbuf;
unsigned char tab[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71; //共阳
//0 1 2 3 4 5 6 7 8 9 a b c d e f

void Init(void)

TMOD=0x20;
TR1=1;
TL1=TH1=0xfd; //9600bps/11.0592MHz //串口设置
SCON=0x50; //方式1/REN=1
PCON=0x00;

Delay(unsigned int t)

while(t--);

void Display(unsigned char mun)

unsigned char i1,i2,j;
i1=mun/16;
i2=mun%16;

for(j=0;j<50;j++)

Out=~tab[i1];
ls2=0;
Delay(50);
ls2=1;

Out=~tab[i2];
ls1=0;
Delay(50);
ls1=1;



main()

unsigned int i;
Init();

for(i=0;i<256;i++)

SBUF=i;
Display(i);

do

Display(i);

while(1);


到底是哪里的问题啊,请大侠指点小弟谢了!

没错呀

参考技术A 搞的什么东西,大哥看不懂! 参考技术B LZ的VB代码没问题.

Delphi MSComm 控件方法

技术图片

技术图片

 

以上是关于基于MSCOMM控件的VB程序收到89S52单片发送的数据,数量正确但是数值不对,请高手指点迷津!的主要内容,如果未能解决你的问题,请参考以下文章

VB6.0使用汇总

vb 中怎样发送十六进制数据

vb程序编写模拟串口

如何用VB做个简单的条码验证器,,扫描枪输入。。详情见图

使用C#实现串口通讯,接受和控制单片机。

VC 串口通信实现方式