畢業設計懸掛控制系統_第1頁
畢業設計懸掛控制系統_第2頁
畢業設計懸掛控制系統_第3頁
畢業設計懸掛控制系統_第4頁
畢業設計懸掛控制系統_第5頁
已閱讀5頁,還剩36頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、懸掛運動控制系統摘要:本系統以單片機89C52為核心採用了步進電機控制裝置、紅外尋迷傳感 裝置來實現一個對懸桂物體運動控制系貌。友好的操作界面和靈活的監控 方式是本設計的兩大特色,增強了系筑的實用性。關謎詞:步進電機;纟I外傳感器;懸桂運動。一、方案掄證與選擇1.題目任務要求及相關指標的分林課題任務要求中,要求在150杪內到這設定的一個坐標點以員300杪內畫冏 或按照設定的珈迷運動謔要求找們對左右兩f電HlSIt靈活、準確、快速的腔 制,并目有和諧的人機交換功能,才能筋滿足要求。因此選擇合適的電機以及運 用有效的算法來對電機進行控抽是必需的,我門通il建立合理的數學模塑,使兩 電機腔制的繩長依

2、照我們建立的函數關系變化,來實觀懸桂物體在板上以各種方 式運動。課題任務中,要求控制物體沿極上標出的任恵曲線運動,通11紅外傳感器尋 迷,實現跟蹤運動。而顯示畫筆的(5置坐標,則可通ilWK繩長變化與原點坐標 之間的函數關系來it算,求岀當前點的橫縱坐標,并在LCD上顯示出來。2.方案的比較與選擇(1) 電機的選擇方案一:直潦電機呆用單片機和A/D轉換構成系貌,控制普通電機的步數和旋轉方向,可以 考慮達林管組成的H型PWM電路。用單片機腔制這林管使之工作在占空比可調 的開關狀態,精確調整電機轉速,減小因慣性,速18,步距角il大而引足的調整 溟差,這到改變繩長的要求,缺貞是通il控制直流電機胞

3、動模挾將脈沖信號轉化 為模信號,需要將單片機輸出的序列脈沖轉換,延長了控射的時同,導致腔制 精度差;關鍵是直浦電機不能即停,使直流電機不能精確定也,滿足不了控制淚 差x圍為設定值的要求。方案二:步進電機用單片機產生脈沖信號,脈沖信號的占空比為0.5左右,脈沖信號經過功 率赦大控制步進電機,控制信號為數字信號,不再需要數/模轉換;步進電機的 速度易于控胃,具有快速啟/停能力,可在一碼那同實現啟動或停止;它的轉動 角度嚴恪可腔,一般悄況步距角可以降低到1.5。以下,而釆用專用驅動塊,可以 更加的精確。步進電機麗時短,定位準*,療鷹贏 可控胃徃亂逆樣我們就可 以根據驅動脈沖總數來廿算繩子所走過的路程

4、,從而得岀坐標和時間。根據本課題技術指標要求,翎體質量夫于100克即可,步進電機的輸岀功 率足”滿足負裁要求;同時根據題目要求運動珈迷弓預期珈迷偏差不超過4cm, 這對電機有績確的要求,而宜流電機難以達到這一岳標。綜上方案的比較分折, 故而本設廿采用方案二。(2)8掛物體定位方氏的選擇方案一:坐標查詢方式在80cmx100c m的白色底極上,等分為8000個方恪,視其為8000 f點, 毎個直都有橫縱坐標(a, b)兩個數搖,即其有16000個數據,而底板左右對稱, 所以只需記錄一半的數據,即8000個,這樣我們只需事先計算岀懸桂物It在毎 一點對應的兩IM繩長(x, y),將迪8000個數據

5、,即4000個確定的繩長數組記 錄在單片機中,這樣就可以對所設定的坐標,采用查詢的方式,找到相應點所對 應的數組(X, y),與當前點對應的繩長做差,得到所需的繩長改變量,從而控 制電機使物體到達該點。此方案的優點在于查陶方便快捷,準確性高,動作運動迅速,但準備工作 的廿算量太大,而且需要通過一塊片外的ROM來存帽如此版大的數組集,不方 便實現。方案二:公式it算方式根據題目中給岀的各段長度,可以很容易的得到底板上各點坐標與兩電機 分別對應的繩長之間的函數關系,這樣可以根據給定點的坐標求岀各繩長或根據 繩長求出點的坐標,能夠實現各項指標,實現懸掛物體的精確定位,滿足題目的 要求。垓方案數學模型

6、清斷,可以在較短時同內完成嵬長或坐標的廿算,使電機快麓動作,無須片外ROM存儲,而目占用單片機內存少,空同利用率較髙,可操作性棗。妹上方案的比較分折,根搖本課題技術岳標要求,用公式廿算的方法比較容易實現,故而本設計采用方案二。(3) 曹*方案曲選擇方案一:切分擁合法首先通過周長廿算,將冏等分為3000等卅,然后依次廿算初始點到下一 點的坐標增量,通過增量來控制兩個電機的運動,從而調整繩長,實現點對點的 帝確楊動,也就是說所畫的冏是由3000段小線段與之合連接起來的。這需要 我們有足昵快的運算速度,與很高的蒂度,依次精確廿算岀毎一次步進的西離, 橫縱坐標和兩段繩子的改變量,占用內存很大,廿算時同

7、較長,反應到電機上就 是電機的運動時斷時續,畫園的用時很長,線段相對光滑,(0是累枳淚差比較大。方案二:查詢計算法第一步要求我們能舉酉出一個題中要求的標準圓,然后將這條軌速對應的 各點坐標與相鄰坐標的増量處理后詳細記錄,并且存儲到單片機內,當我們需要 畫冏的時候,只需要調用這些標準增量,通過公式廿算岀繩長的改變量,就可以 很精準的得到:左右電機從當前點運動到相鄰點的脈沖數目與方向。這樣就可以 實觀快速、準確、美觀的SI«O上述兩種方案中,方案二可以避免復雜的it算,縮短電機的等待時間,沒 有誤差的累枳,反應快速、靈活,H面連續、美觀,實現起來也比較方便。因此, 我們SIO用上述的方案

8、二。(4) 尋逑傳感器的選擇發揮部分尋迷傳感器可哄選擇的種類較多,主要有WTffi種:方案一:光電傳感器光電傳感器有多種類型,按其外表結構有對射塑、EH月反射塑、擴散反射 型;按光溫色分類R有紅色、綠色、藍色、紅外以及半導體窗射等,其自身帶有 內置的或分離的赦大器。根據題目的要求,要使所選傳感器可以很好區分白色與 黑色,有名種光電傳感器可供選擇,某些光源色為紅色或綠色的光電傳感器由干 其對黑色習白色的反射率相差很大,所以可以很容易的識別。但是其fftffiB貴, 結構偏大,外圍機械部分比較夏雜。方案二:紅外傳感器紅外傳感器是我們非常常用的一種傳感器,也具有很強的對黑色習白色的 辨識能力。由于紅

9、外光波長比可見光長,因此受可見光的影晌較小。同時纟I外系 師具有以下優點:尺寸小、質量輕,能有效的抗可見光波段的仿裝,對輔助裝 置要求最少,對人眼無fjj害。當然虹外光也有一定的麒點,如大氣、潮富的天氣、 霧和汶對它有衰減作用。它貝有休枳小、靈敏度高、線性好等特點,外圍電路簡 單,安裝起來方便,電源要求不高。用它作為近距離傳感器是最理想的,電胳設 計簡單、性能隱定可靠。綜上方案的比較分折,根據本課題技術指標要求,故而本設it采用方案二。(4)尋迷傳慰器布周的選擇方案一:5傳感器梅花狀分布果用上、中、下、左、右各裝一個紅外傳感器來探測黑線,常態讓中間的 傳感器保持在黑線上面,其余四個方向的傳感器

10、用來告知控制系統:該傳感器所 在的位置,是否為黑線上方。若在,則控制畫筆向該傳感器所在的方位務動,否 則保持原來的務動方向不變,直到某個傳感器探測到黑線,并發岀信號為止。這種方法雖然所用器件少,但是可靠性相對較差,精度較低。方案二:8傳感器九宮圖分布在九宮格中間的右上、右、上、右下、左上、左下、左、下這八個方向裝 上纟I外傳感器,并按照上面的魚序設置優先級。優先級的設定,取決干坐標原點 相對于運動區域的所在位置。這樣的話,我們就可以很容易的探測出黑線的前進 趨向,依照優先級來控制電機的運動,可以準確快速實現尋迷功能,能嚴精準追 蹤1.5cm1.8cm寬的黑色珈迷。比較以上兩種方案,方案一的探測

11、X圍顯然要小,一旦傳感器組處干黑線 的同一邊時,就很難重新自糾正,尤其是碰到有同Bi的曲線時,就很難腔制它的 運動;而方案二則可以探測較大的x圍,實現多方位探測,腔制思想較之方案一 要先進的多,便干實現pid控制。(5) 小結經過仔細比較與論證,我們確定了整個腔翎系貌各個模塊的最終方案如T:電機的選擇:步進電機,帶專用驅動模挾,通11單片機輸出脈沖信號來 控制;懸桂物體定位方法的選擇:公式廿算方法,來出我坐標對應曲繩長,用 步進電機實現繩長的改變。酉圓的算法:存儲、査詢it算,預先存儲標準圓的相應増量,以便18時 調用。發揮部分尋迷傳廉器的覽擇:紅外傳廉器發揮部分尋迷傳愿器布同方法的選擇:九官

12、圖分布二、系統總體按廿方案及實現方框圖系貌以89C52單片機為核心,JK以其他外圍電路實現較髙精度定位。由于只需控 制左右兩個電機,所以其外18電路較簡單,由于要實現高精度的控制,而哽件上 的誤差影響太名,所以需呆用合理程序實現優良性能。系箜原理圖三、理掄分林與廿算該設it以單片機控制的兩個IScn步進電機為基本構架,兩電機腔制各自的繩長實現懸掛物休的二維務 動。根據題目將滑輪近做為一段炭 差在最后單片機做出補償),我們根.1廠 *115*-b' / yL/-5-zfj2r- /-1?Ocn95-a18如圖3.1中各線之間的關系,得到關系式80T:x2=(f/ + 15)2+(115-

13、Z?)2y2=(95-67)2+(115-/?)2( 1)其中:X為左電Hl控制的滑輪右側繩長;y為右電機控制的滑輪左H繩長;a為以圖中標岀的原自為原點物體所對應的橫坐標;圖3.1b為物體所對應的縱坐標。這樣通il輸人設定值,便可在單片機巾依式(1 )計算得岀繩長x和y,與 所在點的坐標所湘應的繩長做差,便可得到電機所需運動的繩長及轉動方向,便 可通il單片機對電機驅動,圖3.1實現對最掛物體的精確定位。在實觀腔制物體沿機上標岀的任恿曲線運動的過程中,我們實觀了系貌毎務 動到一個坐標便在LCD上顯示送點的坐標,逆就要求根據纜長的變化得到坐標 的變北,同祥在單片機內冊可依據式(DiJff逆變換,

14、得到如下的函數,式(2)總結資料x2 -/+8800< 220 (2) b = 115-JF_ + 15)2依次可算岀a、b,得到所在點的坐標,從而顯示出來。、主要功能電路的按it總結資料1基本說U由于本系貌設廿所要求的常贋較高,我們用單片機輸岀脈沖控制的步進電 機,毎前進一個步距的距離為0.046mm,速度易干控制,具有快速啟/停能力, 可以這到精度高、速度快、定值準送些優良的性能,足以很好的滿足各頂性能要 求。反射式纟I外傳感器,其工作原理為:紅外發射管發射紅外光,接收管是否 接收到纟I外光,對應了接收管的導通與截止兩種狀態,導通時有一個變化的通光 電流,我m只需對撤弱的通光電流進行

