畢業(yè)設(shè)計(jì)論文基于51單片機(jī)的多功能智能小車畢業(yè)論文電路程序論文
《畢業(yè)設(shè)計(jì)論文基于51單片機(jī)的多功能智能小車畢業(yè)論文電路程序論文》由會(huì)員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(jì)論文基于51單片機(jī)的多功能智能小車畢業(yè)論文電路程序論文(49頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、基于單片機(jī)的多功能智能小車設(shè)計(jì)論文(電路+程序+論文) 摘 要 (關(guān)鍵詞:智能車 單片機(jī) 金屬感應(yīng)器 霍爾元件 1602LCD) 智能作為現(xiàn)代的新發(fā)明,是以后的發(fā)展方向,他可以按照預(yù)先設(shè)定的模式在一個(gè)環(huán)境里自動(dòng)的運(yùn)作,不需要人為的管理,可應(yīng)用于科學(xué)勘探等等的用途。智能電動(dòng)車就是其中的一個(gè)體現(xiàn)。本次設(shè)計(jì)的簡(jiǎn)易智能電動(dòng)車,采用AT89S52單片機(jī)作為小車的檢測(cè)和控制核心;采用金屬感應(yīng)器TL-Q5MC來(lái)檢測(cè)路上感應(yīng)到的鐵片,從而把反饋到的信號(hào)送單片機(jī),使單片機(jī)按照預(yù)定的工作模式控制小車在各區(qū)域按預(yù)定的速度行駛,并且單片機(jī)選擇的工作模式不同也可控制小車順
2、著S形鐵片行駛;采用霍爾元件A44E檢測(cè)小車行駛速度;采用1602LCD實(shí)時(shí)顯示小車行駛的時(shí)間,小車停止行駛后,輪流顯示小車行駛時(shí)間、行駛距離、平均速度以及各速度區(qū)行駛的時(shí)間。本設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)單,較容易實(shí)現(xiàn),但具有高度的智能化、人性化,一定程度體現(xiàn)了智能。 目 錄 1 設(shè)計(jì)任務(wù)………………………………………………………………………………3 1.1 要求………………………………………………………………………………3 2 方案比較與選擇………………………………………………………………………4 2.1路面檢測(cè)
3、模塊………………………………………………………………………4 2.2 LCD顯示模塊………………………………………………………………………5 2.3測(cè)速模塊……………………………………………………………………………5 2.4控速模塊……………………………………………………………………………6 2.5模式選擇模塊………………………………………………………………………7 3 程序框圖………………………………………………………………………………7 4 系統(tǒng)的具體設(shè)計(jì)與實(shí)現(xiàn)………………………………………………………………9 4.1路面檢測(cè)模塊…………………………………
4、……………………………………9 4.2 LCD顯示模塊………………………………………………………………………9 4.3測(cè)速模塊……………………………………………………………………………9 4.4控速模塊……………………………………………………………………………9 4.5復(fù)位電路模塊………………………………………………………………………9 4.6模式選擇模塊………………………………………………………………………9 5 最小系統(tǒng)圖……………………………………………………………………………10 6 最終PCB板圖…………………………………………………………………………12 7 系
5、統(tǒng)程序………………………………………………………………………………13 8 致謝……………………………………………………………………………………46 9 參考文獻(xiàn)……………………………………………………………………………47 10 附錄…………………………………………………………………………………48 1. 設(shè)計(jì)任務(wù): 設(shè)計(jì)并制作了一個(gè)智能電動(dòng)車,其行駛路線滿足所需的要求。 1.1 要求: 1.1.1 基本要求: (1)分區(qū)控制: 如(圖1)所示: (圖1) 車輛從起跑線出發(fā)(出發(fā)前,車體不得超出起跑線)。在第一個(gè)路程C~D
6、區(qū)(3~6米)以低速行駛,通過(guò)時(shí)間不低于10s;第二個(gè)路程D~E區(qū)(2米)以高速行駛,通過(guò)時(shí)間不得多于4秒;第三個(gè)路程E~F區(qū)(3~6米)以低速行駛,通過(guò)時(shí)間不低于10s。 (2)小車能自動(dòng)記錄、顯示行駛時(shí)間、行駛距離以及行駛速度,還能記錄每段所走的時(shí)間,從而判斷是否符合課程設(shè)計(jì)要求。(記錄顯示裝置要求安裝在車上)。 1.1.2 發(fā)揮部分: S型控制:如(圖2)所示: (圖2) 車輛沿著S形鐵片行駛,自動(dòng)轉(zhuǎn)彎,自動(dòng)尋找正確方向和鐵片。當(dāng)離開(kāi)S型鐵片跑道或者感應(yīng)不到鐵片一段時(shí)間的時(shí)候,小車自動(dòng)停止,并記錄行駛時(shí)間,路程,平均速度并通過(guò)LCD顯示出來(lái)。 2. 方案比較
7、與選擇: 根據(jù)設(shè)計(jì)任務(wù)要求,并且根據(jù)我們自己的需要而附加的功能,該電路的總體框圖可分為幾個(gè)基本的模塊,框圖如(圖3)所示: (圖3) 2.1 路面檢測(cè)模塊: 采用鐵片感應(yīng)器TL-Q5MC來(lái)檢測(cè)路面上的鐵片從而給單片機(jī)中斷脈沖。原理圖接線如(圖4)所示: (圖4) 2.2 LCD顯示模塊: 采用1602LCD,由單片機(jī)的總線模式連接。為節(jié)約電源電量并且不影響LCD的功能,LCD的背光用單片機(jī)進(jìn)行控制,使LCD的背光在小車行駛的過(guò)程中不亮,因?yàn)槲覀儾槐乜雌滹@示;在其它我們需要看顯示的內(nèi)容的時(shí)候LCD背光亮。 2.3 測(cè)速模塊: 2.3.1 方案1: 采用采用
8、霍爾開(kāi)關(guān)元器件A44E檢測(cè)輪子上的小磁鐵從而給單片機(jī)中斷脈沖,達(dá)到測(cè)量速度的作用?;魻栐哂畜w積小,頻率響應(yīng)寬度大,動(dòng)態(tài)特性好,對(duì)外圍電路要求簡(jiǎn)單,使用壽命長(zhǎng),價(jià)格低廉等特點(diǎn),電源要求不高,安裝也較為方便。霍爾開(kāi)關(guān)只對(duì)一定強(qiáng)度的磁場(chǎng)起作用,抗干擾能力強(qiáng),因此可以在車輪上安裝小磁鐵,而將霍爾器件安裝在固定軸上,通過(guò)對(duì)脈沖的計(jì)數(shù)進(jìn)行車速測(cè)量。 2.3.2 方案2: 采用紅外傳感器進(jìn)行測(cè)速。但無(wú)論是反射式紅外傳感器還是對(duì)射式紅外傳感器,他們對(duì)都對(duì)外圍環(huán)境要求較高,易受外部環(huán)境的影響,穩(wěn)定性不高,且價(jià)格較為昂貴。 通過(guò)對(duì)方案1、方案2的比較其優(yōu)缺點(diǎn),綜合多方面因素決定選用方案1,其原理圖接線如
9、(圖5)所示: (圖5) 2.4 控速模塊: 2.4.1 方案1: 使用功率三極管作為功率放大器的輸出控制直流電機(jī)。線性型驅(qū)動(dòng)的電路結(jié)構(gòu)和原理簡(jiǎn)單,成本低,加速能力強(qiáng),但功率損耗大,特別是低速大轉(zhuǎn)距運(yùn)行時(shí),通過(guò)電阻R的電流大,發(fā)熱厲害,損耗大,對(duì)于小車的長(zhǎng)時(shí)間運(yùn)行不利。 2.4.2 方案2: 采用繼電器對(duì)電動(dòng)機(jī)的開(kāi)或關(guān)進(jìn)行控制,通過(guò)開(kāi)關(guān)的切換對(duì)小車的速度進(jìn)行調(diào)整.此方案的優(yōu)點(diǎn)是電路較為簡(jiǎn)單,缺點(diǎn)是繼電器的響應(yīng)時(shí)間慢,易損壞,壽命較短,可靠性不高。 2.4.3 方案3: 采用由雙極性管組成的H橋電路。用單片機(jī)控制晶體管使之工作在占空比可調(diào)的開(kāi)關(guān)狀態(tài),精確調(diào)整電機(jī)轉(zhuǎn)速。這種電路
10、由于工作在管子的飽和截止模式下,效率非常高;H橋電路保證了可以簡(jiǎn)單地實(shí)現(xiàn)轉(zhuǎn)速和方向的控制;電子開(kāi)關(guān)的速度很快,穩(wěn)定性也很高,是一種廣泛采用的調(diào)速技術(shù)。 綜合3種方案的優(yōu)缺點(diǎn),決定選擇方案3,其電路原理圖如(圖6)所示: (圖6) 2.5 模式選擇模塊: 模式選擇模塊通過(guò)一個(gè)74LS00與非門(mén)和兩個(gè)不帶鎖按鈕來(lái)控制單片機(jī)單片機(jī)的兩個(gè)中斷口,從而按動(dòng)按鈕來(lái)選擇小車走動(dòng)的路型、來(lái)選擇小車的速度是快速、中速、慢速;走完路程小車停止后還可以通過(guò)按鈕選擇想要在LCD上想看的信息,比如總時(shí)間、走過(guò)各段路程的時(shí)間、平均速度、總路程等。 小車走動(dòng)的模式選擇有: (1) 直線型:滿足設(shè)計(jì)任
11、務(wù)的基本要求,能穩(wěn)定的走完全程。之后按順序循環(huán)不斷的顯示走完全程所用的時(shí)間、走完高速區(qū)所用的時(shí)間和走完低速區(qū)所用的時(shí)間這三個(gè)時(shí)間;或者可以通過(guò)兩個(gè)按鈕以及LCD顯示的菜單選擇所要看的內(nèi)容如平均速度、全程距離以及那三個(gè)時(shí)間。 (2) S型:滿足設(shè)計(jì)任務(wù)的發(fā)揮部分的要求,小車能自動(dòng)的感應(yīng)到在前面或在后面鐵片,即第一次轉(zhuǎn)彎后若感應(yīng)到的是錯(cuò)誤的方向,則小車會(huì)后退自動(dòng)調(diào)整方向,沿著S型的鐵片走。當(dāng)走完S型鐵片后的一定時(shí)間里,小車自動(dòng)停止。之后自動(dòng)進(jìn)入菜單由我們自己選擇要看的內(nèi)容時(shí)間、平均速度和所走的距離。 (3)自動(dòng)型:小車先以一定的速度走完全程,之后再以一定的速度倒退回起點(diǎn),再調(diào)整速度在一定的時(shí)間
12、內(nèi)走完全程。走完后LCD顯示的內(nèi)容與直線型顯示的內(nèi)容一樣。 3. 程序框圖: 單片機(jī)主程序框圖、速度感應(yīng)程序框圖和鐵片感應(yīng)程序框圖分別如(圖7)所示。 (圖7) 4.系統(tǒng)的具體設(shè)計(jì)與實(shí)現(xiàn): 4.1 路面檢測(cè)模塊: 應(yīng)用一個(gè)金屬感應(yīng)器,安裝在車盤(pán)下,離地略小于或約四毫米。當(dāng)金屬傳感器檢測(cè)到鐵片時(shí)將對(duì)單片機(jī)發(fā)送中斷信號(hào),單片機(jī)運(yùn)行中斷,改變輸給電機(jī)驅(qū)動(dòng)信號(hào)的電壓占空比來(lái)控制小車的速度。 4.2 LCD顯示模塊: 采用1602LCD,由單片機(jī)的總線模式連接。為節(jié)約電源,LCD的背光用單片機(jī)進(jìn)行控制。
13、 4.3 測(cè)速模塊: 通過(guò)霍爾元件感應(yīng)磁鐵來(lái)產(chǎn)生脈沖(當(dāng)霍爾元件在離磁場(chǎng)較近時(shí)輸出會(huì)是高電平,其它時(shí)候是低電平),一個(gè)車輪均勻放四個(gè)小磁鐵,計(jì)算一秒所得的脈沖數(shù),從而計(jì)算出一秒小車輪子轉(zhuǎn)動(dòng)圈數(shù),再測(cè)量出小車車輪周長(zhǎng)即可計(jì)算出小車當(dāng)前速度,累加可得到當(dāng)前路程。 4.4 控速模塊: 考慮到元器件的缺少以及我們所用的電路的驅(qū)動(dòng)電機(jī)的電路原理圖和和小車自帶的電路的電機(jī)驅(qū)動(dòng)原理圖一樣,所以暫時(shí)使用小車自帶的電機(jī)驅(qū)動(dòng)電路圖。 4.5 復(fù)位電路模塊: 單片機(jī)的復(fù)位電路通過(guò)手動(dòng)來(lái)實(shí)現(xiàn),復(fù)位電路圖如(圖8)所示。 (圖8) 4.6 模式選擇模塊: 兩個(gè)中斷口使用和感應(yīng)鐵片、感應(yīng)速度所
14、使用的中斷口一樣,通過(guò)一個(gè)與非門(mén)和按鈕控制。原理圖如(圖9)所示: (圖9) 5.最小系統(tǒng)圖: 該系統(tǒng)主要用到的是單片機(jī),所以主要的部分是最小系統(tǒng)圖,該最小系統(tǒng)圖如(圖10)所示: (圖12) 6. 最終PCB板圖: 該最小系統(tǒng)的最終PCB板圖(包括LCD接口以及其他的外部擴(kuò)展電
15、路部分,考慮到最小系統(tǒng)的簡(jiǎn)潔以及容易看懂,外部擴(kuò)展電路不在最小系統(tǒng)圖上顯示。)分別如(圖11)、(圖12)所示:
(圖11)
(圖12)
7.系統(tǒng)程序:
按照預(yù)定的功能,系統(tǒng)實(shí)現(xiàn)預(yù)定的功能的程序如下所示:
#include
16、 \********************************************************************************/ /*------------------------------- LCD模塊 ------------------------------------*/ #define LCD_RW P2_6 //讀寫(xiě)控制端 #define LCD_RS P2_7 //數(shù)據(jù)命令選擇端 #define LCD_E P2_5 //執(zhí)行使能端 #define LCD_Data
17、 P1 //P1口 #define Write 0x00 //低電平寫(xiě)入 #define Read 0x01 //高電平讀出 #define Data 0x01 //高電平選擇數(shù)據(jù) #define Cmd 0x00 //低電平選擇命令 #define Enable 0x00 //躍變到低電平時(shí)執(zhí)行命令 #define Disable 0x01 #define True 0x01 #define False 0x00 #define LCD_Init 0x38
18、 //初始化模式 #define LCD_DispCtr 0x0C //開(kāi)顯示及光標(biāo)設(shè)置 #define LCD_CloseCtr 0x08 //關(guān)顯示 #define LCD_CLS 0x01 //清屏幕 #define LCD_EnterSet 0x06 //顯示光標(biāo) #define Busy P1_7 //忙信號(hào) /*-------------------------- 測(cè)速/測(cè)距/測(cè)時(shí)模塊 -------------------------------*/ #defi
19、ne CircleLength 0.132 //小車轉(zhuǎn)一輪的長(zhǎng)度為.132m /*-------------------------------- 控速模塊 -----------------------------------*/ #define P03 P0_3 //后電機(jī) #define P04 P0_4 //后電機(jī) #define P01 P0_1 //前電機(jī) #define P02 P0_2 //前電機(jī) #define P31 P0_5 //控制液晶背光
20、 #define P33 P3_3 /*------------------------------ 菜單選擇模塊 ---------------------------------*/ #define Line 0x00 //0代表直線模式 #define Curve 0x01 //1代表S型模式 #define Normal 0x00 //0 代表正常速度 #define Low 0x01 //1 代表低速 #define High 0x02 //2 代表高速 /**************
21、*******************************************************************\ ** 全局函數(shù)聲明區(qū) ** \*********************************************************************************/ /*------------------------------- LCD模塊 -------------------------------------*/ void LCDInit(void);
22、 //LCD初始化 void SetWriteCmd(void); //設(shè)置寫(xiě)命令模式 void SetReadCmd(void); //設(shè)置讀命令模式 void SetWriteData(void); //設(shè)置寫(xiě)數(shù)據(jù)模式 void WriteCmd(char cmd); //寫(xiě)命令 void WriteData(char ddata); //寫(xiě)數(shù)據(jù) void ExecuteCmd(void); //執(zhí)行命令 void SetXY(char x,char y); //定位顯示地址 voi
23、d DisplaySingleChar(char x,char y,char cchar); //顯示單個(gè)字符 void DisplayString(char x,char y,char *str); //顯示一段字符串 void Delay(unsigned int time); //延時(shí)主程序 void DelayUs(unsigned int time); //延時(shí)子程序 bit IsBusy(void); //判斷忙標(biāo)志函數(shù) void DisplayTime(void); //顯示時(shí)間 void DisplayAV
24、GSpeed(void); //顯示平均速度 void DisplayDistance(void); //顯示路程 /*-------------------------- 測(cè)速/測(cè)距/測(cè)時(shí)模塊 -------------------------------*/ void INTInit(void); //所有中斷初始化 void SpeedINT(void); //測(cè)速中斷 void ComputeTime(void); void ComputeSpeedANDDistance(void
25、); //計(jì)算速度和距離 /*-------------------------------- 控速模塊 -----------------------------------*/ void CtrSpeedINT(void); //控速中斷 void Time0INT(void); void Time1INT(void); //控速單位時(shí)間中斷 void Clock0_Init(void); //時(shí)鐘中斷初始化 void Clock1_Init(void);
26、 //時(shí)鐘中斷初始化 void CtrSpeed(void); /********************************************************************************\ ** 全局變量區(qū) ** \********************************************************************************/ float SpeedCount = 0; //測(cè)速計(jì)數(shù)脈沖
27、float Speed = 0.0; float Distance = 0.0; char Time1INTCount=0; //T1中斷時(shí)間計(jì)時(shí) float PassTime=0.00; //小車行走的時(shí)間 short IsT0INT=1; bit IsT1INT; //判斷T1是否已經(jīng)響應(yīng)中斷 short IsT0INT2=1; char Thx[5]={0xf4,0xf4,0xc5,0xf4,0xff}; //3ms,
28、3ms,15ms,3ms char Tlx[5]={0x48,0x48,0x68,0x48,0xff}; char Thx0=0xd8; char Tlx0=0xf0; char Thx1=0xb1; //20ms char Tlx1=0xe0; short Round=0; short Back=0; short Back0=0; bit Backid; bit Stop=0; char Area0=0; char Area1=0; //區(qū)域變量 char Lo
29、wSpeedArea1StartTime; char LowSpeedArea1EndTime; char HighSpeedAreaEndTime; char LowSpeedArea2EndTime; char LowSpeedArea1PassTime=0; //第一個(gè)低速區(qū)通過(guò)時(shí)間 char HighSpeedAreaPassTime=0; //高速區(qū)通過(guò)時(shí)間 char LowSpeedArea2PassTime=0; //第二個(gè)低速區(qū)通過(guò)時(shí)間 char ReadyToGo=4; //倒計(jì)時(shí)
30、char flag; bit Roundid=0; char Nocurve=0; char ChangeFlag; char Mode; bit Running; bit SelectedAll; //模式和速度是否選擇完畢標(biāo)志 bit IsSelectingMode; //模式選擇標(biāo)志 bit IsSelectingSpeed; //速度選擇標(biāo)志 bit ModeSelected; //已經(jīng)被選擇的模式標(biāo)志 char SelectedMode=10;
31、 //模式選擇是否完畢標(biāo)志 bit Next; //Next鍵標(biāo)志 bit SpeedSelected; //已經(jīng)被選中的速度方案標(biāo)志 char SelectedSpeed; //速度選擇是否完畢標(biāo)志 bit ChoosingDisplay; //人工選擇菜單開(kāi)始標(biāo)志 bit SelectedShow; //顯示選擇標(biāo)志 bit SelectedReturn; //返回選擇標(biāo)志 bit Selected; //確定/返回鍵選擇標(biāo)志
32、 bit ReturnSelection; //返回鍵啟用標(biāo)志 bit AVGSpeedShow; //平均速度顯示標(biāo)志 bit TotalDistanceShow; //總路程顯示標(biāo)志 bit ReturnMain; //返回主菜單標(biāo)志 bit AutoDisplay; //自動(dòng)顯示標(biāo)志 bit GoToChoosingDisplay; //人工選擇標(biāo)志 bit AutoMode=0; char PassLineID=0; char P
33、assLine=0; float PrepareDistance; float FirstDistance; float SecondDistance; float ThirdDistance; int FirstHigh; int SecondHigh; int ThirdHigh; float Rate=1.25; //5ms時(shí)的速度 float Count=4; //時(shí)間的倍數(shù) /******************************************************
34、**************************\ ** 全局函數(shù)實(shí)現(xiàn)區(qū) ** \********************************************************************************/ /*-------------------------------- 主函數(shù) ------------------------------------*/ void main() { P01=0; P02=0; P03=0; P04=0; P31=1
35、; //單片機(jī)復(fù)位,背光開(kāi) Delay(40); //延時(shí)等待LCD啟動(dòng) LCDInit(); //初始化LCD DisplayString(0x0,0," Starting... "); DisplayString(0x0,1,"Designed By 202"); Delay(300); WriteCmd(LCD_CLS); EA=1; //開(kāi)總中斷 EX0=1; //開(kāi)INT0中斷 IT0=1; //INTO
36、邊沿觸發(fā) EX1=1; //開(kāi)INT1中斷 IT1=1; //INT1邊沿觸發(fā) SelectedAll=False; //開(kāi)始模式和速度選擇 /*------------------------------ 模式選擇 ---------------------------------*/ DisplayString(0x0,0,"Choose The Mode "); DisplayString(0x0,1,"you want. "); Delay(50);
37、WriteCmd(LCD_CLS); IsSelectingMode=True; while(1) { WriteCmd(LCD_CLS); DisplayString(0x0,0," Line Mode "); DisplayString(0x0,1,"Next Yes"); Delay(300); //延時(shí)消除抖動(dòng) while (1) //不斷檢測(cè)中斷,直到按確定鍵或是NEXT鍵 { if (Next==True) //如果按
38、Next鍵則直接跳出 break; if (ModeSelected==True) //如果按確定鍵則設(shè)置模式為L(zhǎng)ine并跳出 { SelectedMode=Line; break; } //如果什么鍵都沒(méi)有按下,那么一直顯示等待 } if (ModeSelected==True) //按下了確定鍵,退出模式選擇 { IsSelectingMode=False; break; } if (Next==True) //按下了Next鍵,顯示下
39、一個(gè)菜單項(xiàng) { Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0," Curve Mode "); DisplayString(0x0,1,"Next Yes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) //不斷檢測(cè)中斷,直到按確定鍵或是Next鍵 { if (Next==True) //如果再一次按下Next鍵,則跳出 break; if (Mod
40、eSelected==True) //如果按下確定鍵,則設(shè)置模式為Curve,并跳出 { SelectedMode=Curve; break; } } } if (ModeSelected==True) //按下了確定鍵,退出模式選擇 { IsSelectingMode=False; break; } if (Next==True) //再一次按下了Next鍵,則循環(huán)模式選擇 { Next=False; WriteCmd(LC
41、D_CLS); DisplayString(0x0,0," AutoMode "); DisplayString(0x0,1,"Next Yes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) { if (Next==True) break; if (ModeSelected==True) { AutoMode=1; break; } } } if (ModeSelected==Tr
42、ue) { IsSelectingMode=False; break; } if (Next==True) { Next=False; continue; } } Delay(50); WriteCmd(LCD_CLS); /*------------------------------ 速度選擇 ---------------------------------*/ if (SelectedMode==Line && AutoMode==0) { DisplayString(
43、0x0,0," Now Choose a "); DisplayString(0x0,1," kind of Speed "); Delay(50); WriteCmd(LCD_CLS); IsSelectingSpeed=True; while(1) { WriteCmd(LCD_CLS); DisplayString(0x0,0," Normal Speed "); DisplayString(0x0,1,"Next Yes"); Delay(300);
44、 //延時(shí)消除抖動(dòng) while(1) { if (Next==True) //如果按Next鍵則直接跳出 break; if (SpeedSelected==True) //如果按確定鍵則設(shè)置速度為Normal并跳出 { Thx[0]=0xec;Tlx[0]=0x78; //5ms Thx[1]=0xf0;Tlx[1]=0x60; //4ms Thx[2]=0x8a;Tlx[2]=0xd0; //30ms Thx[3]=0xf4;
45、Tlx[3]=0x48; //3ms SelectedSpeed=Normal; break; } //如果什么鍵都沒(méi)有按下,那么一直顯示等待 } if (SpeedSelected==True) //按下了確定鍵,退出速度選擇 { IsSelectingSpeed=False; break; } if (Next==True) { Next=False; WriteCmd(LCD_CLS); Disp
46、layString(0x0,0," Low Speed "); DisplayString(0x0,1,"Next Yes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) { if (Next==True) //如果再一次按下Next鍵,則跳出 break; if (SpeedSelected==True) //如果按下確定鍵,則設(shè)置速度為L(zhǎng)ow,并跳出 { SelectedSpeed=Low; //
47、這里沒(méi)有速度設(shè)置,因?yàn)槟J(rèn)速度就是Low break; } } } if (SpeedSelected==True) //按下了確定鍵,退出速度選擇 { IsSelectingSpeed=False; break; } if (Next==True) { Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0," High Speed "); DisplayStrin
48、g(0x0,1,"Next Yes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) { if (Next==True) //如果再一次按下Next鍵,則跳出 break; if (SpeedSelected==True) //如果按下確定鍵,則設(shè)置速度為High,并跳出 { Thx[0]=0xe0;Tlx[0]=0xc0; //8ms Thx[1]=0xe0;Tlx[1]=0xc0; //8ms
49、 Thx[2]=0x63;Tlx[2]=0xc0; //40ms Thx[3]=0xec;Tlx[3]=0x78; //5ms SelectedSpeed=High; break; } } } if (SpeedSelected==True) //按下了確定鍵,退出速度選擇 { IsSelectingSpeed=False; break; } if (Next==True) //再一次按下了Next鍵,則循環(huán)
50、速度選擇 { Next=False; continue; } } } SelectedAll=True; //標(biāo)志模式選擇和速度選擇完畢 Running=True; Delay(50); WriteCmd(LCD_CLS); /*------------------------- 顯示所選擇的模式和速度方案 -------------------------*/ if (SelectedMode==Line) { Disp
51、layString(0x0,0,"Choosen Mode is "); DisplayString(0x0,1," Line "); Delay(50); WriteCmd(LCD_CLS); } if (SelectedMode==Curve) { DisplayString(0x0,0,"Choosen Mode is "); DisplayString(0x0,1," Curve "); Delay(50); WriteCmd(LCD_CLS); } if (AutoMode==
52、1) { DisplayString(0x0,0,"Choosen Mode is "); DisplayString(0x0,1," AutoMode "); Delay(50); WriteCmd(LCD_CLS); } if (SelectedMode==Line) { if (SelectedSpeed==Normal) { DisplayString(0x0,0,"Choosen Speed is"); DisplayString(0x0,1," Normal ");
53、 Delay(50); WriteCmd(LCD_CLS); } if (SelectedSpeed==Low) { DisplayString(0x0,0,"Choosen Speed is"); DisplayString(0x0,1," Low "); Delay(50); WriteCmd(LCD_CLS); } if (SelectedSpeed==High) { DisplayString(0x0,0,"Choosen Speed is"); Displa
54、yString(0x0,1," High "); Delay(50); WriteCmd(LCD_CLS); } } INTInit(); //初始化所有中斷 DisplayString(0x0,0,"Left Times To Go"); while (ReadyToGo--) { DisplaySingleChar(0x7,1,ReadyToGo+0x30); DisplaySingleChar(0x09,1,s); Delay(300); } WriteCmd(
55、LCD_CLS); DisplayString(0x05,0,"Go!!!"); Delay(100); WriteCmd(LCD_CLS); DisplayString(0x0,0," Living... "); DisplayString(0x0,1,"Designed by 202"); if (SelectedMode==Line&&AutoMode==0) flag=Area0; else flag=1; while(flag<5) { if(AutoMode==1) //自動(dòng)
56、模式 { switch(PassLineID) { case 0 :{ if(IsT0INT==1) {P01=P02=P04=0;P03=1;} else {P01=P02=P03=P04=0;} }break; case 1 :{ P01=P02=P03=0;P04=1; }break;
57、 case 2 :{ P01=P02=P04=0;P03=1; }break; default :break; } } else { if(SelectedMode==Line) //直線模式 { flag=Area0; if(IsT0INT==1) {P03=1;P04=0;P01=P02=0;} else
58、 {P03=0;P04=0;P01=P02=0;} } else { //S型模式 if((Nocurve<2)&&Round!=0&&(Back0>0)&&Back!=0) { if(Backid==1) {P01=1;P02=0;P03=0;P04=1;} else {P01=0;P02=1;P03=0;P04=1;} Back=1;
59、 } else { if(Round==0) { if(IsT0INT2==1) {P01=0;P02=0;P03=1;P04=0;} else {P01=0;P02=0;P03=0;P04=0;} } else { if(P33==0) { if(IsT0IN
60、T2==1) {P01=0;P02=0;P03=1;P04=0;} else {P01=0;P02=0;P03=0;P04=0;} } else { EX1=1; if(Round%2) { if(IsT0INT2==1) {P01=1;P02=0;P03=1;P04=
61、0;Backid=1;} else {P01=1;P02=0;P03=0;P04=0;} } else { if(IsT0INT2==1) {P01=0;P02=1;P03=1;P04=0;Backid=0;} else {P01=0;P02=1;P03=0;P04=0;} }
62、 } } } } } if (IsT1INT==1) { IsT1INT=0; ComputeTime(); ComputeSpeedANDDistance(); } } //補(bǔ)中斷路程,加上最后一次中斷缺失的路程 ComputeSpeedANDDistance(); P04=1;P03=0;P01=P02=0;Delay(90); P03=0;P04=0; //行程結(jié)束,小車停止 P31=1
63、; //行程結(jié)束,背光開(kāi) ET0=0x0; //關(guān)T0中斷 ET1=0x0; //關(guān)T1中斷 EX1=0x01; //開(kāi)INT1中斷 Running=False; AutoDisplay=True; //默認(rèn)情況下直線模式會(huì)自動(dòng)顯示各個(gè)區(qū)域經(jīng)過(guò)的時(shí)間 WriteCmd(LCD_CLS); if (SelectedMode==Line) //直線模式才顯示 { while(1) {
64、 if (GoToChoosingDisplay==True) break; Delay(200); WriteCmd(LCD_CLS); Delay(200); DisplayString(0,0," LowSpeedArea1"); DisplayString(0,1," Costed "); DisplaySingleChar(0x0C,1,s); LowSpeedArea1PassTime=LowSpeedArea1EndTime-LowSpeedArea1StartTime; DisplaySingleCh
65、ar(0x0A,1,LowSpeedArea1PassTime%10+0x30); if (LowSpeedArea1PassTime > 9) //通過(guò)第一個(gè)低速區(qū)的時(shí)間超過(guò)s DisplaySingleChar(0x0B,1,LowSpeedArea1PassTime/10+0x30); if (GoToChoosingDisplay==True) break; Delay(200); WriteCmd(LCD_CLS); Delay(200); DisplayString(0,0," Hi
66、ghSpeedArea "); DisplayString(0,1," Costed "); DisplaySingleChar(0x0C,1,s); HighSpeedAreaPassTime=HighSpeedAreaEndTime-LowSpeedArea1EndTime; DisplaySingleChar(0x0A,1,HighSpeedAreaPassTime%10+0x30); if ( HighSpeedAreaPassTime> 9) //通過(guò)高速區(qū)的時(shí)間超過(guò)s DisplaySingleChar(0x0B,1,HighSpeedAreaPassTime/10+0x30); if (GoToChoosingDisplay==True) break; Delay(200); WriteCmd(LCD_CLS); Delay(200); DisplayString(0,0," LowSpeedArea2 "); DisplaySt
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案