久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 27578|回復: 4
收起左側

基于單片機的多功能智能小車設計論文

[復制鏈接]
ID:298227 發表于 2018-3-28 11:53 | 顯示全部樓層 |閱讀模式
做的課程設計,主要包括以下內容:
1.總體方案設計與論證
2.各模塊硬件電路設計
3.系統軟件設計
3.總結與展望


摘要

隨著計算機、微電子、材料、機械、通信等技術的快速發展,智能化的小車和機器人的發展速度也越來越快,作為21世紀自動化領域內非常偉大的成就它已經和人們的生產生活緊密的聯系在了一起。根據題目的要求,本設計的智能遙控小車主要由兩大部分構成:一個紅外遙控部分,一個智能小車部分。其中紅外遙控部分采用專用編碼芯片HT6221作為發射端,一體化紅外接收頭作為接收端;智能小車部分采用微控制器AT89C52單片機作為其控制核心,用紅外反射式光電傳感器進行障礙物和路線的檢測,用步進電機控制小車的啟停、速度快慢以及轉向,用直射式光電檢測器、施密特觸發器等元件組成的電路來檢測小車車輪轉速,用LCD1602液晶顯示屏來實時顯示小車運行的速度、時間和路程。

經過硬件和軟件的綜合設計,本設計的智能遙控小車基本上實現了遙控控制、自動躲避障礙、自動沿著特定的路線行駛、實時顯示速度、路程等功能。


目錄

第一章 緒論              1

1.1 課題背景和意義              1

1.2 課題研究現狀和發展趨勢              1

1.2.1 研究現狀              1

1.2.2 發展趨勢              2

1.3 課題內容和要求              2

第二章 總體方案設計與論證              4

2.1 遙控控制模塊設計與論證              4

2.2 電機驅動模塊設計與論證              5

2.3 避障循跡模塊設計與論證              6

2.4 數據顯示模塊設計與論證              6

2.5 轉速測量模塊設計與論證              7

2.6 電源模塊設計與論證              7

第三章 各模塊硬件電路設計              9

3.1 紅外遙控發射器模塊              9

3.1.1 紅外遙控模塊的工作原理              9

3.1.2 HT6221編碼芯片簡介              10

3.1.3 紅外遙控發射器

3.2 單片機控制模塊

3.2.1 單片機模塊電路

3.2.2 復位電路

3.2.3 振蕩電路

3.3 紅外接收器及解碼

3.4 電機驅動模塊              16

3.4.1 步進電機的工作原理              16

3.4.2 ULN2003芯片簡介              17

3.4.3 步進電機驅動電路設計              18

3.5 避障循跡模塊

3.6 轉速檢測模塊

3.7 數據顯示模塊

3.8 電源模塊

第四章 系統軟件設計

4.1 系統總體程序流程圖              24

4.2 避障循跡模塊程序設計              25

4.2.1 避障程序流程圖              25

4.2.2 循跡程序流程圖              26

4.3 數據顯示模塊程序設計              27

第五章 總結與展望              28

5.1 總結              28

5.2 改進與展望              28

參考文獻              29

致謝

附錄A 各模塊電路圖

附錄B 程序              39



第一章 緒論

1.1 課題背景和意義

隨著計算機、微電子、信息技術的快速發展,智能化技術的發展速度越來越快,智能化與人們生活的聯系也越來越緊密,智能化是未來社會發展的必然趨勢。智能小車實際上就是一個可以自由移動的智能機器人,比較適合在人們無法工作的地方工作,也可取代人們完成一些復雜、危險性質的工作。作為現代自動控制領域內十分偉大的一項發明智能小車、機器人已經和人們的生產生活緊密的聯系在了一起。

智能小車,是一個包含周圍環境探測、識別反應、自動控制等功能于一體的綜合系統,它綜合地運用了微控制器、傳感、遙控、機械結構、電子基礎、自動控制等多學科的知識。智能小車是一個復雜而又龐大的系統,其內部有許多塊控制芯片作為其控制核心,多種傳感器來采集外部環境信息并將接收到的信息傳給主控制器,然后由控制器來控制其各個模塊執行相應的動作。智能小車由于成本較低,甚至還能夠勝任一些人們都無法勝任的工作,它已逐步深入到工業、農業以及社會生活的各個方面。本課題設計的智能小車中用到的遙控技術、顯示技術、單片機控制系統、傳感技術、自動避障技術已廣泛應用于工農業生產、國防軍事、醫療衛生、宇宙探測等諸多領域,特別是其在軍事偵察、反恐、防暴、防核化及污染等危險和惡劣環境中有著廣闊的應用前景,由此可見其有著及其重要的研究意義。

1.2 課題研究現狀和發展趨勢

  1.2.1 研究現狀

智能小車、機器人的發展研究從上世紀60年代至今已有幾十年的歷史,自從上世紀60年代末期,第一臺能夠自主移動機器人問世以后,經過幾十年的發展智能機器人已經從最初的示教模仿機器人發展到現在的具有感知功能的智能機器人,在技術上取得了很大的進步許多國家都對智能機器人進行了大量的研究。由于各國的科研實力不同,其水平也有高低,其中美國和日本在該項技術的研究處于領先地位。

法國提出了讓智能機器人具有自動認知功能的一項科技計劃,使其能夠在復雜的環境中通過自主感知判斷來自動執行各種動作。美國發明的智能機器人,可以幫助人們送信件、食品等生活用品,還可以牽引吸塵器來打掃衛生。日本目前已經研制成功的人形機器人,其可以模仿人們的各種面部表情而且非常逼真。近年來發明的的手術機器人已經廣泛的應用在實際醫療手術中而且穩定性好,安全性高。我國的智能小車、機器人的研究已經有三十多年的歷史,特別是在軍事領域的應用方面已經取得了較大的成果,已經相繼研制出了復雜的智能機器人,危險作業機器人、仿人機器人、復合結構移動機器人等。國內的許多高校也都在不停的進行著這方面的研究而且也有了層出不窮的成果,例如中科院研制的能夠和人對話的機器人、上海交大研制的具有較強越障能力的仿人關節結構的機器人等。與此同時,我國也開展了智能移動機器人基礎理論研究,在某些方面取得了世界領先的成果,正在逐漸縮小與發達國家的差距。

  1.2.2 發展趨勢

隨著各方面技術的不斷進步與完善,各個國家對于智能小車、機器人的科研能力都再逐步的加強,未來的智能機器人可能會朝著以下幾個方面發展:使用高強度的輕質材料讓機器人的結構越來越靈巧動作執行也更加靈活;應用網絡化技術來遠距離操作控制機器人群體為人們工作;通過復雜生物機電系統和人機耦合系統來研究出具有仿生感知、生物神經的仿人機器人。相信未來會有具有更高智能化的、更加生動有趣的智能機器人出現在我們的周圍,而且會極大的改變和方便人們的生產生活。

