


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、.懸掛運動控制系統(E題)設計報告摘要:本懸掛控制系統是一個電機控制系統,控制物體在80cm×100cm的范圍內作直線、圓、尋跡等運動,并且在運動時能顯示運動物體的坐標。設計采用AT89S52單片機作為核心控制器件,采用57BYG007-4型步進電機和高細分步進電機驅動器SM-60作為動力裝置,采用紅外反射式光電傳感器實現畫板上黑色線尋跡檢測,顯示部分用液晶顯示模塊LCD1602實現。關鍵詞:懸掛控制、單片機、 步進電機、 紅外反射式光電傳感器一、設計要求1、任務設計一電機控制系統,控制物體在傾斜(仰角100度)的板上運動。在一白色底板上固定兩個滑輪,兩只電機(固定在板上)通過穿過滑
2、輪的吊繩控制一物體在板上運動,運動范圍為80cm×100cm。物體的形狀不限,質量大于100克。物體上固定有淺色畫筆,以便運動時能在板上畫出運動軌跡。板上標有間距為1cm的淺色坐標線(不同于畫筆顏色),左下角為直角坐標原點, 示意圖如下。2、基本要求:(1)控制系統能夠通過鍵盤或其他方式任意設定坐標點參數;(2)控制物體在80cm×100cm的范圍內作自行設定的運動,運動軌跡長度不小于100cm,物體在運動時能夠在板上畫出運動軌跡,限300秒內完成;(3)控制物體作圓心可任意設定、直徑為50cm的圓周運動,限300秒內完成;(4)物體從左下角坐標原點出發,在150秒內到達設
3、定的一個坐標點(兩點間直線距離不小于40cm)。3、發揮部分(1)能夠顯示物體中畫筆所在位置的坐標;(2)控制物體沿板上標出的任意曲線運動(見示意圖),曲線在測試時現場標出,線寬1.5cm1.8cm,總長度約50cm,顏色為黑色;曲線的前一部分是連續的,長約30cm;后一部分是兩段總長約20cm的間斷線段,間斷距離不大于1cm;沿連續曲線運動限定在200秒內完成,沿間斷曲線運動限定在300秒內完成;(3)其他。4、評分標準項目滿分基本要求設計與總結報告:方案比較、設計與論證,理論分析與計算,電路圖及有關設計文件,測試方法與儀器,測試數據及測試結果分析。50實際制作完成情況50發揮部分完成第(1
4、)項10完成第(2)項中連續線段運動14完成第(2)項中斷續線段運動16其他105、說明1、物體的運動軌跡以畫筆畫出的痕跡為準,應盡量使物體運動軌跡與預期軌跡吻合,同時盡量縮短運動時間;2、若在某項測試中運動超過限定的時間,該項目不得分;3、運動軌跡與預期軌跡之間的偏差超過4cm時,該項目不得分;4、在基本要求(3)、(4)和發揮部分(2)中,物體開始運動前,允許手動將物體定位;開始運動后,不能再人為干預物體運動;5、競賽結束時,控制系統封存上交賽區組委會,測試用板(板上含空白坐標紙) 測試時自帶。二、方案論證與選擇1.核心控制模塊的選擇方案一:FPGA/CPLD方式。即用FPGA/CPLD完
5、成鍵盤定義與識別、電機工作狀態選擇與切換、液晶電路的驅動與控制等功能。這種方案的優點在于系統結構緊湊、操作方便,而且可以使用的I/O口線很多;缺點是調試時需要接很多接線,過程繁瑣,而且使用CPLD時,由于其內部沒有ROM,對功能的實現有所限制。方案二:單片機方式。即由單片機、電機驅動電路及電機等組成系統。使用單片機也可以完成鍵盤定義與識別、電機工作狀選擇與切換等功能,組成的系統規模較小,有一定靈活性,而且可以使用我們比較熟悉的單片機最小系統電路板,減少了工作量。該控制方式需要單片機具有較大的程序存儲量,所以可選擇存儲量為8K的AT89S52單片機。基于以上分析,擬選用方案二。2.電機及其驅動模
6、塊的選擇 電機驅動模塊是本系統的執行機構,用于控制懸掛物體的運動。 方案1:采用普通小型直流電機。普通直流電機由于其自身結構的限制,控制精度很低,無法達到系統要求的指標,這里不予采用。 方案2:采用專用步進電機驅動器及與其配套的步進電機。用這種方案的控制精度、效率和可靠性都很高。根據精度要求選擇方案二。3.黑線探測模塊方案一:采用多路陣列式光敏電阻組成的光電探測器。因為光敏電阻探測到黑線時,黑線上方的電阻值發生變化,經過電壓比較器比較將信號送給單片機處理,從而控制物體做相應的動作。但由于
7、光敏電阻對環境光的識別,容易受到外界環境光的影響。,方案二:采用紅外反射式探測,即用已調的紅外線垂直射到板面,經反射后轉換為電信號送入單片機處理。由于使用的是紅外線,不受外界自然光的影響,循跡效果好。基于上面的討論,選用了抗干擾能力強的方案二。4.顯示方案的選擇方案一:采用LED數碼管顯示器。LED 數碼管亮度高,醒目,但是其電路復雜,顯示信息量較小,且動態掃描需要占用大量單片機時間,無法做到實時顯示。方案二:采用漢字LCD液晶顯示器。LCD有明顯的優點:微功耗、尺寸小,超薄輕巧、顯示信息量大、字跡清晰、美觀、視覺舒適。本設計中采用1602字符型LCM。1602字符型LCM克服了LED數碼管的
8、缺點,具有顯示容量大、占用單片機口線少、節省單片機時間、功耗低等優點,完全符合本系統要求。5.位置傳感模塊 位置傳感模塊用于實現"顯示畫筆位置"的功能。對于這個模塊可以有硬件和軟件兩類解決方案。 方案1:在物體上安裝水平和垂直方向的兩只激光筆,在板邊緣每條坐標線旁邊安裝一光電傳感器,物體坐標所在處的傳感器接收到激光筆,即可確定物體位置。可見本方案共需要180個光電傳感器,造成此方案幾乎不可實現。 方案2:采用軟件的方法確定物體位置。單片機控制物體從某個已知的坐標位置出發,并且記錄步進電機的每一次移動情況,就可以通過一定的
9、算法計算出物體的位置。這種方案沒有位置傳感器,精度較低,但是系統簡單。避免了硬件方案過于復雜的缺點。本設計使用方案2。6.鍵盤模塊 本模塊采用即插型按鍵,接在最小系統的P2.0P2.7,采用了4×4的16點陣鍵盤。可以鍵入19的數字,即可以輸入點的坐標值(X,Y),以及清除,確定,等功能按鍵。三、系統具體設計實現1、硬件電路的設計(1)系統的總體設計方案如圖3-1所示采用AT89S52單片機作為運動物體的控制中心,進行數學計算、對光電傳感器送來的信號進行處理來控制運動物體的運行方向、計算運行物體的坐標位置、LCD數據顯示、鍵盤控制等。圖3-1系統方框圖(2)黑線
10、檢測模塊電路黑線檢測模塊電路圖3-2所示。當紅外線反射式光電傳感器ST178位于黑線之上時,光電開關輸出高電平;反之,輸出低電平。光電傳感器輸出電平后接反相器74LS04以穩定電平和增大驅動能力。 本設計采用8個紅外傳感器實現對黑線的檢測,通過并口轉串口芯片74LS165將數據串行傳送到單片機。圖3-2 黑線檢測模塊電路(3)鍵盤電路本設計采用4x4矩陣鍵盤實現數字的輸入和功能的選擇,鍵盤接到AT89S52單片機的P2口,通過單片機對鍵盤的行列掃描實現按鍵的識別。鍵盤電路如圖3-3所示:圖3-3 4x4鍵盤電路對應的按鍵碼如下:789/456/123/清除0確認/(4)單片機電源電路單片機控制
11、電路、紅外傳感器模塊電路和液晶顯示模塊均采用+5V供電,采用集成穩壓芯片7805來實現,電路圖如圖3-4所示。圖3-4單片機電源電路(5)步進電機驅動電路本設計采用57BYG007-4型步進電機和專用高細分步進電機驅動器SM-60作為動力裝置。57BYG007-4型步進電機為四相混合式步進電機,由于實驗室現有電機驅動器為兩相的,固步進電機作兩相使用,步距腳為1.8度,通過步進電機驅動器SM-60細分實現步距腳0.9度。電機驅動器SM-60接口如下:GND端為外接直流電源,直流電壓為12v A+,A-端為電機A相,B+,B-端為電機B相。 +COM端為光電隔離電源公共端,接單
12、片機供電電源為+5V, CP端為脈沖信號,下降沿有效。 DIR端為方向控制信號,電平高低決定電機運行方向。 FREE端為驅動器使能,高電平或懸空電機可運行。低電平驅動器無電流輸出,電機處于自由狀態。2、軟件及算法設計(1)物體位置的計算圖 3-5 物體位置示意圖坐標點參數的計算將畫筆所在的位置設定為整個物體的位置。如圖3-5設定物體位置的初值坐標為(X,Y)L1= L2= 設電機A 的步進為a cm, 電機B的步進為b cm,物體高度為h cm。如圖8為物體在畫板某一位置,則有:解得X軸點位置和h為 則Y軸點位置Y=115-h控制
13、物體從一點到另一點的實現就是當X、Y已知條件,求電機的步進過程。由圖8 解得: 解得 (cm) (cm)由此,利用軟件實現以上算法來分別控制兩個步進電機的步進a,b,這樣就可以向控制系統輸入起點坐標和終點坐標讓物體在畫板置任意行走。(2)直線算法:目前畫直線的算法也算是有很多,比如:逐點比較直線插補,脈沖增量插補和數據采集插補,本設計根據實際所學知識,選擇了逐點比較直線插補法,具體如下:逐點比較法的基本原理是,在刀具按要求軌跡運動加工零件輪廓的過程中,不斷比較刀具與被加工零件輪廓之間的相對位置,并根據比較結果決定下一步的進給方向,使刀具向減小偏差的方向進給。圖
14、3-6 第一象限直線如圖3-6所示,設直線的起點為坐標原點,終點坐標為A(,),點m (,)為加工點(動點)。定義偏差公式為 。若=0,表明點m在OA直線段上;若>0,表明點m在OA直線段上方,即點m 處;若<0, 表明點m在OA直線段下方,即點m處。由此可得第一象限直線逐點比較法插補的原理是:從直線的起點出發,當0時,沿+x軸方向走一步;當<0時,沿+y軸方向走一步;當兩方向所走的步數與終點坐標(,)相等時,發出終點到信號,停止插補。可以將上面所定義的偏差公式進一步簡化,推導出偏差的遞推公式。 當0時,沿+x軸方向進給一步, (1)當<0時,沿+y軸方向進給一步, (
15、2)式(1)和式(2)是簡化后偏差的計算公式,在公式中只有一次加法或減法運算,新加工點的偏差都可由前一點偏差和終點坐標相加或相減得到。本體設計中采用以上原理,不過對于非原點開始的直線,采用起點坐標歸零思想,結果也證明了改思路的可行性。(3)畫圓算法:畫圓算法采用圓弧插補法。圓弧插補法也是在繪圖系統中常用的一種方法,它和直線插補法原理相同,也是逐點比較算法。若 F=0,表明加工點在圓弧上;F0,表明加工點在圓弧外;F0,表明加工點在圓弧內。若 F0,為逼近圓弧,下一步向-X軸進給一步,并計算出新的偏差值;F0,為逼近圓弧,下一步向+Y 軸進給一步,并計算出新的偏差值。各象限插補公式如下在實際操作
16、中,可以以圓心為假設的坐標原點,再根據上面的原理設計算法。(4)循跡黑線的探測及循跡算法在以畫筆為中心,半徑20毫米的圓周上安裝了8個反射式紅外對管作為軌跡探測傳感器,安裝方式如圖3所示。07654321-1+1圖3-7 軌跡探測傳感器安裝方式圖3-8 方向調整示意圖根據圖3-7安裝方式及安裝半徑,只要系統的采樣頻率足夠高,軌跡是無法脫離探測范圍的。但由于使用了8個傳感器,不同傳感器信號間的組合太多,使用一般窮舉辦法難以實現循跡控制,因此自己設計了一套循跡算法。如圖3-8,定義了物體循跡時運動的8個方向,圖中黑箭頭(1號方向上)表示物體當前的循跡方向。循跡時,使用變量Direct表示當前物體運
17、動方向,物體每次運動時先按當前方向向前步進一段固定的距離,然后檢測采樣傳感器信號并調整Direct,再沿新的Direct方向步進。由于所給的曲線是連續的,所以每次調整Direct只能是1或1。如圖3-8所示,Direct在需向左偏時則Direct加1,需向右偏則減1,繼續前進則保持不變。由于只有8個運動方向,所以對Direct的運算需在模8的范圍內(07)進行。現在考慮如何決定左偏或右偏的問題,使用上述調整辦法只需要根據Direct的前后方向及左右方向的四個信號對Direct調整即可。如圖4中僅需根據1、3、5、7方向的信號對Direct調整。由于每個方向上±1和保持不變的傳感器信號
18、是一定的,故對8個方向上的調整策略用一個靜態數組的形式保存起來,調整時直接查表即可,方便編程。這種循跡算法大大地減少了循跡運動的調試時間,為整個作品成功的完成打下了基礎。當每次步進的距離較小時,若在Direct方向的前、左、右三處的傳感器同時發現是白紙,則表明傳感器探測到了曲線的間斷部分或盡頭,此時應根據前幾次(23次)Direct的平均值作為探索方向,再向前步進23步,保證循跡的正確停止。在取平均值時,需對7à0和0à7的轉變作特殊處理,否則可能出錯。實踐證明,按照上面的辦法循跡迅速穩定,并且不會受交叉線的影響。由于軌跡線有一定寬度,實際的軌跡不可能轉折得十分迅速,當步進
19、距離較小時,甚至可以完成銳角的循跡。本系統使用的步進距離是5毫米,效果很好。(5)系統主程序流程框圖上電,初始化液晶顯示等待按鍵,選擇所需的功能1直線2正方形 3圓 4循跡輸入起 點終點坐 標按照事先設定運 行設定圓心手動到 點手動到循跡起始 點執 行 部 件返回顯示程序按鍵確認,進入對應程序圖3-9系統主程序流程框圖四、系統測試1測試儀器DT9205A型數字萬用表;秒表、卷尺;+12V直流穩壓電源。2測量結果(1)直線測試次數設定起點坐標設定終點坐標實際坐標誤差用時1(0,0)(50,50)(50.2,51.3)2cm75s2(0,0)(80,99)(80.1,100.5)1.5cm134s
20、(2)畫圓測試次數圓心坐標半徑最大誤差用時1(25,25)251cm130s2(3)循跡測試連續線段線長間斷線段長度60cm46cm用時28.1s24.3s3誤差分析及改進措施(1)坐標轉換的誤差。(X,Y)坐標向(L,R)坐標轉換時使用幾何分析的方法,但為了處理方便,將懸掛滑輪視為一點,沒有考慮其半徑。本作品以減小其半徑的辦法降低誤差。同時,進行坐標變換時,單片機在計算精度上也會引進誤差,由于使用浮點運算,該誤差不大。(2)筆尖和懸掛點不在同一平面引入誤差,應盡量使三點處于與地板平行的平面以減小誤差。(3)步進電機的步進脈沖個數和步進線距離之間的折算誤差。作品使用了直接測量一段距離和步進個數
21、再求平均值的辦法降低誤差。(4)牽引線引入的誤差,包括拉伸誤差和由松弛產生的誤差。改進措施是使用變形系數小的牽引線和增加懸掛物體的重量。(5)繞線產生的誤差。解決辦法是根據力學分析采用機械的辦法保證繞線不重疊,并且使用半徑小的牽引線使繞線在橫向延伸的距離減少,從而減少誤差。(6)讀數誤差。初始定位時需提供物體坐標,測量結果需人為讀數,這會引入誤差。五、結論本設計以AT89S52單片機為核心,利用軟件編程,實現了定點直線運動,圓形軌跡運動,間斷黑線循跡以及坐標的實時顯示。測試結果表明,本設計很好地完成了題目基本部分和發揮部分的全部要求,速度快、精度高。整個系統從軟件到硬件都體現優良簡約的風格。主
22、要有以下幾個優點:(1) 采用步進電機及專用細分驅動器,懸繩收放控制較精確;(2) 程序算法優良,易于誤差處理和提高精確度;(3) LCD液晶顯示,界面友好。 六、參考文獻1、王瓊.單片機原理及應用.合肥工業大學出版社2、求是科技.單片機典型模塊設計實例導航.人民郵電出版社3、 高吉祥.全國大學生電子設計競賽培訓教程 - 數字系統與自動控制系統設計.電子工業出版社附錄一 電路原理圖1、控制部分電路圖:2、循跡模塊電路圖:附錄二 源代碼/*/*include <reg52.h>*include <intrins.h>*include <string.h>*in
23、clude <math.h>*define uchar unsigned char /無符號字符類型定義*define uint unsigned int /無符號整數類型定義/*/步進電機驅動器引腳連接定義sbit Motor_Left_CP =P10; /左步進電機脈沖sbit Motor_Left_DIR=P11; /左步進電機方向控制端sbit Motor_Right_CP =P12; /右步進電機脈沖sbit Motor_Right_DIR=P13; /右步進電機方向控制端sbit Motor_FREE =P14; /電機使能端(高電平有效,低電平是電機處于自由狀態)sb
24、it SHLD = P15;sbit S_clk = P16;sbit S_data = P17;sbit jiesu=P36;/*/*define pai 3.141592 /圓周率*define a 15/80cm x 100cm場地到兩電機連線的垂直距離(厘米)*define b 15/80cm x 100cm場地到邊線(頂端滑輪和電機的連線)的垂直距離(厘米)*define r 0.8276 /滑輪半徑(厘米)*define stepz 0.0122 /左步進電機每步弧長(厘米)*define stepy 0.0122 /右進步點擊每步弧長(厘米)*define step 0.0125
25、 /步進電機每步弧長(厘米)*define radius 25 /圓周半徑長度*define Motor_FREE 1/*/LCD1602液晶模塊引腳連接定義*define LCD_Data P0 /1602的8位數據線連接到P0口sbit RS=P35; /1602的數據/命令選擇端RS連接到P1.0sbit RW=P34; /1602的讀/寫選擇端連接到P1.1sbit EN=P33; /1602的使能信號引腳連接到P1.2/*/uchar code kaiji016=">>> WELCOME! <<<"uchar code kaij
26、i116="LOADDOWNING."uchar code table016="1.Line 2 Rectan"uchar code table116="3.Circu 4.Follow" uchar code table316=" Draw a Line "uchar code table416="Draw Circularity"uchar code table516="Follow the Line "uchar code table616="( , );(
27、, ) "uchar code table716="( , ); r= cm " uchar code table816="( cm, cm) "uchar code table916=" ENTER to Begin "uchar code table1016="Executing . x"uchar code table1116="Rectan perform. "uchar code table1216="(25,25)-(50,25)"uchar code
28、table1316="(50,50)-(25,50)"uchar code table1416="have completed!"uchar code wrong16="Wrong Coordinate"uchar code agian16="Input Agian " "uchar code number10="0123456789" /*/int x0,y0,x1,y1;/*/函數聲明void Delay_1ms(int time); /延時1ms*timevoid LCD1602
29、_Busy_Check(void); /LCD1602忙檢查函數void Write_LCD1602(uchar udata,bit command); /LCD1602寫數據和寫指令函數void Write_Byte_Locate(uchar x,uchar y,uchar udata); /把數據顯示在LCD1602的指定位置void Init_LCD1602();/LCD1602初始化函數uchar Keyboard_Scan(void); /鍵盤掃描函數,返回鍵盤掃描碼uchar Scan_Code_Transform(uchar scancode); /鍵碼識別函數/void Mot
30、ot_ld(int );void Motor_Left_Step(bit Dir); /左電機轉動一步,Dir=0時反轉(順時針),即松開線;Dir=1時正轉(逆時針),即收緊線void Motor_Right_Step(bit Dir);/右電機轉動一步,Dir=0時反轉(順時針),即收緊線;Dir=1時正轉(逆時針),即松開線void Draw_Circular(int x,int y); / 畫圓函數void currentdisp(int line,int x,int y);/當前顯示void linedisp(int,int,int,int,int); /當前直線點顯示void di
31、splay(uchar table16,bit line);/提示顯示void line(int,int,int,int);/畫直線函數void Draw_line();/void buchang(float,float,float,float);/確定左右電機移動的步數void Returndata();/讀取對光二極管的值void follow();/循跡函數void zouxiang(int);/循跡電機驅動函數/*/延時函數,延時時間=1ms*time(晶振12MHz)void Delay_1ms(int time) uchar i,j; do for(i=0;i<15;i+)
32、for(j=0;j<20;j+); while(time-)!=0); /*/*LCD1602液晶操作函數部分*/LCD1602液晶檢查忙函數void LCD1602_Busy_Check(void) EN=0; RW=1; RS=0; EN=1; while(LCD_Data&&0x80=1); EN=0; Delay_1ms(1);/*/LCD1602寫數據和寫指令函數/把寫數據和指令二個合在一起,用一個變量command來判斷void Write_LCD1602(uchar udata,bit command) LCD1602_Busy_Check(); /忙檢查
33、RS=command;/command=0時寫入指令,command=1時寫入數據 RW=0; /把LCD設置成寫狀態 EN=1; /E高脈沖,把數據/指令寫入 LCD_Data=udata; EN=0;/*/把數據顯示在LCD1602的指定位置/x,y是坐標,udata是需要顯示的數據/x不能大于15,每行最多顯示16字符/y不能大于1,最多顯示2行void Write_Byte_Locate(uchar x,uchar y,uchar udata) if(y)x+=0x40;/判斷顯示哪行,顯示第二行LCD存儲區加40H x+=0x80; /如果沒有加0X40則顯示第一行 Write_LC
34、D1602(x,0); /寫指令 Write_LCD1602(udata,1);/寫顯示數據/*/LCD1602初始化函數void Init_LCD1602() Write_LCD1602(0x38,0); /顯示模式設置 Delay_1ms(20); Write_LCD1602(0x01,0);/清除屏幕 Write_LCD1602(0x06,0);/顯示光標移動設置 Write_LCD1602(0x0c,0);/開顯示/*/*鍵盤掃描和鍵碼識別函數部分*/鍵盤掃描函數,返回鍵盤掃描碼/P2.0P2.3輸出,P2.4P2.7輸入uchar Keyboard_Scan(void) uchar
35、scancode,tmpcode; P2=0xf0; while(P2=0xf0); /等待有鍵按下 Delay_1ms(20); /延時10ms去抖動 if(P2!=0xf0) scancode=0xfe; /逐行掃描 while(scancode!=0xef) /還沒有掃描完4行 P2=scancode; if(P2&0xf0)!=0xf0) /本列有鍵按下 tmpcode=(P2&0xf0)|(scancode&0x0f); while(P2&0xf0)!=0xf0); /等待鍵釋放 return(tmpcode); else scancode=(scan
36、code<<1)|0x01; return(0);/*/鍵碼識別函數uchar Scan_Code_Transform(uchar scancode) switch (scancode) /*將按鍵碼轉換成鍵值*/ case 0xde: return 0; case 0xed: return 1; case 0xdd: return 2; case 0xbd: return 3; case 0xeb: return 4; case 0xdb: return 5; case 0xbb: return 6; case 0xe7: return 7; case 0xd7: return
37、8; case 0xb7: return 9; case 0xee: return 10; default : return 0xff; /*/*步進電機基本操作部分*/左電機轉動一步,Dir=0時反轉(順時針),即松開線;Dir=1時正轉(逆時針),即收緊線void Motor_Left_Step(bit Dir) Motor_Left_DIR=Dir; Motor_Left_CP=1; Delay_1ms(1); Motor_Left_CP=0; Delay_1ms(1);/*/右電機轉動一步,Dir=0時反轉(順時針),即收緊線;Dir=1時正轉(逆時針),即松開線void Motor_
38、Right_Step(bit Dir) Motor_Right_DIR=Dir; Motor_Right_CP=1; Delay_1ms(1); Motor_Right_CP=0; Delay_1ms(1);/*/* 圓形當前坐標顯示模塊*/void currentdisp(int line,int x,int y) Write_Byte_Locate(1,line,numberx/10);Write_Byte_Locate(2,line,numberx%10); Write_Byte_Locate(4,line,numbery/10); Write_Byte_Locate(5,line,nu
39、mbery%10);/* * 直線當前坐標實現模塊* */* “(,);(,)” */void linedisp(int line,int x,int y,int xz,int yz) display(table6,line); Write_Byte_Locate(1,line,numberx/10); Write_Byte_Locate(2,line,numberx%10); Write_Byte_Locate(4,line,numbery/10); Write_Byte_Locate(5,line,numbery%10); Write_Byte_Locate(9,line,numberxz
40、/10); Write_Byte_Locate(10,line,numberxz%10); Write_Byte_Locate(12,line,numberyz/10); Write_Byte_Locate(13,line,numberyz%10); /*/*功能實現部分*/* 步數確定函數 */void buchang(float x,float y,float nextx,float nexty)/,int *znum1,int *ynum1) float zb,yb;int znum,ynum,fhz,fhy; zb=(sqrt(114.3-y)*(114.3-y)+(14.4+x)*(
41、14.4+x)-sqrt(114.3-nexty)*(114.3-nexty)+(14.4+nextx)*(14.4+nextx)/stepz; yb=(sqrt(114.3-y)*(114.3-y)+(94.4-x)*(94.4-x)-sqrt(114.3-nexty)*(114.3-nexty)+(94.4-nextx)*(94.4-nextx)/stepy; if(zb>0)znum=(int)(zb+0.5);fhz=1;elseznum=abs(int)(zb-0.5); fhz=0;if(yb>0)ynum=(int)(yb+0.5); fhy=0;elseynum=a
42、bs(int)(yb-0.5); fhy=1;while(znum-) Motor_Left_Step(fhz);while(ynum-) Motor_Right_Step(fhy); /return 0; /*float sumz1=0.0;float sumz2=0.0;float sumy1=0.0;float sumy2=0.0;void buchang(float x,float y,float nextx,float nexty)/,int *znum1,int *ynum1) float zb,yb; float d;int znum,ynum,fhz,fhy; zb=(sqrt
43、(114.7-y)*(114.7-y)+(14.4+x)*(14.4+x)-sqrt(114.7-nexty)*(114.7-nexty)+(14.4+nextx)*(14.4+nextx)/stepz; yb=(sqrt(114.5-y)*(114.5-y)+(94.4-x)*(94.4-x)-sqrt(114.5-nexty)*(114.5-nexty)+(94.4-nextx)*(94.4-nextx)/stepy; if(zb>0) d=zb-(int)(zb); sumz1+=d;fhz=1; if(sumz1>=1) sumz1-=1; znum=(int)(zb)+1
44、; else znum=(int)(zb); elsed=zb-(int)(zb); sumz2+=d;fhz=0; if(sumz2<=-1) sumz2+=1; znum=abs(int)(zb)-1); else znum=abs(int)(zb); if(yb>0)d=yb-(int)(yb); sumy1+=d;fhy=0; if(sumy1>=1) sumy1-=1; ynum=(int)(yb)+1; else ynum=(int)(yb); elsed=yb-(int)(yb); sumy1+=d;fhy=1; if(sumy1<=-1) sumy1+=
45、1; ynum=abs(int)(yb)+1; else ynum=abs(int)(yb); while(znum-) Motor_Left_Step(fhz);while(ynum-) Motor_Right_Step(fhy); /return 0; */*/* 畫直線函數 */void line(int a0,int b0,int a1,int b1) intt; float x,y,nextx,nexty; int zx,zy,sx,sy; int fm; intt1; t=(int)(abs(a1-a0)+abs(b1-b0)/(8*step); x=0.0;y=0.0;fm=0;
46、 sx=a1-a0; sy=b1-b0; zx=abs(a1-a0); zy=abs(b1-b0); while(cnt-) if(sx>0)&&(sy>=0) if(fm>=0) if(fm=0) nextx=x+8*step; nexty=y;buchang(x+a0),(y+b0),(nextx+a0+0.003),(nexty+b0);fm=fm-zy;else nextx=x+8*step; nexty=y; buchang(x+a0),(y+b0),(nextx+a0),(nexty+b0); fm=fm-zy; else nexty=y+8*step; nextx=x;buchang(x+a0),(y+b0),(nextx+a0),(nexty+b0);fm=fm+zx; else if(sx<=0)&&(sy>0) /2 if(fm>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國塑膠復合行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國圖像引導放射治療(IGRT)行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國商業暖通空調行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國吸油襪行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國雙氯西林行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國單頻Wi-Fi芯片組行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國包裝專用設備行業市場發展分析及發展趨勢與投資研究報告
- 2025-2030中國減肥茶行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國獸醫人工授精行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國保健品直銷行業市場發展分析及前景趨勢與投資研究報告
- 幼兒園集中教育活動培訓
- DB37-T 5307-2024 住宅小區供水設施建設標準
- 公司安全生產管理制度培訓
- 2025年八省聯考新高考數學試卷真題答案詳解(精校打印)
- 燃氣管道及設施保護專項方案
- DB31-T 1298-2021 既有多層住宅加裝電梯安全技術要求
- 在登高作業時要注意的安全事項
- 【MOOC】數學建模精講-西南交通大學 中國大學慕課MOOC答案
- 地下管廊電纜施工方案
- 2024年10月1日新中國成立75周年主題班會課件
- 咖啡店店長招聘協議樣本
評論
0/150
提交評論