智能尋跡小車的研究與開發(fā)
《智能尋跡小車的研究與開發(fā)》由會(huì)員分享,可在線閱讀,更多相關(guān)《智能尋跡小車的研究與開發(fā)(39頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 材料清單 一、 研究報(bào)告 1. 項(xiàng)目成果簡(jiǎn)介 2. 項(xiàng)目研究背景和意義 3. 研究計(jì)劃 4. 研究?jī)?nèi)容 5. 成果創(chuàng)新點(diǎn) 6.項(xiàng)目研究展望 二、附件材料 附件一:實(shí)物電路圖 附件二:實(shí)物照片 附件三:源程序清單 三、實(shí)物作品 衡陽(yáng)市第三屆大學(xué)生創(chuàng)新大賽相關(guān)項(xiàng)目的研究報(bào)告 項(xiàng)目名稱:智能尋跡小車的研究與開發(fā) 項(xiàng)目類型:實(shí)用型 成果形式:1、研究報(bào)告;2、實(shí)用作品 參賽學(xué)生:陳緒雄、周鋒、蔣晶 指導(dǎo)教師:李祖林、雷軍、李旭華 一、項(xiàng)目成果簡(jiǎn)介 本項(xiàng)目使用光電傳感器檢測(cè)小車的運(yùn)動(dòng)軌跡,金屬傳感器和超聲波傳感器檢測(cè)小車周
2、圍的障礙,對(duì)小車的相關(guān)信息進(jìn)行采集,采用AVR單片機(jī)Atmega128L作為電動(dòng)小車的尋跡控制,AVR單片機(jī)Atmega128L完成算法分析、信息處理和小車的控制。構(gòu)建了以微處理器為核心、多傳感器的小車信息檢測(cè)與融合、聲光報(bào)警與LCD數(shù)碼顯示、雙向PWM控制驅(qū)動(dòng)電機(jī)的智能小車尋跡系統(tǒng)。電動(dòng)小車能沿著任意設(shè)定的軌跡行走,遇到障礙自動(dòng)停止5秒并發(fā)出聲光報(bào)警,之后能自動(dòng)倒回按設(shè)定的軌跡行走,小車能自動(dòng)糾偏。經(jīng)過(guò)測(cè)試,小車能夠按任意設(shè)定的軌跡行走流暢。 二、項(xiàng)目研究背景和意義 隨著計(jì)算機(jī)技術(shù)、控制技術(shù)、信息技術(shù)的快速發(fā)展,工業(yè)的生產(chǎn)和管理進(jìn)入了自動(dòng)化、信息化和智能化時(shí)代,智能化已經(jīng)成為時(shí)代發(fā)展的需
3、要。在柔性自動(dòng)化生產(chǎn)線、智能倉(cāng)儲(chǔ)管理及物流配送等領(lǐng)域,當(dāng)生產(chǎn)現(xiàn)場(chǎng)環(huán)境惡劣時(shí),人工不能完成的任務(wù)如物料運(yùn)輸和裝卸等,可采用智能尋跡小車完成相應(yīng)的任務(wù)?;谏a(chǎn)現(xiàn)場(chǎng)和日常生活的實(shí)際需要,研究和開發(fā)智能小車尋跡系統(tǒng)具有十分重要的意義。該項(xiàng)目的研究可以應(yīng)用于機(jī)車頭燈自動(dòng)尋跡、工廠自動(dòng)化、倉(cāng)庫(kù)管理、智能玩具和民用服務(wù)等領(lǐng)域,可提高勞動(dòng)生產(chǎn)效率,改善勞動(dòng)環(huán)境。 三、研究計(jì)劃 2007年6月1日---2007年6月20日,收集資料,確定研究?jī)?nèi)容、技術(shù)方案、研究路線。(由組內(nèi)3人共同研究)。 2007年6月21日---2007年7月30日,完成小車硬件的電路制作(陳緒雄負(fù)責(zé)小車整體方案確定、制作電路板,
4、周鋒負(fù)責(zé)購(gòu)買元器件和電路焊接,蔣晶負(fù)責(zé)電路圖繪制)。 2007年8月1日---2007年9月8日,完成小車軟件的編寫和小車整機(jī)調(diào)試。(三人共同協(xié)作完成)。 2007年9月10日---2008年3月6日,完成成果總結(jié)。 四、研究?jī)?nèi)容 1 方案與論證 1.1控制芯片的選擇 方案一:選用AVR單片機(jī)Atmega128L,Atmega128L是高性能、低功耗的 AVR 8 位微處理器,64引腳。采用先進(jìn)的 RISC 結(jié)構(gòu),具有133 條指令,大多數(shù)可以在一個(gè)時(shí)鐘周期內(nèi)完成。它具有兩個(gè)獨(dú)立的預(yù)分頻器和比較器功能的8 位定時(shí)器/計(jì)數(shù)器和兩個(gè)具有預(yù)分頻器、比較功能和捕捉功能的16 位定時(shí)器/
5、計(jì)數(shù)器及具有獨(dú)立預(yù)分頻器的實(shí)時(shí)時(shí)鐘計(jì)數(shù)器。片內(nèi)帶有模擬比較器。具有上電復(fù)位以及可編程的掉電檢測(cè)功能。 其片內(nèi)資源豐富,具有: 8個(gè)外部中斷, 4個(gè)定時(shí)計(jì)數(shù)器,53個(gè)I/O口,可解除I/O口資源不足的困難。其引腳大多數(shù)都有具有第二功能,功能強(qiáng)大。. 方案二:采用AT89S52單片機(jī),AT89S52 單片機(jī)是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。AT89S52有5個(gè)中斷源,和3個(gè)定時(shí)計(jì)數(shù)器。 方案三:采用FP
6、GA(現(xiàn)場(chǎng)可編輯門列陣)作為系統(tǒng)控制器。FPGA可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能,規(guī)模大,集成度高,體積小,穩(wěn)定性好,并且可利用EDA軟件進(jìn)行仿真和調(diào)試。FPGA采用并行工作方式,提高了系統(tǒng)的處理速度,常用于大規(guī)模實(shí)時(shí)性要求較高的系統(tǒng)。 方案比較:由三種方案可以看出,以Atmega 128L核心可以方便地實(shí)現(xiàn)對(duì)各個(gè)部分的控制和外接,而AT89S52而需要外擴(kuò)大量的I/O口才能滿足需要,而FPGA的高速處理能力得不到充分發(fā)揮且價(jià)格較貴,所以我們選擇方案一。 (2)軌道行程控制方案的選擇 為了使電動(dòng)車能夠識(shí)別黑線不跑離軌道,我們?cè)谙到y(tǒng)中加裝了光電傳感器和金屬傳感器。 1.2 路面檢測(cè)
7、我們采用檢測(cè)黑線的方法來(lái)控制智能小車的行走軌跡,使用了兩個(gè)紅外對(duì)管來(lái)檢測(cè)黑線,同時(shí)用超聲波傳感器檢測(cè)小車周圍的障礙物。 方案一:采用熱探測(cè)器。熱探測(cè)器是利用所接收到的紅外輻射后,會(huì)引起溫度的變化,溫度的變化引起電信號(hào)輸出,且輸出的電信號(hào)與溫度的變化成比例,溫度變化是因?yàn)槲諢彷椛淠芰恳鸬?,與吸收紅外輻射的波長(zhǎng)沒(méi)有關(guān)系,即對(duì)紅外輻射吸收沒(méi)有波長(zhǎng)的選擇。但熱探測(cè)器對(duì)其吸收的紅外輻射波長(zhǎng)沒(méi)有選擇性,受外界環(huán)境的影響比較大。 方案二;采用光電探測(cè)器。光電探測(cè)器接收紅外輻射后,由于紅外光子直接把材料的束縛態(tài)電子激發(fā)成傳導(dǎo)電子,由此引起電信號(hào)輸出,信號(hào)大小與所吸收的光子數(shù)成比例。且這些紅外光
8、子的能量的大?。醇t外光還必須滿足一定的波長(zhǎng)范圍),必須滿足一定的要求,才能激發(fā)束縛電子,起激發(fā)作用。光電探測(cè)器吸收的光子必須滿足一定的波長(zhǎng),否則不能被吸收,所以受外界影響比較小,抗干擾比較強(qiáng)。基于上面分析,我們采用方案二 1.3 小車運(yùn)行終點(diǎn)檢測(cè) 方案一:采用計(jì)算路程的方法來(lái)控制。只要將計(jì)算出來(lái)的路程不斷的與預(yù)置的初值進(jìn)行比較,只要相等說(shuō)明已經(jīng)到了終點(diǎn),倒回起點(diǎn)也如此。這種方法不僅計(jì)算路程麻煩而且占用了CPU的開銷。 方案二:采用檢測(cè)金屬片的方法。只要在運(yùn)行軌跡的終點(diǎn)放置一塊鐵片,再用金屬傳感器檢測(cè)金屬片就可以了,電路簡(jiǎn)單、程序采用中斷的方式不會(huì)占用很多CPU資源。綜合上述我們采用方案
9、二 1.4 顯示裝置的選擇 方案一:采用美信公司的MAX7219是一款串行共陰極數(shù)碼管動(dòng)態(tài)掃描顯示的驅(qū)動(dòng)芯片,其峰值段電流可達(dá)到40mA最高串行掃描頻率10MHz,典型掃描頻率為1.3MHz,僅用3線串行接口傳送數(shù)據(jù),可直接與單片機(jī)接口,用戶可以方便地修改其內(nèi)部參數(shù)以實(shí)現(xiàn)多位LED顯示。它內(nèi)含硬件動(dòng)態(tài)掃描顯示控制電路,每片芯片可同時(shí)驅(qū)動(dòng)8位共陰LED。點(diǎn)是控制比較簡(jiǎn)單,而且串行顯示只占用很少的I/O口。 方案二:采用點(diǎn)陣型LCD顯示,點(diǎn)陣型LCD雖然占用的I/O口資源多,控制比較復(fù)雜,但其功能強(qiáng)大的,顯示信息量大,可以保證良好的用戶模式。它具有顯示質(zhì)量高、體積小、重量輕、功耗低、輕薄短
10、小、無(wú)輻射危險(xiǎn)、平面直角顯示以及影像穩(wěn)定不閃爍等優(yōu)勢(shì),可視面積大,圖面積效果好,分辨率高,抗干擾能力強(qiáng)等特點(diǎn)等優(yōu)點(diǎn)??紤]到Atmega128 I/O口資源豐富和LCD的眾多優(yōu)點(diǎn),我們選擇使用LCD顯示。 2 主要電路設(shè)計(jì)與分析 2.1系統(tǒng)結(jié)構(gòu)框圖 單片機(jī)將傳感器送來(lái)的數(shù)據(jù)進(jìn)行處理、算法分析,其輸出信號(hào)控制電機(jī)并送LCD顯示。光電傳感器負(fù)責(zé)黑線的檢測(cè),引導(dǎo)智能小車的行使軌跡。金屬傳感器負(fù)責(zé)前起點(diǎn)和終點(diǎn)的檢測(cè),當(dāng)金屬傳感器檢測(cè)到金屬條時(shí),說(shuō)明電動(dòng)小車已經(jīng)到起點(diǎn)或終點(diǎn),采用超聲波傳感器檢測(cè)智能小車的周圍障礙物及其距離,若檢測(cè)的距離達(dá)到超過(guò)給定值,發(fā)出聲光報(bào)警,聲音報(bào)警信號(hào)為“請(qǐng)注意倒車”。系
11、統(tǒng)框圖如圖2.1。 圖2.1 系統(tǒng)框圖 2.2系統(tǒng)模塊理論分析與設(shè)計(jì) (1)探測(cè)路面黑線的基本原理 當(dāng)光線照射到路面會(huì)反射,由于黑線和地面對(duì)光的反射系數(shù)不同,可根據(jù)接收到的反射光強(qiáng)弱,用光電傳感器判斷黑線。光電管基本原理圖如圖2.2。 圖2.2光電管基本原理圖 當(dāng)光電管檢測(cè)不到黑線時(shí),紅外光管接收到反射回來(lái)的紅外光,使其輸出由高電平立即跳至低電平。我們?cè)谛≤嚿喜⑴偶由蟽蓚€(gè)紅外光電管,黑線置于兩紅外光電管之間,并且將兩個(gè)光電管產(chǎn)生的電信號(hào)脈沖分別送單片機(jī)的PE2和PE3。這樣通過(guò)PWM來(lái)調(diào)節(jié)兩個(gè)電機(jī)的速度來(lái)校正行使路線,電動(dòng)車行駛狀態(tài)和紅外對(duì)管
12、產(chǎn)生的電信號(hào)關(guān)系如表2-1。 表2-1 電動(dòng)車行駛狀態(tài)和紅外對(duì)管產(chǎn)生的電信號(hào)關(guān)系 (2)金屬探測(cè)模塊 金屬探測(cè)模塊主要用于行駛軌跡中金屬片的探測(cè)??紤]到金屬一般都是導(dǎo)體,根據(jù)電磁場(chǎng)理論可知,在受到變化的電磁場(chǎng)作用的任何導(dǎo)體,都會(huì)產(chǎn)生電渦流。因此,在本系統(tǒng)中采用電感式接近開關(guān)實(shí)現(xiàn)對(duì)金屬片的檢測(cè)。電感式接近開關(guān)由LC高頻振蕩器和放大處理電路組成,金屬物體接近傳感器的振蕩感應(yīng)頭時(shí),物體內(nèi)部產(chǎn)生電渦流,當(dāng)電渦流作用于接近開關(guān)時(shí),接近開關(guān)振蕩能力衰減,內(nèi)部電路的參數(shù)發(fā)生變化,由此識(shí)別出有無(wú)金屬物體接近,進(jìn)而控制開關(guān)的通和斷,并以電信號(hào)脈沖的形式送入單片機(jī)的PD7。電感式接開關(guān)內(nèi)部工作原理圖如圖
13、2.3。 圖2.3電感式接開關(guān)內(nèi)部工作原理圖 (3)電機(jī)驅(qū)動(dòng)模塊 L298是一個(gè)4通道邏輯驅(qū)動(dòng)電路,既將邏輯控制電平進(jìn)行功率放大,可以用于功率驅(qū)動(dòng)的電壓。電機(jī)驅(qū)動(dòng)模塊電路如圖2.4所示。 圖2.4 電機(jī)驅(qū)動(dòng)模塊電路 PWM(脈沖寬度調(diào)制)控制,配用L298驅(qū)動(dòng)電路實(shí)現(xiàn)直流電機(jī)的調(diào)速,非常簡(jiǎn)單且調(diào)速范圍大,它利用的是直流斬波原理,假設(shè)高電平導(dǎo)通,在一個(gè)周期T內(nèi)導(dǎo)通時(shí)間為t,那么一個(gè)周期T內(nèi)的平均電壓,其中=稱為占空比。各周期內(nèi)不同的占空比示例如圖2.5。 圖2.5 各周期內(nèi)不同的占空比示例 電機(jī)的轉(zhuǎn)速與電機(jī)兩端的電壓
14、成正比,而電機(jī)兩端的電壓與控制波形的占空比成正比,因此電機(jī)的速度與占空比成正比,占空比越大,電機(jī)轉(zhuǎn)得越快,當(dāng)占空比時(shí),電機(jī)轉(zhuǎn)速達(dá)到最大。 3 程序設(shè)計(jì) 主程序流程圖主要包括傳感器輸出中斷的查詢、電平的檢測(cè)和電機(jī)的響應(yīng)等。主程序流程圖如圖3.1所示。 圖3.1主程序流程圖 4 功能測(cè)試 通過(guò)測(cè)試,智能小車能按任意設(shè)定路線行駛,能實(shí)現(xiàn)以下功能: (1) 沿著直線軌跡行使。 (2) 沿著S型設(shè)定軌跡行使。 (3) 沿著任何設(shè)置的軌跡行使。 (4) 小車行使到達(dá)軌跡終點(diǎn)時(shí),自動(dòng)停留5秒并發(fā)出聲光報(bào)警之后自動(dòng)尋跡倒回行使到起點(diǎn)。 (5) 沿軌跡行使過(guò)程中,檢
15、測(cè)到障礙物時(shí),自動(dòng)停止5s,并發(fā)出聲光報(bào)警“請(qǐng)注意倒車”。 4 小結(jié) 項(xiàng)目設(shè)計(jì)中采用具有豐富資源的Atmega128單片機(jī)和光電傳感器、金屬傳感器、超聲波傳感器等,實(shí)現(xiàn)相應(yīng)信號(hào)的檢測(cè)與小車的控制,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、穩(wěn)定、具有較高的控制精度、抗干擾能力強(qiáng),實(shí)現(xiàn)了智能小車能按任意軌跡行駛。 五、成果創(chuàng)新點(diǎn) 智能小車能檢測(cè)障礙物及其距離,并發(fā)出聲光報(bào)警 “請(qǐng)注意倒車” 信號(hào),智能小車能沿任意設(shè)定軌跡行駛,具有實(shí)際應(yīng)用價(jià)值和推廣價(jià)值。 六、項(xiàng)目研究展望 對(duì)智能尋跡小車的研究,加裝GPS(全球衛(wèi)星定位系統(tǒng))或加裝基于Internet的接口電路,智能尋跡小車將具有更廣泛的應(yīng)用前景和使用價(jià)
16、值,這也是我們以后的研究方向。 附錄一:實(shí)物電路圖 附件二:實(shí)物照片 附錄三:程序清單 /********************************************************* This program was produced by the CodeWizardAVR V1.24.1d Standard Automatic Program Generator Copyright 1998-2004 Pavel Haiduc, HP In
17、foTech s.r.l. http://www.hpinfotech.ro e-mail:office@hpinfotech.ro Project : LTPC-3500 Version : 1.0 Date : 2007-6-1 Author : HNHYLEI Company : HNGXY Comments: Chip type : ATmega128L Program type : Appl
18、ication
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*********************************************************/
#include
19、-------------------------------------- #define buzzer_led PORTB.0 #define LED1 PORTD.0 #define LED2 PORTD.1 #define LED3 PORTD.2 #define LED4 PORTD.3 #define lpwm_ff PORTB.4 #define lpwm_re PORTA.4 #define rpwm_ff PORTB.7 #define rpwm_re PORTA.5 #define black_l PINE.2 #defin
20、e black_r PINE.3 #define metal_detect PINF.0 #define model PINF.2 //---------------------------------------- 液晶 #define uchar unsigned char #define rs PORTA.7 #define rw PORTB.5 #define en PORTB.6 #define ret PORTA.6 //LCD數(shù)據(jù)數(shù)據(jù)口初始化 #define data PORTC uchar command,data1,data2,com0;
21、uchar lcd_bufl,lcd_bufg;//定義顯示緩沖區(qū) //----------------------------------------------- // Declare your global variables here // This flag is set on USART0 Receiver buffer overflow bit left_run=0; //左走 bit right_run=0; //右走 bit left_ff=1; //左前進(jìn) bit right
22、_ff=1; //右前進(jìn) bit left_pwm; //用于左PWM bit right_pwm; //用于右PWM //----------- //--------------- bit filter_start=0; //數(shù)字濾波 bit filter_over=0; //數(shù)字濾波 bit black_l1=0; //左黑線1 bit black_l2=0; //左黑線2 bit black_r1
23、=0; //右黑線1 bit black_r2=0; //右黑線2 bit left_turn=0; //左轉(zhuǎn) bit right_turn=0; //右轉(zhuǎn) bit metal1=0; //金屬1 bit metal2=0; //金屬2 bit mode=0; //測(cè)試模式 bit stop_point; //停車點(diǎn) bit buzzer=0; //蜂鳴 bit lcd_dsp=0;
24、 //LCD刷新 bit read_over; // bit gradient_set=0; // bit stop_status=0; // unsigned char speed_l; //left速度控制量 unsigned char speed_r; //right速度控制量 unsigned char filter_count; //數(shù)字濾波 unsigned char excute_step1;
25、 // unsigned char excute_step2; // unsigned int bcd_temp0=0; //BCD 入口 //------------------------------- unsigned char count1=0; //秒計(jì)時(shí) unsigned char count2=0; //轉(zhuǎn)彎計(jì)時(shí) unsigned int cou
26、nt3=0; //停止時(shí)間計(jì)時(shí) unsigned int count4=0; // unsigned int count5=0; // unsigned int stop_time=0; //停止時(shí)間 unsigned int gradient=0; // unsigned int gradient2=0; // unsigned int gradient_old; //
27、 unsigned int gradient2_temp1[8]; // unsigned int filter_temp1[50]; //數(shù)字濾波 unsigned long int filter_sum; unsigned int filter_temp3; //------------------------------ unsigned char j1,k1; //公共循環(huán)變量 unsigned char bcd_temp[5]={0}; //BCD分解值 //---------
28、-------------------------- unsigned int ahead_time=0; //前進(jìn)時(shí)間 unsigned int back_time=0; //倒退時(shí)間 //EEPROM----------------------------------------- //----------------------------------------- void bcd_con(unsigned char numb); void clear_lcd();
29、 void lcd_int(); void lcd_set(); void display(); void dis_code1(); void dis_code2(); void write_command(uchar command); void write_data(uchar data0); //----------------------------------------- //---------------------------------------------- // External Interrupt 0 serv
30、ice routine interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here } // External Interrupt 4 service routine interrupt [EXT_INT4] void ext_int4_isr(void) { TCNT3H=0x00; TCNT3L=0x00; } // External Interrupt 5 service routine in
31、terrupt [EXT_INT5] void ext_int5_isr(void) { if(filter_start==0) { filter_temp1[filter_count]=(unsigned int)TCNT3H*0xff+(unsigned int)TCNT3L; filter_count++; if(filter_count==50) //60 { filter_count=0; filter_start=1; }
32、 } if(filter_over==1) { filter_over=0; gradient=filter_temp3; read_over=1; } } //----------------------------------------------- // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { //TCNT0=0x06; left_pwm=
33、~left_pwm; if(left_pwm==1) { if(left_turn==1) { TCNT0=255-(speed_l/2); } else { TCNT0=255-speed_l; } } else { if(left_turn==1) { TCNT0=speed_l/2; } else {
34、 TCNT0=speed_l; } } if(left_run==1) { if(left_pwm==1) { if(left_ff==1) { lpwm_ff=1; lpwm_re=0; } else { lpwm_f
35、f=0; lpwm_re=1; } } else { lpwm_ff=0; lpwm_re=0; } } else { lpwm_ff=0; lpwm_re=0; } } //-------------------------------------
36、------------------------ // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Place your code here TCNT1H=0xff; TCNT1L=0x06; //------------------------前進(jìn)時(shí)間 if(++count1>=128) { count1=0; if(excute_step1==0&&excute_step2
37、!=2) { ahead_time++; } if(excute_step1==2) { back_time++; } lcd_dsp=1; //------------- if(mode==1&&ahead_time<8) { gradient2_temp1[ahead_time]=gradient; } } //------------------------ if(stop_point==1)
38、 //停車計(jì)時(shí) { if(++count3>=128) { count3=0; stop_time++; lcd_dsp=1; if( buzzer==1) { buzzer_led=~buzzer_led; LED1=~LED1; LED2=~LED2; LED3=~LED3; LED4=~LED4; } else { buzzer_led=1; LED1=1;
39、 LED2=1; LED3=1; LED4=1; } if(stop_time==5) { stop_point=0; buzzer_led=1; } } } //------------------------ 檢線停止 if(mode==1) { if(stop_status==0) { if(++count4>=35) { count4=0; stop_status=1; }
40、 } if(stop_status==1) { if(++count4>=200) { count4=0; stop_status=0; } } } //------------------------ if(black_l==0) //左循跡 { if(black_l1==1) black_l2=1; black_l1=1; } else { black_l1=0; blac
41、k_l2=0; right_turn=0; count2=0; } if( black_l2==1&&right_turn==0) { right_turn=1; } if(right_turn==1) { if(++count2==150) { count2=0; right_turn=0; } } //------------- if(black_r==0) //
42、右循跡 { if(black_r1==1) black_r2=1; black_r1=1; } else { black_r1=0; black_r2=0; count2=0; left_turn=0; } if( black_r2==1&&left_turn==0) { left_turn=1; } if(left_turn==1) { if(++count2==150)
43、 { count2=0; left_turn=0; } } //------------- //金屬傳感器 if(metal_detect==0) { if(metal1==1) metal2=1; metal1=1; } else { metal1=0; metal2=0; } } //----------------------------------
44、--------- // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { // TCNT2=0xaf; right_pwm=~right_pwm; if(right_pwm==1) { if(right_turn==1) { TCNT2=255-speed_r/2; } else { TCNT2=255-spee
45、d_r; } } else { if(right_turn==1) { TCNT2=speed_r/2; } else { TCNT2=speed_r; } } if(right_run==1) { if(right_pwm==1) { if(right_ff==1) {
46、 rpwm_ff=1; rpwm_re=0; } else { rpwm_ff=0; rpwm_re=1; } } else { rpwm_ff=0; rpwm_re=0; }
47、 } else { rpwm_ff=0; rpwm_re=0; } } //----------------------------------------- // Timer 3 overflow interrupt service routine interrupt [TIM3_OVF] void timer3_ovf_isr(void) { // Place your code here //TCNT3H=0xff; } /////
48、//////////////////////////////////////////////// 液晶 //LCD初始化 void lcd_int(void) { ret=0; //PORTG=PORTG&0b11110111; delay_ms(2); ret=1; //PORTG=PORTG|0b00001000; delay_us(1); //psb=1;//將PSB置1,通信方式為8BIT數(shù)據(jù)并口 delay_us(1); } //LC
49、D功能設(shè)置 void lcd_set(void) { command=0x34;//功能設(shè)置--8BIT控制界面,擴(kuò)充指令集---這個(gè)可去掉 write_command(command); command=0x30;//功能設(shè)置--8BIT控制界面,基本指令集 write_command(command); command=0x01;//清屏幕顯示,將DDRAM的地址計(jì)數(shù)器歸零 write_command(command); command=0x06;//DDRAM的地址計(jì)數(shù)器(AC)加1 write_command(command); command=
50、0x0c;//顯示打開,光標(biāo)關(guān),反白顯示關(guān) write_command(command); } //清屏程序 void clear_lcd(void) { command=0x01; write_command(command); command=0x34; write_command(command); command=0x30; write_command(command); } //寫指令程序 void write_command(uchar command) { delay_ms(5); rs=0; rw=0; d
51、ata=command; en=1; delay_us(2); en=0; } //寫數(shù)據(jù)程序 void write_data(uchar data0) { delay_ms(5); rs=1; rw=0; data=data0; en=1; delay_us(2); en=0; } //LCD顯示程序 void display(void) { command=com0; write_command(command); data2=lcd_bufl; data1=lcd_bufg; write_data(da
52、ta1); data1=data2; write_data(data1); } //-------------------------------------------------- void bcd_con(unsigned char numb) { if(numb==5)goto numb5; if(numb==4)goto numb4; if(numb==3)goto numb3;
53、 if(numb==2)goto numb2; numb5: bcd_temp[4]=bcd_temp0/10000; bcd_temp0=bcd_temp0%10000; numb4: bcd_temp[3]=bcd_temp0/1000; bcd_temp0=bcd_temp0%1000; numb3: bcd_temp[2]=bcd_temp0/100; bcd_temp0=bcd_temp0%100;
54、 numb2: bcd_temp[1]=bcd_temp0/10; bcd_temp[0]=bcd_temp0%10; } //------------------------------------------------------------------------- void digit_filter(void) { //unsigned char filter_temp4; unsigned int filter_temp2; for(j1=0;
55、j1<29;j1++) //58 { for(k1=j1+1;k1<30;k1++) //59 { if(filter_temp1[j1]>filter_temp1[k1]) { filter_temp2=filter_temp1[j1]; filter_temp1[j1]=filter_temp1[k1]; filter_temp1[k1]=filter_temp2; } }
56、 } filter_sum=0; for(j1=10;j1<20;j1++) //49 { filter_sum=filter_sum+filter_temp1[j1]; } filter_temp3=filter_sum/10; filter_over=1; filter_start=0; } //----------------------------------------------------------
57、--------- ///////////////////////////////////////////////////// //全角顯示 //顯示代碼區(qū) void dis_code1(void) { com0=0x81; //衡 lcd_bufl=0xe2; lcd_bufg=0xba; display(); com0=0x82; //陽(yáng) lcd_bufl=0xf4; lcd_bufg=0xd1; display(); com0=0x83; //市 lcd_bufl=0xd0;
58、 lcd_bufg=0xca; display(); com0=0x84; //第 lcd_bufl=0xda; lcd_bufg=0xb5; display(); com0=0x85; //三 lcd_bufl=0xfd; lcd_bufg=0xc8; display(); com0=0x86; //屆 lcd_bufl=0xec; lcd_bufg=0xbd; display(); com0=0x93; //大 lcd_bufl=0xf3;
59、lcd_bufg=0xb4; display(); com0=0x94; //學(xué) lcd_bufl=0xa7; lcd_bufg=0xd1; display(); com0=0x95; //生 lcd_bufl=0xfa; lcd_bufg=0xc9; display(); com0=0x89; //科 lcd_bufl=0xc6; lcd_bufg=0xbf; display(); com0=0x8A; //技 lcd_bufl=0xbc
60、; lcd_bufg=0xbc; display(); com0=0x8B; //創(chuàng) lcd_bufl=0xb4; lcd_bufg=0xb4; display(); com0=0x8C; //新 lcd_bufl=0xc2; lcd_bufg=0xd0; display(); com0=0x8D; //競(jìng) lcd_bufl=0xf3; lcd_bufg=0xb4; display(); com0=0x8E; //賽 lcd_bufl=0xfc; lcd
61、_bufg=0xc8; display(); } ///////////////////////////////////// void dis_code2(void) { com0=0x80; //前 lcd_bufl=0xb0; lcd_bufg=0xc7; display(); com0=0x81; //進(jìn) lcd_bufl=0xf8; lcd_bufg=0xbd; display(); com0=0x82; //時(shí) lcd_bufl=0xb1; lc
62、d_bufg=0xca; display(); com0=0x83; //間 lcd_bufl=0xe4; lcd_bufg=0xbc; display(); com0=0x84; //全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); com0=0x90; //停 lcd_bufl=0xa3; lcd_bufg=0xcd; display(); com0=0x91; //止 lcd_bu
63、fl=0xb9; lcd_bufg=0xd6; display(); com0=0x92; //時(shí) lcd_bufl=0xb1; lcd_bufg=0xca; display(); com0=0x93; //間 lcd_bufl=0xe4; lcd_bufg=0xbc; display(); com0=0x94; //全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); com0=0x
64、88; //倒 lcd_bufl=0xb9; lcd_bufg=0xb5; display(); com0=0x89; //退 lcd_bufl=0xcb; lcd_bufg=0xcd; display(); com0=0x8a; //時(shí) lcd_bufl=0xb1; lcd_bufg=0xca; display(); com0=0x8b; //間 lcd_bufl=0xe4; lcd_bufg=0xbc; display();
65、 com0=0x8c; //全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); com0=0x98; //傾 lcd_bufl=0xe3; lcd_bufg=0xc7; display(); com0=0x99; //斜 lcd_bufl=0xb1; lcd_bufg=0xd0; display(); com0=0x9a; //脈 lcd_bufl=0xf6; lcd_bufg=0xc2;
66、display(); com0=0x9b; //寬 lcd_bufl=0xed; lcd_bufg=0xbf; display(); com0=0x9c; //全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); } //------------------------------------------------ //------------------------------------------------- void dis_code3(void) { bcd_temp0=ahead_time; bcd_con(4); if(mode==0) com0=0x85; else com0=0x95; lcd_bufl=bcd_temp[2]+0x30;
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第7課時(shí)圖形的位置練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第1課時(shí)圖形的認(rèn)識(shí)與測(cè)量1平面圖形的認(rèn)識(shí)練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)1數(shù)與代數(shù)第10課時(shí)比和比例2作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)4比例1比例的意義和基本性質(zhì)第3課時(shí)解比例練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第7課時(shí)圓柱的體積3作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第1節(jié)圓柱的認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)2百分?jǐn)?shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)1負(fù)數(shù)第1課時(shí)負(fù)數(shù)的初步認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)考前模擬期末模擬訓(xùn)練二作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末豐收?qǐng)@作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單十二課件新人教版
- 標(biāo)準(zhǔn)工時(shí)講義
- 2021年一年級(jí)語(yǔ)文上冊(cè)第六單元知識(shí)要點(diǎn)習(xí)題課件新人教版
- 2022春一年級(jí)語(yǔ)文下冊(cè)課文5識(shí)字測(cè)評(píng)習(xí)題課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)4數(shù)學(xué)思考第1課時(shí)數(shù)學(xué)思考1練習(xí)課件新人教版