1.3 課題內容和要求

本設計的智能小車用微處理器(即單片機)作為整個系統的控制核心部分,主要包括單片機控制模塊、遙控模塊、避障模塊、循跡模塊、數據顯示模塊等模塊。要求能夠實現以下幾種功能:

(1)遙控功能,即通過遙控器來控制小車的啟動、停止、左轉、右轉、后退等動作。

(2)自動避障功能,即小車在前方遇到障礙時可以立即做出反應,自動左轉或右轉躲避障礙。

(3)自動循跡功能,即小車可以自動沿著規定的路線行駛。

(4)能夠實時顯示小車行駛的速度、路程等數據。

要求通過此次的實際動手設計掌握以下基本技能:

(1)學會電子產品的設計開發過程;

(2)掌握單片機原理、遙控原理、顯示原理等;

(3)能夠熟練進行系統的硬件電路設計以及軟件設計;

(4)熟練使用相關的電子設計和仿真軟件;

(5)查閱國內外相關文獻,掌握智能小車的最新研究動態和未來發展趨勢。

第二章 總體方案設計與論證

本設計方案采用微處理器(AT89C52單片機)作為整個系統控制的中心,主要由兩個部分構成,紅外遙控發射部分和智能小車部分。其中智能小車部分主要由以下子模塊構成:單片機控制模塊、電源模塊、電機驅動模塊、循跡避障模塊、轉速檢測模塊、紅外接收器和數據顯示模塊組成;紅外遙控發射部分主要由遙控按鍵、編碼芯片、紅外發射三個部分構成。其總體設計框圖包括兩個部分,如圖2.1所示:

   a 遙控部分框圖                         b 小車部分框圖

                 圖2.1 系統總體設計框圖

2.1 遙控控制模塊設計與論證

目前比較常用的遙控控制方式有兩種,紅外遙控控制系統和無線遙控控制系統。

方案一:選擇紅外遙控裝置作為小車的遙控控制器。紅外遙控是通過遙控發射器內的編碼芯片將按鍵信息調制成一串0和1的二進制代碼,然后通過紅外線發出,最后被紅外接收裝置接收進行解碼,再運用單片機對解碼后的碼信息進行識別,然后再根據不同的碼信息進行不同的控制操作[9]。

方案二:選擇無線電遙控裝置作為小車的遙控控制器。無線電遙控是利用不同頻率的無線電波對遠方的各種機構進行控制的遙控設備。這些信號被遠方的接收設備接收后,可以驅動其他各種相應的機械或者電子設備去完成各種操作[6]。

紅外遙控和無線遙控是對不同的載波來說的,紅外遙控器是用紅外線來傳送控制信號的,它的特點是有方向性中間不能被阻擋,在室內使用時大概在7m的范圍內有效;無線遙控器是用無線電波來傳送控制的信號的,它的特點是無方向性,可以不面對面控制,距離遠,有效距離可達數十米甚至數公里。

以上兩種方案均可作為本設計的遙控控制器,雖然無線遙控控制的距離更遠也更加靈敏,但對于本設計來說使用紅外遙控已經足夠了,而且紅外遙控的原理更加簡單易懂,所以本設計采用方案一即紅外遙控作為小車的遙控控制系統。

2.2 電機驅動模塊設計與論證

目前比較常用的小車驅動電機主要有兩種選擇:

方案一:選擇直流電機作為小車的動力驅動。直流電機是將直流電能轉換為機械能的一種裝置,因其轉動力矩大、體積較小、重量很輕、使用方便,所以其在一些小型的電動裝置中的應用較多。直流電機的運行方式是這樣的:在它里面有圓形的磁體會產生磁場,當給它轉子上的繞組通電時,通電線圈在磁場中便會產生洛倫茲力帶著線圈即轉子轉動,當轉子轉動時通電線圈內的磁場方向將會改變,所以繞組上的電流也要變換流向,在方向一直不變的洛倫茲力控制下電機將向順時針或逆時針持續轉動。由H型橋式電路直接驅動直流電機控制電機的正反轉,通過軟件編程使單片機輸出不同占空比的PWM(脈寬調制信號)來控制直流電機的轉速進而控制小車的行駛速度[6]。

方案二:選擇步進電機作為小車的動力驅動。步進電機是將輸入端輸入的電脈沖信號轉變為轉子的角位移的可以實現精確定位的電機。電機轉動的快慢取決于脈沖信號的頻率、轉動的圈數取決于脈沖的個數,在不超載的情況下其轉動速度不受負載的影響,即給步進電機輸入一個脈沖信號,電機的轉子則轉過一個角度,給其加上連接不斷的脈沖波形則步進電機就能持續轉動下去[5]。

相比直流電機,步進電機轉過的角度是由脈沖信號控制的其可以實現小車的精確定位停車,步進電機調速也更加容易,只要輸入不同頻率的脈沖信號就能控制小車的行駛速度,而且它還有很好的止動能力。所以在本設計中我們選用了步進電機作為小車的驅動電機。

2.3 避障循跡模塊設計與論證

目前主要有兩種方案來實現小車的自動避障功能:

方案一:采用紅外反射式光電傳感器、電壓比較器及一些電阻構成的障礙物檢測電路來檢測小車前方的障礙。障礙物檢測電路安裝在小車前部的中間及左右兩邊,來檢測小車前方的障礙物。其障礙檢測過程如下:紅外發光二極管發出紅外光,如果遇到小車前面的障礙物,紅外線就會被物體反射回來,被光敏三極管吸收此時光敏三極管導通,并在輸出端輸出低電平信號至單片機,然后單片機調用尋跡避障子程序控制小車做出相應的避障反應,當左邊遇到障礙物時單片機會自動調用右轉子程序控制其右轉,當右邊遇到障礙物時單片機會自動調用左轉子程序控制其左轉。當無障礙物時,發出的紅外線不被反射,光敏三極管截止,輸出高電平信號,小車繼續向前行駛[8]。

方案二:采用超聲波原理來檢測小車前方的障礙。其檢測障礙的原理如下:先由超聲波發射器向小車前方發射超聲波,超聲波在向前傳播過程中,若遇到障礙物則會被反射回去,反射波被超聲波回收裝置接收后會產生一個電信號然后被轉化為高低電平信號反饋給單片機,若為高電平則說明前方遇到障礙,然后由單片機調用避障子程來控制小車做出相應的躲避障礙的動作[7]。

