二維點(diǎn)樣平臺(tái)設(shè)計(jì)畢業(yè)
《二維點(diǎn)樣平臺(tái)設(shè)計(jì)畢業(yè)》由會(huì)員分享,可在線閱讀,更多相關(guān)《二維點(diǎn)樣平臺(tái)設(shè)計(jì)畢業(yè)(41頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、淮南師范學(xué)院2014屆本科畢業(yè)論文 畢業(yè)論文(設(shè)計(jì)) 論文題目: 二維點(diǎn)樣平臺(tái)設(shè)計(jì) 學(xué)生姓名: 胡大千 學(xué) 號(hào): 1008020210 所在院系: 電氣信息工程學(xué)院 專業(yè)名稱: 自動(dòng)化 屆 次: 2014 屆 指導(dǎo)教師: 苗磊 目 錄 前 言 2 1 總體方案設(shè)計(jì) 2 1.1 總體方案實(shí)現(xiàn)框圖 2 1.2 軟硬件開發(fā)環(huán)境和工具 3 2 二維點(diǎn)樣平臺(tái)上位機(jī)設(shè)計(jì) 3 2.1 Visual Basic語(yǔ)言概述 3 2.2 程序編寫 4 2.3 錯(cuò)誤處理和調(diào)試 10
2、 2.4 程序發(fā)布 11 3 二維點(diǎn)樣平臺(tái)下位機(jī)設(shè)計(jì) 11 3.1 單片機(jī)硬件電路設(shè)計(jì) 11 3.2 單片機(jī)軟件程序設(shè)計(jì) 13 4 系統(tǒng)測(cè)試 16 4.1 上位機(jī)串口通信測(cè)試 16 4.2 下位機(jī)電路和通信測(cè)試 17 5 總結(jié) 18 參考文獻(xiàn): 18 3 淮南師范學(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í)
3、現(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 Platform Students: 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 workin
4、g 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 t
5、he 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ù)顯得日益重要。因此,開發(fā)功能實(shí)用,定位精確度高的定位平臺(tái)運(yùn)動(dòng)系統(tǒng)具有廣闊的應(yīng)用前景。 二維點(diǎn)樣平臺(tái)作為空間三維定位的重要組成部分,也可以說(shuō)是二維定位平臺(tái)在國(guó)內(nèi)外取得了
6、較快的發(fā)展。二維定位平臺(tái)是完成X、Y維精確定位的工作平臺(tái)。它在微機(jī)電系統(tǒng)、微電子、納米制造、納米電子及航空航天等眾多高科技領(lǐng)域都發(fā)揮著重要作用,隨著科技的進(jìn)步,這種重要性日益增強(qiáng)。生活中常見的一些機(jī)器如電子廠車間的高速機(jī)、點(diǎn)膠機(jī)等。 在日常生活中我們能過(guò)接觸最多最常見的二維點(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ī)線
7、圈進(jìn)行涂膠,對(duì)電器柜門進(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)的控制界面(
8、打開串口、手動(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 軟硬件開發(fā)環(huán)境和工具 軟件開發(fā)環(huán)境包括Microsoft Visual Basic 6.0[1] [15] [21]和Keil uVision C51
9、V4.1[2]。硬件開發(fā)環(huán)境是Proteus 7.8 SP2[4]。調(diào)試工具包括Virtual Serial Port Driver 6.9和串口調(diào)試助手V1.0。 Visual Basic是Microsoft公司開發(fā)的一種“可視化”的Windows應(yīng)用程序開發(fā)工具。Microsoft Visual Basic 6.0是用來(lái)開發(fā)上位機(jī)的平臺(tái)。 Keil uVision C51是一種兼容單片機(jī)C語(yǔ)言軟件開發(fā)的系統(tǒng),是由德國(guó)Keil Software公司(ARM公司之一)出品。包含標(biāo)準(zhǔn)的Keil C編譯器、宏匯編器、調(diào)試器、實(shí)時(shí)內(nèi)核、單板計(jì)算機(jī)和仿真器,支持所有的251系列微控制器。在本設(shè)計(jì)中
10、使用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)行通信
11、[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é)、易用的軟件,適用于開發(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開發(fā))和VBA(VB For Application,嵌入
12、式VB語(yǔ)言,用于對(duì)一些流行軟件進(jìn)行二次開發(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ì)工具,程序開發(fā)人員只需按照程序界面的設(shè)計(jì)要求,在窗體中畫出各種“控件”,并設(shè)置這些對(duì)象的屬性,這樣程序設(shè)計(jì)人員就不需要為界面設(shè)計(jì)編寫代碼而浪費(fèi)時(shí)間,只需要編寫實(shí)現(xiàn)程序功能代碼。因此,程序設(shè)計(jì)的
13、效率會(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
14、程序設(shè)計(jì)的核心。 2.2 程序編寫 該部分利用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)目。先打開Visual Basic 6.0,然后打開“文件”中的“新建工程”,然后選擇新建“標(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)目
15、文件 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),開發(fā)者只需在每個(gè)事件中添加自己的程序。查詢方式在某些情況下更便捷,但其實(shí)質(zhì)也是事件驅(qū)動(dòng)。程序的每個(gè)關(guān)鍵功能之后,可以通過(guò)查詢CommEvent屬性值來(lái)查詢事件和錯(cuò)誤。 默認(rèn)的控件工具欄沒(méi)有MSComm控件,因此需要打開菜單欄“工程”下面的“部件”(跳出如圖3所示的對(duì)話框,找到“Microsoft Comm Control 6
16、.0”,點(diǎn)擊確定完成添加)將MSComm控件加到工具欄中。 圖3 添加MSComm控件 MSComm控件的許多屬性都是需要開發(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),也可以打開或關(guān)閉端口;Input從接收緩沖區(qū)返回或刪除字符;Output向傳輸緩沖區(qū)寫一個(gè)字符串。根據(jù)本設(shè)計(jì)需要,設(shè)置端口號(hào)CommPort固定為4,Settings設(shè)置為“9600,
17、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)顯示。“打開端口”、“回原點(diǎn)”以及上下左右移動(dòng)坐標(biāo)等按鈕采用CommandButton工具。坐標(biāo)輸入和坐標(biāo)顯示采用TextBox工具。為了直觀顯示端口連接狀態(tài),本設(shè)計(jì)使用Shape工具畫了一個(gè)圓點(diǎn),當(dāng)未連接的時(shí)候顯示黑色,處于連接狀態(tài)的時(shí)候顯示綠色。為了實(shí)時(shí)且直觀展示坐標(biāo)所在位置,本設(shè)計(jì)用PictureBox工具,在其上面畫出坐標(biāo)
18、和顯示當(dāng)前坐標(biāo)的圓點(diǎn)。主界面設(shè)計(jì)如圖4所示。 圖4 主界面設(shè)計(jì) 坐標(biāo)的實(shí)現(xiàn)是使用Visual Basic的畫線功能。Scale 用來(lái)定義刻度,例如Picture1.Scale (-10,,110)-(110, -10),定義左上角座標(biāo)為(-20,120),右下角座標(biāo)為(110,-20)。Line用來(lái)畫線,例如Picture1.Line (0, 0)-(110, 0), vbBlack,這句話是在(0,0)坐標(biāo)和(110,0)坐標(biāo)之間畫一條白色的線。DrawWidth 用來(lái)定義線寬。Picture1的坐標(biāo)程序如下所示: Picture1.Cls Picture1.ScaleMod
19、e = 5 Picture1.Scale (-10, 110)-(110, -10) ‘繪橫坐標(biāo) Picture1.DrawWidth = 2 Picture1.Line (0, 0)-(110, 0), vbBlack Picture1.DrawWidth = 1 Picture1.Line (0, 10)-(100, 10), vbWhite Picture1.Line (0, 20)-(100, 20), vbWhite ‘繪坐標(biāo)縱線 Picture1.DrawWidth = 2 Picture1.Line (0, 0)-(0, 110), vbBlack
20、 Picture1.DrawWidth = 1 Picture1.Line (10, 0)-(10, 100), vbWhite Picture1.Line (20, 0)-(20, 100), vbWhite 指定位置顯示原點(diǎn)O Picture1.CurrentX = -5 Picture1.CurrentY = 0 Picture1.Print "O" … 2.2.4 參數(shù)輸入和控制實(shí)現(xiàn) 本點(diǎn)樣控制平臺(tái)的使用必須先打開端口,只有串口設(shè)備號(hào)和本平臺(tái)的設(shè)備號(hào)一致時(shí)才能進(jìn)行通信。當(dāng)用戶點(diǎn)擊“打開端口”時(shí),先檢查端口號(hào)是否存在或者已經(jīng)被打開。當(dāng)端口號(hào)正確之后將端口打開,即MSC
21、omm1.PortOpen = Ture,改變圓點(diǎn)的顏色為綠色,指示端口已經(jīng)被打開,并且按鍵名稱更改為“關(guān)閉端口”。如果端口不正確,那么根據(jù)錯(cuò)誤代碼,跳出消息框提示用戶錯(cuò)誤原因。端口控制的代碼如下所示: Private Sub Command5_Click() If Command5.Caption = "關(guān)閉端口" Then MSComm1.PortOpen = False Command5.Caption = "打開端口" Shape1.FillColor = RGB(0, 0, 0) Else If Test_COM(4) = True Th
22、en MSComm1.PortOpen = True Command5.Caption = "關(guān)閉端口" Shape1.FillColor = RGB(0, 255, 0) End If End If End Sub 檢測(cè)端口號(hào)函數(shù) Private Function Test_COM(com_num As Integer) As Boolean If Command5.Caption = "打開端口" Then On Error GoTo Comm_Error MSComm1.CommPort =
23、 com_num 這里接收傳入的串口號(hào) MSComm1.PortOpen = True MSComm1.PortOpen = False Test_COM = True 如果返回1,表示串口可用 Exit Function Comm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請(qǐng)配置串口號(hào)為COM4!" ElseIf Err.Number = 8005 Then MsgBox "串口已打開!"
24、 Else MsgBox "其它錯(cuò)誤" End If Test_COM = False 如果出錯(cuò),則返回0 Exit Function Resume Next End If End 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中的
25、坐標(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軸數(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)單方便。具體的代
26、碼如下所示: 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 If End Function 自動(dòng)采樣需要用戶輸入三組坐標(biāo)值,然后點(diǎn)擊開
27、始,數(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)擊“開始”按鈕之后,會(huì)打開定時(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)試 界面和代碼編寫完成并不代表工作的結(jié)
28、束,最艱苦的就是對(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)打開不
29、存在的端口時(shí)會(huì)捕獲到錯(cuò)誤代碼8002,這個(gè)錯(cuò)誤號(hào)的含義是無(wú)效的端口號(hào)(comPortInvalid)。在本程序中是這么處理的: On Error GoTo Comm_Error … Comm_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”文件。方法是選擇“文件”菜單下的“生成Mak
30、e project1.exe”選項(xiàng),在跳出來(lái)的對(duì)話框中修改文件名,然后確認(rèn)即可,這樣就完成了二維點(diǎn)樣平臺(tái)上位機(jī)的開發(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í)器,可編程串行中斷,以及低功耗閑置和掉電模式。 AT89
31、C51單片機(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
32、。本設(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
33、驅(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í)鐘晶振算出裝載值,并且開啟接
34、收中斷。接受到數(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è)置為9600 TL1=0xfd; TR1=1; //啟動(dòng)定時(shí)器1 SM0=0; //設(shè)置串口工作方式1 SM1=1; REN=1; //允許串口接收 EA=1; //開總中斷 ES=1; //開串口中斷
35、 } 串口產(chǎn)生接收中斷,RI硬件置位,在串口接收中斷函數(shù)里必須軟件清除接收中斷標(biāo)志。接收中斷入口函數(shù)如下所示: void ser()interrupt 4 { RI=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); 該
36、函數(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。
37、這樣單片機(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 Value[len]; //存數(shù)數(shù)組 uchar head = 0;
38、 //隊(duì)列頭 uchar tail = 0; //隊(duì)列尾 uchar cnt = 0; //隊(duì)列中的數(shù)據(jù)個(gè)數(shù) 在接收中斷程序中將數(shù)據(jù)存入隊(duì)列,程序如下: void ser()interrupt 4 { RI=0; //清除接受中斷標(biāo)志位 if(cnt < len) { Value[tail]=SBUF; if(++tail == len) tail = 0; cnt++; } } 程序中還設(shè)計(jì)了三個(gè)LED狀態(tài)指示燈,系統(tǒng)運(yùn)行時(shí)打開LED1,X軸步進(jìn)電機(jī)運(yùn)行時(shí)打開LED2,Y軸
39、步進(jìn)電機(jī)運(yùn)行時(shí)打開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)
40、樣平臺(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ā)送的一致,可以打開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軸步
41、進(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)可以添加更多功能,
42、界面可以做的更美觀。單片機(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.1 [2]楊加國(guó)等.單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)(第二版)[M]清華大學(xué)出版社2011.10 [3]周榮富.電子線路CAD [M]北京大學(xué)出版社2011.12 [4]陳忠平.基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真(第二版) [M]電子工業(yè)出版社2012.5 [5]陳曾平.電路設(shè)計(jì)基礎(chǔ) [M]北
43、京高等教育出版社.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.1 [10]康華光.電子技術(shù)基礎(chǔ)數(shù)字部分 [M]北京高等教育出版社,2000. [11]郁有文,常健 傳感器原理及工程應(yīng)用 [M]電子科技大學(xué)出版社,2008.7 [12][Visual.Basic數(shù)據(jù)采集與串口通信測(cè)控應(yīng)用實(shí)戰(zhàn)].李江全等.掃
44、描版. [13]梅麗鳳,王艷秋,汪毓鐸,張軍. 單片機(jī)原理及接口技術(shù) [M]清華大學(xué)出版社 2006 [14]蔡朝洋. 單片機(jī)控制實(shí)習(xí)與專題制作 [M]北京航空航天大學(xué)出版社2006.11 [15]楊忠寶,康順哲.VB語(yǔ)言程序設(shè)計(jì) [M]人民郵電出版社2010.12 [16]夏繼強(qiáng).單片機(jī)實(shí)驗(yàn)與實(shí)踐教程 [M]北京航空航天大學(xué)出版社,2001. [17]王運(yùn)堅(jiān).VISUAL BASIC 6.0 應(yīng)用指南 [M]人民郵電出版社1998 19 附錄 附錄1 上位機(jī)設(shè)計(jì)界面 附錄2 上位機(jī)程序 Dim xx, yy As Long Dim timercoun
45、t As Integer Dim sendbyte(1) As Byte Private Sub Command5_Click() If Command5.Caption = "關(guān)閉端口" Then MSComm1.PortOpen = False Command5.Caption = "打開端口" Shape1.FillColor = RGB(0, 0, 0) Else If Test_COM(4) = True Then MSComm1.PortOpen = True Command5.
46、Caption = "關(guān)閉端口" Shape1.FillColor = RGB(0, 255, 0) End If End If End Sub 檢測(cè)端口信號(hào)函數(shù) Private Function Test_COM(com_num As Integer) As Boolean If Command5.Caption = "打開串口" Then On Error GoTo Comm_Error MSComm1.CommPort = com_num 這里接受傳入的串口號(hào)
47、 MSComm1.PortOpen = True MSComm1.PortOpen = False Test_COM = True 如果操作成功,則說(shuō)明當(dāng)前串口可用,返回1,表示串口可用 Exit Function Comm_Error: If Err.Number = 8002 Then MsgBox "串口不存在,請(qǐng)配置串口號(hào)為COM4!" ElseIf Err.Number = 8005 Then MsgBox "串口
48、已打開" Else MsgBox "其它錯(cuò)誤" End If Test_COM = False 如果出錯(cuò),則返回0 Exit Function Resume Next End If End Function Private Function SendXY(xv As Integer, yv As Integer) As Boolean 發(fā)送xy坐標(biāo) SendXY = False If MSComm1.
49、PortOpen Then sendbyte(0) = xv Or &H80 sendbyte(1) = yv MSComm1.Output = sendbyte SendXY = True End If End Function Private Sub Command8_Click() If (TextX1(intger).Text = "X1" Or TextX1(intger).Text = "" Or TextY1.Text = "Y1" Or TextY1.Text = "" _
50、 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
51、 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) + Po
52、int1.Height / 2 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) Else MsgBox "輸入數(shù)值必須在0-100之間" End If End If End Sub Private Sub Timer1_Timer() timercount = timercount + 1 If timercount = 1 Then Po
53、int1.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 If If timercount = 2 Then Point1.Move CInt(TextX2.Text) -
54、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 If If timercount = 3 Then Point1.Move CInt(TextX3.Text) - Point1.Width / 2, CInt(TextY3.Text) + Point1.Height /
55、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 = True End If End Sub Private Sub CommandYP_Click() Y+操作 If (Point1.Top - Point1.Height / 2) < 100 T
56、hen Point1.Move Point1.Left, Point1.Top + 1 Textx.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 If End Sub Private Sub CommandXM_Click() X-操作 If (Point1.Le
57、ft + Point1.Width / 2 - 1) > 0 Then Point1.Move Point1.Left - 1, Point1.Top Textx.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 If End Sub Private Sub Comman
58、dXP_Click() X+操作 If (Point1.Left + Point1.Width / 2) < 100 Then Point1.Move Point1.Left + 1, Point1.Top Textx.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 If
59、 End Sub Private Sub CommandYM_Click() Y-操作 If (Point1.Top - Point1.Height / 2 - 1) > 0 Then Point1.Move Point1.Left, Point1.Top - 1 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) SendXY CInt(Point1.Left + Point1.Width / 2), CInt(Point1.T
60、op - Point1.Height / 2) End If End Sub 回原點(diǎn)操作 Private Sub Command7_Click() Point1.Move 0 - Point1.Width / 2, 0 + Point1.Height / 2 Textx.Text = CInt(Point1.Left + Point1.Width / 2) Texty.Text = CInt(Point1.Top - Point1.Height / 2) SendXY 0, 0 End Sub Private Sub Form_Load() Picture1.Ba
61、ckColor = 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,
62、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
63、 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
64、 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)
65、-(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"
66、 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
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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)源安全管理制度
- 安全培訓(xùn)資料:典型建筑火災(zāi)的防治基本原則與救援技術(shù)
- 企業(yè)雙重預(yù)防體系應(yīng)知應(yīng)會(huì)知識(shí)問(wèn)答
- 8 各種煤礦安全考試試題
- 9 危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)管理人員模擬考試題庫(kù)試卷附答案
- 加壓過(guò)濾機(jī)司機(jī)技術(shù)操作規(guī)程
- 樹脂砂混砂工藝知識(shí)總結(jié)
- XXXXX現(xiàn)場(chǎng)安全應(yīng)急處置預(yù)案
- 某公司消防安全檢查制度總結(jié)
- 1 煤礦安全檢查工(中級(jí))職業(yè)技能理論知識(shí)考核試題含答案
- 4.燃?xì)獍踩a(chǎn)企業(yè)主要負(fù)責(zé)人模擬考試題庫(kù)試卷含答案
- 工段(班組)級(jí)安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫(kù)試卷含答案-4
- 建筑起重司索信號(hào)工安全操作要點(diǎn)
- 實(shí)驗(yàn)室計(jì)量常見的30個(gè)問(wèn)問(wèn)答題含解析