15、上拉,變為電壓信號,再對這個電壓信號 進行比較,輸岀開關脈沖,由單片機的I/O口將檢測到的開關信號送到單片機進 行識別、分析,然后發出相應的控制指令。整體電路的設it簡單合理、性能穩定 可靠。2 關鍵電路單元的考 慮和廿算VCC纟I外尋迷傳感器的電路設 計如右圖4.1,傳感器型號果用 反射氏紅外發射一接收管ST188,比較器釆用LM339,用兩片以滿足8個紅外傳感器的需求。查資料得,紅外發射管的極限電流為50mA,找們取中同態計算:5VR, = 1000 ,50mA紅外接收管的通光電流最大為/產0.25mA,可以it算其導通截止兩種狀態的電平所需電呱最小為:圖4.1紅外尋迷電路心5心,其中匕為

16、導通管壓降,實際電路中蟻大于 厶025315m, ®/?3=ioom0五、系統軟件的設it本設it以合理的定位it算和優良的修正補償為主要特色,程序中迪兩點的 合理性在系貌性能指標實現中起著很大的作用。主程序:主程序主要由四塊模式組成,即畫直線,畫冏,通過建盤控翎物體上下左 右運動,以及寫字(通il程序本程序為“電”)。圖5.1主程序流程圖直線運動核心算法假設E(xO,yO),F(x1,y1)為給定平面X圍上的任意兩點,作舖助線(圖 中虛線部分),在直角三角形ZABE中a02=(x0+15)2+(115-y0)2( 5.1)在1形4CDE中:b02=(95-x0)2+(1 15-y0

17、)2(5.2)同理對干F慮,兩U線長分別為:a12=(x1+15)2+(115-y1)2(5.3)b12=(95-x1)2+(115-y1)2(5.4)因此當懸掛物UE點運動到F 6H:電機1的收放線長度為c(當c<0,電機正轉(或也線伸長);c>0時, 電機反轉(或也線收編)c=aO-a1 ( 5.5 )電機2的收故線長度為d (當d<0,電機反轉(或應線收縮),當d>0 時,電機正轉(或拉線仲長)d=dO-d1 ( 5.6 )根據c, d的正負分別確定電機1,電機2的正反轉向。設繩索位務1mmAD變化值為P,而根據c, d的絕對值來確定電位器1,電位器2所要變化的值

18、:電位器HJi分配的數值:m=|c|*p ( 5.7 )電位器2所分配的數值:n=|d|*p ( 5.8 )JJUTl中機I-V .E(乂 J$U)bU /Z,4Z /SOar圉5. L點更1點運動示意因商圓子程序:根據風的參數方樣的it算同上目的坐標,通過闊用畫岡f?序來實現,H圓程序流程圖如圖4.4 0(示。圖4.4 畫岡子ffffS程圖A*畫 H*/void draw_circularity(float rr,float xOJIoat yO) /it:半 g, (xO,yO): 8 C 坐標float LJfL_rfLJOfL_rOjnc_Llfinc_Lr,xx,yy,xxx;int

19、 count,count,i;LJ0=sqrt(x0+rr+15)*(xO+rr+15)+(115-yO)*(115-yO) ;/(xO+rr,yO):H 圓起慮坐標L_rO=sqrt(95-x0-rr)*(95-x0-rr)+(115-yO)*(115-yO);for(i=1;i<=360;i+)(xx=rr*cos(pai*i/180)+x0;xxx=xx;yy=rr*sin(pai*i/180)+y0;L_l=sqrt(xx+15)*(xx+15)+(115-yy)*(115-yy);L_r=sqrt(95-xx)*(95-xx)+(115-yy)*(115-yy);inc_LI=

20、L_l-L_IO;inc_Lr=L_r-L_rO;countJ=inc.LI/stepJ+(inc.LI>=0 ?0.5:-0.5); 左步進電機毎步 長(憚米)麓時50mscount_r=inc_Lr/step_r+(inc_Lr>=0 ?0.5:-0.5);/ 右步謹電機毎步* 長(厘米) drive_motor(countj,count_r);delay(50);L_IO=L_I;L_rO=L_r;撻盤:邃盤說f?圖如圖4.5所示。薩盤模塊程序流程圖4.5 931快程序說程圖2 t3/I Jt4.3.74X48盤功能圖設置建:手動對位或任童設定坐標點參數建,按下后用上、下、左

21、、右建可進行手動對位腔制,必后按確從建確認,圖438所示。-2 切怎討上運動孑確認丿鍛4 -物炷向左運動 設醫§謹6物炷向右運動褲8 切怎向下運動S 4.3.8設宜縫操年E1圖4.3.8設置建操作圖A結東語=本系統采用STC89C52RC單片機作為懸掛控制系統的檢測和控制核心,實現通過人機 界面對物體所作運iJiSIl設定,通過LCD實時顯示此時畫筆所在的坐標值;系統具有可畫 出H1應的運動珈違助能。運動參數的設定通過無線址盤輸人,系統通過比較當前畫筆所在位 置與設定位置的差異£1及運動類塑,腔制步逍電機完應松應運動;采用了 L298驅動茜片和 PWM技術實現電機技制;在設

22、itilf?中,力求硬件電路簡單,充分發揮軟件i殳廿的優勢, 編程靈活方價來満足系統的要求。附錄=| www htiou. cn H 1*zl kxhw7Ii &運動樓制6統LODI毫 -2-LJ1><M2PVrtwf8y £“ BoCS&aBAH aA MMmgCTXtn6dmM'acMbs:濫rasww*roorrr pmKTTPiMn Ff »»MR mitrram f 3 02P«5 叫,丄C1roO O|CO « oO t>"OQ1-=L. r 1-I=3.<O o o1Y1-

23、=- Y 0-1-£=L#o1o o1-o1-=- Y I%工%Jcut:UK*w程序:include <reg52.h>include <intrins.h> include <math.h> define Lcd_mand 0 define LcdData 1 #define uchar unsigned char圓周率/左步進電機每步*長(厘米)右步進電HI何步瓶長(障米)#define uint unsigned int#define pai 3.14159#define step J 0.0049#define step0.0049sbi

24、t rs =PV0;/1602 « 晶sbit rw=Pri; sbiten=PV2; sbit bf=P27;bit key.flag;void delay(uint z);void drawjine(float xOJIoat yOJIoat x1 Jloat y1);void draw_circularity(float rr,float xOJIoat yO);void drive motor(int c.ljnt c r);void motor_rjrap();void motorsJoosenO;void motorJJoosenO;void motorJJrapO;sb

25、ita = P30;電 Hl 串口 P3sbitb = P31;sbit c = P32sbit d = P33sbite 二 P34sbit f = P3"5:sbit g = P3"6;sbit h = P37;uchar B1.B2; ucharx_b,x_b1,x_s,x_s1,x_ax,y_sy_s1,y_g,y_g1,匚s;匚g;/x 値,y 值的百、十、個位uchar key_value,mode; / key.value 按 it 值;mode 選擇模氏值;uchar model .shape; 模氏 1 選擇圖形 ftuchar mode3_x,mode3

26、j(,mode3_r;模衣 3,園心坐 li ( mode3_x,mode3_ytmode3)ucharmode<stacx,mode4_end_x,mode4_star_y,mode4_end_y;/模式 4 赴、終點坐標(x1,y1 ) (x2,y2)uchar *str1 = *Mode1: Line Move:/1畫盲踐運動uchar *str2 = * Mode2: Circle uchar *str3 =' Mode3: Measure"/2 H 0 E iJ)/3佬運動uchar *str4 =' Mode4: Xie zhiB;4耳字void w

27、ait();void Lcd_Write(bit style,unsigned char input);void Setpos(uchar x,uchar y);void print_char(uchar *s,uchar length);void write_strdata(uchar *s,uchar length);void prinLcharl (uchar a);void Lcdjnit(void);void ClrScreen(void);uchar key();void Mode_Select();模 it 選擇函數void Mode2_ParameterSet();void M

28、odel _ParameterSet();void Mode3_ParameterSet();void Mode4_ParameterSet();void delay_ms(uint z)uint x;uchar y;for (x=z;x>0;x)for (y=140:y>0;y);void delay(uint z)uint x;uchar y;for (x=z;x>0;x)for (y=110;y>0;y);void drawjine(float xOJIoat yOJIoat x1,float y1) /(xO.yO):扯貞坐標,(xO,yO): I?止點坐標 i

29、data float ll,inc_x,inc_y,xx,yy 丄aLO,L_l,L,inc_LI,inc_Lr;idata int countJI,countJ,counLr,i;uchar xx1 3,yy1 2;H=sqrt(x1-x0)*(x1-x0)+(y1-y0)*(y1-y0); /II:M 21 長度 countjl=ll/0.5+0.5;/countjl:步數inc_x=(x1-x0)/countjl;inc_x:x 步長inc_y=(y1-y0)/count_ll;/incjcy 步長LJ0=sqrt(x0+15)*(x0+15)+(115-y0)*(115-yO);L_r

30、0=sqrt(95-x0)*(95-x0)+(115-y0)*(115-y0);Setpos(OJ); 實時 9 示write.strdataC New: xxx?yy M 6);for(i=1; i<=countjl; i+)xx=inc_x*i+xO;xx10 = (uchar)xx/100;xx11 = (uchar)xx%100/10;xx12 = (uchar)xx%10;Setpos(7,1); prlnLchar(xx1,3);yy=inc_y*i+yO;yy10 = (uint)yy/10;yy11 = (uint)yy%10:Setpos(11,1); prinLcha

31、r(yy1.2);LJ=sqrt(xx+15)*(xx+15)+(115-yy)*(115-yy); L_r=sqrt(95-xx)*(95-xx)+(115-yy)*(115-yy);inc_LI=L0;inc-Lr=L_r-L_rO; countJ=inc_Ll/stepJ+(inc_U>=0 ?0.5:-0.5); counLr=inc_Lr/step-r+(inc_Lr>=0 ?0.5:-0.5);drive_motor(counLr,countJ);/ delay(50);/MW 50ms test:xO,yOfx1,y1=10,10,40,40L_IO=L_I;L_rO

32、=L_r;void draw_circularlty(float rr,float xOJIoat yO) /rr:半 g, (xO.yO):岡 Q 坐林 idata float L_l 丄丄O.L_rO ,inc_LI,inc_Lr,xx,yy;idata int count,count,i;uchar xx1 3 ,yy1 2;L_IO=sqrt(xO+rr+15)*(x0+rr+15)+(115-y0)*(115-y0);L_r0=sqrt(95-x0-rr)*(95-x0-rr)+(115-y0)*(115-y0);Setpos(OJ); 買訊顯示write_strdataC New:

33、 xxx,yy 16);for(i=1;i<=360;i+)xx=rr*cos(pai*i/180)+x0;xx10 = (uchar)xx/100;xx11 = (uchar)xx%100/10;xx12 = (uchar)xx%10;Setpos(7J);print_char(xx1,3);yy=rr*sin(pai*i/180)+y0;yy10l = (uchar)yy/10;yy11 = (uchar)yy%10;Setpos(11J);print_char(yy1.2);LJ=sqrt(xx+15)*(xx+15)+(115-yy)*(115-yy);L_r=sqrt(95-x

34、x)*(95-xx)+(115-yy)*(115-yy); inc_LI=L_IO;inc-Lr=L_r-L_rO;countJ=inc_LI/step_l+(inc_LI>=0 ?0.5:-0.5);counLr=inc-Lr/step_r+(inc_Lr>=0 ?0.5:-0.5); drive_motor(countj,count_r);/ delay(50); 危時 50msL_IO=L_I ;L_rO=L_r;void drive_motor(int c_ljnt c_r)intj;for(j=0:j<abs(cj);j+)lf(cJ>0) motorJJra

35、p();/£iA 松開線 if(c<0) motor丄 looser);/左馬達收累線 Ifor(j=0;j<abs(c_r);j+)if(c_r>0) motor_rjoosen(); /fi 馬達松開線 if(c<0) motor_rjrap();右馬 il 收聚線食介左 馬達 收累 */void motor_r_frap()B2+; if(B2=5) B2=1;switch (B2)case 1: a=1;b=0;c=0;d=0;delay(15);break; case 2: a=0;b=1:c=O;d=O;delay(15);break; case

36、3: a=0;b=0;c=1:d=O;delay(15);break; case 4: a=0;b=0;c=0:d=1:delay(15);break;食介左 馬達 開 *>*<*>*>*« *void motor_rjoosen()B2;if(B2=0) B2=4;switch (B2)case 1: a=1;b=0;c=0;d=0;delay(15);break; case 2: a=0;b=1:c=O;d=O;delay(15);break; case 3: a=0;b=0;c=1:d=O;delay(15);break; case 4: a=0;b=0

37、;c=0:d=1:delay(15);break; void motorJJoosenOB1 卄;if(B1=5) B1=1;switch (B1)case 1: e=1;f=0;g=0;h=0;delay(15);break;case 2: e=0;f=1 ;g=0;h=0;delay(15);break;case 3: e=0;f=0;g=1 ;h=0;delay(15);break;case 4: e=0;f=0;g=0;h=1 ;delay(15);break;I void motor_IJrap()B1;if(B1=0)B1=4;switch (B1)case 1: e=1;f=0;

38、g=0;h=0;delay(15);break;case 2: e=O;f=1 ;g=O;h=O;delay(15);break;case 3: e=O;f=O;g=1 ;h=0;delay(15);break;case 4: e=O;f=O;g=O;h=1 ;delay(15);break;I void main() uchar i;B1=4;B2=4;Lcdnit();Setpos(16,0);write_strdataC./J5); 歡迎語 XX 師 X 學辰 .. Setpos(16?1);write_strdata(rxgydkz: kxhappy16

39、); 歡觀語昱甘運動梓 M kx I ft 室 for(i = 0;i<16;i+)Lcd_Write(Lcd_mand,0x18)y/ It 廉和顯示字符一起櫬動 delay_ms(200);whiled)key_value = key();if(key_flag = 1)key.flag = 0;if( key_value = 10) /Is it it 按下Mode_Select();if(key_value =14) 設定捱按下;if(mode = 2)/R it 2 H SIMode2_ParameterSet(); if(mode=1) 模貳1畫言找 Model _Param