在本設計我們采用了第一種方案實現小車的自動避障功能。

2.4 數據顯示模塊設計與論證

根據題目的要求小車可以實時顯示其運動的速度、距離等數據。主要有兩種方案來實現:

方案一:用共陽極數碼管和可編程的鍵盤接口芯片組成數據顯示電路,接口芯片直接與單片機的I/O口相連,由單片機精確控制實現LED動態顯示。

方案二:用LCD液晶顯示屏直接與單片機相連組成數據顯示電路。LCD液晶顯示屏是一種專門用來顯示字符和數字的點陣型液晶模塊,它是由若干個5X7或5X11點陣字符位組成的,一個字符占據一個點陣字符位,每位之間有一個點距的間隔將字符隔開,行與行之間也有間隔[8]。

由于本設計需要顯示的數據較多,若用LED數碼管來顯示需多個數碼管才能滿足要求,這樣電路設計過于復雜,相反只用一個LCD液晶顯示屏即可顯示要求數據,所以本設計我們采用方案二即LCD顯示屏來顯示實時數據。

2.5 轉速測量模塊設計與論證

方案一:選擇霍爾開關型傳感器測量小車車輪轉速。具體做法是:在非磁性材料制作的轉子上,固定好一片鋼性磁體,將霍爾開關型傳感器的感知接收面和磁體的磁極相對, 并在安裝架上安裝好(注意磁場方向不要弄錯),輪子轉動時磁體會跟著轉動,在磁體轉到和傳感器的接收面相對時, 霍爾傳感器便輸出一個脈沖信號, 由兩個脈沖間的時間間隔,便可算出轉速,然后再根據車輪半徑編程便可算出小汽車運行的速度[10]。

方案二:選擇直射式光電檢測器測量小車車輪轉速。具體做法是: 在小車的驅動輪的主軸上安裝一個開有十個透光槽的圓形葉片,保持葉片和驅動輪能夠同步轉動,然后在驅動輪旁安裝好直射式光電檢測器,葉片隨著車輪的轉動不斷切割紅外發射管與紅外接受管之間的紅外線通路,當葉片轉動至透光槽與紅外線通路重合時,檢測器導通,紅外接受管通過電流,當葉片轉動至使透光槽遮住時,光通路斷開。隨著車輪不斷的轉動,便會輸出連續的脈沖序列,測出脈沖的個數便可知葉片轉過的孔數,從而可計算出車輪轉動的轉角和轉速,然后再根據車輪半徑由軟件編程便可算出小車運行的速度[11]。

以上兩種方案都能夠測出小車車輪的轉速。但是在本設計中,對于方案一來說,要想在很小的小車車輪上密集安裝磁片比較困難,而且彼此之間也容易產生干擾。因此本設計擬采用方案二測量小車的轉速。

2.6 電源模塊設計與論證

電源是整個小車系統運行的基本條件,它的性能的好壞直接決定整個系統運行的穩定性和性能。小車的供電電源包含兩部分,單片機控制模塊電源和電機驅動模塊電源,我們將單片機及其外圍電路和步進電機分開供電,兩者互相不影響,實現穩定供電。由于步進電機需較高的供電電壓而單片機和其邏輯單元最大供電電壓不能超過5V,因此需設計穩壓電路。

方案一:采用8節1.5V干電池串聯共12V直接給步進電機供電,然后經過由LM7805穩壓芯片構成的穩壓電路將電壓降至5V后給電片機及其外圍邏輯電路供電。但是本方案由于電池電量有限,而且數量較多的干電池重量較大會給驅動電機帶來太大負擔,也占用了太大的空間在體積較小的小車上使用太不方便,所以放棄了該方案。

方案二:采用12V蓄電池直接給步進電機供電,將電壓降至5V后給單片機及其外圍電路供電。蓄電池具有較長的續航能力以及電壓輸出的值基本不怎么變化,但是因為蓄電池的體積和質量過大,并不適合本設計的使用,所以我們并沒有使用蓄電池來供電。

方案三:采用3節4.2V鋰電池串聯的方式共直接給步進電機供電,然后經過由穩壓芯片構成的穩壓電路將電壓降至5V后給單片機及其外圍邏輯電路供電。本方案鋰電池的電量較足并且可以充電重復利用,3節鋰電池重量和占用的空間都較小,因此該方案比較可行,最終我們選擇了該方案作為小車的驅動電源[14]。


第三章 各模塊硬件電路設計

本設計的遙控智能小車的硬件部分共分為兩大模塊:紅外遙控發射器硬件模塊和智能小車部分硬件模塊。其中紅外遙控發射硬件模塊包含遙控按鍵、編碼芯片、紅外發射三個子模塊;智能小車部分硬件模塊包含單片機控制模塊、電機驅動模塊、避障循跡模塊、顯示模塊、紅外接收器模塊、電源模塊6個子模塊。

首先介紹紅外遙控發射器部分即遙控按鍵、編碼芯片、紅外發射三個子模塊的硬件設計。

3.1 紅外遙控發射器模塊

  3.1.1 紅外遙控模塊的工作原理

紅外線遙控是比較常見的一種遙控設備,它是利用波長為0.76~1.5μm之間的紅外線來傳送控制信號的遙控設備。其占據空間小、價格便宜、使用方便,在我們常用的家用電器比如電視、DVD,錄音機、空凋等和一些小型電動玩具裝置上均已應用了紅外線遙控設備。但是紅外遙控也有缺點比如容易受到空間和距離的限制,一般在7m的范圍內有效且發射和接收之間不能被物體隔擋,但對于本設計的智能小車來說已經能夠滿足要求。

紅外遙控系統一般由兩大部分組成:一個紅外發射部分,一個紅外接收部分。其中發射部分主要由按鍵鍵盤、編碼調制、LED紅外發送器構成,它最重要的部分就是應用編碼芯片對按鍵信息進行編碼和發送;接收部分由光電轉換放大器、解調、解碼電路構成,其最重要的部分是對接收到的編碼進行解調。其原理如圖3.1所示:

                      圖3.1 紅外遙控系統原理框圖

按下遙控器的一個按鍵,遙控器的編碼芯片會對按鍵信息進行編碼,然后通過LED紅外發射器發出脈沖編碼,被紅外接收頭接收后將編碼解出并輸入到單片機的外部中斷,對接收到的脈沖編碼進行位“0”和位“1”的識別,再根據不同的碼信息調用相應的子程序來對小車進行不同的控制操作。

  3.1.2 HT6221編碼芯片簡介

