找回密码
 注册
关于网站域名变更的通知
查看: 474|回复: 1
打印 上一主题 下一主题

VB与51单片机通信若干问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-9 09:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
VB与51单片机通信若干问题8 X8 g! B3 s* b! t% @
, e+ m8 W3 Y4 J- q
4 I& G( ^& t9 Y4 U
最近在搞一个车库上位机的,用VB编写。上位机界面如图:
  `# k# [. M& l/ s2 j7 b" j ) v- Y7 J$ H! x2 h
$ h/ r- ]* f+ E  E
问题1:当单片机P21脚检测到低电平时,通过串口,发送“si ”,在上位机对应位置显示“是”,表示车已经进库。5 G: f9 ~0 f' b+ A( j+ L0 Y; e
因为我的这道检测程序是放在while(1)里面的,单片机不断检测,当P21为0时,单片机不断发送“si ”,而上位机对应位置则
: @9 u; r% j# N9 J  X4 M交替显示“是”和"否"(默认),而我只想要第一次接收到的“si ”,从而当P21=0时,只能显示"是",怎么解决。以下是部分程序:! ^2 F/ K$ T# j$ ?5 ]) d
VB:Dim rec As String0 G! `* V7 P/ G
Select Case MSComm1.CommEvent5 {7 `& n3 L$ u1 ^$ N
Case comEvReceive
! M: G' U9 r( l/ \rec = MSComm1.Input
" m7 x' }" d. m% d+ U3 [0 Y51: while(1)
& {4 V4 W# G7 ?8 V9 Q2 m2 ?         {
% l8 w6 ?7 e6 A( k  k9 E4 v                 if(miso==0)
& F2 [0 B5 U# O                {' `6 I' G9 q' r# p" j6 w
                        for(i=0;i<3;i++)
1 L. z1 Y& P8 ]; Q                        {* F* k% Q. [/ v* x! R0 H9 v1 Y! T
                                SBUF=table1;         //串口发送标志位,table1[]="si ": A2 y( o0 o& D, C
                                while(!ti);6 J, r2 r% P+ @- v: I
                                TI=0;
1 V7 P: y* Y- |- D6 ~# c# U) a" o                        }3 B( m. h" r3 r/ p+ x( @$ ~+ x2 j
        //        miso=1;//已经进库则清除标志% D) {( C8 R7 `7 A0 {
                }- u; n6 v$ }1 q% C5 n
                8 Z" I0 z. U1 V
        }
) y) s7 I4 w5 \7 S; L4 U问题2:我想只有当按了路线1按钮后,并且rec=“si ”时,text1.text="是";当按了路线2按钮时,并且rec="si "时,text2.text="是"
  Y0 W% j( v/ N) b  b怎么编程?以下是我的一个程序:8 ?) b+ C% J- @1 }/ ?7 X
Private Sub Command1_Click()- X, \( ~" W( U/ [% Z7 A, j) z
MSComm1.OutBufferCount = 0
) A+ C* k- F( aMSComm1.Output = Chr(&HC)
( D$ J! T' r8 N4 ~: h5 Xa = 1& o1 ~2 _) ~9 L6 K+ ~
'If rec = "si " Then
4 m2 l9 b' C8 K" D8 e'Text1.Text = "是"
1 v$ r# f8 y- ~4 L7 z/ d9 l+ R'End If
' C  b9 o4 l* f' ^0 f, GEnd Sub
# I% R3 _' i& v1 J

该用户从未签到

2#
发表于 2019-4-9 10:01 | 只看该作者
unsigned char *r;
+ r+ }: b1 |8 E/ ?5 Or = table1;                 
2 H+ ~, N8 r$ i  i3 N/ Mif(miso==0)
" Y0 c- a4 g, ]' G& ]" U. Z2 l{* m3 K. U) [9 l) y1 A! y$ j
  while(*r != '\0')                   ( w( C( U, f; c( q- G
  {4 f' j/ j0 s  s$ l- I
  SBUF=table1;         //串口发送标志位,table1[]="si "
3 M4 J& S% r; L# g; }  r++;  - \0 p+ P1 @, ^& v8 s! g& n
}//ASCII编码,只要发送's'和'i'两个不能你那样循环。( Y+ x! C) |* |  s5 u
while(!TI);
6 |9 a+ L3 e7 K: z2 f+ Q2 tTI=0;7 C  T. U' K7 d( k9 ]
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-14 05:39 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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