40、eterSet();if(mode = 3)Mode3_ParameterSet();if(mode = 4)Mode4_ParameterSet();if(key_value =13) /開始建按下if(mode = 2)ClrScreenO;write_strdata(str2,16);draw_circularity(mode3,mode3_x,mode3_y);while(1);if(mode = 1)ClrScreenO;write_strdata(str1,16);drawJine(mode4_star_x,mode<star_y,mode<end_x,mode<

41、end_y); 出發 delay(30000); 暫停draw J ine(mode4_end-.x,mode4_end_y?mode4_star_x,mode4_star_y);/i§ 回 whiled);/1602 tt5void wait()whiled)P2= Oxff; rs = 0;rw = 1;en =0;en =1;if(bf = 0) break;f能:寫函散*<»: style為寫命令/數據,0-俞令,1-數弱;input片寫人的8位* “血令徴弼void Lcd_Write(bit style,unsigned char input)wait()

42、;P2= input;rs = style;rw = 0:en = 1;en = 0;廠9示RI*/void Setpos(uchar x,uchar y)if(y=O)Lcd_Write(Lcd_mand,0x80+x);第一行elseLcd_Write(Lcd_mand,OxcO+x);第二行"寫字符串void write_strdata(uchar *s,uchar length)uchar i;for(i= O;i<length;i+)Lcd_Write(Lcd_Data?*s); s+;1T能:耳數字字骨"參數:顯示數爼,長度void print_char(

43、uchar *s,uchar length)uchar i,a;for(i=0;i<length;i+)if( a >= 0 && a <= 9) Lcd_Write(Lcd_Data ,a + 'O');else if(a >= 0x0a &&a <= OxOf)Lcd_Write(Lcd_Data,a+0x37); s+; void print.charl (uchar a)if( a >= 0 && a <= 9 ) Lcd_Write(Lcd_Data ?a + O); else

