EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
VB与51单片机通信若干问题
5 [' j2 _1 o8 G' P; `% @9 m
7 Q S% F+ H( i* ^6 u. m% Z4 v$ B5 P: [3 Q; M, D! H/ f
最近在搞一个车库上位机的,用VB编写。上位机界面如图:
- x3 v% n, p; Q( [3 K5 L5 i
9 i8 S9 ]) I& {$ V) l4 L
$ x) G/ H* w( t- I
问题1:当单片机P21脚检测到低电平时,通过串口,发送“si ”,在上位机对应位置显示“是”,表示车已经进库。# A+ E9 [- T9 D- M7 F& I/ {' ~- A
因为我的这道检测程序是放在while(1)里面的,单片机不断检测,当P21为0时,单片机不断发送“si ”,而上位机对应位置则! ]% {7 b7 _: s# }4 n- c
交替显示“是”和"否"(默认),而我只想要第一次接收到的“si ”,从而当P21=0时,只能显示"是",怎么解决。以下是部分程序:& P7 T) ^4 \; n! x9 m
VB:Dim rec As String
/ L6 [ }* y: w' A# ^5 Y8 k1 FSelect Case MSComm1.CommEvent
( J6 R* p g- r, }/ e' ECase comEvReceive
: t+ }/ S W' o5 p- u) {rec = MSComm1.Input
% Q- M; g. A: o' _51: while(1)
( ` W1 i' S7 N$ j {) ^ l* l, J3 Z1 }
if(miso==0)8 _% ?8 `: g; |% `" ?2 s- \) l" [
{, k8 ]6 Y, V& |$ M |
for(i=0;i<3;i++)9 L: V3 _. h+ n1 Y
{# `/ S$ N( s2 \% H3 P
SBUF=table1; //串口发送标志位,table1[]="si "" ~- o$ O6 E |2 Q/ F6 C9 V
while(!ti);
* y3 v( n0 M6 m, p) j7 A) |. s TI=0;% _, R. h% R1 H+ y
}3 F, {& |# O7 }' y& Q, H& R
// miso=1;//已经进库则清除标志
! h! Z0 v$ g9 ?* u3 n7 N: J }
! C5 D8 J3 d# J& }: ^$ C
6 m8 P2 c+ ^1 P7 ~: G }
% d* n5 c) j" B问题2:我想只有当按了路线1按钮后,并且rec=“si ”时,text1.text="是";当按了路线2按钮时,并且rec="si "时,text2.text="是"/ v# i- U8 W0 Z! f- Z9 D
怎么编程?以下是我的一个程序:
6 s4 i. ?+ @& R& qPrivate Sub Command1_Click()5 }4 \2 _' ^6 x4 |7 r$ p
MSComm1.OutBufferCount = 0- |- e$ N+ O* O; C/ o! O; o
MSComm1.Output = Chr(&HC)7 ]+ }1 Q2 t. s: S9 W9 L
a = 1
% ]' {/ B) T6 E$ m/ I# f. ?9 Q1 J'If rec = "si " Then7 c1 j2 T6 N7 J$ S% k. y" d# f
'Text1.Text = "是"
- \. t& H8 D ^; `- R* X% i'End If
4 b5 X8 |/ K9 ~* oEnd Sub
2 E+ R6 \( I5 B# }$ n8 l6 R" R; q |