EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VB与51单片机通信若干问题: A4 M/ e+ o; F$ g+ j
1 ?1 V+ b4 X+ r
7 X9 y2 P& m2 E5 a) A9 _- |" f最近在搞一个车库上位机的,用VB编写。上位机界面如图:
# T- F- J8 W2 W& ^5 [
$ `# P" r. u# l9 {5 h3 V5 e$ V" J( P, S/ b+ Q, i
问题1:当单片机P21脚检测到低电平时,通过串口,发送“si ”,在上位机对应位置显示“是”,表示车已经进库。! `0 H4 p9 o& i# y
因为我的这道检测程序是放在while(1)里面的,单片机不断检测,当P21为0时,单片机不断发送“si ”,而上位机对应位置则" j# @; X/ E# S: H& z0 b- K
交替显示“是”和"否"(默认),而我只想要第一次接收到的“si ”,从而当P21=0时,只能显示"是",怎么解决。以下是部分程序:8 {( a$ c0 T. q) o' c" \, ^( v
VB:Dim rec As String% a4 H) v* L" d+ i) p+ y0 }" f! A ^( `
Select Case MSComm1.CommEvent! V5 T2 r `8 @. Q, {
Case comEvReceive
* @: C( b: ~! o3 n( G! K7 yrec = MSComm1.Input
/ `, F& S) D8 }: S' p3 A4 i \ Q& ?51: while(1)
: t% r, E* I; \& c* ^2 { {
! B4 j) q: I' g. c, r* X, X if(miso==0)7 C- Z8 Z% _% t2 j: G- ?8 h; x6 v
{
+ {2 @! S. F, r for(i=0;i<3;i++)8 D9 V/ k% n+ W7 B' d9 @4 q
{( f0 g! ~# B. X! `
SBUF=table1; //串口发送标志位,table1[]="si "8 m6 q; h2 }2 Y/ L
while(!ti);: g4 v0 o) n# Z# _ I
TI=0;
2 h9 Q- j0 ]3 Q: f: o- Y }( \$ {0 k8 r- {7 e
// miso=1;//已经进库则清除标志; s; g# |% I" D2 Y" v1 }* } i
}
# P' F* W/ E6 j5 z8 G8 X! _# o/ \
; x% E' n& M2 H$ Y9 ^& B' R% S }
# B! V( I4 p$ `" w" H+ [问题2:我想只有当按了路线1按钮后,并且rec=“si ”时,text1.text="是";当按了路线2按钮时,并且rec="si "时,text2.text="是"
, P( D3 y' n8 G* L! \; i0 X- d怎么编程?以下是我的一个程序:8 `% r# b. o# X h
Private Sub Command1_Click()2 Q) p. u6 {7 @: M0 ^5 L
MSComm1.OutBufferCount = 0
. o6 q j( u' y) i' YMSComm1.Output = Chr(&HC)8 y w, o! N% o
a = 1
+ q) t! h8 ~& \0 s) Z'If rec = "si " Then
. @9 @2 d) G4 Y1 E' z6 o'Text1.Text = "是"; F& a* S: o) F6 Z9 d
'End If
- `2 f, [* C# O1 _0 N: K4 [End Sub
. c# {7 |- Q4 ^6 A& ?% S7 z |