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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

2#
发表于 2019-4-9 10:01 | 只看该作者
unsigned char *r;: j7 U2 z  e9 _3 h' a( @9 _+ z
r = table1;                 
8 j2 d  E! ~; v) B, Tif(miso==0)
$ X& }4 D& d: k! _( F. A{
" ?- W3 Z% A9 r' H  while(*r != '\0')                   6 E! B: `  a5 p; U
  {7 |# I0 c$ j. U, y4 F. Z
  SBUF=table1;         //串口发送标志位,table1[]="si "3 s) x3 E1 r  U8 z
  r++;  * X& i( F8 A# n$ @+ a
}//ASCII编码,只要发送's'和'i'两个不能你那样循环。
6 Q% @7 }0 E0 m& ^7 Ewhile(!TI);+ u; f6 J7 x0 k3 p7 M+ l
TI=0;) c& @" A2 C& R2 I; k3 D4 t# a$ t
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 06:41 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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