二維點(diǎn)樣平臺(tái)設(shè)計(jì)畢業(yè)
淮南師范學(xué)院2014屆本科畢業(yè)論文畢業(yè)論文(設(shè)計(jì))論文題目:二維點(diǎn)樣平臺(tái)設(shè)計(jì)學(xué)生姓名:胡大千學(xué) 號(hào):1008020210所在院系:電氣信息工程學(xué)院專業(yè)名稱:自動(dòng)化屆 次:2014 屆指導(dǎo)教師:苗磊目 錄前 言21 總體方案設(shè)計(jì)21.1 總體方案實(shí)現(xiàn)框圖21.2 軟硬件開(kāi)發(fā)環(huán)境和工具32 二維點(diǎn)樣平臺(tái)上位機(jī)設(shè)計(jì)32.1 Visual Basic語(yǔ)言概述32.2 程序編寫(xiě)42.3 錯(cuò)誤處理和調(diào)試102.4 程序發(fā)布113 二維點(diǎn)樣平臺(tái)下位機(jī)設(shè)計(jì)113.1 單片機(jī)硬件電路設(shè)計(jì)113.2 單片機(jī)軟件程序設(shè)計(jì)134 系統(tǒng)測(cè)試164.1 上位機(jī)串口通信測(cè)試164.2 下位機(jī)電路和通信測(cè)試175 總結(jié)18參考文獻(xiàn):183 淮南師范學(xué)院2014屆本科畢業(yè)論文二維點(diǎn)樣平臺(tái)設(shè)計(jì)學(xué)生:胡大千(指導(dǎo)老師:苗磊)(淮南師范學(xué)院電氣信息工程學(xué)院)摘 要:二維點(diǎn)樣在各行各業(yè)中都得到重要的運(yùn)用,其工作原理是上位機(jī)通過(guò)控制步進(jìn)電機(jī)在X、Y方向的拍數(shù)比實(shí)現(xiàn)對(duì)二維空間的精確定位并進(jìn)行點(diǎn)樣。本課題以VB6.0為平臺(tái)并通過(guò)與上位機(jī)的通訊實(shí)現(xiàn)點(diǎn)樣定位控制和對(duì)點(diǎn)樣進(jìn)程進(jìn)行模擬實(shí)現(xiàn)。關(guān)鍵字:點(diǎn)樣;步進(jìn)電機(jī);上位機(jī);VB;通訊Two-dimensional Point Sample PlatformStudents: Hu Daqian(Guidance Teacher: Miao Lei)(College of Electrical and Information Engineering ,Huainan Normal University)Abstract:Two-dimensional point sample is important in all walks of life, its working principle is the upper machine by controlling step motor than the number of beats in the X, Y direction implementations are precise positioning and of two-dimensional space. This topic in VB6.0 by use of the platform and through communication with PC to realize the control and the positioning of the sample points simulated implementation sample process.Key words:Sample points; Stepping motor; PC; VB; communication前 言隨著科學(xué)技術(shù)的不斷進(jìn)步,機(jī)械產(chǎn)業(yè)朝著微型化,精密化發(fā)展,零件的微小化與運(yùn)動(dòng)位移的高速化、衡量化是未來(lái)的主要研究方向之一,其精準(zhǔn)的位置控制即準(zhǔn)確無(wú)誤的定位技術(shù)顯得日益重要。因此,開(kāi)發(fā)功能實(shí)用,定位精確度高的定位平臺(tái)運(yùn)動(dòng)系統(tǒng)具有廣闊的應(yīng)用前景。二維點(diǎn)樣平臺(tái)作為空間三維定位的重要組成部分,也可以說(shuō)是二維定位平臺(tái)在國(guó)內(nèi)外取得了較快的發(fā)展。二維定位平臺(tái)是完成X、Y維精確定位的工作平臺(tái)。它在微機(jī)電系統(tǒng)、微電子、納米制造、納米電子及航空航天等眾多高科技領(lǐng)域都發(fā)揮著重要作用,隨著科技的進(jìn)步,這種重要性日益增強(qiáng)。生活中常見(jiàn)的一些機(jī)器如電子廠車間的高速機(jī)、點(diǎn)膠機(jī)等。在日常生活中我們能過(guò)接觸最多最常見(jiàn)的二維點(diǎn)樣平臺(tái)也就是車間的點(diǎn)膠機(jī)了,點(diǎn)膠機(jī)是一種對(duì)流體進(jìn)行控制并將流體進(jìn)行點(diǎn)滴、涂覆于產(chǎn)品表面或產(chǎn)品內(nèi)部的自動(dòng)化機(jī)器。可實(shí)現(xiàn)二維、三維的路徑點(diǎn)膠,能夠高效精準(zhǔn)的進(jìn)行點(diǎn)膠。其應(yīng)用的行業(yè)也非常的寬廣,可以在電子行業(yè)中進(jìn)行手機(jī)按鍵點(diǎn)膠,手機(jī)電池封裝,光學(xué)器件加工等;在工業(yè)電氣方面可以對(duì)電容,變壓器,繼電器,按鈕等進(jìn)行粘接灌封,對(duì)電機(jī)線圈進(jìn)行涂膠,對(duì)電器柜門(mén)進(jìn)行封邊涂膠。本設(shè)計(jì)就是以我在聯(lián)寶實(shí)習(xí)期間對(duì)點(diǎn)膠機(jī)的操作進(jìn)行實(shí)際的理論驗(yàn)證而設(shè)計(jì)一個(gè)基于VB平臺(tái)的二維點(diǎn)樣平臺(tái)。用VB設(shè)計(jì)上位機(jī)軟件控制界面,能夠設(shè)置待點(diǎn)樣行數(shù)、列數(shù)及行列間距,并對(duì)點(diǎn)樣進(jìn)程進(jìn)行模擬。設(shè)計(jì)相應(yīng)插補(bǔ)算法。單片機(jī)通過(guò)串口通信接收上位機(jī)所給的坐標(biāo)控制X、Y步進(jìn)電機(jī),實(shí)現(xiàn)點(diǎn)樣定位控制。1 總體方案設(shè)計(jì)1.1 總體方案實(shí)現(xiàn)框圖本設(shè)計(jì)分兩部分設(shè)計(jì),一部分是基于Visual Basic的二維點(diǎn)樣平臺(tái)的設(shè)計(jì),另一部分是基于51單片機(jī)的下位機(jī)設(shè)計(jì),兩者之間通過(guò)串口通信。系統(tǒng)框圖如圖1所示。圖1 系統(tǒng)框圖 上位機(jī)設(shè)計(jì)部分主要是設(shè)置相應(yīng)的控制界面(打開(kāi)串口、手動(dòng)點(diǎn)樣、自動(dòng)點(diǎn)樣)和實(shí)現(xiàn)串口通信,當(dāng)手動(dòng)點(diǎn)樣、自動(dòng)點(diǎn)樣或回原點(diǎn)操作時(shí),會(huì)通過(guò)串口將相應(yīng)的X軸和Y軸的坐標(biāo)值傳給下位機(jī)。為了直觀看到坐標(biāo)位置和移動(dòng)軌跡,在上位機(jī)上設(shè)計(jì)了二維坐標(biāo)顯示區(qū)。下位機(jī)是由51單片機(jī)控制一個(gè)系統(tǒng),當(dāng)接收到串口數(shù)據(jù)時(shí),對(duì)數(shù)據(jù)進(jìn)行分析,提取出上位機(jī)發(fā)送的坐標(biāo)值,驅(qū)動(dòng)X軸和Y軸步進(jìn)電機(jī),實(shí)現(xiàn)二維點(diǎn)樣。51單片機(jī)的串口通信部分利用51單片機(jī)內(nèi)部的串口資源與外部串行端口電平轉(zhuǎn)換電路(即RS232)來(lái)實(shí)現(xiàn)。1.2 軟硬件開(kāi)發(fā)環(huán)境和工具軟件開(kāi)發(fā)環(huán)境包括Microsoft Visual Basic 6.01 15 21和Keil uVision C51 V4.12。硬件開(kāi)發(fā)環(huán)境是Proteus 7.8 SP24。調(diào)試工具包括Virtual Serial Port Driver 6.9和串口調(diào)試助手V1.0。Visual Basic是Microsoft公司開(kāi)發(fā)的一種“可視化”的Windows應(yīng)用程序開(kāi)發(fā)工具。Microsoft Visual Basic 6.0是用來(lái)開(kāi)發(fā)上位機(jī)的平臺(tái)。Keil uVision C51是一種兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)的系統(tǒng),是由德國(guó)Keil Software公司(ARM公司之一)出品。包含標(biāo)準(zhǔn)的Keil C編譯器、宏匯編器、調(diào)試器、實(shí)時(shí)內(nèi)核、單板計(jì)算機(jī)和仿真器,支持所有的251系列微控制器。在本設(shè)計(jì)中使用Keil C51是對(duì)51單片機(jī)程序進(jìn)行編譯、調(diào)試和下載2 5 7 9。Proteus軟件是英國(guó)Lab Center Electronics公司出版的EDA工具軟件。它既具有其它EDA工具軟件的仿真功能,又能仿真單片機(jī)及外圍器件??梢哉f(shuō)是目前最好的單片機(jī)仿真軟件。本設(shè)計(jì)中利用Proteus在單片機(jī)中加載Keil生成的HEX文件對(duì)步進(jìn)電機(jī)的運(yùn)動(dòng)進(jìn)行模擬。為了讓上位機(jī)發(fā)送的數(shù)據(jù)能夠傳送給Proteus仿真的單片機(jī),這里選用Virtual Serial Port Driver 6.9軟件,它可以模擬串口通信,虛擬出一對(duì)串口,這樣兩者之間就無(wú)需物理連接,即可以串口的形式進(jìn)行通信4 12。串口調(diào)試工具很多,本系統(tǒng)采用常用的串口調(diào)試助手V2.1,其功能簡(jiǎn)單,在本系統(tǒng)設(shè)計(jì)中主要用來(lái)調(diào)試上位機(jī)程序和測(cè)試下位機(jī)的串口通信功能。2 二維點(diǎn)樣平臺(tái)上位機(jī)設(shè)計(jì)2.1 Visual Basic語(yǔ)言概述Visual Basic是一種語(yǔ)言簡(jiǎn)單、易學(xué)、易用的軟件,適用于開(kāi)發(fā)Windows環(huán)境下的各類應(yīng)用程序,并增加了結(jié)構(gòu)化、可視化程序設(shè)計(jì)語(yǔ)言的功能,引入了“面向?qū)ο蟆焙汀笆录?qū)動(dòng)”等先進(jìn)思想,支持ActiveX控件(用于Web或其它支持這一技術(shù)的程序中)、VBS(VBScript,VB的腳本語(yǔ)言,用于Web開(kāi)發(fā))和VBA(VB For Application,嵌入式VB語(yǔ)言,用于對(duì)一些流行軟件進(jìn)行二次開(kāi)發(fā)),對(duì)網(wǎng)絡(luò)、多媒體和數(shù)據(jù)庫(kù)的編程有良好的支持,擁有完全的中文界面和幫助系統(tǒng)1 15 21。Visual Basic6.0主要有以下幾個(gè)特點(diǎn):編程可視化、面向?qū)ο蟮某绦蛟O(shè)計(jì)、事件驅(qū)動(dòng)的編程機(jī)制,以及結(jié)構(gòu)化的程序設(shè)計(jì)。Visual Basic的可視化設(shè)計(jì)工具可以把Windows界面設(shè)計(jì)的復(fù)雜性“封裝”起來(lái),利用Visual Basic提供的各種設(shè)計(jì)工具,程序開(kāi)發(fā)人員只需按照程序界面的設(shè)計(jì)要求,在窗體中畫(huà)出各種“控件”,并設(shè)置這些對(duì)象的屬性,這樣程序設(shè)計(jì)人員就不需要為界面設(shè)計(jì)編寫(xiě)代碼而浪費(fèi)時(shí)間,只需要編寫(xiě)實(shí)現(xiàn)程序功能代碼。因此,程序設(shè)計(jì)的效率會(huì)大大提高。面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言將整個(gè)現(xiàn)實(shí)世界或者其中的一部分看作是由不同種類的對(duì)象構(gòu)成的。各種類型的對(duì)象之間通過(guò)發(fā)送消息進(jìn)行聯(lián)系,消息能夠激發(fā)對(duì)象作出相應(yīng)的反應(yīng),從而構(gòu)成一個(gè)運(yùn)動(dòng)的整體。Visual Basic屬于事件驅(qū)動(dòng)的編程機(jī)制,由事件控制著程序運(yùn)行的流向。事件是可以由窗體或控件識(shí)別的操作。在響應(yīng)事件時(shí),事件驅(qū)動(dòng)應(yīng)用程序執(zhí)行指定的代碼。Visual Basic是一種接近自然語(yǔ)言和人類的邏輯思維方式并具有結(jié)構(gòu)化程序設(shè)計(jì)的控制結(jié)構(gòu)。1966年,Bohra和Jacopini提出了結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這三種基本結(jié)構(gòu)是Visual Basic程序設(shè)計(jì)的核心。2.2 程序編寫(xiě)該部分利用VB設(shè)計(jì)上位機(jī)控制平臺(tái),實(shí)現(xiàn)手動(dòng)和自動(dòng)設(shè)置待點(diǎn)樣行列數(shù);實(shí)現(xiàn)回原點(diǎn)操作,模擬顯示點(diǎn)樣當(dāng)前位置和運(yùn)動(dòng)軌跡,設(shè)置的坐標(biāo)值能通過(guò)串口通信發(fā)送到下位機(jī),下位機(jī)在對(duì)步進(jìn)電機(jī)進(jìn)行驅(qū)動(dòng)運(yùn)行后能將相應(yīng)的坐標(biāo)返回給上位機(jī)實(shí)現(xiàn)點(diǎn)樣定位控制并將相應(yīng)的坐標(biāo)在二維坐標(biāo)顯示區(qū)顯示出來(lái)。2.2.1 創(chuàng)建標(biāo)準(zhǔn)項(xiàng)目文件本設(shè)計(jì)需要?jiǎng)?chuàng)建一個(gè)基于Standard.EXE的項(xiàng)目。先打開(kāi)Visual Basic 6.0,然后打開(kāi)“文件”中的“新建工程”,然后選擇新建“標(biāo)準(zhǔn)EXE”即可,如圖2所示。這樣就創(chuàng)建了一個(gè)標(biāo)準(zhǔn)EXE的項(xiàng)目文件1。圖2 創(chuàng)建標(biāo)準(zhǔn)EXE項(xiàng)目文件2.2.2 加入串口通信控件MSComm控件是Microsoft公司為了簡(jiǎn)化Windows下串行通信編程而提供的一種ActiveX控件,它為應(yīng)用程序提供了通過(guò)串行接口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。MSComm控件給出事件驅(qū)動(dòng)和查詢兩種方式。事件驅(qū)動(dòng)有程序響應(yīng)及時(shí)的優(yōu)點(diǎn),開(kāi)發(fā)者只需在每個(gè)事件中添加自己的程序。查詢方式在某些情況下更便捷,但其實(shí)質(zhì)也是事件驅(qū)動(dòng)。程序的每個(gè)關(guān)鍵功能之后,可以通過(guò)查詢CommEvent屬性值來(lái)查詢事件和錯(cuò)誤。默認(rèn)的控件工具欄沒(méi)有MSComm控件,因此需要打開(kāi)菜單欄“工程”下面的“部件”(跳出如圖3所示的對(duì)話框,找到“Microsoft Comm Control 6.0”,點(diǎn)擊確定完成添加)將MSComm控件加到工具欄中。圖3 添加MSComm控件MSComm控件的許多屬性都是需要開(kāi)發(fā)者根據(jù)自己的需要進(jìn)行設(shè)置。將MSComm控件添加到工程的Form框中,點(diǎn)擊MSComm控件即可在右邊的屬性欄對(duì)其進(jìn)行設(shè)置。MSComm控件有許多重要的屬性,如CommPort設(shè)置端口號(hào);Settings設(shè)置波特率、奇偶檢驗(yàn)、數(shù)據(jù)位和停止位;PortOpen設(shè)置并返回通信端口的狀態(tài),也可以打開(kāi)或關(guān)閉端口;Input從接收緩沖區(qū)返回或刪除字符;Output向傳輸緩沖區(qū)寫(xiě)一個(gè)字符串。根據(jù)本設(shè)計(jì)需要,設(shè)置端口號(hào)CommPort固定為4,Settings設(shè)置為“9600,n,8,1” 12。2.2.3 設(shè)計(jì)程序主界面Visual Basic最大的好處就是他的可視化。對(duì)于主界面的設(shè)計(jì),只需要選擇需要的工具在Fram上添加、移動(dòng),操作簡(jiǎn)單方便。選擇Frame在窗體上分出四個(gè)部分,分別是串口通信、手動(dòng)點(diǎn)樣、自動(dòng)點(diǎn)樣和點(diǎn)樣坐標(biāo)顯示?!按蜷_(kāi)端口”、“回原點(diǎn)”以及上下左右移動(dòng)坐標(biāo)等按鈕采用CommandButton工具。坐標(biāo)輸入和坐標(biāo)顯示采用TextBox工具。為了直觀顯示端口連接狀態(tài),本設(shè)計(jì)使用Shape工具畫(huà)了一個(gè)圓點(diǎn),當(dāng)未連接的時(shí)候顯示黑色,處于連接狀態(tài)的時(shí)候顯示綠色。為了實(shí)時(shí)且直觀展示坐標(biāo)所在位置,本設(shè)計(jì)用PictureBox工具,在其上面畫(huà)出坐標(biāo)和顯示當(dāng)前坐標(biāo)的圓點(diǎn)。主界面設(shè)計(jì)如圖4所示。圖4 主界面設(shè)計(jì)坐標(biāo)的實(shí)現(xiàn)是使用Visual Basic的畫(huà)線功能。Scale 用來(lái)定義刻度,例如Picture1.Scale (-10,,110)-(110, -10),定義左上角座標(biāo)為(-20,120),右下角座標(biāo)為(110,-20)。Line用來(lái)畫(huà)線,例如Picture1.Line (0, 0)-(110, 0), vbBlack,這句話是在(0,0)坐標(biāo)和(110,0)坐標(biāo)之間畫(huà)一條白色的線。DrawWidth 用來(lái)定義線寬。Picture1的坐標(biāo)程序如下所示:Picture1.ClsPicture1.ScaleMode = 5 Picture1.Scale (-10, 110)-(110, -10)繪橫坐標(biāo)Picture1.DrawWidth = 2Picture1.Line (0, 0)-(110, 0), vbBlackPicture1.DrawWidth = 1Picture1.Line (0, 10)-(100, 10), vbWhitePicture1.Line (0, 20)-(100, 20), vbWhite 繪坐標(biāo)縱線Picture1.DrawWidth = 2Picture1.Line (0, 0)-(0, 110), vbBlackPicture1.DrawWidth = 1Picture1.Line (10, 0)-(10, 100), vbWhitePicture1.Line (20, 0)-(20, 100), vbWhite指定位置顯示原點(diǎn)OPicture1.CurrentX = -5Picture1.CurrentY = 0Picture1.Print "O"2.2.4 參數(shù)輸入和控制實(shí)現(xiàn)本點(diǎn)樣控制平臺(tái)的使用必須先打開(kāi)端口,只有串口設(shè)備號(hào)和本平臺(tái)的設(shè)備號(hào)一致時(shí)才能進(jìn)行通信。當(dāng)用戶點(diǎn)擊“打開(kāi)端口”時(shí),先檢查端口號(hào)是否存在或者已經(jīng)被打開(kāi)。當(dāng)端口號(hào)正確之后將端口打開(kāi),即MSComm1.PortOpen = Ture,改變圓點(diǎn)的顏色為綠色,指示端口已經(jīng)被打開(kāi),并且按鍵名稱更改為“關(guān)閉端口”。如果端口不正確,那么根據(jù)錯(cuò)誤代碼,跳出消息框提示用戶錯(cuò)誤原因。端口控制的代碼如下所示:Private Sub Command5_Click()If Command5.Caption = "關(guān)閉端口" Then MSComm1.PortOpen = False Command5.Caption = "打開(kāi)端口" Shape1.FillColor = RGB(0, 0, 0)Else If Test_COM(4) = True Then MSComm1.PortOpen = True Command5.Caption = "關(guān)閉端口" Shape1.FillColor = RGB(0, 255, 0) End IfEnd IfEnd Sub檢測(cè)端口號(hào)函數(shù)Private Function Test_COM(com_num As Integer) As Boolean If Command5.Caption = "打開(kāi)端口" Then On Error GoTo Comm_Error MSComm1.CommPort = com_num 這里接收傳入的串口號(hào) MSComm1.PortOpen = True MSComm1.PortOpen = False Test_COM = True 如果返回1,表示串口可用 Exit FunctionComm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請(qǐng)配置串口號(hào)為COM4!" ElseIf Err.Number = 8005 Then MsgBox "串口已打開(kāi)!" Else MsgBox "其它錯(cuò)誤" End If Test_COM = False 如果出錯(cuò),則返回0 Exit Function Resume Next End IfEnd Function上下左右移動(dòng)按鈕和回原點(diǎn)按鈕控制原理一樣,即當(dāng)有Click點(diǎn)擊事件時(shí),改變坐標(biāo)的值,如“Y+”按鈕被按下時(shí),那么將當(dāng)前坐標(biāo)的Y軸坐標(biāo)加一,然后將改變后的坐標(biāo)值發(fā)送出去。為了在上位機(jī)上直觀看到坐標(biāo)的移動(dòng)軌跡,那么需同時(shí)移動(dòng)坐標(biāo)圓點(diǎn)的位置以及更改TextBox中的坐標(biāo)值。圓點(diǎn)的移動(dòng)用Move函數(shù),如Point1.Move 20, 30是將Point1點(diǎn)的Left移動(dòng)到20刻度處,Top移動(dòng)到30刻度處。數(shù)據(jù)的發(fā)送使用MSComm控件Output屬性。每次點(diǎn)擊操作需要發(fā)送XY兩個(gè)數(shù)值,所以首先定義兩個(gè)字節(jié):Dim sendbyte(1) As Byte。本系統(tǒng)設(shè)計(jì)X軸和Y軸坐標(biāo)都在0-100以內(nèi),為了方便下位機(jī)區(qū)分接收到的數(shù)據(jù),發(fā)送之前將X軸坐標(biāo)值和十六進(jìn)制H80相“與”,這樣X(jué)軸數(shù)據(jù)最高位為1,Y軸數(shù)據(jù)最高位為0,下位機(jī)就可以通過(guò)數(shù)據(jù)的最高位來(lái)判斷收到的數(shù)據(jù)是X軸坐標(biāo)還是Y軸坐標(biāo)。這種做法對(duì)下位機(jī)來(lái)說(shuō)省去了繁瑣的數(shù)據(jù)解析工作,簡(jiǎn)單方便。具體的代碼如下所示:Private Function SendXY(xv As Integer, yv As Integer) As Boolean 發(fā)送xy坐標(biāo) SendXY = False If MSComm1.PortOpen Then sendbyte(0) = xv Or &H80 sendbyte(1) = yv MSComm1.Output = sendbyte SendXY = True End IfEnd Function自動(dòng)采樣需要用戶輸入三組坐標(biāo)值,然后點(diǎn)擊開(kāi)始,數(shù)據(jù)每隔一秒發(fā)送一組,同時(shí)移動(dòng)二維坐標(biāo)顯示區(qū)的圓點(diǎn),并顯示坐標(biāo)移動(dòng)軌跡。因?yàn)樾枰〞r(shí)每秒發(fā)送一次,所以這里用了一個(gè)定時(shí)工具Timer。Timer的Interval用來(lái)設(shè)置定時(shí)時(shí)間,單位為毫秒,本設(shè)計(jì)設(shè)置為1000,也就是一秒中斷一次。當(dāng)用戶輸入三組數(shù)據(jù)并點(diǎn)擊“開(kāi)始”按鈕之后,會(huì)打開(kāi)定時(shí)器,延時(shí)時(shí)間到的時(shí)候進(jìn)入Timer函數(shù),在該函數(shù)中每秒發(fā)送一組坐標(biāo),三組發(fā)送完成之后關(guān)閉定時(shí)器。此外,對(duì)三組數(shù)據(jù)的輸入進(jìn)行限制,當(dāng)輸入為空或者大于100則跳出消息框提示用戶輸入正確的數(shù)值,錯(cuò)誤提示如圖5所示。圖5 輸入超出范圍報(bào)錯(cuò)2.3 錯(cuò)誤處理和調(diào)試界面和代碼編寫(xiě)完成并不代表工作的結(jié)束,最艱苦的就是對(duì)完成的程序的處理和調(diào)試。錯(cuò)誤通常有語(yǔ)法錯(cuò)誤、運(yùn)行錯(cuò)誤和邏輯錯(cuò)誤。語(yǔ)法錯(cuò)誤很容易修改,對(duì)于運(yùn)行錯(cuò)誤和邏輯錯(cuò)誤,可以根據(jù)Visual Basic的錯(cuò)誤提示進(jìn)行修改。舉個(gè)例子來(lái)說(shuō),如果MSComm控件的Settings設(shè)置為“9600,n,9,1”,運(yùn)行時(shí)會(huì)報(bào)錯(cuò),跳出對(duì)話框“Invalid property value”。 有時(shí)候捕獲了錯(cuò)誤代碼,但是不應(yīng)該只向用戶顯示錯(cuò)誤信息代碼,而且大多數(shù)額用戶是不知道這些錯(cuò)誤代碼的含義。為了將錯(cuò)誤代碼翻譯成對(duì)改錯(cuò)誤的描述,可以將捕獲的錯(cuò)誤代碼傳給Visual Basic提供的Error函數(shù),在給函數(shù)完成對(duì)錯(cuò)誤代碼的解釋。在本設(shè)計(jì)中,當(dāng)打開(kāi)不存在的端口時(shí)會(huì)捕獲到錯(cuò)誤代碼8002,這個(gè)錯(cuò)誤號(hào)的含義是無(wú)效的端口號(hào)(comPortInvalid)。在本程序中是這么處理的:On Error GoTo Comm_ErrorComm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請(qǐng)配置串口號(hào)為COM4!"2.4 程序發(fā)布調(diào)試好程序之后,雖然沒(méi)有錯(cuò)誤出現(xiàn),但該應(yīng)用程序還只是源文件,只能在Visual Basic的編譯環(huán)境中運(yùn)行,因此需要制作成可執(zhí)行文件。Visual Basic很容易生成“.exe”文件。方法是選擇“文件”菜單下的“生成Make project1.exe”選項(xiàng),在跳出來(lái)的對(duì)話框中修改文件名,然后確認(rèn)即可,這樣就完成了二維點(diǎn)樣平臺(tái)上位機(jī)的開(kāi)發(fā)工作了1。3 二維點(diǎn)樣平臺(tái)下位機(jī)設(shè)計(jì)3.1 單片機(jī)硬件電路設(shè)計(jì)點(diǎn)樣平臺(tái)下位機(jī)以AT89C51單片機(jī)為控制核心,串口通信模塊用來(lái)接收上位機(jī)發(fā)送的坐標(biāo)數(shù)據(jù),外加兩個(gè)步進(jìn)電機(jī)用來(lái)模擬點(diǎn)樣平臺(tái)的二維電機(jī)控制。下位機(jī)驅(qū)動(dòng)步進(jìn)電機(jī)運(yùn)動(dòng)流程圖如圖6所示圖6下位機(jī)控制步進(jìn)電機(jī)流程圖3.1.1 51單片機(jī)最小系統(tǒng)AT89C51是應(yīng)用廣泛的8位單片機(jī),它擁有4K的FLASH,128字節(jié)的RAM,兩個(gè)16位的定時(shí)器,可編程串行中斷,以及低功耗閑置和掉電模式。AT89C51單片機(jī)最小系統(tǒng)包括單片機(jī)主控、時(shí)鐘電路和復(fù)位電路。如圖7所示。時(shí)鐘電路選用外部12M晶振,并聯(lián)兩個(gè)30pf的電容幫助起振。復(fù)位電路是由電阻、電容和按鍵組成的上電復(fù)位和按鍵復(fù)位。圖7 單片機(jī)最小系統(tǒng)為了直觀顯示系統(tǒng)運(yùn)行狀態(tài)和步進(jìn)電機(jī)運(yùn)行狀態(tài),本設(shè)計(jì)中添加了三個(gè)LED指示燈,用來(lái)指示運(yùn)行狀態(tài),如圖8所示。圖8LED狀態(tài)指示燈3.1.2 串口通信電路RS232接口上通信時(shí)要12V的電壓才能識(shí)別,也就是高低電平為12V和0V,但是51單片機(jī)的高低電平為5V和0V,所以單片機(jī)和電腦的串口通信需要高平轉(zhuǎn)換。實(shí)際的電路中需要加入電平轉(zhuǎn)換芯片,如MAX232或PL2303。本設(shè)計(jì)使用Proteus仿真,Protues帶有串口仿真元件COMPIM,它集成了TTL-RS232電路的。設(shè)好波特率即可實(shí)現(xiàn)串口通信。為了查看單片機(jī)串口通信數(shù)據(jù),仿真中加入Virtual Terminal虛擬終端。該部分電路如圖9所示。圖9 串口通信電路3.1.3 二維步進(jìn)電機(jī)電路為了模擬二維坐標(biāo)電機(jī)的轉(zhuǎn)動(dòng),本系統(tǒng)設(shè)計(jì)了兩組步進(jìn)電機(jī),X軸步進(jìn)電機(jī)和Y軸步進(jìn)電機(jī)。由于單片機(jī)驅(qū)動(dòng)能力有限,最大只有25mA,需要外加驅(qū)動(dòng)電路。ULN2003 是高耐壓、大電流復(fù)合晶體管陣列,由七個(gè)硅NPN 復(fù)合晶體管組成。當(dāng)輸入5V電壓時(shí),輸出電流高達(dá)500mA。所以本設(shè)計(jì)選ULN2003 驅(qū)動(dòng)四線制步進(jìn)電機(jī)。設(shè)計(jì)電路如圖10所示。圖10 步進(jìn)電機(jī)驅(qū)動(dòng)電路3.2 單片機(jī)軟件程序設(shè)計(jì)單片機(jī)軟件部分主要是串口通信程序、步進(jìn)電機(jī)控制程序和接收到數(shù)據(jù)后的邏輯處理和控制程序。3.2.1 51單片機(jī)串口程序51單片機(jī)內(nèi)部有一個(gè)可編程的雙向全雙工串行通信接口。該接口有4種工作方式,以適用于不同場(chǎng)合。波特率由單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器產(chǎn)生,可以用軟件進(jìn)行設(shè)置。 51單片機(jī)內(nèi)部的串口擁有兩個(gè)物理上相互獨(dú)立的接收、發(fā)送緩沖器SBUF,可以同時(shí)接收和發(fā)送數(shù)據(jù),兩個(gè)緩沖器占用同一個(gè)地址(99H)。本設(shè)計(jì)選用波特率9600bit/s,根據(jù)12M時(shí)鐘晶振算出裝載值,并且開(kāi)啟接收中斷。接受到數(shù)據(jù)時(shí)進(jìn)去進(jìn)去中斷函數(shù)進(jìn)行相應(yīng)的處理。串口初始化代碼如下收中斷。當(dāng)接收到數(shù)據(jù)時(shí)進(jìn)去中斷函數(shù)進(jìn)行相應(yīng)的處理。串口初始化代碼如下:void init() TMOD=0x20; /定時(shí)器1工作方式2 TH1=0xfd; /裝載初值,波特率設(shè)置為9600TL1=0xfd; TR1=1; /啟動(dòng)定時(shí)器1SM0=0; /設(shè)置串口工作方式1 SM1=1;REN=1; /允許串口接收EA=1; /開(kāi)總中斷ES=1; /開(kāi)串口中斷串口產(chǎn)生接收中斷,RI硬件置位,在串口接收中斷函數(shù)里必須軟件清除接收中斷標(biāo)志。接收中斷入口函數(shù)如下所示:void ser()interrupt 4RI=0; /接受中斷標(biāo)志位 3.2.2 步進(jìn)電機(jī)程序步進(jìn)電機(jī)工作原理簡(jiǎn)單,本設(shè)計(jì)中選用四線制步進(jìn)電機(jī),每一條線導(dǎo)通,步進(jìn)電機(jī)會(huì)旋轉(zhuǎn)一個(gè)角度,如果順序?qū)?,那么電機(jī)就會(huì)正轉(zhuǎn)。如果逆序?qū)?,那么電機(jī)反轉(zhuǎn),通過(guò)改變線線之間導(dǎo)通時(shí)間可以改變轉(zhuǎn)速。本設(shè)計(jì)的步進(jìn)電機(jī)可以通過(guò)坐標(biāo)判斷而相應(yīng)的正轉(zhuǎn)或翻轉(zhuǎn)。電機(jī)驅(qū)動(dòng)函數(shù)如下:void StepX(char xy, char m, char n);該函數(shù)有三個(gè)參數(shù),第一個(gè)參數(shù)xy用來(lái)選擇電機(jī),xy為1的時(shí)候控制X軸電機(jī),xy為2的時(shí)候控制Y軸電機(jī);第二個(gè)參數(shù)m是調(diào)整的角度;第三個(gè)參數(shù)n是選擇正轉(zhuǎn)反轉(zhuǎn),n為1時(shí)正轉(zhuǎn),n為0時(shí)反轉(zhuǎn)。3.2.3 控制邏輯程序該部分是通過(guò)對(duì)串口接收到的數(shù)據(jù)進(jìn)行解析,然后驅(qū)動(dòng)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)。串口接收到數(shù)據(jù)時(shí)會(huì)觸發(fā)接收中斷,在中斷函數(shù)里不做處理,只把它存到一個(gè)隊(duì)列里,主函數(shù)判斷到隊(duì)列中有數(shù)值的時(shí)候會(huì)依次讀取,并判斷數(shù)值是X軸坐標(biāo)數(shù)據(jù)還是Y軸坐標(biāo)數(shù)據(jù)。X軸Y軸的判斷是通過(guò)數(shù)據(jù)的最高位來(lái)判斷的,因?yàn)樵谠O(shè)計(jì)上位機(jī)的時(shí)候,考慮到數(shù)據(jù)在0-100之間,可以通過(guò)最高位來(lái)標(biāo)識(shí),如果是X軸坐標(biāo)數(shù)據(jù)那么把最高位置1,否則置0。這樣單片機(jī)處理起來(lái)就簡(jiǎn)單方便多了,單片機(jī)接到數(shù)據(jù)之后將最高位去除,然后送給相應(yīng)的步進(jìn)電機(jī)就可以了。步進(jìn)電機(jī)的控制是由步進(jìn)電機(jī)的當(dāng)前坐標(biāo)值和接收到的新的坐標(biāo)值決定的,如果新的坐標(biāo)值大于當(dāng)前坐標(biāo)值,那么正轉(zhuǎn),否則反轉(zhuǎn)。轉(zhuǎn)動(dòng)的角度即是當(dāng)前值和接收的坐標(biāo)值之間的差值。因?yàn)椴竭M(jìn)電機(jī)旋轉(zhuǎn)需要時(shí)間,而上位機(jī)可能會(huì)連續(xù)發(fā)送多個(gè)數(shù)據(jù),所以需要定義一個(gè)隊(duì)列,用來(lái)存儲(chǔ)上位機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù),在主函數(shù)中進(jìn)行讀取和控制。隊(duì)列的定義:#define len 20 /隊(duì)列長(zhǎng)度uchar Valuelen; /存數(shù)數(shù)組uchar head = 0; /隊(duì)列頭uchar tail = 0; /隊(duì)列尾uchar cnt = 0; /隊(duì)列中的數(shù)據(jù)個(gè)數(shù)在接收中斷程序中將數(shù)據(jù)存入隊(duì)列,程序如下:void ser()interrupt 4RI=0; /清除接受中斷標(biāo)志位if(cnt < len)Valuetail=SBUF;if(+tail = len)tail = 0;cnt+;程序中還設(shè)計(jì)了三個(gè)LED狀態(tài)指示燈,系統(tǒng)運(yùn)行時(shí)打開(kāi)LED1,X軸步進(jìn)電機(jī)運(yùn)行時(shí)打開(kāi)LED2,Y軸步進(jìn)電機(jī)運(yùn)行時(shí)打開(kāi)LED3,停止運(yùn)行時(shí)關(guān)閉相應(yīng)的LED。 4 系統(tǒng)測(cè)試4.1 上位機(jī)串口通信測(cè)試使用Virtual Serial Port Driver 6.9虛擬出一對(duì)串口,將COM3和COM4連接起來(lái),這樣就可以在電腦上進(jìn)行串口通信測(cè)試了4。如圖11所示。圖11虛擬串口軟件使用串口調(diào)試助手和本課題設(shè)計(jì)的串口控制平臺(tái)進(jìn)行通信,查看通信是否正常,測(cè)試圖如圖12所示。圖12 上位機(jī)平臺(tái)和串口調(diào)試助手通信測(cè)試 經(jīng)測(cè)試,二維點(diǎn)樣平臺(tái)和串口調(diào)試助手通信正常。手動(dòng)采樣、自動(dòng)采樣和回原點(diǎn)操作都能發(fā)送出正確的二維坐標(biāo)數(shù)值。4.2 下位機(jī)電路和通信測(cè)試驗(yàn)證二維點(diǎn)樣平臺(tái)功能正常之后,使用它和單片機(jī)進(jìn)行通信。單片機(jī)啟動(dòng)仿真按鈕,上位機(jī)測(cè)試手動(dòng)發(fā)送、自動(dòng)發(fā)送和回原點(diǎn)操作,測(cè)試發(fā)送數(shù)據(jù)是否正確,數(shù)據(jù)接收是否正確,電機(jī)轉(zhuǎn)動(dòng)是否正常,以及指示燈狀態(tài)是否正常12。判斷單片機(jī)接收到的數(shù)據(jù)是否和上位機(jī)發(fā)送的一致,可以打開(kāi)Virtual Terminal觀察,串口接收到的數(shù)據(jù)可以實(shí)時(shí)的顯示出來(lái)。測(cè)試如圖13所示。圖13 上位機(jī)和單片機(jī)通信測(cè)試當(dāng)有數(shù)據(jù)接收到時(shí),可以看到步進(jìn)電機(jī)轉(zhuǎn)動(dòng)和LED狀態(tài)燈點(diǎn)亮,轉(zhuǎn)動(dòng)方向和角度和上位機(jī)發(fā)送的一致。整體測(cè)試如圖14所示。圖14 單片機(jī)系統(tǒng)仿真經(jīng)測(cè)試,串口通信部分能接收到正確的數(shù)據(jù),單片機(jī)能驅(qū)動(dòng)X軸和Y軸步進(jìn)電機(jī)正轉(zhuǎn)或反轉(zhuǎn)一定角度,旋轉(zhuǎn)方向和角度都和上位機(jī)發(fā)送的一致,LED燈能正確指示系統(tǒng)和步進(jìn)電機(jī)運(yùn)行狀態(tài)。系統(tǒng)各個(gè)模塊運(yùn)行穩(wěn)定。5 總結(jié)本課題設(shè)計(jì)了基于Visual Basic的二維點(diǎn)樣控制平臺(tái)和基于51單片機(jī)的串口通信控制系統(tǒng)。上位機(jī)實(shí)現(xiàn)串口通信,當(dāng)手動(dòng)點(diǎn)樣、自動(dòng)點(diǎn)樣或回原點(diǎn)操作時(shí),會(huì)將相應(yīng)的X軸和Y軸的坐標(biāo)值傳給下位機(jī)。下位機(jī)是由51單片機(jī)控制一個(gè)系統(tǒng),當(dāng)接收到串口數(shù)據(jù)時(shí),對(duì)數(shù)據(jù)進(jìn)行分析,提取出上位機(jī)發(fā)送的坐標(biāo)值,驅(qū)動(dòng)X軸和Y軸步進(jìn)電機(jī),實(shí)現(xiàn)二維點(diǎn)樣。經(jīng)測(cè)試各部分工作正常,達(dá)到了本課題的設(shè)計(jì)目標(biāo)。由于本人時(shí)間和精力有限,有很多需要改進(jìn)和完善的地方。上位機(jī)控制平臺(tái)可以添加更多功能,界面可以做的更美觀。單片機(jī)控制系統(tǒng)可以選用更強(qiáng)大的單片機(jī),比如低功耗的16單片機(jī)MSP430或者運(yùn)行更快的基于Cotex-M3內(nèi)核的32位STM32單片機(jī)6 9。參考文獻(xiàn): 1李雁翎等.Visual Basic程序設(shè)計(jì)基礎(chǔ)教程(第二版)M人民郵電出版社2012.12楊加國(guó)等.單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)(第二版)M清華大學(xué)出版社2011.103周榮富.電子線路CAD M北京大學(xué)出版社2011.124陳忠平.基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真(第二版) M電子工業(yè)出版社2012.55陳曾平.電路設(shè)計(jì)基礎(chǔ) M北京高等教育出版社.2003:100-110.6肖洪兵.跟我學(xué)用單片機(jī) M北京航空航天大學(xué)出版社.2002.8.7何立民.單片機(jī)應(yīng)用技術(shù)大全 M北京航空航天大學(xué)出版社,1994.8邱光源等.電路基礎(chǔ)M高等教育出版社 1998.9沈紅衛(wèi).基于單片機(jī)的智能系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) M北京:電子工業(yè)出版社,2005.110康華光電子技術(shù)基礎(chǔ)數(shù)字部分 M北京高等教育出版社,2000. 11郁有文,常健 傳感器原理及工程應(yīng)用 M電子科技大學(xué)出版社,2008.712Visual.Basic數(shù)據(jù)采集與串口通信測(cè)控應(yīng)用實(shí)戰(zhàn).李江全等.掃描版13梅麗鳳,王艷秋,汪毓鐸,張軍. 單片機(jī)原理及接口技術(shù) M清華大學(xué)出版社 200614蔡朝洋. 單片機(jī)控制實(shí)習(xí)與專題制作 M北京航空航天大學(xué)出版社2006.1115楊忠寶,康順哲.VB語(yǔ)言程序設(shè)計(jì) M人民郵電出版社2010.1216夏繼強(qiáng).單片機(jī)實(shí)驗(yàn)與實(shí)踐教程 M北京航空航天大學(xué)出版社,2001.17王運(yùn)堅(jiān).VISUAL BASIC 6.0 應(yīng)用指南 M人民郵電出版社199819附錄附錄1 上位機(jī)設(shè)計(jì)界面附錄2 上位機(jī)程序Dim xx, yy As LongDim timercount As IntegerDim sendbyte(1) As BytePrivate Sub Command5_Click()If Command5.Caption = "關(guān)閉端口" Then MSComm1.PortOpen = False Command5.Caption = "打開(kāi)端口" Shape1.FillColor = RGB(0, 0, 0)Else If Test_COM(4) = True Then MSComm1.PortOpen = True Command5.Caption = "關(guān)閉端口" Shape1.FillColor = RGB(0, 255, 0) End IfEnd IfEnd Sub檢測(cè)端口信號(hào)函數(shù)Private Function Test_COM(com_num As Integer) As Boolean If Command5.Caption = "打開(kāi)串口" Then On Error GoTo Comm_Error MSComm1.CommPort = com_num 這里接受傳入的串口號(hào) MSComm1.PortOpen = True MSComm1.PortOpen = False Test_COM = True 如果操作成功,則說(shuō)明當(dāng)前串口可用,返回1,表示串口可用 Exit FunctionComm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請(qǐng)配置串口號(hào)為COM4!" ElseIf Err.Number = 8005 Then MsgBox "串口已打開(kāi)" Else MsgBox "其它錯(cuò)誤" End If Test_COM = False 如果出錯(cuò),則返回0 Exit Function Resume Next End IfEnd FunctionPrivate Function SendXY(xv As Integer, yv As Integer) As Boolean 發(fā)送xy坐標(biāo) SendXY = False If MSComm1.PortOpen Then sendbyte(0) = xv Or &H80 sendbyte(1) = yv MSComm1.Output = sendbyte SendXY = True End IfEnd FunctionPrivate Sub Command8_Click() If (TextX1(intger).Text = "X1" Or TextX1(intger).Text = "" Or TextY1.Text = "Y1" Or TextY1.Text = "" _ Or TextX2.Text = "X2" Or TextX2.Text = "" Or TextY2.Text = "Y2" Or TextY2.Text = "" _ Or TextX3.Text = "X3" Or TextX3.Text = "" Or TextY3.Text = "Y3" Or TextY3.Text = "") Then MsgBox "請(qǐng)輸入三組點(diǎn)樣坐標(biāo)(0-100之間的數(shù)值)!"Else If CInt(TextX1(intger).Text) <= 100 And CInt(TextY1.Text) <= 100 And CInt(TextX2.Text) <= 100 _ And CInt(TextY2.Text) <= 100 And CInt(TextX3.Text) <= 100 And CInt(TextY3.Text) <= 100 Then Timer1.Enabled = True Command8.Enabled = False timercount = 0 Point1.Move CInt(TextX1.Text) - Point1.Width / 2, CInt(TextY1.Text) + Point1.Height / 2 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) Else MsgBox "輸入數(shù)值必須在0-100之間" End IfEnd IfEnd SubPrivate Sub Timer1_Timer()timercount = timercount + 1If timercount = 1 Then Point1.Move CInt(TextX1(intger).Text) - Point1.Width / 2, CInt(TextY1.Text) + Point1.Height / 2 Textx.Text = CInt(TextX1(intger).Text) Texty.Text = CInt(TextY1.Text) SendXY CInt(TextX1(intger).Text), CInt(TextY1.Text)End IfIf timercount = 2 Then Point1.Move CInt(TextX2.Text) - Point1.Width / 2, CInt(TextY2.Text) + Point1.Height / 2 Textx.Text = CInt(TextX2.Text) Texty.Text = CInt(TextY2.Text) SendXY CInt(TextX2.Text), CInt(TextY2.Text)End IfIf timercount = 3 Then Point1.Move CInt(TextX3.Text) - Point1.Width / 2, CInt(TextY3.Text) + Point1.Height / 2 Textx.Text = CInt(TextX3.Text) Texty.Text = CInt(TextY3.Text) SendXY CInt(TextX3.Text), CInt(TextY3.Text) timercount = 0 Timer1.Enabled = False Command8.Enabled = TrueEnd IfEnd SubPrivate Sub CommandYP_Click()Y+操作If (Point1.Top - Point1.Height / 2) < 100 ThenPoint1.Move Point1.Left, Point1.Top + 1Textx.Text = CInt(Point1.Left + Point1.Width / 2)Texty.Text = CInt(Point1.Top - Point1.Height / 2)SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.Top - Point1.Height / 2)End IfEnd SubPrivate Sub CommandXM_Click()X-操作If (Point1.Left + Point1.Width / 2 - 1) > 0 ThenPoint1.Move Point1.Left - 1, Point1.TopTextx.Text = CInt(Point1.Left + Point1.Width / 2)Texty.Text = CInt(Point1.Top - Point1.Height / 2)SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.Top - Point1.Height / 2)End IfEnd SubPrivate Sub CommandXP_Click()X+操作If (Point1.Left + Point1.Width / 2) < 100 ThenPoint1.Move Point1.Left + 1, Point1.TopTextx.Text = CInt(Point1.Left + Point1.Width / 2)Texty.Text = CInt(Point1.Top - Point1.Height / 2)SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.Top - Point1.Height / 2)End IfEnd SubPrivate Sub CommandYM_Click()Y-操作If (Point1.Top - Point1.Height / 2 - 1) > 0 ThenPoint1.Move Point1.Left, Point1.Top - 1Textx.Text = CInt(Point1.Left + Point1.Width / 2)Texty.Text = CInt(Point1.Top - Point1.Height / 2)SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.Top - Point1.Height / 2)End IfEnd Sub回原點(diǎn)操作Private Sub Command7_Click()Point1.Move 0 - Point1.Width / 2, 0 + Point1.Height / 2Textx.Text = CInt(Point1.Left + Point1.Width / 2)Texty.Text = CInt(Point1.Top - Point1.Height / 2)SendXY 0, 0End SubPrivate Sub Form_Load()Picture1.BackColor = vbGreen Picture1.Cls Picture1.ScaleMode = 5 像素 Picture1.Scale (-10, 110)-(110, -10) 定義左上角坐標(biāo)為(-20,120),右下角坐標(biāo)為110,-20) 設(shè)置繪線寬度 Picture1.DrawWidth = 2 繪坐標(biāo)橫線 Picture1.Line (0, 0)-(110, 0), vbBlack Picture1.DrawWidth = 1 Picture1.Line (0, 10)-(100, 10), vbWhite Picture1.Line (0, 20)-(100, 20), vbWhite Picture1.Line (0, 30)-(100, 30), vbWhite Picture1.Line (0, 40)-(100, 40), vbWhite Picture1.Line (0, 50)-(100, 50), vbWhite Picture1.Line (0, 60)-(100, 60), vbWhite Picture1.Line (0, 70)-(100, 70), vbWhite Picture1.Line (0, 80)-(100, 80), vbWhite Picture1.Line (0, 90)-(100, 90), vbWhite Picture1.Line (0, 100)-(100, 100), vbWhite 繪坐標(biāo)縱線 Picture1.DrawWidth = 2 Picture1.Line (0, 0)-(0, 110), vbBlack Picture1.DrawWidth = 1 Picture1.Line (10, 0)-(10, 100), vbWhite Picture1.Line (20, 0)-(20, 100), vbWhite Picture1.Line (30, 0)-(30, 100), vbWhite Picture1.Line (40, 0)-(40, 100), vbWhite Picture1.Line (50, 0)-(50, 100), vbWhite Picture1.Line (60, 0)-(60, 100), vbWhite Picture1.Line (70, 0)-(70, 100), vbWhite Picture1.Line (80, 0)-(80, 100), vbWhite Picture1.Line (90, 0)-(90, 100), vbWhite Picture1.Line (100, 0)-(100, 100), vbWhite 指定位置顯示原點(diǎn)0 Picture1.CurrentX = -5 Picture1.CurrentY = 0 Picture1.Print "O" Picture1.CurrentX = -5 Picture1.CurrentY = 10 Picture1.Print "1O" Picture1.CurrentX = -5 Picture1.CurrentY = 20 Picture1.Print "2O" Picture1.CurrentX = -5 Picture1.CurrentY = 30 Picture1.Print "3O" Picture1.CurrentX = -5 Picture1.CurrentY = 40 Picture1.Print "4O" Picture1.CurrentX = -5 Picture1.CurrentY = 50 Picture1.Print "5O" Picture1.CurrentX = -5 Picture1.CurrentY = 60 Picture1.Print "6O" Picture1.CurrentX = -5 Picture1.CurrentY = 70