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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
VB与51单片机通信若干问题
$ `6 O* w) z5 ?6 v' \6 K
* ~) r: _( t0 R1 }- D% N8 d$ n

# H5 _9 Q% W5 h7 y: H/ i最近在搞一个车库上位机的,用VB编写。上位机界面如图:
8 S+ K8 M3 \1 x+ z/ o9 D0 p1 s8 q3 { $ R  B! u2 }4 P; f+ |, v

- A, ?- e8 O1 a" g3 p2 s! U& q问题1:当单片机P21脚检测到低电平时,通过串口,发送“si ”,在上位机对应位置显示“是”,表示车已经进库。% `4 H0 I3 p6 @6 Y
因为我的这道检测程序是放在while(1)里面的,单片机不断检测,当P21为0时,单片机不断发送“si ”,而上位机对应位置则
& r$ u  B& M/ G+ T- m/ R, U$ ^交替显示“是”和"否"(默认),而我只想要第一次接收到的“si ”,从而当P21=0时,只能显示"是",怎么解决。以下是部分程序:
, j; j9 o* Q! R( O4 qVB:Dim rec As String& v  k3 e* H6 J+ V% o6 q" I0 z
Select Case MSComm1.CommEvent
, ~  F% A6 M% iCase comEvReceive
- B2 g* ~; P+ o- drec = MSComm1.Input
% s( F' t2 S& ]51: while(1)& ]/ i9 W2 Q* J2 m0 h" q0 s
         {4 M5 H5 E0 X" I9 Z  B, S8 L
                 if(miso==0)9 a" T  K  O; }" V5 r
                {
& X: }" l9 H- w6 q- n9 C9 U! l1 g                        for(i=0;i<3;i++)) Z% f& W  ?4 i$ y0 H8 S- L2 c7 G- H5 m
                        {' S' m$ H! t% x* p& W: Q2 }  _) Q
                                SBUF=table1;         //串口发送标志位,table1[]="si "
/ F' l& w4 a! ^                                while(!ti);2 j: m: M" W5 `# h
                                TI=0;$ @$ I5 h; h9 Y! m
                        }
8 e2 q3 T7 W! y% b& g- \* q( W        //        miso=1;//已经进库则清除标志
( K9 N  P6 ?- V1 I) K4 `* ?5 G( }                }: [% s9 \% n$ w& O+ d' o$ F
                8 ~0 P# }8 o/ t7 Z
        }- I3 f4 I# G0 a) u
问题2:我想只有当按了路线1按钮后,并且rec=“si ”时,text1.text="是";当按了路线2按钮时,并且rec="si "时,text2.text="是"/ n4 e6 k. k) k+ w
怎么编程?以下是我的一个程序:  Y% v* d% e* g2 x. \* H! \
Private Sub Command1_Click()
* B: {% O! u1 [7 ~2 g$ _MSComm1.OutBufferCount = 07 l: m% p! r& c. G9 w
MSComm1.Output = Chr(&HC)
" k* R4 j; T4 pa = 1
4 c) Z1 J0 z" p8 g  V; H2 a. K9 B'If rec = "si " Then* T+ k  {, r, Z9 E: m% s
'Text1.Text = "是"
5 |7 Q# g6 v& f3 q. s'End If* z. _8 K. }0 U9 L8 r
End Sub

9 p) J. _( D; S" x

该用户从未签到

2#
发表于 2019-4-9 10:01 | 只看该作者
unsigned char *r;9 t4 g$ [- M( o, d7 V" w8 O" N) Z# Q
r = table1;                 
& K1 g! i! S# fif(miso==0)
5 d2 K/ R# ^) g, C: B{
1 t1 w. W; _1 j8 G3 m: k  while(*r != '\0')                  
7 C; }& n4 Z  B( r+ W0 @  {3 Z2 R9 E/ m# {7 S3 o
  SBUF=table1;         //串口发送标志位,table1[]="si "
' N8 p0 t" a% X# K1 M1 O" X+ B  r++;  & r) }: u5 \) B' a; N$ ^
}//ASCII编码,只要发送's'和'i'两个不能你那样循环。1 H3 v! z$ {& e$ ^* G
while(!TI);
- ]& W2 X! k  E( J& YTI=0;6 Z& C) o0 G' X, z
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-4 22:10 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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