44、if(a >= 0x0a &&a <= OxOf) Lcd_Write(Lcd_Data,a+0x37);void ClrScreen(void)Lcd_Write(Lcd_mand.0x01);void Lcdjnit(void)Lcd_Write(Lcd_mand,0x01);/jfi 屏Lcd_Write(Lcd_mand.0x38);/設置顯示模氏Lcd_Write(Lcd_mand,OxOC);/H開顯示,不顯示光標.光林不囚爍Lcd_Write(Lcd_mand,0x80);/ 一行第一個字符 S?示廠按建M P0*/uchar key()uchar t

45、emp.num;PO = OXfe;temp = P0& OxfO;if(temp != OxfO)delay_ms(5);if(temp != OxfO)keyjlag = 1;temp = PO;switch( temp)case Oxee:num = 1;break;case Oxde:num = 2;break;case Oxbe:num = 3;break;case 0x7e:num = 10;break;dotemp = PO;temp = temp & OxfO;while(temp != OxfO);)PO = OXfd;temp = P0& OxfO;

46、if(temp != OxfO)delay_ms(5);if(temp != OxfO) keyjlag = 1; temp = PO: switch( temp)case Oxedmum = 4; break;case Oxdd:num = 5; break;case Oxbd:num = 6;break;case 0x7d:num = 11; break;dotemp = PO;temp = temp & OxfO; while(temp != OxfO);IPO = OXfb;temp 二 PO & OxfO;if(temp != OxfO)delay_ms(5);if(

47、temp != OxfO)keyjlag = 1; temp = PO: switch( temp)case Oxebmum = 7; break;case Oxdb:num = 8; break;case Oxbb:num = 9;break;case 0x7b:num = 12;break;dotemp = PO;temp = temp & OxfO;while(temp != OxfO);PO = 0Xf7;temp 二 PO & OxfO;if(temp != OxfO)delay_ms(5);if(temp != OxfO)keyjlag = 1;temp = PO;

