




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、3基于VB6.0的上位機(jī)程序設(shè)計(jì)內(nèi)部培訓(xùn)資料(不得轉(zhuǎn)載)隨著嵌入式系統(tǒng)在電子領(lǐng)域應(yīng)用的不斷深入,可視化的單片機(jī)控制與檢測(cè)系統(tǒng)越來越成為單片機(jī)技術(shù)的應(yīng)用熱點(diǎn)。廣泛應(yīng)用到工業(yè)自動(dòng)化生產(chǎn)、交通、醫(yī)療、教育和各種自動(dòng)控制等領(lǐng)域,如心電監(jiān)護(hù)、全方位視頻跟蹤監(jiān)視。在這些復(fù)雜的數(shù)字系統(tǒng)中,計(jì)算機(jī)被稱為上位機(jī),通過上位機(jī)和相關(guān)的軟件實(shí)現(xiàn)傳感信號(hào)的檢測(cè)和對(duì)外部設(shè)備的控制。利用計(jì)算機(jī)實(shí)現(xiàn)可視化的控制系統(tǒng)包括上位機(jī)程序設(shè)計(jì)、接口設(shè)計(jì)和單片機(jī)系統(tǒng)設(shè)計(jì)。單片機(jī)相比較計(jì)算機(jī)而言又叫下位機(jī),是直接對(duì)檢測(cè)對(duì)象測(cè)量和控制的系統(tǒng),有時(shí)也把接口與下位機(jī)設(shè)計(jì)在在一個(gè)系統(tǒng)中統(tǒng)稱接口電路?;谟?jì)算機(jī)基礎(chǔ)的上位機(jī)程序可以提高復(fù)雜的單片機(jī)控
2、制系統(tǒng)的人機(jī)交互功能。本項(xiàng)目設(shè)計(jì)的內(nèi)容是一個(gè)簡(jiǎn)單的溫度檢測(cè)系統(tǒng),上位機(jī)程序用來檢測(cè)和顯示單片機(jī)系統(tǒng)發(fā)送的數(shù)據(jù),下位機(jī)是一個(gè)簡(jiǎn)單的溫度檢測(cè)系統(tǒng),通過USB接口虛擬一個(gè)串口傳輸數(shù)據(jù),上位機(jī)程序?qū)崟r(shí)顯示溫度,并通過曲線的形式描繪出溫度的變化過程。上位機(jī)程序VB6.0設(shè)計(jì),程序執(zhí)行后,上位機(jī)程序要定時(shí)向下位機(jī)即單片機(jī)系統(tǒng)發(fā)送指令,下位機(jī)在接到命令后就開始發(fā)送溫度信息。上位機(jī)顯示的溫度曲線要能準(zhǔn)確的表示當(dāng)時(shí)的溫度,誤差不能超過5%,能過顯示的溫度范圍在20攝氏度到80攝氏度之間。上位機(jī)程序兩次接收的溫度數(shù)據(jù)間隔控制在在1秒鐘左右,能夠顯示的溫度曲線的總時(shí)間在2分鐘左右。3.1 VB簡(jiǎn)單認(rèn)識(shí)VB是Visu
3、alBasic的簡(jiǎn)稱,是由美國(guó)微軟公司于1991年開發(fā)的一種可視化的、面向?qū)ο蠛筒捎檬录?qū)動(dòng)方式的結(jié)構(gòu)化高級(jí)程序設(shè)計(jì)語(yǔ)言,可用于開發(fā)Windows環(huán)境下的各類應(yīng)用程序。今天我們以VB6.0為基礎(chǔ),簡(jiǎn)單的認(rèn)識(shí)VB,然后我們就可以利用VB這個(gè)強(qiáng)大的開發(fā)工具去開發(fā)我們需要的各類程序。3.1.1 VB6.0基本操作在VisualBasic安裝成功之后,安裝程序自動(dòng)在【開始】菜單中建立VisualBasic6.0的程序組和程序項(xiàng)。單擊【開始】按扭,指向【所有程序】選項(xiàng),再指向【MicrosoftVisualBasic6.0中文版】程序組,單擊【MicrosoftVisualBasic6.0中文版】選項(xiàng)即
4、可啟動(dòng)VisualBasic6.0中文版。在VB6.0啟動(dòng)后,屏幕上將出現(xiàn)如圖3-1所示的啟動(dòng)界面,在啟動(dòng)界面中會(huì)出現(xiàn)一個(gè)【新建工程】對(duì)話框。支伸匕|tuBdt工妙著式總鼻斌中了汀3sn<w田距工I1*>1:|吁1算里口mi用船印r圖3-1VB6.0啟動(dòng)界面、創(chuàng)建工程在VB6.0啟動(dòng)界面中的【新建工程】對(duì)話框中選擇一個(gè)合適的工程類型,然后單擊【打開】按鈕,就可以新建一個(gè)工程,新工程打開后的用戶界面如圖3-2所示。圖3-2VB6.0的用戶界面二、放置控件和設(shè)置控件屬性在用戶界面白左側(cè)是VB6.0的【工具箱】,在【工具箱】中有我們常用的各類控件,在設(shè)計(jì)窗體時(shí)我們可以直接從工具箱中選擇控
5、件,然后在中間的【對(duì)象窗口】中按住鼠標(biāo)左鍵拖出一個(gè)矩形后,相應(yīng)的控件就放置到了用戶的編輯窗口中,對(duì)于控件的各個(gè)屬性,我們可以通過VB界面右面的【屬性窗口】設(shè)置各個(gè)控件的各種屬性,放置并調(diào)整好控件的各個(gè)屬性的【對(duì)象窗口】如圖3-3所示。圖3-3添加控件后的對(duì)象窗口三、添加代碼雙擊【對(duì)象窗口】的空白處或者某個(gè)控件,就會(huì)出現(xiàn)【代碼窗口】,代碼窗口如圖3-4所示。圖3-4代碼窗口在代碼窗口中為各個(gè)事件添加相應(yīng)的代碼,在程序運(yùn)行的時(shí)候一旦某個(gè)事件發(fā)生,就會(huì)執(zhí)行相應(yīng)的代碼段,這里以Form_Load()事件為例,簡(jiǎn)單的設(shè)計(jì)一個(gè)實(shí)例程序。Form_Load()事件是在程序啟動(dòng)時(shí)調(diào)用的,這里我們添加如下代碼:
6、PrivateSubForm_Load()Forml.Caption="示例程序"設(shè)置窗體的標(biāo)題為“示例程序”Text1.Text="文本框”設(shè)置文本框的文本為“文本框”Command1.Caption="按鈕"'設(shè)置按鈕的標(biāo)題為"按鈕"Combol.Text="下拉列表框"設(shè)置下拉列表框的文本為“下拉列表框”EndSub五、程序運(yùn)行添加好代碼后,我們可以通過單擊工具欄上的【啟動(dòng)】按鈕,或者單擊菜單欄的【運(yùn)行啟動(dòng)】菜單項(xiàng),也可以直接按F5鍵運(yùn)行程序,程序運(yùn)行時(shí)的界面如圖3-5所示。圖3-5程序運(yùn)行
7、界面3.2 上位機(jī)程序設(shè)計(jì)上位機(jī)程序設(shè)計(jì)不但要求界面簡(jiǎn)單,而且操作人性化,本項(xiàng)目上位機(jī)程序運(yùn)行后的界面如圖6-1-6所示。界面包括串口設(shè)置選擇窗口,串口控制按鍵、溫度顯示窗口等。圖3-6上位機(jī)程序運(yùn)行界面3.2.1 新建工程并添加控件根據(jù)前面介紹,先建立一個(gè)【標(biāo)準(zhǔn)EXE】工程。然后添加MSComm控件。過程如下:(1)單擊【工程一部件】菜單項(xiàng),打開部件對(duì)話框,如圖3-7所示,選中【控件】選項(xiàng)卡里面的【MicrosoftCommControl6.0控件列表項(xiàng),單擊【確定】按鈕。圖3-7添加MSComm控件3-8Gen七talED3±1Z1n添加控件后的工具箱添加過MSComm控件后,就
8、可以看到在工具箱中增加了一個(gè)像電話的圖標(biāo),如圖3-8右下角的電話圖標(biāo)就是VB串口通信所用的標(biāo)準(zhǔn)控件(MSComm控件)。(2)單擊【MSComm】控件,并在窗體Form1上拖出一個(gè)矩形,如圖3-9所示,這時(shí)MSComm控件就被添加到了該工程中。圖3-9添加MSComm控件3.2.2 添加其他控件并設(shè)置屬性在VB的編輯窗口中依次添加下列控件:一個(gè)下拉列表框,一個(gè)按鈕,一個(gè)定時(shí)器,一個(gè)圖片框和30個(gè)靜態(tài)文本框,所有的屬性設(shè)置如表3-1所示。添加完控件后的VB編輯界面如圖3-9所示。表3-1控件屬性表控件類別控件名稱控件屬性CaptionTopLeftHeightWidthMSCommMSComm_
9、Temp1209700按鈕Comm_open打開串口24072003751350定時(shí)器Timer124010400下拉列表Combo_Com24045003002200圖片框Templine1150100065009250Lable1溫度曲線圖72048003751800Lable2串口號(hào)2403240255850Lable3溫度(C)960360255730Lable4801350720150200Lable5702350720150200Lable6603350720150200Lable7504350720150200Lable8405350720150200Lable930635072
10、0150200Lable10207350720150200Lable11時(shí)間(S)768010300255800Lable12076801000195195Lable13576801500195195Lable141076802000195195靜態(tài)文本框Lable151576802500195195Lable162076803000195195Lable172576803500195195Lable183076804000195195Lable193576804500195195Lable204076805000195195Lable214576805500195195Lable225076
11、806000195195Lable235576806500195195Lable246076807000195195Lable256576807500195195Lable267076808000195195Lable277576808500195195Lable288076809000195195Lable298576809500195195Lable30907680100001951953.2.3 添加代碼'定義COM端口的打開標(biāo)識(shí),定義記錄時(shí)間的變量'定義兩個(gè)存放坐標(biāo)的變量,獲取選擇的列表項(xiàng)的文本為各個(gè)事件處理函數(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的值'獲取列表項(xiàng)的長(zhǎng)度'獲取列表項(xiàng)里的端口號(hào)&
13、#39;設(shè)置MScomm控件的端口號(hào)為選擇的端口號(hào)根據(jù)flag_com_open的值設(shè)置按鈕flag_com_open=TrueIfMSComm_Temp.PortOpen=FalseThenMSComm_Temp.PortOpen=TrueEndIfTimer1.Enabled=True'打開端口后使Time門有效并開始計(jì)時(shí)ElseComm_open.Caption="打開端口"MSComm_Temp.PortOpen=Falseflag_com_open=FalseTimer1.Enabled=False'關(guān)閉端口后使Timer1無(wú)效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è)置定時(shí)器Timeri無(wú)效'設(shè)定定時(shí)器的觸發(fā)時(shí)間是1000ms'將劃線的格式改為虛線格式'依次畫出溫度的各條基準(zhǔn)線'將劃線的格式改為實(shí)線格式'依次為下拉列表框添加列表項(xiàng)MSComm_Temp.OutBufferSize=0MSComm_Temp.InBufferSize=0'波特率是9600,無(wú)校驗(yàn),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í)間以及原有的數(shù)據(jù)畫出一條直線temp_bufx=time_temp*50temp_bufy=8250-temptime_temp=time_temp+1EndIfEndSub存儲(chǔ)當(dāng)前數(shù)據(jù),以方便下次使用'時(shí)間值增加1PrivateSubTimer1_Timer()MSComm_Temp.Output=Chr(&H30)EndSub
18、9;Timer1中斷處理函數(shù)'向下位機(jī)發(fā)送一個(gè)數(shù)據(jù),用于和下位機(jī)通信3.3單片機(jī)電路下位機(jī)電路中數(shù)碼管和DS18B20與單片機(jī)的連接圖,如圖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í)驗(yàn)板上數(shù)碼管和DS18B20與單片機(jī)的連接圖3.4單片機(jī)程序設(shè)計(jì)/*該程序主要是利用DS18B20采集溫度,然后通過
20、數(shù)碼管顯示溫度*/*/*當(dāng)程序收到上位機(jī)發(fā)送的命令之后,該程序會(huì)將當(dāng)時(shí)的溫度值通過串口發(fā)送給上位機(jī)#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1A0;/定義DS18B20的信號(hào)線端口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í)函數(shù)*/voiddelay(uintx)while(x)x-;/*DS18B20初始化函數(shù)*/voidInit_DS18B20(void)unsignedcharx=0;DQ=1;/DQ復(fù)位delay(8);稍做延時(shí)DQ=0;單片機(jī)將DQ拉低delay(80);/精確延時(shí)大于480usDQ=1;/拉高總線delay(14);x=DQ;稍做延時(shí)后如果x=0則初始化成功x=1則初始化失敗delay(20);/*從18B20中讀一個(gè)字節(jié)*/ucharReadOneChar(void)uchari=0;uchardat=0;for(i=8;i>0;i-)DQ=0;/給脈沖信號(hào)dat>
22、>=1;DQ=1;/給脈沖信號(hào)if(DQ)dat|=0x80;delay(8);return(dat);/*Write_OneChar(uchardat)(向18B20中寫一個(gè)字節(jié)*/uchari=0;for(i=8;i>0;i-)(DQ=0;給脈沖信號(hào)DQ=dat&0x01;delay(5);DQ=1;給脈沖信號(hào)dat>>=1;delay(4);/*從18B20中讀取一個(gè)字節(jié)*/intRead_Temperature(void)(uchari=0,t=0,a,b;inttemp;Init_DS18B20();Write_OneChar(0xcc);/跳過讀序號(hào)
23、列號(hào)的操作Write_OneChar(0x44);/啟動(dòng)溫度轉(zhuǎn)換Init_DS18B20();Write_OneChar(0xcc);跳過讀序號(hào)列號(hào)的操作Write_OneChar(0xbe);讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度i=ReadOneChar();讀取溫度值低位t=ReadOneChar();讀取溫度值高位a=i&0x0f;b=t;i=i>>4;/低位右移4位,舍棄小數(shù)部分t=t<<4;高位左移4位,舍棄符號(hào)位t=t|i;temp=(t+a*0.0625)*100;/得到一個(gè)比實(shí)際溫度擴(kuò)到100倍的值,主要是為了更好的顯示和傳輸ret
24、urn(temp);返回溫度值/*初始化定時(shí)器0*/voidtimer0_init(void)/(TMOD=0x21;/由于串口通信需要使用定時(shí)器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就會(huì)讀取一次溫度,并將溫度值
26、放入顯示緩沖區(qū)位機(jī)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定時(shí),T0方式是1波特率9600,Fosc=11.0592MHz/打開串
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 按揭房屋買賣合同協(xié)議書
- 三農(nóng)莊休閑旅游經(jīng)營(yíng)手冊(cè)
- 企業(yè)多元化業(yè)務(wù)拓展下的倉(cāng)儲(chǔ)管理系統(tǒng)創(chuàng)新方案
- 高地溫隧道施工方案
- 景觀棧橋施工方案
- 濕地橋梁樁基施工方案
- 車牌識(shí)別系統(tǒng)道閘施工方案
- 建筑工程臨時(shí)用工協(xié)議書-@-1
- 鍋爐管束防腐施工方案
- 仲愷高新區(qū)瀝林英光小學(xué)改擴(kuò)建二期項(xiàng)目環(huán)評(píng)報(bào)告表
- 教師資格考試高中英語(yǔ)面試試題及答案指導(dǎo)(2024年)
- 2022-2023學(xué)年北京市海淀區(qū)七年級(jí)上學(xué)期期末語(yǔ)文試卷(含答案解析)
- 2025年高考化學(xué)復(fù)習(xí)策略講座
- 二人銷售合作協(xié)議書模板
- 《健全全過程人民民主制度體系》課件
- 上海市第一至十八屆高一物理基礎(chǔ)知識(shí)競(jìng)賽試題及答案
- 金融營(yíng)銷實(shí)務(wù) 習(xí)題及答案 安賀新
- 食品經(jīng)營(yíng)安全管理制度目錄
- 焊接工藝基礎(chǔ)知識(shí)培訓(xùn)課件
- 【中職數(shù)學(xué)】北師大版基礎(chǔ)模塊上冊(cè) 第4單元《指數(shù)函數(shù)與對(duì)數(shù)函數(shù)》4.4.2 對(duì)數(shù)函數(shù)的圖像與性質(zhì)(第10-11課時(shí))教學(xué)設(shè)計(jì)
- DL∕T 1529-2016 配電自動(dòng)化終端設(shè)備檢測(cè)規(guī)程
評(píng)論
0/150
提交評(píng)論