首页 用VB开发PC与单片机通信的上位机程序

用VB开发PC与单片机通信的上位机程序

举报
开通vip

用VB开发PC与单片机通信的上位机程序串口通信是MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境有不少,诸如VB、VC++,Delphi、LABVIEW等等,不过无论黑猫还是白猫,能够抓到老鼠的就是好猫,用VB无疑是最快速最简便的,实现的功能也足够强大,足以满足我们的基本需要了。我最近用VB写出了一个用于数据采集的串口上位机程序,实现数据的接收和实时绘图,这里和大家分享一下,让大家也体验一下单片机和PC通信的乐趣。整个程序只需要不到30行程序,我将会给这30行程序加上最为详备的注释,这样即使你从未使用VB制作过上位机程序...

用VB开发PC与单片机通信的上位机程序
串口通信是MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境有不少,诸如VB、VC++,Delphi、LABVIEW等等,不过无论黑猫还是白猫,能够抓到老鼠的就是好猫,用VB无疑是最快速最简便的,实现的功能也足够强大,足以满足我们的基本需要了。我最近用VB写出了一个用于数据采集的串口上位机程序,实现数据的接收和实时绘图,这里和大家分享一下,让大家也体验一下单片机和PC通信的乐趣。整个程序只需要不到30行程序,我将会给这30行程序加上最为详备的注释,这样即使你从未使用VB制作过上位机程序,也能照猫画虎的编写出属于自己的上位机程序。 一,制定 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 思路 首先,我们要制定一下自己的串口通讯协议,为了方便设计,通讯协议中将采用字符型数据(遵循ASCII字符集)进行传输,一共5个字节数据,下位机按照从第一字节到第五字节的顺序以字符型形式发送数据,第一个字节是符号符,第二,三,四字节分别是百位,十位,和个位数字,第五个字节是结束符。 通讯协议:                     1符号位 2百位 3十位 4个位 5结束符           注释: 1,符号符,+(2B)或—(2D), 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示数据的正负 2,3,4,百位,十位,和个位数字 5,结束符,用大写字母A(41)表示 接着,我们就要明确设计思路了,这个程序的设计将采用Microsoft Visual Basic 6.0(以下简称VB6.0)作为编译环境,运用串口通讯控件MSComm,通过计时器控件实现以查询方式编写的串口数据的接收和实时绘图。 二,程序界面设计 (1)创建一个标准EXE工程:启动VB6.0,在自动弹出的“新建工程”窗口中单击“标准 EXE”图标,然后单击“打开”按钮即可创建一个标准EXE工程。将弹出的窗体的Caption属性设置为串口通讯与实时绘图程序。 [attachment=1364699] (1)添加串口通信控件MSComm:VB的串口通信控件MSComm并不会主动出现在工具箱中,当我们需要MSComm控件时,首先要把它加入工具箱中,选择“工程”菜单下的“部件...”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“Microsoft Comm Control 6.0”,单击“确定”按钮后,在工具箱中就出现了一个形似电话的图标,这就是MSComm控件,选择MSComm控件的图标,将它添加到适当位置,采用默认名称MSComm1。 [attachment=1364697][attachment=1364696] (1)添加一个Timer控件用于自动接收字符:选择Timer控件的图标,将它添加到适当位置,采用默认名称Timer1,Interval属性为1,Enabled属性为False。 (2)添加两个文本框控件用于显示数据:选择TexrBox控件的图标,将它添加到适当位置,采用默认名称Text1与Text2,Text属性均设置为空,设置Text2的属性MultiLine=True, ScrollBars=2-Vertical。Text1用于显示最新的一组数据,Text2用于储存之前的所有数据。 (3)添加一个图形控件PictureBox用于实时绘图:选择PictureBox控件的图标,将它添加到适当位置,拉伸成适当大小,采用默认名称Picture1,设置BackColor属性为白色。 (4)添加一个按钮控件CommandButton用于打开串口:选择CommandButton控件的图标,将它添加到适当位置,采用默认名称Command1,设置Caption属性为打开串口。 (5)添加一个Shape控件用于显示串口状态:选择Shape控件的图标,将它添加到适当位置,采用默认名称Shape1,设置FillStyle=0-Solid,Shape=3-Circle,FillColor设置为红色。 (8)设置完成的程序窗体界面: [attachment=1364695] 三,程序代码编写 (1)双击程序中的按钮控件,在弹出的代码窗口中键入以下程序 Dim x As Integer'定义变量x用于记录数据个数 Dim y0 As Integer'定义变量y0用于记录上一次数据 Dim y As Integer'定义变量y用于记录当前数据 Private Sub Command1_Click()'下面的程序是在点击打开串口按钮后时要运行的 MSComm1.CommPort = 4             '设置通信端口号为COM4,这个要根据自己所使用的串口而定 MSComm1.Settings = "4800,n,8,1"     '设置串口参数,表示传输速率为4800bit/s,没有奇偶校验位,8位数据位,1位停止位 '这里串口上位机的设置一定要和下位机一致 MSComm1.InputMode = 0              '接收文本型数据,如果设置为1则以二进制的形式取回传入的数据  MSComm1.PortOpen = True            '打开通信端口4'True即为打开端口,设置为False则为关上端口 '如果CommPort 属性设置为一个非法端口,则会产生错误68(设备无效)   Picture1.Scale (0, 1000)-(200, -1000) '定义Picture1的坐标系,左上角坐标值 (0, 1000)到右下角坐标值(200, -1000)   Picture1.Line (0, 0)-(200, 0), RGB(0, 0, 255) '用RGB颜色(0,0,255)画出X轴   Shape1.FillColor=RGB(0,255,0) '将指示灯调整为绿色   Timer1.Enabled = True '启动Timer1定时器 End Sub (2)双击程序中的Timer控件的图标,在弹出的代码窗口中键入以下程序Private Sub Timer1_Timer() Dim buf$'定义一个字符串变量 buf = Trim(MSComm1.Input)          '将串口接收缓冲区内的数据读入buf变量中 If Len(buf) <> 0 And x <= 200 Then'判断缓冲区内是否存在数据与数据个数有没有到达最大值           Text1.Text = Text1.Text + buf'Text1中的数据等于原有的数据加上新接收的数据 End If  If buf = "A"  And  x <= 200 Then               '如果接收到结束符“A”且数据个数没有到达最大值 y = Val(Text1.Text) '用Val函数将Text1中的内容转换为数字然后赋值给y,正负的符号也会一同转换 Picture1.PSet (x, y), RGB(255, 0, 0) '在Picture1上(x,y)位置用RGB颜色(255,0 ,0)颜色画点 Picture1.Line (x - 1, y0)-(x, y), RGB(255, 0, 0) '在上次数据(x-1,y1)和这次数据(x,y)之间用RGB颜色(255,0 ,0)颜色连线 x = x + 1 '数据个数加1 y0 = y '把y值赋给用于记录上一个数据的变量y1 Text2.Text = Text2.Text & x & "   " & Str(y) & Chr(13) & Chr(10) 'Text2中的数据等于原先的数据加上数据编号加上数据的值以及Chr(13) & Chr(10)组成的换行符 Text2.SetFocus Text2.SelStart = Len(Text2.Text) '设置垂直滚动条自动滚动 Text1.Text = "" '清空Text1控件中的数据   End If End Sub 四,调试运行 我采用STC89C52作为下位机,采用11.0592M的晶振,通过串口发送数据进行测试。下面就以Keil uVision3作为编译环境,用C语言编写一个小例子用于测试,读者可以把这些做成一个模块加入到自己的程序中用于实验。 首先加载头文件:#include 定义一个字符串数组:unsigned code tab[10]={'0','1','2','3','4','5','6','7','8','9',}; 然后我们需要一个初始化串口通信的子函数,这里的设置要和上位机一致:void StartUART( void )   //波特率4800bit/s,无奇偶校验位,8位数据位,1位停止位 {                                    SCON = 0x50; TMOD = 0x20;      TH1 = 0xFA; TL1 = 0xFA;      PCON = 0x00; TR1 = 1; } 因为我们的上位机用Timer控件用于自动接收字符,所以下位机还需要个延时函数,用于在每次传输数据后稍微延时一下,否则会出现丢失数据的现象: void DELAY_MS (unsigned int a)  //毫秒级延时函数 {     unsigned int i; while( --a != 0){         for(i = 0; i < 125; i++); }} 这样就可以从通过串口进行测试了(以发送123为例): void main(void) {     StartUART();      //初始化串口 SBUF=0X2B;     //发送字符“+” DELAY_MS(20);  //延时20ms SBUF=tab[1];     //发送百位的“1”     DELAY_MS(20); SBUF=tab[2];     //发送十位的“2”     DELAY_MS(20); SBUF=tab[3];        //发送个位的“3”     DELAY_MS(20);   SBUF=0X41;    //发送字符“A” DELAY_MS(20); } 在向单片机烧入程序,连接好串口后就可以进行测试了。 测试过程:1,在VB6.0环境中,单击运行,然后点击启动 2,单击“打开串口”按钮打开串口,如果正常打开串口的话指示灯会变成绿色。3,接通下位机电源,这时就可以看到从下位机不断传来的数据123以及实时绘图的画面。 [attachment=1364698] 至此,一个串口通讯与实时绘图的程序就开发完成了,在VB6.0中使用文件菜单下的生成工程1.exe...就可以生成.exe文件了,这样就能更方便使用。这篇文章只是个小例子,介绍了使用VB6.0开发串口上位机的过程,读者只需要稍微修改下程序,就可以适应自己的不同要求,例如通过给下位机送来的数据加上不同的结束符,从而使用不同的颜色实时绘图,或者将接收到的数据乘以0.1,将原来的百位,十位,个位,变成十位,个位,小数位等等。希望这篇文章能够抛砖引玉,让大家能够发挥自己的想象力,设计出更加友好的界面,为自己的上位机软件添加强大的功能。 [attachment=1373614]
本文档为【用VB开发PC与单片机通信的上位机程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_105949
暂无简介~
格式:doc
大小:23KB
软件:Word
页数:7
分类:互联网
上传时间:2019-04-18
浏览量:24