智能平衡電動小車設計報告
《智能平衡電動小車設計報告》由會員分享,可在線閱讀,更多相關《智能平衡電動小車設計報告(30頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、2014年廣西大學生電子設計大賽 2014年廣西大學生電子設計大賽 【本科組E題】 智能平衡電動小車設計報告 學校:桂林電子科技大學 院系:計算機科學與工程學院 隊員姓名:黎遠明,孫翔,安聰穎 實驗地點:創(chuàng)新學院B106 負責人:管芳 時間:2014年8月29日 設計摘要: 隨著人
2、工智能技術、計算機技術、自動控制技術的迅速發(fā)展,智能控制必將迎來它的發(fā)展新時代。整個智能小車設計主要以STC89C52單片機為控制核心,使用超聲波模塊檢測距離,采用紅外傳感器控制躲避障礙。小車驅動采用減速直流電機,執(zhí)行采用脈寬調(diào)制(PWM)技術實現(xiàn)對縣級的精確控制。通過不斷對單片機I/O口進行掃描來監(jiān)測傳感器的狀態(tài),控制小車循線、轉彎、避障等動作,使得小車按預定軌道行駛,并在遇到障礙時發(fā)出指示并停車的功能。同時,運用顯示屏和數(shù)碼管,顯示時間,路程和電壓。 關鍵詞: 智能小車,超聲波測距,循線模塊,PWM,聲光指示 Abstract: With the r
3、apid development of artificial intelligence technology, computer technology, automatic control technology, intelligent control will usher in a new era of itsdevelopment.This dissertation discusses mainly on the design of the intelligent car in&
4、#160;STC89C52single-chip processor as the control core.Detection distance using ultrasonic module, using an infrared sensor control to avoid obstacles. Car driven by a DC motor reducer, execution using pulse width modulation (PWM) technology to achieve precise control of the
5、 county's. By constantly on the MCU I / O port for scanning to monitor the state of the sensor, control the car through the line, turning, obstacle avoidance and other actions, making the car traveling at a predetermined orbit, and give directions in the face of obstacles and park features. K
6、ey Word: Intelligence Balancing Electric Car, Ultrasonic Ranging, PWM,Sound and Light Indication 目錄 1 系統(tǒng)方案 1 1.1總體方案設計與比較 1 1.2電機的比較與選擇 2 1.3循跡模塊的選擇與比較 2 1.31循跡模塊選擇 2 1.32尋跡傳感器布局 3 1.4避障測距模塊 3 2 理論分析與計算 4 2.1信號檢測與控制 4 2.2節(jié)能 4 2.3直流電機調(diào)速原理 4 2.4 PWM基本原理
7、; 5 2.5循跡模塊算法分析(5路) 6 3電路與程序設計 7 3.1單片機控制系統(tǒng) 7 3.2電源模塊設計 8 3.3驅動模塊設計 9 3.4循跡模塊設計及程序流程 9 3.5超聲波測距模塊 10 3.6程序大致流程 11 4結果分析 12 4.1調(diào)試儀器儀表 12 4.2系統(tǒng)測試 12 4.3調(diào)試過程及分析 12 4.4調(diào)整與改正 13 附錄1;程序源代碼 14 附錄2:元件清單 26 1 系統(tǒng)方案 整個電路系統(tǒng)采用模塊化的設計方案,有尋跡檢測、避障檢測、超聲波距離檢測、驅動模塊等多個模塊。首先利用檢測模塊對路面信
8、號進行檢測,經(jīng)過比較器處理之后,送給軟件控制模塊進行實時控制,輸出相應的信號給驅動芯片驅動電機轉動,從而控制小車沿著引導黑線行駛,同時,超聲波模塊進行測距, 小車用數(shù)碼管,檢測運作時的小車電壓。在遇到硬幣時,通過避障模塊進行檢測,并發(fā)出聲光指示,控制小車停車5秒,后繼續(xù)按照引導黑線走完全程。 1.1總體方案設計與比較 方案一:采用STC89C52單片機作為整機的控制單元。 以STC89C52單片機為核心的控制電路,運用循跡模塊、避障檢測、超聲波距離檢測、驅動模塊等多個模塊,實現(xiàn)小車在行駛中轉彎、蔽障、測距等問題。同時利用1620和數(shù)碼管,顯示時間,路程,以及電壓。并將測量數(shù)據(jù)傳送至單
9、片機進行處理,然后由單片機根據(jù)所檢測的各種數(shù)據(jù)實現(xiàn)尋線,停車,聲光指示等智能化控制,以及各種數(shù)據(jù)顯示。 方案二:選用一片CPLD作為系統(tǒng)的核心部件,實現(xiàn)控制與處理的功能。 CPLD復雜可編程邏輯器件,是從PAL和GAL器件發(fā)展出來的器件,相對而言規(guī)模大,結構復雜,屬于大規(guī)模集成電路范圍,是一種用戶根據(jù)各自需要而自行構造邏輯功能的數(shù)字集成電路。具有速度快、編程容易、資源豐富、開發(fā)周期短等優(yōu)點,可利用VHDL語言進行編寫開發(fā)。但CPLD在控制上較單片機有較大的劣勢。同時,CPLD的處理速度非??欤≤嚨男羞M速度不可能太高,若采用該方案,必將在控制上遇到很多不必要增加的難題。
10、 綜合考慮了傳感器、電機的驅動等諸多因素,方案一簡潔、靈活、可擴展性好,并且我們對單片機掌握的比較好,且能達到題目的設計要求,因此本設計采用方案一來實現(xiàn),充分利用STC89C52的單片機資源。 1.2電機的比較與選擇 方案一:采用步進電機 步進電機的一個顯著特點就是具有快速啟停能力,如果負荷不超過步進電機所能提供的動態(tài)轉矩值,就能夠立即使步進電機啟動或反轉。另一個顯著特點是轉換精度高,正轉反轉控制靈活。 方案二:采用直流伺服電機 直流伺服電機具有優(yōu)良的速度控制性能,它輸出較 大的轉矩,直接拖動負載運行,同時他又受控制信號的直接控制進行轉速調(diào)節(jié),在很多方面具有優(yōu)越性,但是直
11、流伺機電機價格昂貴,且不易購買 方案三:采用減速直流電機。 直流電動機具有優(yōu)良的調(diào)速特性,調(diào)速平滑、方便,調(diào)整范圍廣;過載能力強,能承受頻繁的沖擊負載,可實現(xiàn)頻繁的無級快速啟動、制動和反轉;能滿足生產(chǎn)過程自動化系統(tǒng)各種不同的特殊運行要求。 由于減速直流電機更易于購買,并且電路相對簡單,并能完成所需的功能,故采用減速直流電機作為動力源。 1.3循跡模塊的選擇與比較 1.31循跡模塊選擇 方案一:采用發(fā)光二極管+光敏電阻 易受到外界光源的干擾,有時甚至檢測不到黑線,主要是因為可見光的反射效果跟地表的平坦程度、地表材料的反射情況均對檢測效果產(chǎn)生直接影響??朔巳秉c的方法:
12、采用超高亮度的發(fā)光二極管能降低一定的干擾,但這又會增加檢測系統(tǒng)的功耗。 方案二:脈沖調(diào)制的反射式紅外發(fā)射接收器。 由于采用帶有交流分量的調(diào)制信號,則可大幅度減少外界的干擾;此外紅外發(fā)射接收管的工作電流取決于平均電流,如果采用占空比小的調(diào)制信號,在平均電流不變的情況下,瞬時電流很大(50~100mA)(ST-188允許的最大輸入電流為50mA),則大大提高了信噪比。此種測試方案反應速度大約在5us。 通過比較,方案二更加有優(yōu)勢,故選擇紅外發(fā)射接收器制作循跡模塊。 1.32尋跡傳感器布局
13、 方案一:一字形布局 反射式光電傳感器在小車前方一字形簡單排布。在一字形中傳感器的間隔有均勻布局和非均勻布局兩種方式,均勻布局不利于彎道信息的準確采集,通常采取的是非均勻布局。考慮到弧度信息采集的連貫性,非均勻布局的理論依據(jù)是等角度分布原則,即先確定一合適的定點,從頂點依次等角度畫射線,射線與傳感器水平線相交的位置即為傳感器的位置。這種方案信息檢測相對連貫,準確,使控制程序算法簡單,小車運行連貫,穩(wěn)定。 方案二:M形布局。傳感器呈M形排布。這種方案的優(yōu)點在于拓寬了邊沿傳感器的檢測范圍,更適合于小車快速行進中的彎道檢測,但相對一字形布局來說,M形布局不利于信息檢
14、測的穩(wěn)定,易于產(chǎn)生振蕩,不利于小車行駛的穩(wěn)定。 由于本次尋跡實驗要求比較簡單,考慮到方案的可行性并且保持小車運行穩(wěn)定,故此次采用方案一來進行傳感器的布局。 1.4避障測距模塊 方案一: 超聲波測距。超聲波傳感器是利用超聲波的特性研制而成的傳感器。超聲波是一種振動頻率高于聲波的機械波,由換能晶片在電壓的激勵下發(fā)生振動產(chǎn)生的,它具有頻率高、波長短、繞射現(xiàn)象小,特別是方向性好、能夠成為射線而定向傳播等特點。 方案二:視覺測距。視覺傳感器具有從一整幅圖像捕獲光線的數(shù)以千計的像素。在捕獲圖像之后,視覺傳感器將其與內(nèi)存中存儲的基準圖像進行比較,以做出分析。視覺
15、傳感器的優(yōu)點是易于多目標測量和分類,分辨率好。但它不能直接測量距離,算法復雜,處理速度慢。 由于超聲波傳感器價格合理,功能齊全。而視覺傳感器價格昂貴,且算法復雜,不易于控制,故選擇超聲波模塊。 2 理論分析與計算 2.1信號檢測與控制 本系統(tǒng)采用紅外檢測電路,當系統(tǒng)檢測到外側的黑線時,系統(tǒng)通過單片機向電機發(fā)送控制指令,從而使小車左側輪子停轉,右側輪子正常運轉,以實現(xiàn)小車左轉的目的。同理,當系統(tǒng)檢測到內(nèi)測黑線時,小車相應會右轉,這樣就能實現(xiàn)小車沿著黑線行駛。同時紅外對管檢測路面信息,能控制小車轉彎和防止小車出界。
16、并且用超聲波檢測前方障礙,可防止與障礙物相撞。 2.2節(jié)能 本車采用可充電電池驅動小車行駛,比一次性電池更加節(jié)能環(huán)保。開關電源調(diào)節(jié)器件以完全導通或關斷方式工作。因此,開關電源功耗極低,比線性電源更加節(jié)能。 2.3直流電機調(diào)速原理 依據(jù)直流電動機轉速公式:n=(U-IR)/Kφ 。其中U為電樞端電壓,I為電樞電流,R為電樞電路總電阻,φ為磁通量,K為電動機結構參數(shù)。 由公式可以看出,可以通過改變勵磁磁通量φ、電樞電路總電阻R、電樞端電壓U三種方法來調(diào)節(jié)轉速。 (1)改變勵磁磁通量主要是針對勵磁式直
17、流電機(定子上也為繞組,通電產(chǎn)生磁場,相當于電磁鐵),改變勵磁電流進而改勵磁磁通量,而我們用的直流電極是永磁式直流電機(定子為永久磁鐵),所以不能通過改變勵磁磁通量的方法改變速度。 (2)通過改變電樞電路的總電阻R來調(diào)速,由n=(U-IR)/Kφ可知,當R變大時,n變小。 (3)通過改變電樞端電壓U來調(diào)速,調(diào)節(jié)電樞端電壓可以實現(xiàn)無級調(diào)速,是應用范圍最為廣泛的調(diào)速方法。 2.4 PWM基本原理 采樣控制理論中有一個重要結論:沖量相等而形狀不同的窄脈沖加在具有慣性的環(huán)節(jié)上時,其效果基本相同。PWM 控制技術就是以該結論為
18、理論基礎,對半導體開關器件的導通和關斷進行控制,使輸出端得到一系列幅值相等而寬度不相等的脈沖,用這些脈沖來代替正弦波或其他所需要的波形。按一定的規(guī)則對各脈沖的寬度進行調(diào)制,既可改變逆變電路輸出電壓的大小,也可改變輸出頻率。通俗的說PWM 是采用數(shù)字量對模擬量進行合成的方法。 由于電壓UAB的正、負變化,使電流波形存在兩種情況: (1)電動機負載較重(如id1 ),這時平均負載電流大,在續(xù)流階段電流仍維持正方向,電機始終工作在第Ⅰ象限的電動狀態(tài); (2)電動機負載較輕(如id2 ),平均電流小,在續(xù)
19、流階段電流很快衰減到零,于是VT2和VT3集一射極兩端失去反壓,在負的電源電壓(-Us)和電樞反電動勢的共同作用下導通,電樞電流反向,沿回路3流通,電動機處于制動狀態(tài)。與此相仿,在0≤t<ton期間,當負載輕時,電流也有一次倒向。 雙極式可逆PWM變換器電樞平均端電壓用公式表示為: 仍以ρ=Ud/Us來定義PWM電壓的占空比,則ρ與ton的關系為 : 調(diào)速時,ρ的變化范圍為—l≤ρ≤1 ; 當ρ為正值時,電動機正轉; ρ為負值時,電動機反轉;ρ=0時,電
20、動機停止。 直流脈寬調(diào)速系統(tǒng)中包括一個具有繼電特性的脈寬調(diào)制變換器,它在本質上是一個開關控制系統(tǒng)。 P1^0 P1^1 P1^2 P1^3 P1^4 2.5循跡模塊算法分析(5路) 左電機 右電機 P2^0 P2^1 1轉 1轉 0不轉 0不轉 P1^0 P1^1 P1^2 P1^3 P1^4 方向 0 0 0 0 0 前進 — 0 1 1 — 左轉 — 1 0 1 — 前進 — 0 0 1 — 左轉 —
21、 1 1 0 — 右轉 — 1 0 0 — 右轉 — — — — 左轉 — — — — 0 右轉 3電路與程序設計 3.1單片機控制系統(tǒng) 89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲器。 采用此芯片與復位電路,晶振回路即可構成單片機控制系統(tǒng),電路圖如圖所示: 程序流程圖如下: 3.2電源模塊設計 電源模模塊,由3部分組成,升壓模塊,穩(wěn)壓模塊,和降壓模塊,利用LM2587,LM2596以及LM2576芯片,
22、達到三合一,節(jié)約了成本,同時提高了模塊的性能。 3.3驅動模塊設計 采用內(nèi)部集成H橋式芯片每一組PWM波用來控制一個電機的速度,而另外兩個I/O口可以控制電機的正反轉,控制比較簡單,電路也很簡單,一個芯片內(nèi)包含有8個功率管,這樣簡化了電路的復雜性。 3.4循跡模塊設計及程序流程 循跡模塊是智能車系統(tǒng)的關鍵模塊之一,其主要功能是準確,快速,超前地采集路面信息,把它轉變成電信號,傳送到單片機中處理。 原理: 紅外探測法,即利用紅外線在不同顏色的物體表面具有不同的反射強度的特點,在小車行駛過程中不斷地向地面發(fā)射紅外光,當紅外光遇到白色紙質地板時發(fā)
23、生漫反 射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,小車上的接收管接收不到紅外光。單片機就是否收到反射回來的紅外光為依據(jù)來確定黑線的 位置和小車的行走路線。 程序設計流程圖: 循跡避障程序入口 讀紅外傳感器狀態(tài) 左轉 右轉 前進 依據(jù)狀態(tài)選擇小車運行方式 3.5超聲波測距模塊 車測距上我們選擇了HC-SR04超聲波模塊傳感,HC-SR04可提供2cm-400cm的非接觸式距離感測功能,模塊包括超聲波發(fā)射器、接收器與控制電路。超聲波是指頻率高于20KHz的機械波。超聲波從發(fā)射
24、到遇到障礙物返回所經(jīng)歷的時間,再乘以超聲波的速度就得到二倍的聲源與障礙物之間的距離。 此超聲波測距模塊的工作原理:接收回路為諧振回路,將收到的微弱回波信號檢出,送信號放大電路放大,收到產(chǎn)生脈沖輸出送單片機中斷端,單片機收到中斷信號后停止計時,計算出距離值,保存等待讀出或直接經(jīng)UART 送出。接收過程中,單片機定時控制放大電路的增益,逐漸提高,以適應距離越來越弱的回波信號。 超聲測距傳感器的核心功能是測量距離,通過發(fā)射器發(fā)射超聲波,超聲波遇到物體反射回來被接收器接收。傳感器將所測量的量轉換成數(shù)字信息,即將非電量轉換為便于測量的電量,這樣單片機就能計算出超聲波從發(fā)射到接受用
25、的時間,測量時間*聲速/2=距離。車測距上我們選擇了HC-SR04超聲波模塊傳感,HC-SR04可提供2cm-400cm的非接觸式距離感測功能,模塊包括超聲波發(fā)射器、接收器與控制電路。超聲波是指頻率高于20KHz的機械波。超聲波從發(fā)射到遇到障礙物返回所經(jīng)歷的時間,再乘以超聲波的速度就得到二倍的聲源與障礙物之間的距離。 3.6程序大致流程 此設計由尋跡檢測、避障檢測、超聲波距離檢測、驅動模塊等多個模塊組合而成。 89S52 循跡程序 硬幣檢測 聲光控制 顯示路程時間 停車程序 4結果分析 4.1調(diào)試儀器儀
26、表 設計及測試中所用的儀器及工具主要有:秒表、數(shù)字萬用表、信號發(fā)生器、示波器、MCS51仿真機、直流穩(wěn)壓電源等 電源:可充電電池。 常用儀表:數(shù)字萬用表、AVR Studio。 4.2系統(tǒng)測試 對小車的整體的調(diào)試按照模塊來進行,分為以下幾個步驟: ①首先測試電源的工作情況,各個模塊能否得到良好供電。 ②然后檢查單片機能否正常的燒寫程序和工作。 ③紅外對管安裝完成后根據(jù)測試數(shù)據(jù)調(diào)試程序。 ④測試兩前輪電機的工作情況,并試驗電機的驅動能力。 ⑤讓小車
27、在黑色軌道上初步循跡運行。 ⑥反復測試各參數(shù)變化對小車的影響,找出最有效的配置。 ⑦對小車運行過程中各種可能出現(xiàn)的情況測試,發(fā)現(xiàn)問題,找出解決方法。 ⑧整理數(shù)據(jù),優(yōu)化程序設計。 經(jīng)過多次調(diào)試,本系統(tǒng)能夠基本滿足設計要求,能夠較快較平穩(wěn)的沿路面行駛。 4.3調(diào)試過程及分析 由于各模塊往單片機發(fā)送的數(shù)據(jù)都是數(shù)字信號,在對各模塊進行檢測的時候,用萬用表對輸出信號進行檢測,觀測是否輸出相應的電壓變化即檢測出各模塊的工作狀態(tài)。 在小車調(diào)試完成后我們用萬用表對小車的整體完成情況進行測試,根據(jù)程序設計流程圖可以看出本系統(tǒng)用一套程序就可以完成基本部分和
28、發(fā)揮部分的各項任務,在測試時,我們對小車分別行使一圈用時情況和和小車上坡時的狀態(tài)進行記錄。 測試次數(shù) 小車行駛一圈的秒數(shù)(S) 是否超出跑道 遇到硬幣時,是否聲光指示,并停車 是否能 爬上坡 1 35 是 是 否 2 33 是 否 否 3 32 否 否 是 4 30 否 是 是 4.4調(diào)整與改正 在設計的過程中發(fā)現(xiàn)了自身知識的不足,也發(fā)現(xiàn)我們必須具備專業(yè)基礎知識才能成功的設計出一件合格的東西。這次課程設計收獲很多,體會也很深刻,并且對我們所學的東西也產(chǎn)生了濃厚的興趣。在設計過程中,也學會了很多新的東西,如對一些初
29、次使用的模塊的認識與掌握。當然最重要的是學到了關于基本電子設計的一些方法,同時也加深了對一些常用的電子元件的理解以及其基本用法的掌握。 通過多次調(diào)試,發(fā)現(xiàn)小車有以下幾方面的問題及因素影響: (1) 程序邏輯方面不夠嚴謹,導致在行駛過程中不按預期的路線去行駛。究其原因,一方面由于電路自身缺陷導致程序有誤,另一方面由于C語言掌握不夠,需要加強。 (2) 小車車身前重后輕難以上坡 針對以上問題,改進方案如下: (1) 解決方案:先對程序進行軟件調(diào)試,進行單步運行,軟件調(diào)試成功在進行硬件調(diào)試,最終實現(xiàn)預期要求 (2)
30、加重小車前身的重量,及利用軟件控制電機有足夠的速度沖上上坡。 附錄1;程序源代碼 #include<reg52.h> #include"delay.h" #define uint unsigned int #define uchar unsigned char sbit beef=P1^5;//蜂鳴器和燈 sbit ena=P2^0; //左使能端 sbit enb=P2^1; //右使能端 sbit tan1=P1^0; //探頭1 sbit tan2=P1^1; //探頭2 sbit tan3=P1^2; //探頭3 sbi
31、t tan4=P1^3; //探頭4 sbit tan5=P1^4; //探頭5 sbit LCD_RST=P2^2 ;//復位,0復位; sbit LCD_CE=P2^3; // 片選,芯片使能, (片選為零時,開使能端) sbit LCD_DC=P2^4; // 1寫數(shù)據(jù),0寫命令; sbit SDIN=P2^5; //串行數(shù)據(jù)傳輸端; sbit SCLK=P2^6; //串行時鐘輸入端; sbit Trig=P0^0; uint secondsg=0,secondss=0,secondsb=0; //時間顯示 uint dis=0,count3=0
32、; //距離 uchar tt=0; //定時器里面的 uint us=0;//10us uint ms=0;//1ms uint s;//100ms uchar count1=0,count2=0; //計數(shù)次數(shù) uchar lspeed=0,rspeed=0; //左右輪速度 uchar j=0; //全部檢測到黑線的次數(shù) void stop(); void HC_init() { TMOD=0x09; TR0=1; TH0=0;TL0=0; }
33、 uint HC_jisuan() { uint dist,timer; timer=TH0; timer<<=8; timer=timer|TL0; dist=timer/53; //晶振11.0592MHz //距離cm=微秒us/58 return dist; //1個機器周期是12個時鐘周期 timer*12/(58*11.0592)=timer/53 } void HC_run() { uint tempH=0x00,tempL=0x00; TH0=0;TL0=0;
34、 Trig=0; Trig=1; delay_1ms(1); Trig=0; while((TH0-tempH!=0||TL0-tempL!=0)||(TH0==0&&TL0==0)) { tempH=TH0; tempL=TL0; } delay_1ms(1); } code unsigned char font6x8[][6] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x
35、00 }, // ! { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & { 0x00, 0x00,
36、 0x05, 0x03, 0x00, 0x00 }, // ' { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,
37、 { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46
38、}, // 2 { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49,
39、 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x
40、00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
41、 { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x4
42、1, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x0
43、0, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, //
44、T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0
45、x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01,
46、0x02, 0x04, 0x00 }, // ' { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e { 0x
47、00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, //
48、 k { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p { 0x00, 0x18, 0x24, 0x24, 0x18,
49、0xFC }, // q { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v { 0x00, 0x3C, 0x40,
50、0x30, 0x40, 0x3C }, // w { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines }; /*************************************************
51、********** 函數(shù)名稱:LCD_write_byte 函數(shù)功能:模擬SPI接口時序寫數(shù)據(jù)/命令LCD 入口參數(shù):data :寫入的數(shù)據(jù); command :寫數(shù)據(jù)/命令選擇; 出口參數(shù):無 備 注: ***********************************************************/ void LCD_write_byte(unsigned char dat, unsigned char command) { unsigned char i; LCD_CE = 0;
52、 //5110片選有效,允許輸入數(shù)據(jù) if (command == 0) //寫命令 LCD_DC = 0; else LCD_DC = 1; //寫數(shù)據(jù) for(i=0;i<8;i++) //傳送8bit數(shù)據(jù) { if(dat&0x80) SDIN = 1; else SDIN = 0; SCLK = 0; dat = dat << 1; SCLK = 1; }
53、 LCD_CE = 1; //禁止5110 } /********************** 清屏函數(shù) ***********************/ void LCD_clear() { unsigned int i; LCD_write_byte(0x0c, 0); LCD_write_byte(0x80, 0); for (i=0; i<504; i++) LCD_write_byte(0x00, 1); } /******************
54、***************************************** 函數(shù)名稱:LCD_init 函數(shù)功能:5110初始化 入口參數(shù):無 出口參數(shù):無 備 注: ***********************************************************/ void LCD_init(void) { LCD_RST=0; delay_1ms(10); LCD_RST=1; LCD_write_byte(0x21, 0); // 使用擴展命令設置LCD模式 LCD_write_byte
55、(0xc6, 0); // 設置液晶偏置電壓 LCD_write_byte(0x06, 0); // 溫度校正 LCD_write_byte(0x13, 0); // 1:48 LCD_write_byte(0x20, 0); // 使用基本命令,V=0,水平尋址 LCD_clear(); // 清屏 LCD_write_byte(0x0c, 0); // 設定顯示模式,正常顯示 LCD_CE = 0; // 關閉LCD } /*********************************
56、************************** 函數(shù)名稱:LCD_set_XY 函數(shù)功能:設置LCD坐標函數(shù) 入口參數(shù):X :0-83 Y :0-5 出口參數(shù):無 備 注: ***********************************************************/ void LCD_set_XY(unsigned char X, unsigned char Y) { LCD_write_byte(0x40 | Y, 0); // column LCD_write
57、_byte(0x80 | X, 0); // row } /*********************************************************** 函數(shù)名稱:LCD_write_char 函數(shù)功能:顯示英文字符 入口參數(shù):c : 顯示的字符 出口參數(shù):無 備 注: ***********************************************************/ void LCD_write_char(unsigned char c) { unsigned char line;
58、 c -= 32; //數(shù)組的行號 for (line=0; line<6; line++) LCD_write_byte(font6x8[c][line], 1); } /********************************************************** 函數(shù)名稱:LCD_write_english_string 函數(shù)功能:顯示英文字符串 入口參數(shù):*s: 顯示的字符串 出口參數(shù):無 備 注: ***************************
59、********************************/ void LCD_write_english_string(unsigned char X,unsigned char Y,char *s ) { LCD_set_XY(X,Y); while (*s) { LCD_write_char(*s); s++; } } void LCD_write_number(unsigned char X,unsigned char Y,unsigned char c) { unsigned char line
60、; LCD_set_XY(X,Y); c -= 32; //數(shù)組的行號 for (line=0; line<6; line++) LCD_write_byte(font6x8[c][line], 1); } void timeshow() { LCD_write_english_string(0,1,"Time"); LCD_write_number(42,1,secondsg+0x30); //時間個位秒鐘 LCD_write_n
61、umber(36,1,secondss+0x30); //時間十位秒鐘 LCD_write_number(30,1,secondsb+0x30); //時間十位秒鐘 } void disshow() { int disq,disb,diss,disg; dis=(count1/35)*15; disq=dis/1000; disb=(dis/100)%10; diss=(dis/10)%10; disg=(dis%10); LCD_write_english_string(0,2,"Distance"); LCD_w
62、rite_number(54,2,disq+0x30); LCD_write_number(60,2,disb+0x30); LCD_write_number(66,2,diss+0x30); LCD_write_number(72,2,disg+0x30); } /*使能端初始化函數(shù)*/ void initen() { ena=1; enb=1; } /*定時器0初始化函數(shù)*/ void init_time0() { TMOD=0x01;//GATE=0,定時模式,方式1 TH0=(65536-10)/256;//裝初值 TL0=(655
63、36-10)%256; EA=1;//打開外部中斷總開關 ET0=1;//選擇定時器0 TR0=1;//打開定時器0的開關 } /*定時器0中斷服務函數(shù)*/ void time0() interrupt 1 { TR0=0;//關閉定時器 us++; TH0=(65536-10)/256;//裝初值 TL0=(65536-10)%256; TR0=1;//打開定時器 count1++; count2++; if(count1<=lspeed) ena=1; else ena=0; if(count2<=rspe
64、ed) enb=1; else enb=0; if(count1==100) count1=0; if(count2==100) count2=0; } void sum() { if(us==100) { us=0; ms++; } if(ms==100) { ms=0; s++; } if(s==10) { s=0; tt++; } if(tt==20) { tt=0; secondsg++; if(secondsg>9)
65、 { secondss++; secondsg=0; if(secondss>9) { secondsb++; secondss=0; } } } } /*外部中斷0初始化函數(shù)*/ void init_zd0() { EA=1;//打開中斷總開關 EX0=1;//選擇外部中斷0 IT0=1;//下降沿觸發(fā) } void int0() interrupt 0 { stop(); beef=0; delay_1ms(1500); delay_1ms(25
66、00); delay_1ms(2500); beef=1; delay_1ms(2500); delay_1ms(2500); delay_1ms(2500); } /*前進函數(shù)*/ void go(uchar l,uchar r) //左右輪速度 { lspeed=l; rspeed=r; ena=1; enb=1; } /*停車函數(shù)*/ void stop() { ena=0; enb=0; } /*紅外檢測函數(shù)*/ uchar hongwai() { uchar i=0; if(tan1==0&&
67、tan2==0&&tan3==0&&tan4==0&&tan5==0) { i=0; j++; } if(tan2==0&&tan3==1&&tan4==1) i=1; if(tan2==1&&tan3==0&&tan4==1) i=2; if(tan2==0&&tan3==0&&tan4==1) i=3; if(tan2==1&&tan3==1&&t
68、an4==0) i=4; if(tan2==0&&tan3==1&&tan4==0) i=5; if(tan2==1&&tan3==0&&tan4==0) i=6; if(tan1==0) i=7; if(tan5==0) i=8; return i; } /*尋線函數(shù)*/ void xunxian(uchar i) { if(i==0) go(40,40); if(i==1) go(20,40); if(i==2) go(40,40);
69、 if(i==3) go(30,40); if(i==4) go(40,20); if(i==5) go(40,40); if(i==6) go(40,30); if(i==7) go(10,60); if(i==8) go(60,10); } void main() { uchar a=0,b=0;//循環(huán)次數(shù) 與傳值變量 initen(); init_time0(); init_zd0(); LCD_init(); //5110初始化 LCD_clear(); //5110清屏 beef=1; while(1) {
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六年級科學下冊第三單元宇宙5太陽系課件(教科版)
- 餐飲服務意識
- 第3章 鋼筋和混凝土的材料力學性能
- 《遠離有毒物質》課件-(市優(yōu))2022年九年級化學課件
- 綠色發(fā)展答辯
- 師德修養(yǎng)及相關法律法規(guī)介紹 (2)
- 汽車檢測診斷技術與設備第9章-汽車前照燈的檢測與檢測設備-PPT
- 消費行為與廣告心理專業(yè)基礎知識
- 備戰(zhàn)2010高考課件:2009年全國高考名句名篇默寫匯總
- 信息倫與編碼
- 奔馳傳奇歷史
- 鮑曼不動桿菌專家共識解讀課件
- 衛(wèi)生系統(tǒng)績效評價培訓課件
- 高考數(shù)學二輪復習第1部分重點強化專題專題1三角函數(shù)與平面向量突破點1三角函數(shù)問題課件文
- 小兒腹瀉講解匯總