VB和单片机串口通信实训报告Word格式文档下载.docx
《VB和单片机串口通信实训报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VB和单片机串口通信实训报告Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
Label2.Caption=0
time=0
Picture1.SetFocus'
开始
Timer1.Enabled=True'
小球移动
Timer2.Enabled=True'
计时开始
p_life=3'
显示生命数3条
gameover.Visible=False'
隐藏游戏结束文本
Label6.Caption=2'
生命值减一
k=True
Command3.Enabled=True
DengJ=0
EndSub
'
结束按钮
PrivateSubCommand2_Click()
End
PrivateSubCommand3_Click()
IfCommand3.Caption="
暂停"
Then
p_status=0
Timer1.Enabled=False
Timer2.Enabled=False'
把定时器都关闭
Timer3.Enabled=False
Label8.Visible=True'
游戏暂停文本
Command1.Enabled=False
Command2.Enabled=False
Command3.Caption="
继续"
Else
Picture1.SetFocus
Timer1.Enabled=True
Timer2.Enabled=True
Timer3.Enabled=True
Label8.Visible=False
Command1.Enabled=True
Command2.Enabled=True
EndIf
PrivateSubForm_Load()
MSComm1.PortOpen=True
dangb.Left=3120'
挡板位置初始化
gameover.Visible=False
Timer2.Enabled=False
Label4.Caption="
"
Label6.Caption=3
Command3.Enabled=False
score=0
M=0
shape1.Left=dangb.Left+dangb.Width/2-200'
球位置初始化
shape1.Top=dangb.Top-shape1.Height
x=False
y=False
Fori=0To30'
检查砖块
bk(i).Visible=True
Nexti
Timer4.Enabled=False
Timer5.Enabled=False
PrivateSubMSComm1_OnComm()
ST=MSComm1.Input
IfST="
E"
Then'
游戏开始
IfDengJ=1Then
CallCommand1_Click
F"
游戏暂停
Ifp_status=1Then
N=N+1
IfN=2Then
N=0
G"
End
IfST=0Then
EndIf
A"
按下A左移
Timer4.Enabled=True
CallTimer4_Timer
C"
按下C右移
Timer5.Enabled=True
CallTimer5_Timer
H"
ThenM=M+1
I"
ThenM=M-1
IfM=1ThenOption1.Value=True:
Option3.Value=False:
Option2.Value=False
IfM=2ThenOption1.Value=False:
Option2.Value=True:
Option3.Value=False
IfM=3ThenOption3.Value=True:
Option2.Value=False:
Option1.Value=False
IfM>
3ThenM=3
IfM<
0ThenM=1
PrivateSubOption1_Click()
Timer1.Interval=150
Timer3.Interval=75
Command1.Enabled=True
DengJ=1
PrivateSubOption2_Click()
Timer1.Interval=100
Timer3.Interval=50
PrivateSubOption3_Click()
Timer1.Interval=50
Timer3.Interval=25
PrivateSubPicture1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
key=KeyCode
SelectCaseKeyCode
Case37'
如果按下左,使板子向左移动
Ifdangb.Left<
=0Then
dangb.Left=0
dangb.Left=dangb.Left-300
Case39'
如果按下右,使板子向右移动
Ifdangb.Left>
=7935-dangb.WidthThen
dangb.Left=7935-dangb.Width
dangb.Left=dangb.Left+300
EndSelect
EndSub'
鼠标控制
PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Ifx<
0Then
x=0
Ifx>
7935Then
x=7935
dangb.Left=x-dangb.Width/2
PrivateSubTimer1_Timer()
Ifp_status=1Then
Ifx=FalseThen
shape1.Left=shape1.Left-200
shape1.Left=shape1.Left+200
EndIf
Ify=FalseThen
shape1.Top=shape1.Top-200
shape1.Top=shape1.Top+200
Ifshape1.Top+shape1.Height>
=dangb.TopAndshape1.Left<
=dangb.Left+dangb.WidthAndshape1.Left>
=dangb.Left-shape1.WidthTheny=False
'
碰到挡板反弹
Ifshape1.Top<
=0Theny=True
Ifshape1.Left<
0Thenx=True
Ifshape1.Left+400>
=Picture1.WidthThenx=False'
碰墙反弹,上左右三个方向
Ifshape1.Top+400>
=dangb.Top+dangb.HeightThen'
小球掉落至挡板下方
p_life=p_life-1
Label6.Caption=Val(Label6.Caption-1)
Callcheck_bricks
检查是否打到砖块
IfLabel6.Caption<
gameover.Visible=True
Label6.Caption="
MSComm1.PortOpen=False
EndSub
PrivateSubTimer2_Timer()'
计时程序
time=time+1
Label4.Caption=Str(time)+"
秒"
检查是否打到砖块
PrivateSubcheck_bricks()
Dimi%,d%,c%,flag%
31块砖头
Ifbk(i).Visible=TrueAndshape1.Left-200>
bk(i).LeftAndshape1.Left+200<
bk(i).Left+bk(i).WidthAnd_
shape1.Top<
bk(i).Top+bk(i).HeightThen
Ifk=TrueThen
Zhuank=1
G=i'
记录第几块砖头被打中
y=Noty
ExitFor
CallTimer3_Timer
砖块下落
PrivateSubTimer3_Timer()
IfZhuank=1Then
k=False
bk(G).Top=bk(G).Top+150
Callcheck'
检查砖块下落地方
PrivateSubcheck()
Dimc%
Ifbk(G).Top>
=dangb.Top+dangb.HeightThenbk(G).Visible=False'
砖块掉落时就消失
砖块掉落到挡板上时加分同时也消失掉
Ifbk(G).Visible=TrueAndbk(G).Top>
dangb.Top-bk(G).HeightAndbk(G).Left>
dangb.Left-bk(G).WidthAndbk(G).Left<
dangb.Left+dangb.WidthThen
bk(G).Visible=False
score=score+10
Label2.Caption=score
Ifbk(G).Visible=FalseThenk=True
检查是否还有砖块
flag=0
Ford=0To30
Ifbk(d).Visible=TrueThen
flag=1
Nextd
Ifflag=0Thenc=MsgBox("
你输了!
vbInformation,"
结果"
)
Ifi=1ThenEnd
PrivateSubTimer4_Timer()'
单片机左移
dangb.Left=dangb.Left-100
=0Thendangb.Left=0
PrivateSubTimer5_Timer()'
单片机右移
dangb.Left=dangb.Left+100
Ifdangb.Left>
=7935-dangb.WidthThendangb.Left=7935-dangb.Width
2、单片机程序代码
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H
MOVSCON,#50H;
8位异步通信
MOVPCON,#80H;
SMOD为1
MOVTMOD,#20H;
定时器1为模式2
3、MOVTH1,#0F4H;
装初始值
MOVTL1,#0F4H
SETBTR1
SCANING:
MOVP0,#00H
MOVP2,#0FFH
CLRP2.2;
扫描键盘
JNBP2.4,AN1
JNBP2.7,AN2
JNBP3.2,AN3
JNBP3.3,AN4
JNBP3.4,AN5
JNBP2.5,AN6
JNBP2.6,AN7
SJMPSCANING
AN1:
LCALLDELAY1
MOVSBUF,#041H;
发送A
PAN0:
JBCTI,GOON0
SJMPPAN0
GOON0:
MOVSBUF,#042H;
发送B
PAN1:
JBCTI,XWAIT
SJMPPAN1
AN2:
MOVSBUF,#043H;
发送C
PAN2:
JBCTI,GOON1
SJMPPAN2
GOON1:
JNBP2.7,AN2
MOVSBUF,#044H;
发送D
PAN3:
SJMPPAN3
AN3:
LCALLDELAY
MOVSBUF,#045H;
发送E
PAN4:
JNBTI,XWAIT
CLRTI
SJMPPAN4
AN4:
MOVSBUF,#046H;
发送F
PAN5:
SJMPPAN5
AN5:
MOVSBUF,#047H;
发送G
PAN6:
SJMPPAN6
AN6:
MOVSBUF,#048H;
发送H
PAN7:
SJMPPAN7
AN7:
MOVSBUF,#049H;
发送I
PAN8:
SJMPPAN8
XWAIT:
DELAY:
MOVR0,#20
LAY1:
MOVR1,#20
LAY2:
MOVR2,#200
DJNZR2,$
DJNZR1,LAY2
DJNZR0,LAY1
RET
DELAY1:
MOVR5,#20
D1:
MOVR6,#40
D2:
MOVR7,#10
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
END
3、系统运行界面
4、小组自评
这次的弹球游戏设计的结果小组排名第四,自我感觉也比较满意。
在游戏刚设计好的初段,我们发现游戏运行出现混乱,查到的结果是vb代码发生错误,经过我们的精心研究和查阅相关的资料,错误被改了过来。
所以说这次的团体合作设计还是比较成功的,给我们自己打个85分。
五、设计心得
经过两周的实训,我们获益匪浅!
我们懂得了团队合作的重要性,懂得分工合作是尤为重要的,我们三个人,一人负责上网找资料,一人负责与同项目的小组交流,一人负责编程。
运行游戏时,游戏出现一点小小的问题,就是弹球弹的位置和单片机的按键不行!
弹球弹的位置我们估计是数组的问题,我们首先修改VB代码的数组,效果明显好了。
至于单片机的通信,我们试过,原来是单片机的问题,换了一个就可以通信了。
弹球的问题查了资料修改了还是不够完善,但至少还能运行,对初学者应该差不多了。
老师给了的要求都能达到,我们已经很兴奋了,之后给游戏加点修饰,弄好看一点,完成!
这次实训让我们对VB和单片机的基础知识得到了巩固,让我们学习到了新的知识。
我们在理论的基础上更深刻的掌握了单片机和VB的深层内容及实际生活中的应用,实训锻炼了自己动手能力和思维能力,还有在软件方面的编程能力,同时也暴露出一些平时学习上的问题,让我们深刻反思。
这些问题的发现将为我们以后的学习和工作找明道路,查漏补缺为进一步学习作好准备。
我们感谢这次实训!
附:
指导教师评语:
实习单位意见:
实习成绩:
指导老师签名:
年月日