HT6221是合泰公司生產的多功能遙控編碼芯片,工作電壓在1. 8V-3.5V,其采用PPM(Pulse Position Modulation)進行編碼,周期能編碼16位地址碼和8位數據碼,最多能同時支持32個活動鍵。其引腳結構如圖3.2所示:

               

                  圖3.2 HT6221引腳圖

其各引腳說明如下表3-1所示:

3-1HT6221芯片引腳說明

引腳號

引腳名稱

          描述

0

AIN

低8位地址碼輸入

1-8

C1-C8

鍵盤列控制

9

  LED

按鍵指示燈

10-13

  R1-R4

鍵盤行控制, 高電平有效

14

  DOUT

串行數據輸出引腳, 38KHz發射頻率

15

  VDD

1.8V- 3.5V

16

  DT

最重要數據位(DT)代碼設置

17、18

  X2、X1

455KHz振蕩器輸出,455KHz振蕩器輸入

19

  VSS

接地

    遙控編碼有兩種:位0和位1,其低電平脈寬相同但高電平脈寬不一樣。采用脈寬調制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的脈沖表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的脈沖表示二進制的“1”。其波形如圖3.3所示:

   

       圖3.3 遙控碼的“0”和“1”(注:接收端的波形與發射斷相反)

  3.1.3 紅外遙控發射器

遙控發射器專用芯片很多,在本設計中我們運用了HT6221芯片來實現紅外編碼的發射。其電路如圖3.4所示:   

圖3.4 遙控發射器電路原理圖

圖3.4中當有任意一個按鍵按下后,按鍵指示燈(D1)發光,HT6221編碼芯片能夠產生脈沖編碼,該脈沖編碼會被調制成38KHz的脈沖信號然后通過圖中的紅外發射二極管(D2)發射出去[8]。

所按的按鍵不同其發出的編碼脈沖也不同,按鍵所代表的功能也就不同,其各按鍵的功能分配如下表3-2所示:


3-2 按鍵功能分配表

             按鍵

              功能

              K1

        控制小車的啟動

              K2

        控制小車的停止

              K3

        控制小車的加速

              K4

        控制小車的左轉

              K5

        控制小車的右轉

              K6

        控制小車的倒退

下面是智能小車部分即單片機控制模塊、紅外接收器模塊、電機驅動模塊、避障循跡模塊、顯示模塊、電源模塊6個子模塊的硬件設計介紹。

3.2 單片機控制模塊

  3.2.1 單片機模塊電路

本設計我們采用AT89C52單片機作為智能小車部分的控制核心,AT89C52單片機是AT89系列的標準型8位單片機,其與標準MCS-51指令系統和8052產品引腳兼容,功耗低、性能強大、價格便宜適用于許多較為復雜控制的場合。AT89C52單片機的內部結構如下:一個以ALU為中心的8位中央處理器,256字節內部數據存儲器(RAM),8K字節用來存儲程序的Flash內部程序存儲器即片內ROM(可反復擦寫1000次),4個8位可編程I/O口(P0、P1、P2、P3),3個16位定時/計數器,8個中斷源,兩個中斷優先級的中斷控制系統,一個全雙工串行通信口,一個片內振蕩器和時鐘電路[1]。AT89C52單片機最小應用系統主要由單片機、復位電路、振蕩電路等部分組成。本設計的單片機控制模塊原理圖如圖3.5所示:

                             圖3.5 單片機控制模塊

本設計中我們使用了AT89C52單片機的大部分引腳,其具體的引腳功能分配如下表3-3所示:

3-3 單片機引功能分配表

       引腳

                  功能分配

   P0.0-P0.7

接LCD1602的D0-D7引腳,作為數據信息的輸出引腳

   P1.0-P1.2

接LCD1602的RS、RW、E引腳,作為數據信息的控制端

P1.3-P1.5、P1.7

連接避障循跡電路的輸出端

     P1.6

連接轉速測量電路的脈沖輸出端

    P2.4-P2.7

連接電機驅動芯片的脈沖信號輸入端

      P3.2

外部中斷,連接紅外接收器的輸出端

   VCC

接+5V電源

   GND

接地

  3.2.2 復位電路

單片機的復位,是為了初始化單片機的工作狀態,有時當程序運行出錯或因操作錯誤而使系統處于鎖死狀態,為了擺脫困境,也可按復位鍵重新初始化單片機。RST引腳是復位信號的輸入端,要實現復位操作必須使RST引腳上至少保持兩個機器周期的高電平,再從高電平變為低電平完成復位。復位電路由按鍵復位和上電復位兩種方式,本設計采用按鍵復位實現復位操作。單片機按鍵復位電路如圖3.6所示:

      

                       圖3.6 復位電路

按鍵復位是通過按鍵使復位引腳經電阻R0與VCC電源接通來實現的,按下復位鍵時,RST引腳為高電平;松開復位按鍵后,RST引腳逐漸將為低電平,復位結束。

  3.2.3 振蕩電路

AT89C52單片機內有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為芯片引腳XTAL2。只要在片外通過XTAL1和XTAL2引腳跨接振蕩元件(如晶體振蕩器),則可構成一個穩定的自激振蕩器,單片機通電后即可工作。其外部振蕩電路如圖3.7所示:

      

                         圖3.7 振蕩電路

AT89C52單片機內部RAM容量很小,當單片機需要存放大量數據時就必須擴展外部數據存儲器。此外AT89C52單片機的I/O口數量和功能很有限,也常常要擴展外部接口芯片。由于本設計不需要太多的I/O口,內部程序存儲器也夠用,所以不用擴展外部數據存儲器和外部接口芯片。

3.3 紅外接收器及解碼

紅外接收器也叫做一體化紅外接收頭,其內部是由紅外監測二極管,放大器,限副器,帶通濾波器,積分電路,比較器等構成的。紅外監測二極管接收到紅外信號后,會把信號送到放大器和限幅器,限幅器把脈沖幅度控制在一定的水平。交流信號進入帶通濾波器,帶通濾波器只允許30khz到60khz的負載波通過,然后脈沖信號再通過解調電路和積分電路進入比較器,由比較器輸出高低電平信號,還原出發射端的信號波形。但為了提高接收的靈敏度輸出的高低電平和發射端是反相的。紅外接收頭有很多的種類,一般都有電源引腳、信號輸出引腳和接地引腳。根據發射端調制載波的不同應選用相應解調頻率的接收頭,本設計我們采用一體化紅外接收頭1838來解調HT6221編碼芯片的編碼。其實物圖如圖3.8所示:

                          

                          圖3.8 1838紅外接收頭