48、switch(temp)case 0xe7:num = 0; break;case 0xd7:num = 13; break;case 0xb7:num = 14; break;case 0x77:num = 15; break;dotemp = PO;temp = temp & OxfO; while(temp != OxfO);if(keyjlag = 1)return num; void Mode_Select()ClrScreenO;writestrdatat'Mode Select: 16);Setpos(OJ);write_strdata(BPlease input

49、:1-416);Setpos(12,0);Lcd_Write(Lcd_mand,OxOf);/開顯示,5?示光標,閃條do /選擇模Stkey_value = key();if(keyjlag = 1)keyjlag = 0;if(key_value != 15) && (key_value > 0) && (key.value < 5) mode = key_value;Setpos(12,0);print_char1(key_ value);Setpos(OJ);write_strdata(*Please Enter! 16); Setpos(1

50、2,0);while(key_value != 15);Lcd_Write(Lcd_mand.OxOC);ClrScreenO;if(mode = 2)write_strdata(str2J6);if(mode = 1)write_strdata(str1,16);if(mode = 3)write_strdata(str3J6);if(mode = 4)write_strdata(str4J6);Setpos(Od);write_strdata(*Please Setting! M,16);void Mode2_ParameterSet()uchar i;ClrScreenO;write_s

51、trdata(str2,16);Setpos(OJ);writestrdataCOxxiyy R:xx cm16);Setpos(2J);Lcd_Write(Lcd_mand,OxOf);/開 Q 示,示光標,閃姝i = 0;do /輸人01心坐標和半徑key_value = key():if(key_flag = 1)keyjlag = 0;if(key_value != 15) && (key_value >= 0) && (key_value <= 9) if( i>=1)print_char1(key_value);if(i = 0)

52、&& (key_value <2)x_b = key_value;if(key_value = 0) write.strdataf 1); 血果是 0 消爵 else prinLchar1(key_value);if(i =1)x_s = key_value;if(i = 2)x_g =key_value;if(i = 4)y_s = key.value;if(i = 5)y_g = key_value;if(i = 9)r_s = key.value;if(i =10)r_g = key_value;i+;if(i = 3)i=4;if(i = 6)i = 9;if(i

53、 =11)i=10;Setpos(2+if1);if(key_value =11)/ 光標右楊i+;if(i = 3)i=4;if(i = 6)i = 9;if(i =11)i=10;Setpos(2+i,1);if(key_value = 12)/ 光標左榜if(i!=O)i;if(i = 0)i=0;if(i = 8)i = 5;if(i = 3)i=2;Setpos(2+i,1);Iwhile(key_value != 15);i = 0;mode3_x = x_b * 100 + xs * 10 + x_g: mode3_7 = x_s * 10 + x_g;mode3= r_sT0 + r_g:x_b = 0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論