单片机增加LED状态的发送部分,上位机加了接收下位机回传的LED亮灭状态,并在界面上显示。
这次学会了SHAPE控件的使用。
VB的 形状(Shape)控件
作用:可以在Form中显示矩形、圆、椭圆等图形。
它就在默认控件里
在4 个按钮上方对应画出4 个指示灯
更改一些属性。FillColor 填充颜色 ,Heigh 高度改为300,比默认的小点,这样大小合适。Shape 形状 选3是圆形,其实这条是最先改的。
其中,0 长方形,1 正方形,2 椭圆,3 圆形,4 圆角长方形,5 圆角正方形 。这里选 的是3,画出圆形指示灯。
控件安好,就可以写代码了。( E:\DPJ\上下位机\VB\上下位机收发.vbp )
‘11.03.18
Private Sub Command1_Click()
MSComm1.Output = “1”
End Sub
Private Sub Command2_Click()
MSComm1.Output = “2”
End Sub
Private Sub Command3_Click()
MSComm1.Output = “3”
End Sub
Private Sub Command4_Click()
MSComm1.Output = “4”
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 4 ‘设置串口为com1
MSComm1.Settings = “9600,n,8,1″ ‘通讯参数 波特率 奇偶校验 数据位 停止位
MSComm1.InputMode = comInputModeBinary ‘二进制接收
MSComm1.PortOpen = True ‘打开串口
MSComm1.InBufferCount = 0 ‘清空接收缓冲区
MSComm1.RThreshold = 1 ‘缓冲区中接收到一个字符,就产生一次OnComm事件
End Sub
Private Sub MSComm1_OnComm() ‘有数据传送时触发
Dim indata As Variant ‘定义变量
Dim arr(0) As Byte ‘定义字节数组
Select Case MSComm1.CommEvent ‘CommEvent属性:返回最近的通讯事件或错误。通过对它具体属性值的查询,我们就可以获得通讯事件和通 讯错误的完整信息。当其值是comEvReceive时表示接收到数据。
Case comEvReceive ‘有接收事件
indata = MSComm1.Input ‘接收到的数据存放到indata里
arr(0) = AscB(indata) ‘返回indata的值
MSComm1.InBufferCount = 0 ‘清空接收缓冲区
End Select
If arr(0) = 49 Then ‘很不明白,上位机发的是”1″,收到的却是49
Shape1.FillColor = &HFF& ‘红色,表示灯亮
ElseIf arr(0) = 0 Then ‘这里如不用0 ,则下位机不能灭灯,不知何故
Shape1.FillColor = &HE0E0E0 ‘灰色,表示灯灭
ElseIf arr(0) = 50 Then ‘上位机发”2″,收到的是49+1=50 。以下同此
Shape2.FillColor = &HFF&
ElseIf arr(0) = 10 Then
Shape2.FillColor = &HE0E0E0
ElseIf arr(0) = 51 Then
Shape3.FillColor = &HFF&
ElseIf arr(0) = 20 Then
Shape3.FillColor = &HE0E0E0
ElseIf arr(0) = 52 Then
Shape4.FillColor = &HFF&
ElseIf arr(0) = 30 Then
Shape4.FillColor = &HE0E0E0
End If
End Sub
单片机程序:(E:\DPJ\上下位机\SXWJ收发.ASM)
;2011.03.18 完成
;PC控制单片机LED并返回上位机
ORG 00H
AJMP MAIN
ORG 23H
AJMP URT
ORG 30H
MAIN:
LCALL URTINIT ;调用串口初始化子程序
AJMP $
URTINIT:
MOV SCON,#50H ;串口工作方式1
MOV TMOD,#20H ;T1工作方式2
MOV TL1,#0FDH ;11.0592MHz,9600
MOV TH1,#0FDH
SETB TR1 ;开启定时器
SETB ES ;开启串口中断
SETB EA ;开总中断
RET
URT: ;串口中断子程序
MOV A,SBUF ;单片机接收
CJNE A,#”1″,U1 ;收到ASCII码 1,P1.0 求反
CPL P1.0
JNB 90H,U1 ;90H~93H为P1.0~P1.3的地址,为1时,LED灭 。
MOV A,#0 ;同时送 0 到A,待送SBUF发送
U1:
CJNE A,#”2″,U2
CPL P1.1
JNB 91H,U2
MOV A,#10
U2:
CJNE A,#”3″,U3
CPL P1.2
JNB 92H,U3
MOV A,#20
U3:
CJNE A,#”4”,U4
CPL P1.3
JNB 93H,U4
MOV A,#30
U4:
CLR RI ;清接收中断标志
SEND:
CLR TI
MOV SBUF,A ;单片机执行这条写数据发送缓冲器SBUF的指令,就启动发送,数据通过串口发送出去
JNB TI,$ ;未发完,等待发完
CLR TI
RTI: RETI
END