由于紅外接收頭內部放大器也很大的增益,這樣很會容易引起干擾,因此在接收頭的電源引腳上須加上大小在22uf以上的濾波電容。本設計的紅外接收電路如圖3.9所示:

         

                              圖3.9 紅外接收電路圖

其中U6為1838紅外接收頭,電容C4為濾波電容,DOUT 是解調信號的輸出端,直接與單片機的P3.2引腳即INT0中斷相連[8]。

解碼的重點是怎樣識別位0和位1,由于位0和位1的低電平脈寬相同但高電平脈寬不一樣。所以需要根據高電平的寬度區別位0和位1,如果從0.56ms低電平信號過后延時了0.56ms以后如果能讀到低電平信號說明該位為0反之則為1,為了可靠起見延時必須介于0.56ms和1.12ms之間,否則如果該位為0讀到的已是下一位的高電平,因此我們取其中間值即(1.12ms+0.56ms)/2=0.84ms。

當按下遙控器的按鍵后,便有紅外脈沖編碼信號發出,經紅外接收頭接收解碼后在其輸出端輸出檢波整形后的方波信號,然后直接輸入至單片機外部中斷進行碼信息的識別,單片機再調用相應子程序執行對應的操作。具體解碼操作流程圖如圖3.10所示:

               

                     圖3.10 紅外接收解碼流程圖

3.4 電機驅動模塊

  3.4.1 步進電機的工作原理

步進電機是一種將電脈沖信號轉變為角位移或線位移的電機。電機轉動的快慢取決于脈沖信號的頻率、轉動的圈數取決于脈沖的個數,在不超載的情況下其轉動速度不受負載的影響,即給步進電機輸入一個脈沖信號,電機的轉子就轉過一個固定角度(步距角),給其輸入連續的脈沖信號步進電機就能連續轉動[5]。

在本設計中我們采用步距角為1.8度的四相步進電機作為小車的驅動電機,其內部結構及元件圖如圖3.11所示:

                  圖3.11 步進電機結構和元件圖

四相步進電機有著比較小的體積和轉矩,該電機共有5根引出線,分別是內部四組繞組線圈A、B、C、D的四根引出線,一根電源引出線,其采用單極性直流電源供電,使A、B、C、D四相繞組輪流供電,轉子就會沿著A、B、C、D方向轉動。其旋轉角度與脈沖數成正比,旋轉頻率與脈沖頻率成正比。

本設計的步進電機采用四相八拍的工作方式,即A-AB-B-BC-C-CD-D-DA-A

的通電順序工作。當通電順序為A-AB-B-BC-C-CD-D-DA時電機正轉,當通電順序為DA-D-CD-C-BC-B-AB-A時電機反轉。步進電機工作時的時序波形圖如圖3.12所示:

                   圖3.12 步進電機工作時序波形圖

  3.4.2 ULN2003芯片簡介

ULN2003驅動芯片可以直接用來驅動電流小于0.5A的步進電機。ULN2003芯片是美國TI公司和Sprague公司開發的高壓大電流達林頓晶體管陣列電路具有較高的電流增益和工作電壓、較寬的溫度范圍、較強的驅動負載能力等特點,適和應用于各種高速大功率的驅動系統中。其內部結構及引腳如圖3.13所示:

               

                        圖3.13 ULN2003芯片引腳圖

其引腳說明如表3-4所示:

3-4ULN2003芯片引腳說明

             引腳

           功能說明

           IN1-IN7

     脈沖信號輸入端(接單片機)

              GND

            接地

          OUT1-OUT7

     驅動信號輸出端(接步進電機)

             COM

          接+5V電源

ULN2003驅動芯片的輸出結構是集電極開路的,所以要在輸出端接一個上拉電阻,通常單片機驅動ULN2003時,上拉2K的電阻較為合適。

  3.4.3 步進電機驅動電路設計

由于單片機的輸出電流太小,而步進電機需要較大的驅動電流,所以需要驅動電路來連接單片機和步進電機。本設計中我們采用四相步進電機作為小車的驅動電機,用單極性直流電源供電。采用ULN2003芯片直接驅動步進電機,步進電機驅動電路如圖3.14所示:

圖3.14 步進電機驅動電路

ULN2003的輸入端直接與單片機的P2.4-P2.7引腳相連,單片機輸出不同的脈沖信號,這些脈沖信號經ULN2003驅動芯片放大后分別控制步進電機的啟動、停止、正轉、反轉、加速和減速。本設計中只要對步進電機的各相繞組按合適的時序通電,就能使步進電機轉動。正、反轉可由輸入不同順序的脈沖信號來控制以實現小車的前進和后退;我們使用兩個步進電機分別控制小車的左輪和右輪,通過單片機輸出不同頻率的脈沖使左右兩個車輪具備不同的轉速,由轉速差實現小車的轉向,當左側車輪轉速大于右側車輪時小車右轉,當右側車輪轉速大于左側時小車左轉。

3.5 避障循跡模塊

本設計我們采用了紅外反射式光電傳感器、電壓比較器及一些電阻來構成障礙物檢測電路,并直接與單片機的P1.4引腳相連,其可將檢測到的模擬信號轉化為高低電平信號然后輸入到單片機,單片機根據輸入的高低電平信號來判斷是否有障礙物,若有則調用自動避障子程序控制小車做出相應的避障動作。障礙物檢測電路如圖3.15所示:

圖3.15 障礙物檢測電路

圖中U3紅外反射式光電傳感器是由紅外發光二級管和光敏三極管組成的,紅外發光二級管用來發射紅外線,光敏三極管用來接收被反射回來的紅外線。紅外接收/檢測器有一個內置的只允許紅外光線通過的光濾波器和一個只允許38.5 kHz左右電信號通過的電子濾波器,這樣就防止了外來光源對紅外接收器的干涉。

U4是電壓比較器,它能夠將輸入的模擬電壓信號轉化為高低電平信號,當3腳電平大于4腳時,輸出端1腳輸出為高電平,反之輸出為低電平。障礙物檢測電路安裝在小車前部的中間及左右兩邊,來檢測小車前方的障礙物。其障礙檢測過程如下:紅外二極管發出紅外光,如果遇到小車前面的障礙物,紅外線就會被物體反射回來并被光敏三極管吸收,此時光敏三極管導通并在輸出端輸出低電平信號至單片機,然后單片機調用尋跡避障子程序控制步進電機做出相應的避障反應,當左邊遇到障礙物時小車右轉,當右邊遇到障礙物時小車左轉。當無障礙物時,發出的紅外線不被反射,光敏三極管截止,輸出高電平信號,小車繼續向前行駛[9]。

