版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 摘 要</p><p> ?。P(guān)鍵詞:智能車 AT89S52 單片機 金屬感應(yīng)器 霍爾元件 1602LCD)</p><p> 智能作為現(xiàn)代的新發(fā)明,是以后的發(fā)展方向,他可以按照預先設(shè)定的模式在一個環(huán)境里自動的運作,不需要人為的管理,可應(yīng)用于科學勘探等等的用途。智能電動車就是其中的一個體現(xiàn)。本次設(shè)計的簡易智能電動車,采用A
2、T89S52單片機作為小車的檢測和控制核心;采用金屬感應(yīng)器TL-Q5MC來檢測路上感應(yīng)到的鐵片,從而把反饋到的信號送單片機,使單片機按照預定的工作模式控制小車在各區(qū)域按預定的速度行駛,并且單片機選擇的工作模式不同也可控制小車順著S形鐵片行駛;采用霍爾元件A44E檢測小車行駛速度;采用1602LCD實時顯示小車行駛的時間,小車停止行駛后,輪流顯示小車行駛時間、行駛距離、平均速度以及各速度區(qū)行駛的時間。本設(shè)計結(jié)構(gòu)簡單,較容易實現(xiàn),但具有高度
3、的智能化、人性化,一定程度體現(xiàn)了智能。</p><p> 目 錄</p><p> 1 設(shè)計任務(wù)………………………………………………………………………………3</p><p> 1.1 要求………………………………………………………………………………3</p><p> 2 方案比較與選擇…………………………………………
4、……………………………4</p><p> 2.1路面檢測模塊………………………………………………………………………4</p><p> 2.2 LCD顯示模塊………………………………………………………………………5</p><p> 2.3測速模塊……………………………………………………………………………5</p><p> 2.4
5、控速模塊……………………………………………………………………………6</p><p> 2.5模式選擇模塊………………………………………………………………………7</p><p> 3 程序框圖………………………………………………………………………………7</p><p> 4 系統(tǒng)的具體設(shè)計與實現(xiàn)………………………………………………………………9</p
6、><p> 4.1路面檢測模塊………………………………………………………………………9</p><p> 4.2 LCD顯示模塊………………………………………………………………………9</p><p> 4.3測速模塊……………………………………………………………………………9</p><p> 4.4控速模塊……………………………………
7、………………………………………9</p><p> 4.5復位電路模塊………………………………………………………………………9</p><p> 4.6模式選擇模塊………………………………………………………………………9</p><p> 5 最小系統(tǒng)圖……………………………………………………………………………10</p><p>
8、6 最終PCB板圖…………………………………………………………………………12</p><p> 7 系統(tǒng)程序………………………………………………………………………………13</p><p> 8 致謝……………………………………………………………………………………46</p><p> 9 參考文獻……………………………………………………………………………4
9、7</p><p> 10 附錄…………………………………………………………………………………48</p><p><b> 1. 設(shè)計任務(wù):</b></p><p> 設(shè)計并制作了一個智能電動車,其行駛路線滿足所需的要求。</p><p><b> 1.1 要求:</b></p>
10、;<p> 1.1.1 基本要求:</p><p><b> ?。?)分區(qū)控制:</b></p><p><b> 如(圖1)所示:</b></p><p><b> (圖1)</b></p><p> 車輛從起跑線出發(fā)(出發(fā)前,車體不得超出起跑線)。在第
11、一個路程C~D區(qū)(3~6米)以低速行駛,通過時間不低于10s;第二個路程D~E區(qū)(2米)以高速行駛,通過時間不得多于4秒;第三個路程E~F區(qū)(3~6米)以低速行駛,通過時間不低于10s。</p><p> ?。?)小車能自動記錄、顯示行駛時間、行駛距離以及行駛速度,還能記錄每段所走的時間,從而判斷是否符合課程設(shè)計要求。(記錄顯示裝置要求安裝在車上)。</p><p> 1.1.2 發(fā)揮部
12、分:</p><p> S型控制:如(圖2)所示:</p><p><b> ?。▓D2)</b></p><p> 車輛沿著S形鐵片行駛,自動轉(zhuǎn)彎,自動尋找正確方向和鐵片。當離開S型鐵片跑道或者感應(yīng)不到鐵片一段時間的時候,小車自動停止,并記錄行駛時間,路程,平均速度并通過LCD顯示出來。</p><p> 2. 方
13、案比較與選擇:</p><p> 根據(jù)設(shè)計任務(wù)要求,并且根據(jù)我們自己的需要而附加的功能,該電路的總體框圖可分為幾個基本的模塊,框圖如(圖3)所示:</p><p><b> (圖3)</b></p><p> 2.1 路面檢測模塊:</p><p> 采用鐵片感應(yīng)器TL-Q5MC來檢測路面上的鐵片從而給單片機中斷
14、脈沖。原理圖接線如(圖4)所示:</p><p><b> ?。▓D4)</b></p><p> 2.2 LCD顯示模塊:</p><p> 采用1602LCD,由單片機的總線模式連接。為節(jié)約電源電量并且不影響LCD的功能,LCD的背光用單片機進行控制,使LCD的背光在小車行駛的過程中不亮,因為我們不必看其顯示;在其它我們需要看顯示的內(nèi)容的
15、時候LCD背光亮。</p><p><b> 2.3 測速模塊:</b></p><p> 2.3.1 方案1:</p><p> 采用采用霍爾開關(guān)元器件A44E檢測輪子上的小磁鐵從而給單片機中斷脈沖,達到測量速度的作用。霍爾元件具有體積小,頻率響應(yīng)寬度大,動態(tài)特性好,對外圍電路要求簡單,使用壽命長,價格低廉等特點,電源要求不高,安裝也較
16、為方便?;魻栭_關(guān)只對一定強度的磁場起作用,抗干擾能力強,因此可以在車輪上安裝小磁鐵,而將霍爾器件安裝在固定軸上,通過對脈沖的計數(shù)進行車速測量。</p><p> 2.3.2 方案2:</p><p> 采用紅外傳感器進行測速。但無論是反射式紅外傳感器還是對射式紅外傳感器,他們對都對外圍環(huán)境要求較高,易受外部環(huán)境的影響,穩(wěn)定性不高,且價格較為昂貴。</p><p>
17、; 通過對方案1、方案2的比較其優(yōu)缺點,綜合多方面因素決定選用方案1,其原理圖接線如(圖5)所示:</p><p><b> ?。▓D5)</b></p><p><b> 2.4 控速模塊:</b></p><p> 2.4.1 方案1:</p><p> 使用功率三極管作為功率放大器的輸出
18、控制直流電機。線性型驅(qū)動的電路結(jié)構(gòu)和原理簡單,成本低,加速能力強,但功率損耗大,特別是低速大轉(zhuǎn)距運行時,通過電阻R的電流大,發(fā)熱厲害,損耗大,對于小車的長時間運行不利。</p><p> 2.4.2 方案2:</p><p> 采用繼電器對電動機的開或關(guān)進行控制,通過開關(guān)的切換對小車的速度進行調(diào)整.此方案的優(yōu)點是電路較為簡單,缺點是繼電器的響應(yīng)時間慢,易損壞,壽命較短,可靠性不高。&l
19、t;/p><p> 2.4.3 方案3:</p><p> 采用由雙極性管組成的H橋電路。用單片機控制晶體管使之工作在占空比可調(diào)的開關(guān)狀態(tài),精確調(diào)整電機轉(zhuǎn)速。這種電路由于工作在管子的飽和截止模式下,效率非常高;H橋電路保證了可以簡單地實現(xiàn)轉(zhuǎn)速和方向的控制;電子開關(guān)的速度很快,穩(wěn)定性也很高,是一種廣泛采用的調(diào)速技術(shù)。</p><p> 綜合3種方案的優(yōu)缺點,決定選擇
20、方案3,其電路原理圖如(圖6)所示:</p><p><b> ?。▓D6)</b></p><p> 2.5 模式選擇模塊:</p><p> 模式選擇模塊通過一個74LS00與非門和兩個不帶鎖按鈕來控制單片機單片機的兩個中斷口,從而按動按鈕來選擇小車走動的路型、來選擇小車的速度是快速、中速、慢速;走完路程小車停止后還可以通過按鈕選擇想要在
21、LCD上想看的信息,比如總時間、走過各段路程的時間、平均速度、總路程等。</p><p> 小車走動的模式選擇有:</p><p> ?。?) 直線型:滿足設(shè)計任務(wù)的基本要求,能穩(wěn)定的走完全程。之后按順序循環(huán)不斷的顯示走完全程所用的時間、走完高速區(qū)所用的時間和走完低速區(qū)所用的時間這三個時間;或者可以通過兩個按鈕以及LCD顯示的菜單選擇所要看的內(nèi)容如平均速度、全程距離以及那三個時間。<
22、;/p><p> ?。?) S型:滿足設(shè)計任務(wù)的發(fā)揮部分的要求,小車能自動的感應(yīng)到在前面或在后面鐵片,即第一次轉(zhuǎn)彎后若感應(yīng)到的是錯誤的方向,則小車會后退自動調(diào)整方向,沿著S型的鐵片走。當走完S型鐵片后的一定時間里,小車自動停止。之后自動進入菜單由我們自己選擇要看的內(nèi)容時間、平均速度和所走的距離。</p><p> ?。?)自動型:小車先以一定的速度走完全程,之后再以一定的速度倒退回起點,再調(diào)整
23、速度在一定的時間內(nèi)走完全程。走完后LCD顯示的內(nèi)容與直線型顯示的內(nèi)容一樣。</p><p><b> 3. 程序框圖:</b></p><p> 單片機主程序框圖、速度感應(yīng)程序框圖和鐵片感應(yīng)程序框圖分別如(圖7)所示。</p><p><b> (圖7)</b></p><p> 4.系統(tǒng)的
24、具體設(shè)計與實現(xiàn):</p><p> 4.1 路面檢測模塊:</p><p> 應(yīng)用一個金屬感應(yīng)器,安裝在車盤下,離地略小于或約四毫米。當金屬傳感器檢測到鐵片時將對單片機發(fā)送中斷信號,單片機運行中斷,改變輸給電機驅(qū)動信號的電壓占空比來控制小車的速度。</p><p> 4.2 LCD顯示模塊:</p><p> 采用1602LCD,由單
25、片機的總線模式連接。為節(jié)約電源,LCD的背光用單片機進行控制。</p><p><b> 4.3 測速模塊:</b></p><p> 通過霍爾元件感應(yīng)磁鐵來產(chǎn)生脈沖(當霍爾元件在離磁場較近時輸出會是高電平,其它時候是低電平),一個車輪均勻放四個小磁鐵,計算一秒所得的脈沖數(shù),從而計算出一秒小車輪子轉(zhuǎn)動圈數(shù),再測量出小車車輪周長即可計算出小車當前速度,累加可得到當前
26、路程。</p><p><b> 4.4 控速模塊:</b></p><p> 考慮到元器件的缺少以及我們所用的電路的驅(qū)動電機的電路原理圖和和小車自帶的電路的電機驅(qū)動原理圖一樣,所以暫時使用小車自帶的電機驅(qū)動電路圖。</p><p> 4.5 復位電路模塊:</p><p> 單片機的復位電路通過手動來實現(xiàn),復位
27、電路圖如(圖8)所示。</p><p><b> ?。▓D8)</b></p><p> 4.6 模式選擇模塊:</p><p> 兩個中斷口使用和感應(yīng)鐵片、感應(yīng)速度所使用的中斷口一樣,通過一個與非門和按鈕控制。原理圖如(圖9)所示:</p><p><b> ?。▓D9)</b></p>
28、;<p><b> 5.最小系統(tǒng)圖:</b></p><p> 該系統(tǒng)主要用到的是單片機,所以主要的部分是最小系統(tǒng)圖,該最小系統(tǒng)圖如(圖10)所示:</p><p><b> (圖12)</b></p><p> 6. 最終PCB板圖:</p><p> 該最小系統(tǒng)的最終PC
29、B板圖(包括LCD接口以及其他的外部擴展電路部分,考慮到最小系統(tǒng)的簡潔以及容易看懂,外部擴展電路不在最小系統(tǒng)圖上顯示。)分別如(圖11)、(圖12)所示:</p><p><b> ?。▓D11)</b></p><p><b> ?。▓D12)</b></p><p><b> 7.系統(tǒng)程序:</b>
30、</p><p> 按照預定的功能,系統(tǒng)實現(xiàn)預定的功能的程序如下所示:</p><p> #include <intrins.h> </p><p> #include <AT89X52.h></p><p> /*******************************************
31、*************************************\</p><p> ** 宏定義區(qū)**</p><p> \********************************************************************************/</p>
32、;<p> /*------------------------------- LCD模塊 ------------------------------------*/</p><p> #define LCD_RW P2_6 //讀寫控制端</p><p> #define LCD_RS P2_7//數(shù)據(jù)命令選擇端</p>
33、;<p> #define LCD_E P2_5//執(zhí)行使能端</p><p> #define LCD_DataP1 //P1口</p><p> #define Write0x00//低電平寫入</p><p> #define Read0x01//高電平讀出<
34、/p><p> #define Data0x01//高電平選擇數(shù)據(jù)</p><p> #define Cmd0x00//低電平選擇命令</p><p> #define Enable0x00//躍變到低電平時執(zhí)行命令</p><p> #define Disable0x01
35、</p><p> #define True0x01</p><p> #define False0x00</p><p> #define LCD_Init0x38//初始化模式</p><p> #define LCD_DispCtr 0x0C//開顯示及光標設(shè)置&
36、lt;/p><p> #define LCD_CloseCtr0x08//關(guān)顯示</p><p> #define LCD_CLS 0x01//清屏幕</p><p> #define LCD_EnterSet 0x06//顯示光標 </p><p> #define Busy
37、P1_7//忙信號</p><p> /*-------------------------- 測速/測距/測時模塊 -------------------------------*/</p><p> #define CircleLength0.132//小車轉(zhuǎn)一輪的長度為.132m</p><p> /*-----------
38、--------------------- 控速模塊 -----------------------------------*/</p><p> #define P03P0_3 //后電機</p><p> #define P04P0_4 //后電機</p><p> #define P01 P0_1
39、 //前電機</p><p> #define P02P0_2 //前電機</p><p> #define P31P0_5 //控制液晶背光</p><p> #define P33P3_3</p><p> /*---------------------------
40、--- 菜單選擇模塊---------------------------------*/</p><p> #define Line0x00//0代表直線模式</p><p> #define Curve0x01//1代表S型模式</p><p> #define Normal0x00//0 代表正常速
41、度</p><p> #define Low0x01//1 代表低速</p><p> #define High0x02//2 代表高速</p><p> /*********************************************************************************\&l
42、t;/p><p> ** 全局函數(shù)聲明區(qū) **</p><p> \*********************************************************************************/</p><p> /*------------------------------- L
43、CD模塊 -------------------------------------*/</p><p> void LCDInit(void);//LCD初始化</p><p> void SetWriteCmd(void);//設(shè)置寫命令模式</p><p> void SetReadCmd(void);//
44、設(shè)置讀命令模式</p><p> void SetWriteData(void);//設(shè)置寫數(shù)據(jù)模式</p><p> void WriteCmd(char cmd);//寫命令</p><p> void WriteData(char ddata);//寫數(shù)據(jù)</p><p> void E
45、xecuteCmd(void);//執(zhí)行命令</p><p> void SetXY(char x,char y);//定位顯示地址</p><p> void DisplaySingleChar(char x,char y,char cchar);//顯示單個字符</p><p> void DisplayString(ch
46、ar x,char y,char *str); //顯示一段字符串</p><p> void Delay(unsigned int time);//延時主程序</p><p> void DelayUs(unsigned int time);//延時子程序</p><p> bit IsBusy(void);
47、//判斷忙標志函數(shù)</p><p> void DisplayTime(void);//顯示時間</p><p> void DisplayAVGSpeed(void);//顯示平均速度</p><p> void DisplayDistance(void);//顯示路程</p><p>
48、/*-------------------------- 測速/測距/測時模塊 -------------------------------*/ </p><p> void INTInit(void); //所有中斷初始化</p><p> void SpeedINT(void); //測速中斷</p>
49、<p> void ComputeTime(void);</p><p> void ComputeSpeedANDDistance(void);//計算速度和距離</p><p> /*-------------------------------- 控速模塊 -----------------------------------*/</p>&
50、lt;p> void CtrSpeedINT(void); //控速中斷</p><p> void Time0INT(void); </p><p> void Time1INT(void); //控速單位時間中斷</p><p> void Clock0_Init(void);
51、//時鐘中斷初始化</p><p> void Clock1_Init(void); //時鐘中斷初始化</p><p> void CtrSpeed(void);</p><p> /****************************************************************
52、****************\</p><p> ** 全局變量區(qū)**</p><p> \********************************************************************************/</p><p> float Spe
53、edCount = 0; //測速計數(shù)脈沖</p><p> float Speed = 0.0;</p><p> float Distance = 0.0; </p><p> char Time1INTCount=0;//T1中斷時間計時</p>
54、;<p> float PassTime=0.00;//小車行走的時間</p><p> short IsT0INT=1;</p><p> bit IsT1INT;//判斷T1是否已經(jīng)響應(yīng)中斷</p><p> short IsT0INT2=1;</p><p
55、> char Thx[5]={0xf4,0xf4,0xc5,0xf4,0xff}; //3ms,3ms,15ms,3ms</p><p> char Tlx[5]={0x48,0x48,0x68,0x48,0xff};</p><p> char Thx0=0xd8;</p><p> char Tlx0=0xf0;
56、</p><p> char Thx1=0xb1; //20ms</p><p> char Tlx1=0xe0;</p><p> short Round=0;</p><p> short Back=0;</p><p> short Back0=0;</p>
57、<p> bit Backid;</p><p> bit Stop=0;</p><p> char Area0=0;</p><p> char Area1=0;//區(qū)域變量</p><p> char LowSpeedArea1StartTime;</p>&
58、lt;p> char LowSpeedArea1EndTime;</p><p> char HighSpeedAreaEndTime;</p><p> char LowSpeedArea2EndTime;</p><p> char LowSpeedArea1PassTime=0; //第一個低速區(qū)通過時間</p&
59、gt;<p> char HighSpeedAreaPassTime=0;//高速區(qū)通過時間</p><p> char LowSpeedArea2PassTime=0;//第二個低速區(qū)通過時間</p><p> char ReadyToGo=4;//倒計時</p><p> char f
60、lag;</p><p> bit Roundid=0;</p><p> char Nocurve=0; </p><p> char ChangeFlag;</p><p> char Mode; </p><p> bit Running;</p><p>
61、; bit SelectedAll;//模式和速度是否選擇完畢標志</p><p> bit IsSelectingMode;//模式選擇標志</p><p> bit IsSelectingSpeed;//速度選擇標志</p><p> bit ModeSelected;//
62、已經(jīng)被選擇的模式標志</p><p> char SelectedMode=10;//模式選擇是否完畢標志</p><p> bit Next;//Next鍵標志</p><p> bit SpeedSelected;//已經(jīng)被選中的速度方案標志</p><p> c
63、har SelectedSpeed;//速度選擇是否完畢標志</p><p> bit ChoosingDisplay;//人工選擇菜單開始標志</p><p> bit SelectedShow;//顯示選擇標志</p><p> bit SelectedReturn;//返
64、回選擇標志</p><p> bit Selected;//確定/返回鍵選擇標志</p><p> bit ReturnSelection;//返回鍵啟用標志</p><p> bit AVGSpeedShow;//平均速度顯示標志</p><p> bit T
65、otalDistanceShow;//總路程顯示標志</p><p> bit ReturnMain;//返回主菜單標志</p><p> bit AutoDisplay;//自動顯示標志</p><p> bit GoToChoosingDisplay;//人工選擇標志</
66、p><p> bit AutoMode=0;</p><p> char PassLineID=0;</p><p> char PassLine=0;</p><p> float PrepareDistance;</p><p> float FirstDistance;</p>
67、<p> float SecondDistance;</p><p> float ThirdDistance;</p><p> int FirstHigh;</p><p> int SecondHigh;</p><p> int ThirdHigh;</p><p>
68、; float Rate=1.25; //5ms時的速度</p><p> float Count=4;//時間的倍數(shù)</p><p> /********************************************************************************\</p><p>
69、 ** 全局函數(shù)實現(xiàn)區(qū)**</p><p> \********************************************************************************/</p><p> /*--------------------------------主函數(shù) ---------
70、---------------------------*/</p><p> void main()</p><p><b> {</b></p><p><b> P01=0;</b></p><p><b> P02=0;</b></p><p
71、><b> P03=0;</b></p><p><b> P04=0;</b></p><p> P31=1;//單片機復位,背光開</p><p> Delay(40);//延時等待LCD啟動</p><p> LCDInit();
72、//初始化LCD</p><p> DisplayString(0x0,0," Starting... ");</p><p> DisplayString(0x0,1,"Designed By 202");</p><p> Delay(300);</p><p> Writ
73、eCmd(LCD_CLS);</p><p> EA=1; //開總中斷</p><p> EX0=1;//開INT0中斷</p><p> IT0=1;//INTO邊沿觸發(fā)</p><p> EX1=1; //開INT1中斷</p&
74、gt;<p> IT1=1; //INT1邊沿觸發(fā)</p><p> SelectedAll=False; //開始模式和速度選擇</p><p> /*------------------------------ 模式選擇 ---------------------------------*/</p>
75、<p> DisplayString(0x0,0,"Choose The Mode ");</p><p> DisplayString(0x0,1,"you want. ");</p><p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p>
76、<p> IsSelectingMode=True;</p><p><b> while(1)</b></p><p> { </p><p> WriteCmd(LCD_CLS);</p><p> DisplayString(0x0,0," Line M
77、ode ");</p><p> DisplayString(0x0,1,"Next Yes");</p><p> Delay(300);//延時消除抖動</p><p> while (1) //不斷檢測中斷,直到按確定鍵或是NEXT鍵</p><p&
78、gt;<b> {</b></p><p> if (Next==True)//如果按Next鍵則直接跳出</p><p><b> break;</b></p><p> if (ModeSelected==True)//如果按確定鍵則設(shè)置模式為Line并跳出</p><
79、p><b> {</b></p><p> SelectedMode=Line;</p><p><b> break;</b></p><p> }//如果什么鍵都沒有按下,那么一直顯示等待</p><p><b> }</b></p
80、><p> if (ModeSelected==True)//按下了確定鍵,退出模式選擇</p><p><b> {</b></p><p> IsSelectingMode=False;</p><p><b> break;</b></p><p>
81、<b> }</b></p><p> if (Next==True)//按下了Next鍵,顯示下一個菜單項</p><p><b> {</b></p><p> Next=False;</p><p> WriteCmd(LCD_CLS);</p><
82、p> DisplayString(0x0,0," Curve Mode ");</p><p> DisplayString(0x0,1,"Next Yes");</p><p> Delay(300);//延時消除抖動</p><p> while(1)/
83、/不斷檢測中斷,直到按確定鍵或是Next鍵</p><p><b> {</b></p><p> if (Next==True)//如果再一次按下Next鍵,則跳出</p><p><b> break;</b></p><p> if (ModeSelected==True)
84、//如果按下確定鍵,則設(shè)置模式為Curve,并跳出</p><p><b> {</b></p><p> SelectedMode=Curve;</p><p><b> break;</b></p><p><b> }</b></p><p
85、><b> }</b></p><p><b> }</b></p><p> if (ModeSelected==True) //按下了確定鍵,退出模式選擇</p><p><b> {</b></p><p> IsSelectingMode
86、=False;</p><p><b> break;</b></p><p><b> }</b></p><p> if (Next==True)//再一次按下了Next鍵,則循環(huán)模式選擇</p><p><b> {</b></p>&
87、lt;p> Next=False;</p><p> WriteCmd(LCD_CLS);</p><p> DisplayString(0x0,0," AutoMode ");</p><p> DisplayString(0x0,1,"Next Yes");</p>
88、<p> Delay(300); //延時消除抖動</p><p><b> while(1)</b></p><p><b> {</b></p><p> if (Next==True)</p><p><b> break;</b>&
89、lt;/p><p> if (ModeSelected==True)</p><p><b> {</b></p><p> AutoMode=1;</p><p><b> break;</b></p><p><b> }</b></p
90、><p><b> }</b></p><p><b> }</b></p><p> if (ModeSelected==True)</p><p><b> {</b></p><p> IsSelectingMode=False;</p
91、><p><b> break;</b></p><p><b> }</b></p><p> if (Next==True)</p><p><b> {</b></p><p> Next=False;</p><p>
92、;<b> continue;</b></p><p><b> }</b></p><p><b> }</b></p><p> Delay(50);</p><p> WriteCmd(LCD_CLS); </p><p> /*
93、------------------------------ 速度選擇 ---------------------------------*/</p><p> if (SelectedMode==Line && AutoMode==0)</p><p><b> {</b></p><p> DisplayString
94、(0x0,0," Now Choose a ");</p><p> DisplayString(0x0,1," kind of Speed ");</p><p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p><p> IsSelectingSp
95、eed=True;</p><p> while(1)</p><p><b> {</b></p><p> WriteCmd(LCD_CLS);</p><p> DisplayString(0x0,0," Normal Speed ");</p>
96、<p> DisplayString(0x0,1,"Next Yes");</p><p> Delay(300); //延時消除抖動</p><p><b> while(1)</b></p><p><b> {</b></p><
97、p> if (Next==True) //如果按Next鍵則直接跳出</p><p><b> break;</b></p><p> if (SpeedSelected==True) //如果按確定鍵則設(shè)置速度為Normal并跳出</p><p><b> {</b></p&
98、gt;<p> Thx[0]=0xec;Tlx[0]=0x78; //5ms</p><p> Thx[1]=0xf0;Tlx[1]=0x60; //4ms</p><p> Thx[2]=0x8a;Tlx[2]=0xd0; //30ms</p><p> Thx[3]=0xf4;Tlx[3]=0x48; //3
99、ms</p><p> SelectedSpeed=Normal;</p><p><b> break;</b></p><p> } //如果什么鍵都沒有按下,那么一直顯示等待</p><p><b> }</b></p><p> if
100、(SpeedSelected==True) //按下了確定鍵,退出速度選擇</p><p><b> {</b></p><p> IsSelectingSpeed=False;</p><p><b> break;</b></p><p><b> }</b
101、></p><p> if (Next==True)</p><p><b> {</b></p><p> Next=False;</p><p> WriteCmd(LCD_CLS);</p><p> DisplayString(0x0,0," Low Spe
102、ed ");</p><p> DisplayString(0x0,1,"Next Yes");</p><p> Delay(300); //延時消除抖動</p><p><b> while(1)</b></p><p><b>
103、{</b></p><p> if (Next==True)//如果再一次按下Next鍵,則跳出</p><p><b> break;</b></p><p> if (SpeedSelected==True)//如果按下確定鍵,則設(shè)置速度為Low,并跳出</p><p><b>
104、; {</b></p><p> SelectedSpeed=Low;//這里沒有速度設(shè)置,因為默認速度就是Low</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b&g
105、t;</p><p><b> }</b></p><p> if (SpeedSelected==True)//按下了確定鍵,退出速度選擇</p><p><b> {</b></p><p> IsSelectingSpeed=False;</p><p>
106、;<b> break;</b></p><p><b> }</b></p><p> if (Next==True)</p><p><b> {</b></p><p> Next=False;</p><p> WriteCmd(LC
107、D_CLS);</p><p> DisplayString(0x0,0," High Speed ");</p><p> DisplayString(0x0,1,"Next Yes");</p><p> Delay(300); //延時消除抖動</p><p&g
108、t;<b> while(1)</b></p><p><b> {</b></p><p> if (Next==True) //如果再一次按下Next鍵,則跳出</p><p><b> break;</b></p><p> if (SpeedSelect
109、ed==True) //如果按下確定鍵,則設(shè)置速度為High,并跳出</p><p><b> {</b></p><p> Thx[0]=0xe0;Tlx[0]=0xc0; //8ms</p><p> Thx[1]=0xe0;Tlx[1]=0xc0; //8ms</p><p> Thx[2]=0x63;
110、Tlx[2]=0xc0; //40ms</p><p> Thx[3]=0xec;Tlx[3]=0x78; //5ms</p><p> SelectedSpeed=High;</p><p><b> break;</b></p><p><b> }</b></p>
111、;<p><b> }</b></p><p><b> }</b></p><p> if (SpeedSelected==True) //按下了確定鍵,退出速度選擇</p><p><b> {</b></p><p> IsSele
112、ctingSpeed=False;</p><p><b> break;</b></p><p><b> }</b></p><p> if (Next==True) //再一次按下了Next鍵,則循環(huán)速度選擇</p><p><b> {</b>&l
113、t;/p><p> Next=False;</p><p><b> continue;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p&g
114、t;<p> SelectedAll=True; //標志模式選擇和速度選擇完畢</p><p> Running=True;</p><p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p><p> /*-----
115、-------------------- 顯示所選擇的模式和速度方案 -------------------------*/</p><p> if (SelectedMode==Line)</p><p><b> {</b></p><p> DisplayString(0x0,0,"Choosen Mode is &q
116、uot;);</p><p> DisplayString(0x0,1," Line ");</p><p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p><p><b> }</b></p><p> i
117、f (SelectedMode==Curve)</p><p><b> {</b></p><p> DisplayString(0x0,0,"Choosen Mode is ");</p><p> DisplayString(0x0,1," Curve ");</p&g
118、t;<p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p><p><b> }</b></p><p> if (AutoMode==1)</p><p><b> {</b></p><p> Displa
119、yString(0x0,0,"Choosen Mode is ");</p><p> DisplayString(0x0,1," AutoMode ");</p><p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p><p><b>
120、; } </b></p><p> if (SelectedMode==Line)</p><p><b> {</b></p><p> if (SelectedSpeed==Normal)</p><p><b> {</b></p><p&g
121、t; DisplayString(0x0,0,"Choosen Speed is");</p><p> DisplayString(0x0,1," Normal ");</p><p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p><p&g
122、t;<b> }</b></p><p> if (SelectedSpeed==Low)</p><p><b> {</b></p><p> DisplayString(0x0,0,"Choosen Speed is");</p><p> DisplayStri
123、ng(0x0,1," Low ");</p><p> Delay(50);</p><p> WriteCmd(LCD_CLS);</p><p><b> }</b></p><p> if (SelectedSpeed==High)</p><p
124、><b> {</b></p><p> DisplayString(0x0,0,"Choosen Speed is");</p><p> DisplayString(0x0,1," High ");</p><p> Delay(50);</p><
125、;p> WriteCmd(LCD_CLS);</p><p><b> }</b></p><p><b> }</b></p><p> INTInit(); //初始化所有中斷</p><p> DisplayString(0x0,0,"Lef
126、t Times To Go");</p><p> while (ReadyToGo--)</p><p><b> {</b></p><p> DisplaySingleChar(0x7,1,ReadyToGo+0x30);</p><p> DisplaySingleChar(0x09,1,
127、9;s');</p><p> Delay(300);</p><p><b> }</b></p><p> WriteCmd(LCD_CLS);</p><p> DisplayString(0x05,0,"Go!!!");</p><p> Dela
128、y(100);</p><p> WriteCmd(LCD_CLS);</p><p> DisplayString(0x0,0," Living... ");</p><p> DisplayString(0x0,1,"Designed by 202");</p><p> if (S
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89s52測溫系統(tǒng)畢業(yè)論文
- 基于at89s52單片機的紅外遙控小車制作畢業(yè)論文
- 基于at89s52單片機循跡小車的系統(tǒng)設(shè)計畢業(yè)論文
- 基于at89s52智能風扇設(shè)計畢業(yè)論文
- 基于at89s52的廣告燈設(shè)計畢業(yè)論文
- 基于at89s52數(shù)字鬧鐘設(shè)計研究畢業(yè)論文
- 基于at89s52的俄羅斯方塊畢業(yè)論文
- 基于at89s52的無線溫度測量系統(tǒng)畢業(yè)論文
- 基于at89s52的金屬探測器畢業(yè)論文
- 基于at89s52的溫度測量系統(tǒng)設(shè)計畢業(yè)論文
- 基于at89s52的揮手翻屏系統(tǒng)畢業(yè)論文
- 基于at89s52的電子密碼鎖畢業(yè)論文
- 基于at89s52控制的交通燈畢業(yè)論文
- 基于at89s52數(shù)字電子鐘設(shè)計畢業(yè)論文
- 基于at89s52的簡易計算器設(shè)計畢業(yè)論文
- 基于at89s52溫度控制器設(shè)計畢業(yè)論文
- 基于at89s52的數(shù)字電壓表設(shè)計畢業(yè)論文
- 基于at89s52的多功能數(shù)字鐘畢業(yè)論文
- 基于at89s52的超聲波測距系統(tǒng)畢業(yè)論文
- 基于at89s52的16led搖搖棒畢業(yè)論文
評論
0/150
提交評論