版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、3基于VB6.0的上位機程序設(shè)計內(nèi)部培訓(xùn)資料(不得轉(zhuǎn)載)隨著嵌入式系統(tǒng)在電子領(lǐng)域應(yīng)用的不斷深入,可視化的單片機控制與檢測系統(tǒng)越來越成為單片機技術(shù)的應(yīng)用熱點。廣泛應(yīng)用到工業(yè)自動化生產(chǎn)、交通、醫(yī)療、教育和各種自動控制等領(lǐng)域,如心電監(jiān)護、全方位視頻跟蹤監(jiān)視。在這些復(fù)雜的數(shù)字系統(tǒng)中,計算機被稱為上位機,通過上位機和相關(guān)的軟件實現(xiàn)傳感信號的檢測和對外部設(shè)備的控制。利用計算機實現(xiàn)可視化的控制系統(tǒng)包括上位機程序設(shè)計、接口設(shè)計和單片機系統(tǒng)設(shè)計。單片機相比較計算機而言又叫下位機,是直接對檢測對象測量和控制的系統(tǒng),有時也把接口與下位機設(shè)計在在一個系統(tǒng)中統(tǒng)稱接口電路?;谟嬎銠C基礎(chǔ)的上位機程序可以提高復(fù)雜的單片機控
2、制系統(tǒng)的人機交互功能。本項目設(shè)計的內(nèi)容是一個簡單的溫度檢測系統(tǒng),上位機程序用來檢測和顯示單片機系統(tǒng)發(fā)送的數(shù)據(jù),下位機是一個簡單的溫度檢測系統(tǒng),通過USB接口虛擬一個串口傳輸數(shù)據(jù),上位機程序?qū)崟r顯示溫度,并通過曲線的形式描繪出溫度的變化過程。上位機程序VB6.0設(shè)計,程序執(zhí)行后,上位機程序要定時向下位機即單片機系統(tǒng)發(fā)送指令,下位機在接到命令后就開始發(fā)送溫度信息。上位機顯示的溫度曲線要能準確的表示當(dāng)時的溫度,誤差不能超過5%,能過顯示的溫度范圍在20攝氏度到80攝氏度之間。上位機程序兩次接收的溫度數(shù)據(jù)間隔控制在在1秒鐘左右,能夠顯示的溫度曲線的總時間在2分鐘左右。3.1 VB簡單認識VB是Visu
3、alBasic的簡稱,是由美國微軟公司于1991年開發(fā)的一種可視化的、面向?qū)ο蠛筒捎檬录?qū)動方式的結(jié)構(gòu)化高級程序設(shè)計語言,可用于開發(fā)Windows環(huán)境下的各類應(yīng)用程序。今天我們以VB6.0為基礎(chǔ),簡單的認識VB,然后我們就可以利用VB這個強大的開發(fā)工具去開發(fā)我們需要的各類程序。3.1.1 VB6.0基本操作在VisualBasic安裝成功之后,安裝程序自動在【開始】菜單中建立VisualBasic6.0的程序組和程序項。單擊【開始】按扭,指向【所有程序】選項,再指向【MicrosoftVisualBasic6.0中文版】程序組,單擊【MicrosoftVisualBasic6.0中文版】選項即
4、可啟動VisualBasic6.0中文版。在VB6.0啟動后,屏幕上將出現(xiàn)如圖3-1所示的啟動界面,在啟動界面中會出現(xiàn)一個【新建工程】對話框。支伸匕|tuBdt工妙著式總鼻斌中了汀3sn<w田距工I1*>1:|吁1算里口mi用船印r圖3-1VB6.0啟動界面、創(chuàng)建工程在VB6.0啟動界面中的【新建工程】對話框中選擇一個合適的工程類型,然后單擊【打開】按鈕,就可以新建一個工程,新工程打開后的用戶界面如圖3-2所示。圖3-2VB6.0的用戶界面二、放置控件和設(shè)置控件屬性在用戶界面白左側(cè)是VB6.0的【工具箱】,在【工具箱】中有我們常用的各類控件,在設(shè)計窗體時我們可以直接從工具箱中選擇控
5、件,然后在中間的【對象窗口】中按住鼠標左鍵拖出一個矩形后,相應(yīng)的控件就放置到了用戶的編輯窗口中,對于控件的各個屬性,我們可以通過VB界面右面的【屬性窗口】設(shè)置各個控件的各種屬性,放置并調(diào)整好控件的各個屬性的【對象窗口】如圖3-3所示。圖3-3添加控件后的對象窗口三、添加代碼雙擊【對象窗口】的空白處或者某個控件,就會出現(xiàn)【代碼窗口】,代碼窗口如圖3-4所示。圖3-4代碼窗口在代碼窗口中為各個事件添加相應(yīng)的代碼,在程序運行的時候一旦某個事件發(fā)生,就會執(zhí)行相應(yīng)的代碼段,這里以Form_Load()事件為例,簡單的設(shè)計一個實例程序。Form_Load()事件是在程序啟動時調(diào)用的,這里我們添加如下代碼:
6、PrivateSubForm_Load()Forml.Caption="示例程序"設(shè)置窗體的標題為“示例程序”Text1.Text="文本框”設(shè)置文本框的文本為“文本框”Command1.Caption="按鈕"'設(shè)置按鈕的標題為"按鈕"Combol.Text="下拉列表框"設(shè)置下拉列表框的文本為“下拉列表框”EndSub五、程序運行添加好代碼后,我們可以通過單擊工具欄上的【啟動】按鈕,或者單擊菜單欄的【運行啟動】菜單項,也可以直接按F5鍵運行程序,程序運行時的界面如圖3-5所示。圖3-5程序運行
7、界面3.2 上位機程序設(shè)計上位機程序設(shè)計不但要求界面簡單,而且操作人性化,本項目上位機程序運行后的界面如圖6-1-6所示。界面包括串口設(shè)置選擇窗口,串口控制按鍵、溫度顯示窗口等。圖3-6上位機程序運行界面3.2.1 新建工程并添加控件根據(jù)前面介紹,先建立一個【標準EXE】工程。然后添加MSComm控件。過程如下:(1)單擊【工程一部件】菜單項,打開部件對話框,如圖3-7所示,選中【控件】選項卡里面的【MicrosoftCommControl6.0控件列表項,單擊【確定】按鈕。圖3-7添加MSComm控件3-8Gen七talED3±1Z1n添加控件后的工具箱添加過MSComm控件后,就
8、可以看到在工具箱中增加了一個像電話的圖標,如圖3-8右下角的電話圖標就是VB串口通信所用的標準控件(MSComm控件)。(2)單擊【MSComm】控件,并在窗體Form1上拖出一個矩形,如圖3-9所示,這時MSComm控件就被添加到了該工程中。圖3-9添加MSComm控件3.2.2 添加其他控件并設(shè)置屬性在VB的編輯窗口中依次添加下列控件:一個下拉列表框,一個按鈕,一個定時器,一個圖片框和30個靜態(tài)文本框,所有的屬性設(shè)置如表3-1所示。添加完控件后的VB編輯界面如圖3-9所示。表3-1控件屬性表控件類別控件名稱控件屬性CaptionTopLeftHeightWidthMSCommMSComm_
9、Temp1209700按鈕Comm_open打開串口24072003751350定時器Timer124010400下拉列表Combo_Com24045003002200圖片框Templine1150100065009250Lable1溫度曲線圖72048003751800Lable2串口號2403240255850Lable3溫度(C)960360255730Lable4801350720150200Lable5702350720150200Lable6603350720150200Lable7504350720150200Lable8405350720150200Lable930635072
10、0150200Lable10207350720150200Lable11時間(S)768010300255800Lable12076801000195195Lable13576801500195195Lable141076802000195195靜態(tài)文本框Lable151576802500195195Lable162076803000195195Lable172576803500195195Lable183076804000195195Lable193576804500195195Lable204076805000195195Lable214576805500195195Lable225076
11、806000195195Lable235576806500195195Lable246076807000195195Lable256576807500195195Lable267076808000195195Lable277576808500195195Lable288076809000195195Lable298576809500195195Lable30907680100001951953.2.3 添加代碼'定義COM端口的打開標識,定義記錄時間的變量'定義兩個存放坐標的變量,獲取選擇的列表項的文本為各個事件處理函數(shù)添加代碼如下:Dimflag_com_openAsBool
12、eanDimtime_tempAsIntegerDimtemp_bufx,temp_bufyAsIntegerPrivateSubCombo_Com_Click()OnErrorResumeNextx=Combo_Com.Textm=Len(x)n=Val(Right$(x,m-3)MSComm_Temp.CommPort=nEndSubPrivateSubComm_open_Click()If(flag_com_open=False)ThenComm_open.Caption="關(guān)閉端口Comm_open的Caption的值'獲取列表項的長度'獲取列表項里的端口號&
13、#39;設(shè)置MScomm控件的端口號為選擇的端口號根據(jù)flag_com_open的值設(shè)置按鈕flag_com_open=TrueIfMSComm_Temp.PortOpen=FalseThenMSComm_Temp.PortOpen=TrueEndIfTimer1.Enabled=True'打開端口后使Time門有效并開始計時ElseComm_open.Caption="打開端口"MSComm_Temp.PortOpen=Falseflag_com_open=FalseTimer1.Enabled=False'關(guān)閉端口后使Timer1無效EndIfPriva
14、teSubForm_Load()DimiAsIntegerTimer1.Enabled=FalseTimer1.Interval=1000temp_bufx=0temp_bufy=5500Templine.AutoRedraw=TrueTempline.DrawStyle=2Fori=250To6250Step500Templine.Line(0,i)-(9250,i)NextiTempline.DrawStyle=0Fori=1To16Combo_Com.AddItem"COM"&iNextiMSComm_Temp.Settings="9600,N,8,
15、1"設(shè)置定時器Timeri無效'設(shè)定定時器的觸發(fā)時間是1000ms'將劃線的格式改為虛線格式'依次畫出溫度的各條基準線'將劃線的格式改為實線格式'依次為下拉列表框添加列表項MSComm_Temp.OutBufferSize=0MSComm_Temp.InBufferSize=0'波特率是9600,無校驗,8為數(shù)據(jù)位,1位停止位設(shè)置發(fā)送緩沖區(qū)的大小,以字符為單位設(shè)置接收緩沖區(qū)的大小,以字符為單位EndSubMSComm_Temp.InputMode=comInputModeText'以文本方式接收MSComm_Temp.RThre
16、shold=4'設(shè)置產(chǎn)生oncomm事件的字符數(shù),以字符為單位MSComm_Temp.SThreshold=1MSComm_Temp.InputLen=0'設(shè)置從接收緩沖區(qū)讀取的字符數(shù),為0表示全部讀取MSComm_Temp.InBufferCount=0EndSub'清空接收緩沖區(qū)PrivateSubMSComm_Temp_OnComm()DimaAsStringDimtempAsIntegerIfMSComm_Temp.CommEvent=comEvReceiveThena=MSComm_Temp.InputFori=1To4'讀取緩沖區(qū)內(nèi)的數(shù)據(jù)temp=t
17、emp*10+Val(Mid(a,i,1)'分析數(shù)據(jù),得到傳輸?shù)臄?shù)據(jù)值NextiTempline.Line(temp_bufx,temp_bufy)-(time_temp*50,8250-temp),vbRed,根據(jù)得到的數(shù)據(jù)值和當(dāng)前的時間以及原有的數(shù)據(jù)畫出一條直線temp_bufx=time_temp*50temp_bufy=8250-temptime_temp=time_temp+1EndIfEndSub存儲當(dāng)前數(shù)據(jù),以方便下次使用'時間值增加1PrivateSubTimer1_Timer()MSComm_Temp.Output=Chr(&H30)EndSub
18、9;Timer1中斷處理函數(shù)'向下位機發(fā)送一個數(shù)據(jù),用于和下位機通信3.3單片機電路下位機電路中數(shù)碼管和DS18B20與單片機的連接圖,如圖3-10所示。C130Ph_I|_11C230P1IIR110KL-CZ?|=1CY12MHz1cI9C34.7心VCC.XTAL1P0.0/AD0P0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7RESETP2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11P2.4/A12ALEP2.5/A13EaP2.6/A14P2.7/A15P1.0P3.0/RXDP1.
19、1P3.1/TXDP1.2P3.2/NWP1.3P3.3/INT1P1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/WR-P1.7P3.7/RD-ICSTC89C5139189282930311213141516107T3756-"-3543332-21""22"-23-"-25-"-26"27-P1.0123-5-6-7-+VccQ4.7kP1.0.23DS18B20VCCI/OGND圖3-10實驗板上數(shù)碼管和DS18B20與單片機的連接圖3.4單片機程序設(shè)計/*該程序主要是利用DS18B20采集溫度,然后通過
20、數(shù)碼管顯示溫度*/*/*當(dāng)程序收到上位機發(fā)送的命令之后,該程序會將當(dāng)時的溫度值通過串口發(fā)送給上位機#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1A0;/定義DS18B20的信號線端口uchari,j;uchardis_buffer4;/定義數(shù)據(jù)緩沖數(shù)組ucharbit_ser=0xfe,0xfd,0xfb,0xf7;/定義數(shù)碼管片選數(shù)組ucharseven_seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*/定義數(shù)碼管段選數(shù)
21、組延時函數(shù)*/voiddelay(uintx)while(x)x-;/*DS18B20初始化函數(shù)*/voidInit_DS18B20(void)unsignedcharx=0;DQ=1;/DQ復(fù)位delay(8);稍做延時DQ=0;單片機將DQ拉低delay(80);/精確延時大于480usDQ=1;/拉高總線delay(14);x=DQ;稍做延時后如果x=0則初始化成功x=1則初始化失敗delay(20);/*從18B20中讀一個字節(jié)*/ucharReadOneChar(void)uchari=0;uchardat=0;for(i=8;i>0;i-)DQ=0;/給脈沖信號dat>
22、>=1;DQ=1;/給脈沖信號if(DQ)dat|=0x80;delay(8);return(dat);/*Write_OneChar(uchardat)(向18B20中寫一個字節(jié)*/uchari=0;for(i=8;i>0;i-)(DQ=0;給脈沖信號DQ=dat&0x01;delay(5);DQ=1;給脈沖信號dat>>=1;delay(4);/*從18B20中讀取一個字節(jié)*/intRead_Temperature(void)(uchari=0,t=0,a,b;inttemp;Init_DS18B20();Write_OneChar(0xcc);/跳過讀序號
23、列號的操作Write_OneChar(0x44);/啟動溫度轉(zhuǎn)換Init_DS18B20();Write_OneChar(0xcc);跳過讀序號列號的操作Write_OneChar(0xbe);讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度i=ReadOneChar();讀取溫度值低位t=ReadOneChar();讀取溫度值高位a=i&0x0f;b=t;i=i>>4;/低位右移4位,舍棄小數(shù)部分t=t<<4;高位左移4位,舍棄符號位t=t|i;temp=(t+a*0.0625)*100;/得到一個比實際溫度擴到100倍的值,主要是為了更好的顯示和傳輸ret
24、urn(temp);返回溫度值/*初始化定時器0*/voidtimer0_init(void)/(TMOD=0x21;/由于串口通信需要使用定時器1,因此TMOD的值是0x21TL0=(65536-5000)%256;TH0=(65536-5000)/256;EA=1;ET0=1;TR0=1;)發(fā)送數(shù)據(jù)的函數(shù)*/*voidtxd_data(charsend_data)SBUF=send_data;將需要發(fā)送的數(shù)據(jù)放入發(fā)送緩沖區(qū)while(!TI);TI=0;等待發(fā)送數(shù)據(jù)/*T0中斷處理函數(shù),主要用于顯示當(dāng)前溫度*/voidtimer0_isr(void)interrupt1inttemp;TR
25、0=0;TL0=(65536-5000)%256;TH0=(65536-5000)/256;TR0=1;switch(i)case0:P2=bit_ser0;P0=seven_segdis_buffer0;break;P2=bit_ser1;P0=seven_segdis_buffer1&0x7f;break;P2=bit_ser2;P0=seven_segdis_buffer2;break;P2=bit_ser3;P0=seven_segdis_buffer3;break;)i+;if(i>=4)=0;j+;if(j>=10)/如果到200ms就會讀取一次溫度,并將溫度值
26、放入顯示緩沖區(qū)位機j=0;temp=Read_Temperature();dis_buffer0=temp/1000;dis_buffer1=temp%1000/100;dis_buffer2=temp%100/10;dis_buffer3=temp%10;/*voiduart_init(void)(SCON=0x50;TMOD=0x21;TH1=0xFd;TL1=0xFd;TR1=1;ES=1;/*voiduart()interrupt4(chary,i;while(!RI);y=SBUF;if(y='0')串口通信初始化函數(shù)*/方式1,充許接收/T1方式2定時,T0方式是1波特率9600,Fosc=11.0592MHz/打開串
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 抗疫的廣播稿
- 感恩父母主題演講稿集合15篇
- 年會發(fā)言稿合集15篇
- 收銀員崗前培訓(xùn)
- 志愿者核酸檢測心得體會
- 二零二五年度保姆聘請與雇主權(quán)益維護合同2篇
- 預(yù)血管化多孔β-磷酸三鈣組織工程骨的構(gòu)建及其生物學(xué)效應(yīng)評價
- 塔式太陽能定日鏡場糾偏方法研究
- 2025版特殊教育學(xué)校樂器采購及輔助教學(xué)合同2篇
- 應(yīng)急預(yù)案協(xié)同作戰(zhàn)
- 土法吊裝施工方案
- 商法題庫(含答案)
- BLM戰(zhàn)略規(guī)劃培訓(xùn)與實戰(zhàn)
- 鋼結(jié)構(gòu)用高強度大六角頭螺栓連接副 編制說明
- 溝通與談判PPT完整全套教學(xué)課件
- 移動商務(wù)內(nèi)容運營(吳洪貴)項目四 移動商務(wù)運營內(nèi)容的傳播
- DB43T 2457-2022 烤煙采編烤分收包一體化作業(yè)規(guī)范
- GB/T 15945-1995電能質(zhì)量電力系統(tǒng)頻率允許偏差
- GB 32311-2015水電解制氫系統(tǒng)能效限定值及能效等級
- 國家重點支持高新技術(shù)領(lǐng)域(三級目錄)08
- 理論力學(xué)-運動學(xué)課件
評論
0/150
提交評論