循跡的原理和避障的原理是相同的,循跡電路安裝在小車底部,循跡是通過辨別黑白色來行走。工作過程如下:紅外發光二極管發出紅外光,當遇到黑色,不反射紅外光,比較器輸出為高電平;當遇到白線,紅外光被反射回來,比較器輸出為低電平。單片機根據輸入電平的變化判斷小車的行駛路線是否偏離,然后調用自動避障子程序實現小車的自動循跡,當左邊檢測到白色時小車右轉,當右邊檢測到白色時小車左轉;當兩邊檢測到的都是黑色時小車前進,當兩邊檢測到的都是白色時小車停止。

3.6 轉速檢測模塊

施密特觸發器是具有特殊功能的非門,當它的輸入端的電壓上升到某個值時,輸出端會立即從高電平跳變為低電平,而當輸入端的電壓下降到某一個值時,輸出端會立即從低電平跳變為高電平。本設計采用直射式光電檢測器、施密特觸發器、三極管和若干電阻構成的電路與單片機的P1.6引腳相連來測量小車車輪的轉速,其實物圖和電路圖如圖3.16所示:

                          

                      圖3.16 透射式光電測速實物和電路圖

具體的轉速檢測方法是:在小車的驅動輪的主軸上安裝一個開有十個透光槽的圓形葉片,保持葉片和驅動輪能夠同步轉動,然后在驅動輪旁安裝好直射式光電檢測器,葉片隨著車輪的轉動不斷切割紅外發射管與紅外接受管之間的光通路,當葉片轉動至透光槽與光通路重合時,光通路導通,光敏三極管通過電流,輸出端會輸出一個低電平信號,當葉片轉動至使透光槽遮住時,光通路斷開,輸出端會輸出一個高電平信號。隨著車輪不斷的轉動,光通路不斷的導通和斷開,輸出端便會輸出連續的脈沖序列,測出脈沖的個數便可知葉片轉過的孔數,由葉片轉過的孔數可以知道車輪轉過的圈數,從而可計算出車輪轉動的轉速,然后再根據車輪半徑便可算出小車運行的速度和路程[11]。

3.7 數據顯示模塊

本設計中小車的數據顯示電路采用液晶顯示屏LCD1602,LCD1602具有8位并行2線或者3線串行兩種接口方式。LCD1602液晶顯示模塊具有體積小、功耗低、顯示內容豐富、超薄輕巧等優點。具體的液晶顯示電路如圖3.17所示:

   

                       圖3.17 LCD液晶顯示電路

電路中LCD1602與AT89C52單片機使用并行數據通信。引腳1接電源電壓正極,引腳0、14、15分別接電源電壓負極,為LCD1602提供電源與背光電源;2腳接一個10K電位器用于調節背光燈光度;3、4、5腳分別接P1.0、P1.1、P1.2腳作為單片機控制信號輸入與輸出端;6—13腳接單片機的P0.0—P0.7腳作為單片機數據信息輸入端。數據顯示的原理為:首先通過數據顯示子程序將小車的速度、路程等數據信息計算出來,然后再將這些數據信息通過單片機的P0.0-P0.7引腳直接輸出至LCD1602的DO-D7引腳[8]。

3.8 電源模塊

電源是整個小車系統運行的基本條件,它的性能的好壞直接決定整個系統運行的穩定性和性能。小車的供電電源包含兩部分,單片機控制模塊電源和電機驅動模塊電源,我們將單片機及其外圍電路和步進電機分開供電,兩者互相不影響,實現穩定供電。

本設計中我們采用3節4.2V鋰電池串聯共12.6V直接給步進電機供電,用于驅動小車電機,也可降至5V后給單片機及其他邏輯單元供電。這三節電池的體積和重量都比較小,便于安裝在小車底座,不會造成電機負載過大,而且價格低、電流驅動能力強。為了給單片機及其他邏輯單元供電,必須將鋰電池組的電壓降至5V,這里我們采用LM7805穩壓芯片進行降壓,穩壓電路如圖3.18所示:

圖3.18 5V穩壓電路

第四章 系統軟件設計

在進行微機控制系統設計時,除了系統硬件設計外,大量的工作就是如何根據每個對象的實際需要設計應用程序,小車能否實現要求功能取決于軟件的編程是否合理。本設計采用模塊化程序設計法進行系統軟件的設計,主要包含主程序、避障循跡子程序、數據顯示子程序等程序模塊。由于本人水平和能力有限只完成了部分模塊的程序設計。

4.1 系統總體程序流程圖

系統的總體程序流程圖如圖4.1所示:

      

                      圖4.1 系統程序流程圖

在圖4.1系統程序流程圖中,開始時先是系統的初始化,包括定時器初始化,外部中斷的初始化,液晶顯示器的初始化。其中避障循跡子程序用于控制小車自動躲避障礙和自動沿著特定的黑線行駛;數據顯示子程序主要是將測得的車輪轉速換算成小車的行駛的速度、路程等數據進而在LCD1602液晶顯示屏顯示。

4.2 避障循跡模塊程序設計

  4.2.1 避障程序流程圖

      

                           圖4.2 避障程序流程圖

圖4.2所示為小車避障程序流程圖,小車在行駛過程中由位于小車前部的四個障礙物檢測電路不斷檢測小車周圍環境,若遇到障礙物則將低電平信號輸入至單片機,然后由單片機調用避障子程序控制小車作出相應的避障動作。如果左邊遇到障礙則調用右轉子程序,右邊遇到障礙則調用左轉子程序,前方遇到障礙則調用左轉或右轉子程序,沒有遇到障礙則調用直行子程序。具體的程序請見附錄B避障子程序。

4.2.2 循跡程序流程圖

      

                          圖4.3 循跡程序流程圖

圖4.3所示為循跡程序流程圖,小車在循跡行駛過程中安裝在小車底部的四個紅外反射式光電開關不斷檢測小車的行駛路線,若小車偏離黑線則將檢測到的低電平信號輸入至單片機,單片機再調用循跡子程序控制小車使其沿著黑線行駛,如果小車偏向黑線左邊則調用右轉子程序,偏向黑線右邊則調用左轉子程序,在黑線上則調用直走子程序,完全偏離黑線則調用后退子程序。具體的程序請見附錄B循跡子程序。

4.3數據顯示模塊程序設計

                  

                      圖4.4 數據顯示程序流程圖

在圖4.4數據顯示程序流程圖中,首先初始化LCD1602,然后在液晶的第一行顯示“路程: cm”,液晶第二行顯示“速度: cm/s”然后由主程序不斷調用數據顯示程序不斷刷新cm或者cm/s前面的數字實現實時顯示的目的。具體的程序請見附錄B數據顯示子程序。

