版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、懸掛運動控制系統(tǒng)(E題)設計報告摘要:本懸掛控制系統(tǒng)是一個電機控制系統(tǒng),控制物體在80cm100cm的圍作直線、圓、尋跡等運動,并且在運動時能顯示運動物體的坐標。設計采用AT89S52單片機作為核心控制器件,采用57BYG007-4型步進電機和高細分步進電機驅(qū)動器SM-60作為動力裝置,采用紅外反射式光電傳感器實現(xiàn)畫板上黑色線尋跡檢測,顯示部分用液晶顯示模塊LCD1602實現(xiàn)。關(guān)鍵詞:懸掛控制、單片機、 步進電機、 紅外反射式光電傳感器一、設計要求1、任務設計一電機控制系統(tǒng),控制物體在傾斜(仰角100度)的板上運動。在一白色底板上固定兩個滑輪,兩只電機(固定在板上)通過穿過滑輪的吊繩控制一物體
2、在板上運動,運動圍為80cm100cm。物體的形狀不限,質(zhì)量大于100克。物體上固定有淺色畫筆,以便運動時能在板上畫出運動軌跡。板上標有間距為1cm的淺色坐標線(不同于畫筆顏色),左下角為直角坐標原點, 示意圖如下。2、基本要求:(1)控制系統(tǒng)能夠通過鍵盤或其他方式任意設定坐標點參數(shù);(2)控制物體在80cm100cm的圍作自行設定的運動,運動軌跡長度不小于100cm,物體在運動時能夠在板上畫出運動軌跡,限300秒完成;(3)控制物體作圓心可任意設定、直徑為50cm的圓周運動,限300秒完成;(4)物體從左下角坐標原點出發(fā),在150秒到達設定的一個坐標點(兩點間直線距離不小于40cm)。3、發(fā)
3、揮部分(1)能夠顯示物體中畫筆所在位置的坐標;(2)控制物體沿板上標出的任意曲線運動(見示意圖),曲線在測試時現(xiàn)場標出,線寬1.5cm1.8cm,總長度約50cm,顏色為黑色;曲線的前一部分是連續(xù)的,長約30cm;后一部分是兩段總長約20cm的間斷線段,間斷距離不大于1cm;沿連續(xù)曲線運動限定在200秒完成,沿間斷曲線運動限定在300秒完成;(3)其他。4、評分標準項目滿分基本要求設計與總結(jié)報告:方案比較、設計與論證,理論分析與計算,電路圖與有關(guān)設計文件,測試方法與儀器,測試數(shù)據(jù)與測試結(jié)果分析。50實際制作完成情況50發(fā)揮部分完成第(1)項10完成第(2)項中連續(xù)線段運動14完成第(2)項中斷
4、續(xù)線段運動16其他105、說明1、物體的運動軌跡以畫筆畫出的痕跡為準,應盡量使物體運動軌跡與預期軌跡吻合,同時盡量縮短運動時間;2、若在某項測試中運動超過限定的時間,該項目不得分;3、運動軌跡與預期軌跡之間的偏差超過4cm時,該項目不得分;4、在基本要求(3)、(4)和發(fā)揮部分(2)中,物體開始運動前,允許手動將物體定位;開始運動后,不能再人為干預物體運動;5、競賽結(jié)束時,控制系統(tǒng)封存上交賽區(qū)組委會,測試用板(板上含空白坐標紙) 測試時自帶。二、方案論證與選擇1.核心控制模塊的選擇方案一:FPGA/CPLD方式。即用FPGA/CPLD完成鍵盤定義與識別、電機工作狀態(tài)選擇與切換、液晶電路的驅(qū)動與
5、控制等功能。這種方案的優(yōu)點在于系統(tǒng)結(jié)構(gòu)緊湊、操作方便,而且可以使用的I/O口線很多;缺點是調(diào)試時需要接很多接線,過程繁瑣,而且使用CPLD時,由于其部沒有ROM,對功能的實現(xiàn)有所限制。方案二:單片機方式。即由單片機、電機驅(qū)動電路與電機等組成系統(tǒng)。使用單片機也可以完成鍵盤定義與識別、電機工作狀選擇與切換等功能,組成的系統(tǒng)規(guī)模較小,有一定靈活性,而且可以使用我們比較熟悉的單片機最小系統(tǒng)電路板,減少了工作量。該控制方式需要單片機具有較大的程序存儲量,所以可選擇存儲量為8K的AT89S52單片機?;谝陨戏治?,擬選用方案二。2.電機與其驅(qū)動模塊的選擇 電機驅(qū)動模塊是本系統(tǒng)的執(zhí)行機構(gòu),用于控制懸掛物體的
6、運動。 方案1:采用普通小型直流電機。普通直流電機由于其自身結(jié)構(gòu)的限制,控制精度很低,無法達到系統(tǒng)要求的指標,這里不予采用。 方案2:采用專用步進電機驅(qū)動器與與其配套的步進電機。用這種方案的控制精度、效率和可靠性都很高。根據(jù)精度要求選擇方案二。3.黑線探測模塊方案一:采用多路陣列式光敏電阻組成的光電探測器。因為光敏電阻探測到黑線時,黑線上方的電阻值發(fā)生變化,經(jīng)過電壓比較器比較將信號送給單片機處理,從而控制物體做相應的動作。但由于光敏電阻對環(huán)境光的識別,容易受到外界環(huán)境光的影響。,方案二:采用紅外反射式探測,即用已調(diào)的紅外線垂直射到板面,經(jīng)反射后轉(zhuǎn)換為電信號送入單片機處理。由于使用的是紅外線,不
7、受外界自然光的影響,循跡效果好?;谏厦娴挠懻?,選用了抗干擾能力強的方案二。4.顯示方案的選擇方案一:采用LED數(shù)碼管顯示器。LED 數(shù)碼管亮度高,醒目,但是其電路復雜,顯示信息量較小,且動態(tài)掃描需要占用大量單片機時間,無法做到實時顯示。方案二:采用漢字LCD液晶顯示器。LCD有明顯的優(yōu)點:微功耗、尺寸小,超薄輕巧、顯示信息量大、字跡清晰、美觀、視覺舒適。本設計中采用1602字符型LCM。1602字符型LCM克服了LED數(shù)碼管的缺點,具有顯示容量大、占用單片機口線少、節(jié)省單片機時間、功耗低等優(yōu)點,完全符合本系統(tǒng)要求。5.位置傳感模塊位置傳感模塊用于實現(xiàn)顯示畫筆位置的功能。對于這個模塊可以有硬件
8、和軟件兩類解決方案。方案1:在物體上安裝水平和垂直方向的兩只激光筆,在板邊緣每條坐標線旁邊安裝一光電傳感器,物體坐標所在處的傳感器接收到激光筆,即可確定物體位置??梢姳痉桨腹残枰?80個光電傳感器,造成此方案幾乎不可實現(xiàn)。方案2:采用軟件的方法確定物體位置。單片機控制物體從某個已知的坐標位置出發(fā),并且記錄步進電機的每一次移動情況,就可以通過一定的算法計算出物體的位置。這種方案沒有位置傳感器,精度較低,但是系統(tǒng)簡單。避免了硬件方案過于復雜的缺點。本設計使用方案2。6.鍵盤模塊本模塊采用即插型按鍵,接在最小系統(tǒng)的P2.0P2.7,采用了44的16點陣鍵盤??梢枣I入19的數(shù)字,即可以輸入點的坐標值(
9、X,Y),以與清除,確定,等功能按鍵。三、系統(tǒng)具體設計實現(xiàn)1、硬件電路的設計(1)系統(tǒng)的總體設計方案如圖3-1所示采用AT89S52單片機作為運動物體的控制中心,進行數(shù)學計算、對光電傳感器送來的信號進行處理來控制運動物體的運行方向、計算運行物體的坐標位置、LCD數(shù)據(jù)顯示、鍵盤控制等。圖3-1 系統(tǒng)方框圖(2)黑線檢測模塊電路黑線檢測模塊電路圖3-2所示。當紅外線反射式光電傳感器ST178位于黑線之上時,光電開關(guān)輸出高電平;反之,輸出低電平。光電傳感器輸出電平后接反相器74LS04以穩(wěn)定電平和增大驅(qū)動能力。 本設計采用8個紅外傳感器實現(xiàn)對黑線的檢測,通過并口轉(zhuǎn)串口芯片74LS165將數(shù)據(jù)串行傳送
10、到單片機。圖3-2 黑線檢測模塊電路(3)鍵盤電路本設計采用4x4矩陣鍵盤實現(xiàn)數(shù)字的輸入和功能的選擇,鍵盤接到AT89S52單片機的P2口,通過單片機對鍵盤的行列掃描實現(xiàn)按鍵的識別。鍵盤電路如圖3-3所示:圖3-3 4x4鍵盤電路對應的按鍵碼如下:789/456/123/清除0確認/(4)單片機電源電路單片機控制電路、紅外傳感器模塊電路和液晶顯示模塊均采用+5V供電,采用集成穩(wěn)壓芯片7805來實現(xiàn),電路圖如圖3-4所示。圖3-4單片機電源電路(5)步進電機驅(qū)動電路本設計采用57BYG007-4型步進電機和專用高細分步進電機驅(qū)動器SM-60作為動力裝置。57BYG007-4型步進電機為四相混合式
11、步進電機,由于實驗室現(xiàn)有電機驅(qū)動器為兩相的,固步進電機作兩相使用,步距腳為1.8度,通過步進電機驅(qū)動器SM-60細分實現(xiàn)步距腳0.9度。電機驅(qū)動器SM-60接口如下:GND端為外接直流電源,直流電壓為12vA+,A-端為電機A相,B+,B-端為電機B相。+COM端為光電隔離電源公共端,接單片機供電電源為+5V,CP端為脈沖信號,下降沿有效。DIR端為方向控制信號,電平高低決定電機運行方向。FREE端為驅(qū)動器使能,高電平或懸空電機可運行。低電平驅(qū)動器無電流輸出,電機處于自由狀態(tài)。2、軟件與算法設計(1)物體位置的計算圖 3-5 物體位置示意圖坐標點參數(shù)的計算將畫筆所在的位置設定為整個物體的位置。
12、如圖3-5設定物體位置的初值坐標為(X,Y)L1= L2= 設電機A 的步進為a cm, 電機B的步進為b cm,物體高度為h cm。如圖8為物體在畫板某一位置,則有:解得X軸點位置和h為則Y軸點位置Y=115-h控制物體從一點到另一點的實現(xiàn)就是當X、Y已知條件,求電機的步進過程。由圖8 解得:解得 (cm)(cm)由此,利用軟件實現(xiàn)以上算法來分別控制兩個步進電機的步進a,b,這樣就可以向控制系統(tǒng)輸入起點坐標和終點坐標讓物體在畫板置任意行走。(2)直線算法:目前畫直線的算法也算是有很多,比如:逐點比較直線插補,脈沖增量插補和數(shù)據(jù)采集插補,本設計根據(jù)實際所學知識,選擇了逐點比較直線插補法,具體如
13、下:逐點比較法的基本原理是,在刀具按要求軌跡運動加工零件輪廓的過程中,不斷比較刀具與被加工零件輪廓之間的相對位置,并根據(jù)比較結(jié)果決定下一步的進給方向,使刀具向減小偏差的方向進給。圖3-6 第一象限直線如圖3-6所示,設直線的起點為坐標原點,終點坐標為A(,),點m (,)為加工點(動點)。定義偏差公式為 。若=0,表明點m在OA直線段上;若0,表明點m在OA直線段上方,即點m 處;若0, 表明點m在OA直線段下方,即點m處。由此可得第一象限直線逐點比較法插補的原理是:從直線的起點出發(fā),當0時,沿+x軸方向走一步;當0時,沿+y軸方向走一步;當兩方向所走的步數(shù)與終點坐標(,)相等時,發(fā)出終點到信
14、號,停止插補??梢詫⑸厦嫠x的偏差公式進一步簡化,推導出偏差的遞推公式。 當0時,沿+x軸方向進給一步, (1)當0時,沿+y軸方向進給一步, (2)式(1)和式(2)是簡化后偏差的計算公式,在公式中只有一次加法或減法運算,新加工點的偏差都可由前一點偏差和終點坐標相加或相減得到。本體設計中采用以上原理,不過對于非原點開始的直線,采用起點坐標歸零思想,結(jié)果也證明了改思路的可行性。(3)畫圓算法:畫圓算法采用圓弧插補法。圓弧插補法也是在繪圖系統(tǒng)中常用的一種方法,它和直線插補法原理一樣,也是逐點比較算法。若 F=0,表明加工點在圓弧上;F0,表明加工點在圓弧外;F0,表明加工點在圓弧。若 F0,為
15、逼近圓弧,下一步向-X軸進給一步,并計算出新的偏差值;F0,為逼近圓弧,下一步向+Y 軸進給一步,并計算出新的偏差值。各象限插補公式如下在實際操作中,可以以圓心為假設的坐標原點,再根據(jù)上面的原理設計算法。(4)循跡黑線的探測與循跡算法在以畫筆為中心,半徑20毫米的圓周上安裝了8個反射式紅外對管作為軌跡探測傳感器,安裝方式如圖3所示。07654321-1+1圖3-7 軌跡探測傳感器安裝方式 圖3-8 方向調(diào)整示意圖根據(jù)圖3-7安裝方式與安裝半徑,只要系統(tǒng)的采樣頻率足夠高,軌跡是無法脫離探測圍的。但由于使用了8個傳感器,不同傳感器信號間的組合太多,使用一般窮舉辦法難以實現(xiàn)循跡控制,因此自己設計了一
16、套循跡算法。如圖3-8,定義了物體循跡時運動的8個方向,圖中黑箭頭(1號方向上)表示物體當前的循跡方向。循跡時,使用變量Direct表示當前物體運動方向,物體每次運動時先按當前方向向前步進一段固定的距離,然后檢測采樣傳感器信號并調(diào)整Direct,再沿新的Direct方向步進。由于所給的曲線是連續(xù)的,所以每次調(diào)整Direct只能是1或1。如圖3-8所示,Direct在需向左偏時則Direct加1,需向右偏則減1,繼續(xù)前進則保持不變。由于只有8個運動方向,所以對Direct的運算需在模8的圍(07)進行?,F(xiàn)在考慮如何決定左偏或右偏的問題,使用上述調(diào)整辦法只需要根據(jù)Direct的前后方向與左右方向的
17、四個信號對Direct調(diào)整即可。如圖4中僅需根據(jù)1、3、5、7方向的信號對Direct調(diào)整。由于每個方向上1和保持不變的傳感器信號是一定的,故對8個方向上的調(diào)整策略用一個靜態(tài)數(shù)組的形式保存起來,調(diào)整時直接查表即可,方便編程。這種循跡算法大減少了循跡運動的調(diào)試時間,為整個作品成功的完成打下了基礎。當每次步進的距離較小時,若在Direct方向的前、左、右三處的傳感器同時發(fā)現(xiàn)是白紙,則表明傳感器探測到了曲線的間斷部分或盡頭,此時應根據(jù)前幾次(23次)Direct的平均值作為探索方向,再向前步進23步,保證循跡的正確停止。在取平均值時,需對70和07的轉(zhuǎn)變作特殊處理,否則可能出錯。實踐證明,按照上面的
18、辦法循跡迅速穩(wěn)定,并且不會受交叉線的影響。由于軌跡線有一定寬度,實際的軌跡不可能轉(zhuǎn)折得十分迅速,當步進距離較小時,甚至可以完成銳角的循跡。本系統(tǒng)使用的步進距離是5毫米,效果很好。(5)系統(tǒng)主程序流程框圖上電,初始化液晶顯示等待按鍵,選擇所需的功能1直線2正方形 3圓 4循跡輸入起 點終點坐 標按照事先設定運 行設定圓心手動到 點手動到循跡起始 點執(zhí) 行 部 件返回顯示程序按鍵確認,進入對應程序圖3-9系統(tǒng)主程序流程框圖四、系統(tǒng)測試1測試儀器DT9205A型數(shù)字萬用表;秒表、卷尺;+12V直流穩(wěn)壓電源。2測量結(jié)果(1) 直線測試次數(shù)設定起點坐標設定終點坐標實際坐標誤差用時1(0,0)(50,50
19、)(50.2,51.3)2cm75s2(0,0)(80,99)(80.1,100.5)1.5cm134s(2) 畫圓測試次數(shù)圓心坐標半徑最大誤差用時1(25,25)251cm130s2(3) 循跡測試連續(xù)線段線長間斷線段長度60cm46cm用時28.1s24.3s3誤差分析與改進措施(1)坐標轉(zhuǎn)換的誤差。(X,Y)坐標向(L,R)坐標轉(zhuǎn)換時使用幾何分析的方法,但為了處理方便,將懸掛滑輪視為一點,沒有考慮其半徑。本作品以減小其半徑的辦法降低誤差。同時,進行坐標變換時,單片機在計算精度上也會引進誤差,由于使用浮點運算,該誤差不大。(2)筆尖和懸掛點不在同一平面引入誤差,應盡量使三點處于與地板平行的
20、平面以減小誤差。(3)步進電機的步進脈沖個數(shù)和步進線距離之間的折算誤差。作品使用了直接測量一段距離和步進個數(shù)再求平均值的辦法降低誤差。(4)牽引線引入的誤差,包括拉伸誤差和由松弛產(chǎn)生的誤差。改進措施是使用變形系數(shù)小的牽引線和增加懸掛物體的重量。(5)繞線產(chǎn)生的誤差。解決辦法是根據(jù)力學分析采用機械的辦法保證繞線不重疊,并且使用半徑小的牽引線使繞線在橫向延伸的距離減少,從而減少誤差。(6)讀數(shù)誤差。初始定位時需提供物體坐標,測量結(jié)果需人為讀數(shù),這會引入誤差。五、結(jié)論本設計以AT89S52單片機為核心,利用軟件編程,實現(xiàn)了定點直線運動,圓形軌跡運動,間斷黑線循跡以與坐標的實時顯示。測試結(jié)果表明,本設
21、計很好地完成了題目基本部分和發(fā)揮部分的全部要求,速度快、精度高。整個系統(tǒng)從軟件到硬件都體現(xiàn)優(yōu)良簡約的風格。主要有以下幾個優(yōu)點:(1) 采用步進電機與專用細分驅(qū)動器,懸繩收放控制較精確;(2) 程序算法優(yōu)良,易于誤差處理和提高精確度;(3) LCD液晶顯示,界面友好。 六、參考文獻1、王瓊.單片機原理與應用.工業(yè)大學2、科技.單片機典型模塊設計實例導航.人民郵電3、 高吉祥.全國大學生電子設計競賽培訓教程 - 數(shù)字系統(tǒng)與自動控制系統(tǒng)設計.電子工業(yè)附錄一 電路原理圖1、控制部分電路圖:2、循跡模塊電路圖:附錄二 源代碼/*/#include #include #include #include #
22、define uchar unsigned char /無符號字符類型定義#define uint unsigned int /無符號整數(shù)類型定義/*/步進電機驅(qū)動器引腳連接定義sbit Motor_Left_CP =P10; /左步進電機脈沖sbit Motor_Left_DIR=P11; /左步進電機方向控制端sbit Motor_Right_CP =P12; /右步進電機脈沖sbit Motor_Right_DIR=P13; /右步進電機方向控制端sbit Motor_FREE =P14; /電機使能端(高電平有效,低電平是電機處于自由狀態(tài))sbit SHLD = P15;sbit S_
23、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 /步進電機每步弧長(厘米)#defi
24、ne radius 25 /圓周半徑長度#define Motor_FREE 1/*/LCD1602液晶模塊引腳連接定義#define LCD_Data P0 /1602的8位數(shù)據(jù)線連接到P0口sbit RS=P35; /1602的數(shù)據(jù)/命令選擇端RS連接到P1.0sbit RW=P34; /1602的讀/寫選擇端連接到P1.1sbit EN=P33; /1602的使能信號引腳連接到P1.2/*/uchar code kaiji016= WELCOME! ;uchar code kaiji116=LOADDOWNING.;uchar code table016=1.Line 2 Rectan;
25、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=( , );( , ) ;uchar code table716=( , ); r= cm ; uchar code table816=( cm, cm) ;uchar code table916= ENTER to Begin ;uchar code table10
26、16=Executing . x;uchar code table1116=Rectan perform. ;uchar code table1216=(25,25)-(50,25);uchar code 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;/*/函數(shù)聲明void D
27、elay_1ms(int time); /延時1ms*timevoid LCD1602_Busy_Check(void); /LCD1602忙檢查函數(shù)void Write_LCD1602(uchar udata,bit command); /LCD1602寫數(shù)據(jù)和寫指令函數(shù)void Write_Byte_Locate(uchar x,uchar y,uchar udata); /把數(shù)據(jù)顯示在LCD1602的指定位置void Init_LCD1602(); /LCD1602初始化函數(shù)uchar Keyboard_Scan(void); /鍵盤掃描函數(shù),返回鍵盤掃描碼uchar Scan_Code
28、_Transform(uchar scancode); /鍵碼識別函數(shù)/void Motot_ld(int );void Motor_Left_Step(bit Dir); /左電機轉(zhuǎn)動一步,Dir=0時反轉(zhuǎn)(順時針),即松開線;Dir=1時正轉(zhuǎn)(逆時針),即收緊線void Motor_Right_Step(bit Dir);/右電機轉(zhuǎn)動一步,Dir=0時反轉(zhuǎn)(順時針),即收緊線;Dir=1時正轉(zhuǎn)(逆時針),即松開線void Draw_Circular(int x,int y); / 畫圓函數(shù)void currentdisp(int line,int x,int y);/當前顯示void li
29、nedisp(int,int,int,int,int); /當前直線點顯示void display(uchar table16,bit line);/提示顯示void line(int,int,int,int);/畫直線函數(shù)void Draw_line();/void buchang(float,float,float,float);/確定左右電機移動的步數(shù)void Returndata();/讀取對光二極管的值void follow();/循跡函數(shù)void zouxiang(int);/循跡電機驅(qū)動函數(shù)/*/延時函數(shù),延時時間=1ms*time(晶振12MHz)void Delay_1ms(
30、int time) uchar i,j; do for(i=0;i15;i+) for(j=0;j20;j+); while(time-)!=0); /*/*LCD1602液晶操作函數(shù)部分*/LCD1602液晶檢查忙函數(shù)void LCD1602_Busy_Check(void) EN=0; RW=1; RS=0; EN=1; while(LCD_Data&0x80=1); EN=0; Delay_1ms(1);/*/LCD1602寫數(shù)據(jù)和寫指令函數(shù)/把寫數(shù)據(jù)和指令二個合在一起,用一個變量command來判斷void Write_LCD1602(uchar udata,bit command)
31、LCD1602_Busy_Check(); /忙檢查 RS=command;/command=0時寫入指令,command=1時寫入數(shù)據(jù) RW=0; /把LCD設置成寫狀態(tài) EN=1; /E高脈沖,把數(shù)據(jù)/指令寫入 LCD_Data=udata; EN=0;/*/把數(shù)據(jù)顯示在LCD1602的指定位置/x,y是坐標,udata是需要顯示的數(shù)據(jù)/x不能大于15,每行最多顯示16字符/y不能大于1,最多顯示2行void Write_Byte_Locate(uchar x,uchar y,uchar udata) if(y)x+=0x40;/判斷顯示哪行,顯示第二行LCD存儲區(qū)加40H x+=0x80
32、; /如果沒有加0X40則顯示第一行 Write_LCD1602(x,0); /寫指令 Write_LCD1602(udata,1);/寫顯示數(shù)據(jù)/*/LCD1602初始化函數(shù)void Init_LCD1602() Write_LCD1602(0x38,0); /顯示模式設置 Delay_1ms(20); Write_LCD1602(0x01,0);/清除屏幕 Write_LCD1602(0x06,0);/顯示光標移動設置 Write_LCD1602(0x0c,0);/開顯示/*/*鍵盤掃描和鍵碼識別函數(shù)部分*/鍵盤掃描函數(shù),返回鍵盤掃描碼/P2.0P2.3輸出,P2.4P2.7輸入uchar
33、 Keyboard_Scan(void) uchar 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 sca
34、ncode=(scancode0)znum=(int)(zb+0.5);fhz=1;elseznum=abs(int)(zb-0.5); fhz=0;if(yb0)ynum=(int)(yb+0.5); fhy=0;elseynum=abs(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
35、(float x,float y,float nextx,float nexty)/,int *znum1,int *ynum1) float zb,yb; float d;int znum,ynum,fhz,fhy; zb=(sqrt(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)+(
36、94.4-nextx)*(94.4-nextx)/stepy; if(zb0) d=zb-(int)(zb); sumz1+=d;fhz=1; if(sumz1=1) sumz1-=1; znum=(int)(zb)+1; else znum=(int)(zb); elsed=zb-(int)(zb); sumz2+=d;fhz=0; if(sumz20)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
37、;fhy=1; if(sumy10)&(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(sx0) /2 if(fm=0) nextx=x-8*step; nexty=y; buchang(x+a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 思想政治教師個人總結(jié)
- 外出創(chuàng)業(yè)租房合同范例
- 快遞代收合同范例
- 公司產(chǎn)權(quán)商鋪出售合同模板
- 中藥飲片行業(yè)探析
- 家居裝修公司合同范例
- 建設工程合同范例共幾版
- 個人茶莊轉(zhuǎn)讓合同范例
- 工程施工正式合同范例
- 劇組法律顧問合同范例
- 婦科疾病護理質(zhì)量標準
- 房票買賣合同范本
- 讀《星星之火可以燎原》有感
- 初中歷史-侵略與反抗復習課教學設計學情分析教材分析課后反思
- 企業(yè)安全管理實用讀本(第2版)
- DB13T 5714-2023 道路運輸企業(yè)安全生產(chǎn)風險分級管控規(guī)范
- “五愛”記心中愛祖國愛人民愛勞動愛科學愛社會主義課件
- 人教b版高中數(shù)學選修1-1同步練習題及答案全冊匯編
- 高考政治經(jīng)濟常識題答題技巧
- 幼兒園小班健康:《睡覺要有好習慣》 課件
- 研究生職業(yè)生涯規(guī)劃
評論
0/150
提交評論