第五章 總結與展望

5.1 總結

本設計的智能小車基本上實現了題目要求的各項功能,可以用遙控來控制小車的啟停、左轉、右轉、前進、倒退,小車能自動沿著黑線行駛,遇到障礙時能夠自動躲避障礙,而且可以實時顯示運行的速度、路程等數據。通過本次設計讓我學會了電子產品的設計開發過程,掌握了紅外遙控原理、步進電機的驅動原理、采用紅外反射式光電開關檢測障礙的原理、顯示原理等自己以前并不了解的新知識,對單片機的結構和其控制系統也有了更深的理解和認識,對于Altium Designer、Proteus等電路設計和仿真軟件的操作也更加熟練,特別是在、自己最不擅長的軟件編程方面也有了一定的提高。

但是由于本人水平和能力有限,本設計中還存在一些不足之處。例如由于安裝在小車上面的紅外傳感器檢測范圍有限,存在一些檢測盲區,光電檢測也容易收到外界環境和太陽光的干擾,有時可能會導致小車的循跡避障功能失效;小車是利用轉速差來轉彎的但是這種方法轉彎不夠順暢也不能持續轉彎并且對電機的損耗也較大,這些都有待進一步的改進和完善。

5.2 改進與展望

在本設計中我們可以采用超聲波避障來代替紅外避障以減少外界干擾;多安裝幾個尋跡電路,在小車的車頭底部左右兩邊各一個,中間底部左右兩邊各一個,車尾底部左右兩邊各一個,這樣可提高小車尋跡功能的可靠性和靈敏性;通過多組速度(不同脈沖所對應的速度)的實際測試,尋找更合適的轉向速度,以提高轉向的精確度。

我們還可以為小車添加語音控制模塊,用語音來控制小車的一些狀態,這樣將大大增加其人機交互控制的趣味性。


致謝

    不知不覺三個月的時間過去了,從開始的搜集查找相關文獻資料確定一個大體的設計思路到后來一步步的進行各個模塊的具體設計再到現在最終設計的完成,特別感謝我的指導老師楊安平老師在設計過程中給予我的極大幫助,雖然老師平時很忙,但每周仍會抽出兩次時間來對我不懂的地方進行耐心的指導,并對我的設計方案提出一些改進的意見,教會了我解決相關問題的具體思路和方法,并且在我不擅長的硬件設計和軟件設計方面給予了我細心的講解。本設計能夠順利完成設計任務,除了楊老師外還有很多同學也對我的設計進行了一些指導和幫助,在此對你們表示最誠摯的感謝!

    最后還要感謝各位評閱老師在百忙之中抽出時間對本論文進行評閱,謝謝!



單片機源程序如下:
  1. #include<uart.h>
  2. #define LeftIR P1_2      //左邊紅外接收連接到P1_2
  3. #define RightIR P3_5    //右邊紅外接收連接到P3_5
  4. #define LeftLaunch P1_3 //左邊紅外發射連接到P1_3
  5. #define RightLaunch P3_6 //右邊紅外發射連接到P3_6
  6. void delay_nus(unsigned int i)
  7. {
  8.   i=i*10/12;
  9.   while(--i);
  10. }
  11. void Hardware_delay_1ms(void)
  12. {
  13.    TMOD &=0xF0;
  14.    TMOD |=0x01;  //T0——16位定時器器模
  15.   TH0 = 0xFC;
  16.    TL0 =0x18;    //64536
  17.    TF0=0;        //清除定時器溢出標志
  18.    TR0=1;         //啟動定時器   
  19.   while(TF0==0);  //等待計數完成
  20.   TR0=0;         //停止定時器
  21. }
  22. void delay_nms(int n) //延時ms
  23. {
  24.     int j;
  25.     for(j=n;j>0;j--)
  26.      Hardware_delay_1ms();   
  27. }
  28. void IRLaunch(unsigned char IR)
  29. {
  30. int counter;
  31. if(IR==‘L’)              //左邊發射
  32. for(counter=0;counter<38;counter++)
  33. {
  34. LeftLaunch=1;
  35. delay_nus(13);
  36. LeftLaunch=0;
  37. delay_nus(13);
  38. }
  39. if(IR=='R')              //右邊發射
  40. for(counter=0;counter<38;counter++)
  41. {
  42. RightLaunch=1;
  43. delay_nus(13);
  44. RightLaunch=0;
  45. delay_nus(13);
  46. }
  47. }
  48. void Forward(void)          //直行子程序
  49. {
  50. P1_1=1;
  51. delay_nus(1700);
  52. P1_1=0;
  53. P1_0=1;
  54. delay_nus(1300);
  55. P1_0=0;
  56. delay_nms(20);
  57. }
  58. void Left_Turn(void)      //左轉子程序
  59. {
  60. int i;
  61. for( i=1;i<=23;i++)
  62. {
  63. P1_1=1;
  64. delay_nus(1300);
  65. P1_1=0;
  66. P1_0=1;
  67. delay_nus(1300);
  68. P1_0=0;
  69. delay_nms(20);
  70. }
  71. }
  72. void Right_Turn(void)      //右轉子程序
  73. {
  74. int i;
  75. for( i=1;i<=23;i++)
  76. {
  77. P1_1=1;
  78. delay_nus(1700);
  79. P1_1=0;
  80. P1_0=1;
  81. delay_nus(1700);
  82. P1_0=0;
  83. delay_nms(20);
  84. }
  85. }
  86. void Backward(void)        //后退子程序
  87. {
  88. int i;
  89. for( i=1;i<=65;i++)
  90. {
  91. P1_1=1;
  92. delay_nus(1300);
  93. P1_1=0;
  94. P1_0=1;
  95. delay_nus(1700);
  96. P1_0=0;
  97. delay_nms(20);
  98. }
  99. }
  100. int main(void)
  101. {
  102. int irDetectLeft,irDetectRight;
  103. uart_Init();
  104. printf("Program Running!\n");
  105. while(1)
  106. {
  107. IRLaunch('R');                  //右邊發射
  108. irDetectRight = RightIR;        //右邊接收
  109. IRLaunch('L');                  //左邊發射
  110. irDetectLeft = LeftIR;          //左邊接收
  111. if((irDetectLeft==0)&&(irDetectRight==0))//同時接到紅外線
  112. {
  113. Backward();
  114. Left_Turn();
  115. Left_Turn();
  116. }
  117. else if(irDetectLeft==0)        //只有左邊接收到紅外線
  118. {
  119. Backward();
  120. Right_Turn();
  121. }
  122. else if(irDetectRight==0)       //只有右邊接收到紅外線
  123. {
  124. Backward();
  125. Left_Turn();
  126. }
  127. else
  128. Forward();
  129. }
  130. }


  131. 循跡子程序
  132. #include <uart.h>
  133. #define LD1    P1_2;   //左左檢測燈
  134. #define LD2    P1_3;   //中左檢測燈
  135. #define RD1    P3_5;   //中右檢測燈
  136. #define RD2    P3_6;   //右右檢測燈
  137. void delay_nus(unsigned int i)
  138. {
  139.   i=i*10/12;
  140.   while(--i);
  141. }  
  142. void Hardware_delay_1ms(void)
  143. {
  144.    TMOD &=0xF0;
  145.    TMOD |=0x01; //T0——16位定時器器模
  146.   TH0 = 0xFC;
  147.    TL0 =0x18;    //64536
  148.   TF0=0;        //清除定時器溢出標志
  149.    TR0=1;         //啟動定時器   
  150.   while(TF0==0);//等待計數完成
  151.    TR0=0;         //停止定時器
  152. }
  153. void delay_nms(int n)
  154. {
  155.     int j;
  156.     for(j=n;j>0;j--)
  157.      Hardware_delay_1ms();   
  158. }
  159. void Forward(void)           //直行子程序
  160. {
  161. P1_1=1;
  162.                             delay_nus(1440);
  163.                             P1_1=0;
  164.                             P1_0=1;
  165.                 delay_nus(1400);
  166.                             P1_0=0;
  167.                             delay_nms(20);
  168.               }
  169. void Left_Turn(void)      //左轉子程序
  170.                             {
  171.                             int i;
  172.                             for( i=1;i<=15;i++)
  173.                                           {
  174.                                           P1_1=1;
  175.                                           delay_nus(1420);
  176.                                           P1_1=0;
  177.                                           P1_0=1;
  178.                                           delay_nus(1400);
  179.                                           P1_0=0;
  180.                                           delay_nms(20);
  181.                                           }
  182.                             }
  183. void Right_Turn(void)       //右轉子程序
  184.                             {
  185.                             int i;
  186.                             for( i=1;i<=15;i++)
  187.                                           {
  188.                                           P1_1=1;
  189.                                 delay_nus(1440);
  190.                                           P1_1=0;
  191.                                           P1_0=1;
  192.                                 delay_nus(1420);
  193.                                           P1_0=0;
  194.                                           delay_nms(20);
  195.                                           }
  196.                             }
  197. void Backward(void)        //后退子程序
  198.                             {
  199.                             int i;
  200.                             for( i=1;i<=65;i++)
  201.                                           {
  202.                                           P1_1=1;
  203.                                 delay_nus(1400);
  204.                                           P1_1=0;
  205.                                           P1_0=1;
  206.                                 delay_nus(1440);
  207.                                           P1_0=0;
  208.                                           delay_nms(20);
  209.                                           }
  210.                             }
  211. int main ()
  212. {
  213. int L1,L2,R1,R2;
  214. uart_Init();
  215. printf("Program Running!\n");
  216.               while(1)
  217.               {
  218. L1=LD1;
  219.                   L2=LD2;
  220.                   R1=RD1;
  221.                   R2=RD2;
  222. if((L1==1)&&(R2==0))         //左燈檢測到黑色右燈檢測到白色 左轉
  223.                             {
  224.                             Left_Turn();
  225.                             }
  226. else if((L1==0)&&(R2==1))      //左燈檢測到白色右燈檢測到黑色 右轉
  227.                             {
  228.                   Right_Turn();
  229.                             }
  230. else if((L1==0)&&(L2==0)&&(R1==0)&&(R2==0)) //四個燈都檢測到白色 后退
  231.                             {
  232.                             Backward();
  233.                             }
  234. else if((L1==1)&&(L2==1)&&(R1==1)&&(R2==1))//四個燈都檢測到黑色 后退
  235.                             {
  236.                             Backward();
  237.                             }
  238. else      //前進
  239.                             {
  240.                             Forward();
  241.                             }
  242.               }
  243.    }
  244. 數據顯示子程序
  245. bit lcd_busy()                //判忙函數
  246. {
  247.               bit result;
  248.               RS=0;
  249.               RW=1;
  250.               E=1;
  251.               _nop_();
  252.               _nop_();
  253.               _nop_();
  254.               _nop_();
  255.               result = (bit)(P0&0x80);
  256.               E=0;
  257.               return result;
  258. }
  259. void lcd_write_cmd(uchar cmd)   //液晶寫指令
  260. {
  261.               while(lcd_busy());
  262.               RS=0;
  263.               RW=0;
  264.               E=0;
  265.               _nop_();
  266.               _nop_();
  267.               P0=cmd;
  268.               _nop_();
  269.               _nop_();
  270.               _nop_();
  271.               _nop_();
  272.               E=1;
  273.               _nop_();
  274.               _nop_();
  275.               _nop_();
  276.               _nop_();
  277.               E=0;                           
  278. }
  279. void lcd_write_dat(uchar dat)                            //液晶寫數據指令
  280. {
  281. ……………………

  282. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
基于單片機的智能小車設計.doc (1.04 MB, 下載次數: 162)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 2018国产精品 | 精品国产一区二区三区久久久四川 | 亚洲视频观看 | 色综合99 | 国产精品久久久久久久久久久新郎 | 美国av毛片 | 欧美视频网 | 久久av.com | 精品欧美激情精品一区 | 国产精品极品美女在线观看免费 | 91麻豆精品国产91久久久久久久久 | 国产在线不卡 | 成人av久久 | 国产日韩欧美一区二区 | 最新中文字幕在线播放 | 久久精品男人的天堂 | 欧美激情在线一区二区三区 | 不卡的av在线 | h视频免费在线观看 | 青青草一区二区 | 欧美aⅴ片 | 国产成人99久久亚洲综合精品 | 美女一级a毛片免费观看97 | 亚洲第一av | 日日噜噜夜夜爽爽狠狠 | 一级毛片观看 | 一a一片一级一片啪啪 | 欧美黄在线观看 | 国产精品成人一区二区 | 在线观看国产视频 | 国产伦精品一区二区三区高清 | 黄a免费网络 | 国产精品一区二区日韩 | www.青青草| 国产精品看片 | 日韩av免费在线电影 | 欧美精品综合在线 | 性一交一乱一透一a级 | 国产一级一级国产 | 欧美自拍视频 | 欧美一级欧美一级在线播放 |