汽車單片機技術(shù) 課件 項目1-3汽車單片機基礎知識認知;汽車照明系統(tǒng)控制;汽車信號系統(tǒng)控制_第1頁
汽車單片機技術(shù) 課件 項目1-3汽車單片機基礎知識認知;汽車照明系統(tǒng)控制;汽車信號系統(tǒng)控制_第2頁
汽車單片機技術(shù) 課件 項目1-3汽車單片機基礎知識認知;汽車照明系統(tǒng)控制;汽車信號系統(tǒng)控制_第3頁
汽車單片機技術(shù) 課件 項目1-3汽車單片機基礎知識認知;汽車照明系統(tǒng)控制;汽車信號系統(tǒng)控制_第4頁
汽車單片機技術(shù) 課件 項目1-3汽車單片機基礎知識認知;汽車照明系統(tǒng)控制;汽車信號系統(tǒng)控制_第5頁
已閱讀5頁,還剩174頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

汽車單片機技術(shù)學習任務1

單片機的認知項目1

汽車單片機基礎知識認知【任務描述】

汽車單片機根據(jù)駕駛?cè)说牟僮骱彤斍暗恼嚭土悴考ぷ鳡顩r,在保證安全和動力性的前提下,選擇盡可能優(yōu)化的工作模式和能量分配比例。那單片機是什么樣子?又是如何工作的呢?下面請同學們通過學習單片機的知識,來掌握單片機的概念、種類和應用吧!【學習目標】1.能夠區(qū)別單片機于其他模塊。2.能夠識別單片機的型號。項目1

汽車單片機基礎知識認知1.單片機介紹

單片機誕生于20世紀70年代末,它是指一個集成在一塊芯片上的完整計算機系統(tǒng)。單片機具有一個完整計算機所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會具有外存。同時集成諸如通信接口、定時器,實時時鐘等外圍設備。

單片機又稱單片微控制器,如圖1-1,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。相當于一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。概括地講:一塊芯片就成了一臺計算機。它的體積小、質(zhì)量輕、價格便宜、為學習、應用和開發(fā)提供了便利條件。同時,學習使用單片機是了解計算機原理與結(jié)構(gòu)的最佳選擇。

圖1-1單片機項目1

汽車單片機基礎知識認知2.典型的單片機

(1)51系列單片機。51系列單片機最早由Intel公司推出,主要有8031系列,8051系列。后來Atmel公司以8051的內(nèi)核為基礎推出了AT89系列單片機。它廣泛應用于工業(yè)測控系統(tǒng)之中。很多公司都有51系列的兼容機型推出,今后很長的一段時間內(nèi)將占有大量市場,如圖1-2。

圖1-2C51系列單片機

(2)ARM&AVRARM&AVR是一種功能較強的芯片,處理能力更強。但無法在沒有周邊器件的情況下單獨完成既定功能AVR單片機也是Atmel公司的產(chǎn)品,最早的就是AT90系列單片機,現(xiàn)在很多AT90單片機都轉(zhuǎn)型為Atmega系列和AtTIny系列,AVR單片機最大的特點是精簡指令型單片機,執(zhí)行速度,在相同的振蕩頻率下是8位MCU中最快的一種單片機,如圖1-3。圖1-3ARM系列單片機項目1

汽車單片機基礎知識認知

(3)ArduinoArduino是單片機二次開發(fā)的產(chǎn)物。以做項目來說,普通單片機只是散件,硬件的設計和軟件設計都得你自己來。而且Arduino是半成品,你只要把相應的模塊組合在一起,再寫一寫甚至直接復制別人程序就能行了。拿做電腦來比喻的話,你拿單片機做項目就像用電子元件先做出來顯示器、主板、內(nèi)存條、顯卡、硬盤等,再把它們組裝成一臺電腦。用Arduino做項目就像直接把別人做好的主板硬盤顯卡組裝成電腦。Arduino的好處就是開發(fā)簡單,如圖1-4。圖1-4Arduino系列單片機項目1

汽車單片機基礎知識認知3.單片機的應用

單片機的使用領(lǐng)域已十分廣泛幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡,在智能儀表、實時工控、通信設備、導航系統(tǒng)、家用電器等。此外,單片機在工商,金融,科研、教育,國防航空航天等領(lǐng)域有著十分廣泛的用途。

(1)在智能儀器儀表中的應用單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應用于儀器儀表中,結(jié)合不同類型的傳感器,可實現(xiàn)諸如電壓、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強大。例如精密的測量設備(功率計,示波器,各種分析儀)。

(2)在工業(yè)控制中的應用用單片機可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)。例如工廠流水線的智能化芯片管理,電梯智能化控制、各種報警系統(tǒng),與計算機聯(lián)網(wǎng)構(gòu)成二級控制系統(tǒng)等。

(3)在家用電器中的應用現(xiàn)在的家用電器基本上都采用了單片機控制,從電飯煲、洗衣機、電冰箱、空調(diào)機、彩電、其他音響視頻器材、再到電子稱量設備,五花八門,無所不在。項目1

汽車單片機基礎知識認知

(4)在計算機網(wǎng)絡和通信領(lǐng)域中的應用現(xiàn)代的單片機普遍具備通信接口,可以很方便地與計算機進行數(shù)據(jù)通信,為在計算機網(wǎng)絡和通信設備間的應用提供了極好的物質(zhì)條件,現(xiàn)在的通信設備基本上都實現(xiàn)了單片機智能控制,從手機,電話機、小型程控交換機、樓宇自動通信呼叫系統(tǒng)、列車無線通信、再到日常工作中隨處可見的移動電話,集群移動通信,無線電對講機等。

(5)在醫(yī)用設備領(lǐng)域中的應用單片機在醫(yī)用設備中的用途亦相當廣泛,例如醫(yī)用呼吸機,各種分析儀,監(jiān)護儀,超聲診斷設備及病床呼叫系統(tǒng)等等。

(6)在各種大型電器中的模塊化應用某些專用單片機設計用于實現(xiàn)特定功能,從而在各種電路中進行模塊化應用,而不要求使用人員了解其內(nèi)部結(jié)構(gòu)。如音樂集成單片機,看似簡單的功能,微縮在純電子芯片中(有別于磁帶機的原理),就需要復雜的類似于計算機的原理。如:音樂信號以數(shù)字的形式存于存儲器中(類似于ROM),由微控制器讀出,轉(zhuǎn)化為模擬音樂電信號(類似于聲卡)。在大型電路中,這種模塊化應用極大地縮小了體積,簡化了電路,降低了損壞、錯誤率,也方便于更換。

(7)在汽車設備領(lǐng)域中的應用單片機在汽車電子中的應用非常廣泛,例如汽車中的發(fā)動機控制器,基于CAN總線的汽車發(fā)動機智能電子控制器,GPS導航系統(tǒng),ABS防抱死系統(tǒng),制動系統(tǒng)等等。項目1

汽車單片機基礎知識認知【任務工單頁】任務實施:單片機的基礎認知1.單片機又稱________________,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。2.51系列單片機最早有Intel公司推出,主要有8031系列,________系列。3.AVR單片機最大的特點是_____________單片機,執(zhí)行速度,在相同的振蕩頻率下是8位MCU中最快的一種單片機。4.單片機具有體積小、___________、控制功能強、擴展靈活、__________和使用方便等優(yōu)點。項目1

汽車單片機基礎知識認知

學習任務2單片機的硬件基礎認知【任務描述】

以ArduinoUNO單片機為例,從布局、技術(shù)規(guī)格、處理器、存儲空間及端口等介紹單片機的硬件組成,下面請同學們通過學習單片機的概念、種類,了解單片機的實際應用?!緦W習目標】

1.能夠識別單片機的硬件。2.能夠識讀單片機各引腳定義。1.Arduino介紹Arduino是一種開源的微控制器平臺,它包括了一個硬件部分(即Arduino開發(fā)板)和一個軟件部分(即ArduinoIDE),也就是單片機的開源硬件和軟件生態(tài)系統(tǒng)。Arduino已經(jīng)將晶振、電源、接口電路等硬件集成到單個開發(fā)板上,用戶只需要連接到電腦就可以開始編程和測試。Arduino使用一種基于C/C++的編程語言,它提供了許多簡化的函數(shù)和庫,使得編程更為簡潔易懂。Arduino適合于教學、快速原型制作、個人項目和藝術(shù)設計等場合,特別是對于初學者和非專業(yè)者,Arduino是一個理想的選擇。項目1

汽車單片機基礎知識認知項目1

汽車單片機基礎知識認知2.Arduino的硬件結(jié)構(gòu)

(1)Arduino的外觀圖Arduino的外觀圖如圖1-5所示。

(2)Arduino的結(jié)構(gòu)組成Arduino主要由處理器、電源接口、輸入端口等組成,如圖1-6所示。其技術(shù)規(guī)格見表1-1。圖1-5Arduino的外觀圖圖1-6Arduino的結(jié)構(gòu)組成項目1

汽車單片機基礎知識認知表1-1Arduino的技術(shù)規(guī)格項目1

汽車單片機基礎知識認知3.Arduino部件介紹

(1)Arduino的處理器種類和作用。處理器ATMEGA16U2的作用是負責將上位機通過USB傳輸過來的程序?qū)懭階Tmega328P中,相當于USB轉(zhuǎn)TTL串口的芯片;但其性能可能不太穩(wěn)定,有可能出現(xiàn)掉固件(固件:芯片能執(zhí)行的代碼);有很多種專業(yè)級別的USB轉(zhuǎn)TTL串口的芯片,比如國外的FT232,CP2102,PL2303,國內(nèi)最好的CH340、CH341。處理器ATmega328P的作用是板子的核心主控(MCU),負責程序的存儲以及運行,ArduinoIDE編程的代碼最終會燒寫入ATMEGA328P中的ROM中。

(2)ATmega328P的詳解。Arduino其實是一塊AVR的開發(fā)板,其體系結(jié)構(gòu)為精簡指令集計算機(RISC)。AVR芯片內(nèi)部都是一片IC(集成電路),外面再用塑料殼包起來,用極細的線從IC的邊緣連接到封裝的腳上,ATmega328P采用的封裝方式為DIP封裝(雙列直插)。項目1

汽車單片機基礎知識認知

(3)單片機比較常用的封裝方式。單片機比較常用的封裝方式是DIP封裝(DualIn-linePackage),也叫雙列直插式封裝技術(shù),指采用雙列直插形式封裝的集成電路芯片,DIP封裝如圖1-7所示。DIP封裝的特點:①絕大多數(shù)中小規(guī)模集成電路均采用這種封裝形式,其引腳數(shù)一般不超過100。②DIP封裝的CPU芯片有兩排引腳,需要插入到具有DIP結(jié)構(gòu)的芯片插座上。當然,也可以直接插在有相同焊孔數(shù)和幾何排列的電路板上進行焊接;DIP封裝的芯片在從芯片插座上插拔時應特別小心,以免損壞管腳。DIP封裝結(jié)構(gòu)形式:DIP封裝結(jié)構(gòu)形式有多層陶瓷雙列直插式DIP,單層陶瓷雙列直插式DIP,引線框架式DIP(含玻璃陶瓷封接式,塑料包封結(jié)構(gòu)式,陶瓷低熔玻璃封裝式)等;DIP封裝的8086處理器DIP封裝具有以下特點:適合在項目1

汽車單片機基礎知識認知圖1-7DIP封裝圖1-8DIP封裝內(nèi)部結(jié)構(gòu)PCB(印刷電路板)上穿孔焊接,操作方便。芯片面積與封裝面積之間的比值較大,故體積也較大;最早的4004.8008.8086.8088等CPU都采用了DIP封裝,通過其上的兩排引腳可插到主板上的插槽或焊接在主板上。DIP封裝內(nèi)部結(jié)構(gòu)如圖1-8所示。項目1

汽車單片機基礎知識認知

(4)管腳定義。Atmega芯片內(nèi)部有兩個獨立的電源系統(tǒng):數(shù)字電源(標示為:VCC或者VCC)和模擬電源(標示為:AVCC或者AVCC),VCC和AVCC應該同時接到相同的電壓上;即使用不到任何模擬電路功能,AVCC的電源管腳必須接上。兩個電源管腳是分開的,當需要低噪聲或者高精度的模擬讀數(shù)時,就可以給模擬部分加上額外的電源濾波,提高精度。ATmega328的28腳封裝有1個VCC腳、1個AVCC腳和2個GND腳;32腳封裝有2個VCC腳、1個AVCC腳和3個GND腳;100腳封裝有4個VCC腳、1個AVCC腳和5個GND腳。ATmega328管腳編號如圖1-9所示。AVR單片機系列是基于低功效的CMOS技術(shù),其MOS管中沒有集電體、發(fā)射極或基極,而是有漏極、源極和柵極,CMOS器件的正確電源和地的術(shù)語描述為VDD和V。

(5)模擬參考(AREF)電壓。AREF電壓引腳有幾種不同的用法,它連在芯片內(nèi)部模數(shù)轉(zhuǎn)換電路(ADC)外圍設備的參考輸入端。ATmega328只支持單端ADC轉(zhuǎn)換,而ATmega2560可以做兩個輸入端之間的差分電壓測量。

無論是使用AVCC還是內(nèi)部參考電壓,都可以在AREF引腳和地之間接一個外部去耦電容,以提高參考電壓的穩(wěn)定性。模擬參考(AREF)電壓參考如圖1-10所示。另一個選擇是使用一個外部參考電壓源電路。項目1

汽車單片機基礎知識認知圖1-9ATmega328管腳編號圖1-10模擬參考(AREF)電壓參考項目1

汽車單片機基礎知識認知

(6)RESET。RESET引腳提供了重置或者說重啟單片機的方法,名字上方的橫線表示這是一個低電平有效的輸入,意思是說當這個腳拉低時RESET功能起作用。RESET引腳設計可以承受高電壓,也可以用于通知芯片進入編程模式;RESET引腳拉低到地并且保持為低時,就可以讓芯片進入ISP(InSystemProgramming,在線編程),也稱呼為LVSP(LowVolageSerialProgramming,低壓串行編程);RESET引腳拉高到大約12V(11.5V到12.5V),則芯片就會進入HVPP(HighVolageParallelProgramming,高壓并行編程),由于此模式情況下,RESET腳沒有接其他所有腳都有的箝拉電路,因此更加容易收到靜電的損壞。項目1

汽車單片機基礎知識認知

(7)XTAL1和XTAL2。XTAL1和XTAL2引腳位置如圖1-11所示。XTAL1和XTAL2腳是內(nèi)部反相振蕩器的輸入和輸出腳。如果使用外部時鐘源,XTAL1就是內(nèi)部時鐘電路的輸入腳。這兩個腳一般是用于接一個石英晶體(ArduinoDuemilanove)或者陶瓷諧振器(ArduinoUno),以形成單片機的時鐘電路的時基信號,為系統(tǒng)提供一個高精度的時間基準。注意:通用輸入輸出(I/O)端口,特殊的端口已經(jīng)在上面介紹完成,剩下的端口都可以配置成輸入或者輸出端口。圖1-11XTAL1和XTAL2引腳位置項目1

汽車單片機基礎知識認知4.AVR內(nèi)核(1)ATmega328的簡化框圖如圖1-12所示。圖1-12ATmega328的簡化框圖(2)AVRCPU的主要部件AVR內(nèi)核包括AVRCPU的主要部件,如圖1-13所示。AVR內(nèi)核的組成如圖1-14所示。圖1-13AVRCPU的主要部件圖1-14AVR內(nèi)核的組成

芯片重啟后,PC被重置為0,程序存儲器中的0地址上的指令首先被取到CPU中(這個地方由MCU控制寄存器設置的),此處稱為重啟向量(一般來說,向量是指向一個特定地方(地址)的指針而非指令)。AVR體系中一個有是當中斷發(fā)生,程序的執(zhí)行跳轉(zhuǎn)到設定的中斷處理例程時,全局中斷允許位(I)被清除。

(3)時鐘源ATmega328和ATmega2560都有一個片內(nèi)振蕩器,其時鐘頻率由外部晶體或諧振器決定,其有以下兩種運行方式:一是低功耗模式,此模式不能輸出時鐘信號到芯片外面;二是全幅模式,增加了功率消耗。兩種芯片都可以從外部信號源獲取時鐘。片內(nèi)有一個系統(tǒng)時鐘預分頻器,系統(tǒng)時鐘以2的冪次分頻,分頻比可以從1:1到1:256。主系統(tǒng)時鐘是由兩個校準過的電阻/電容(RC)振蕩器之一產(chǎn)生的,還可以使用一個外部低頻時鐘晶體(一般是32KHz)來驅(qū)動需要真實時鐘的應用程序中的定時器/計時器。趣的設計是當中斷發(fā)生,程序的執(zhí)行跳轉(zhuǎn)到設定的中斷處理例程時,全局中斷允許位(I)被清除。項目1

汽車單片機基礎知識認知項目1

汽車單片機基礎知識認知(4)地址空間AVR體系結(jié)構(gòu)本身是基于哈弗體系結(jié)構(gòu)的,哈弗結(jié)構(gòu)中,程序和數(shù)據(jù)的存儲空間是分離的。程序存儲器的作用是用于存儲處理器要執(zhí)行的實際機器語言指令;在AVR上,這個存儲器是片內(nèi)的可編程16位寬flash陣列;其特點是可以存儲一定數(shù)量的數(shù)據(jù),但寫入的時間比較長,可以擦寫的次數(shù)有限;有時候被看作是ROM(只讀存儲器);Atmel器件手冊宣稱程序存儲器內(nèi)的數(shù)據(jù)可以保存很多年。數(shù)據(jù)存儲器。數(shù)據(jù)存儲器作用是用于保存程序運行過程中保存一些變量和變化的數(shù)據(jù);在AVR上提供的是SRAM(StaticRandom-AccessMemory靜態(tài)隨機存取內(nèi)存);

其大小ATmega328芯片有2KB的SRAM,而ATmega2560則會有8KB的SRAM;其特點是只要芯片還有電,SRAM內(nèi)存就保持里面的數(shù)據(jù),當?shù)綦姾?,?nèi)存里的狀態(tài)就是不確定了,也就是說當重新上電后,就不確定SRAM是某個特定的值,所以Arduino的C語言編程會采取措施來確保未初始化的數(shù)據(jù)不會用在被認為有特定值的場合;寄存器。寄存器作用是CPU中的大多數(shù)算術(shù)和邏輯指令都可以在一個時鐘周期內(nèi)直接讀寫寄存器組里的單個寄存器,這樣大型的寄存器就可以讓復雜的算法可以快速執(zhí)行,而不用重復在SARM上復制數(shù)據(jù)。其大小在AVR上,里面有32個寄存器,編號為R0到R31;其中有6個寄存器有特殊用途,它們可以組合成3個16位指向數(shù)據(jù)存儲器的索引指針,這些索引寄存器稱呼為X、Y和Z,主要用于快速計算。輸入/輸出寄存器。輸入/輸出寄存器作用是所有的片內(nèi)外圍設備都是通過I/O地址空間訪問的,每個外圍設備都要用到1個或者多個寄存器,這些寄存器的位設置決定了外圍設備的行為。其特點是SRAM、寄存器組和外圍I/O寄存器都是在數(shù)據(jù)地址空間里的,而不是在程序地址空間里;EEPROM。EEPROM作用是適合用于存儲用戶可改的配置數(shù)據(jù)或其他需要容易修改又要長期非易失保存的數(shù)據(jù);其大小,ATmega328芯片有1KB的EEPROM,而ATmega2560則會有4KB的EEPROM。其特點是EERPOM(電可擦寫只讀存儲器)可以承受多次的擦寫,這樣就比較適合存儲用戶可改的配置數(shù)據(jù)或其他需要修改又要長期非易失保存的數(shù)據(jù);寫入的時序由片內(nèi)的EEPROM邏輯控制,每個字節(jié)需要大約3.3ms來寫入。項目1

汽車單片機基礎知識認知配置熔絲。配置熔絲作用是配置熔絲控制芯片一些運行特性,這樣可以更靈活地使用芯片;其大小是ATmega328芯片和ATmega2560芯片都有3個熔絲字節(jié):1個高字節(jié)、1個低字節(jié)和1個擴展字節(jié)。其特點特點是配置熔絲一般是由外部芯片編程器讀寫的,通過LPM指令,芯片可以讀取和鎖定熔絲中的位,也可以通過SPM指令寫引導裝載程序鎖定位。項目1

汽車單片機基礎知識認知項目1

汽車單片機基礎知識認知(5)指令集ATmega328芯片有131條不同的指令,而ATmega2560則會有135條。RISC(ReducedInstructionSetComputer精簡指令集計算機),代表的是每條指令本身的復雜度降低了,而不是指令集中的指令數(shù)量減少;簡化的可執(zhí)行指令易于在硅片上實現(xiàn),進而使得芯片更小、更快也更加便宜。機械語言指令:在AVR指令中有些是16位的,有些是32位的,主要分為四種。AVR機械語言指令集的組成如圖1-15所示。圖1-15AVR機械語言指令集的組成5.片內(nèi)外圍設備

單片機內(nèi)部有構(gòu)成一部分完整計算機的電路,包括內(nèi)存塊、時鐘電路和接口外圍設備;所以一部分低端的微處理器不能稱呼為單片機。

(1)通用輸入/輸出(I/O)ATmega328芯片有3個I/O端口:端口B、C、D;ATmega2560芯片有11個I/O端口:端口A到端口H(沒有端口I)、端口J、K、L;配置為輸出方式后,根據(jù)輸出端口寄存器上的位被寫為1或者0,對應引腳上的高電平或者低電平;配置為輸入方式后,每個引腳可以讀到邏輯高或者邏輯低的電平;高于0.7×VCC的電壓為高電平,讀為1;低于0.3×VCC的電壓則認為是邏輯低電平,讀為0;在這兩個電平之間的電壓讀數(shù)為不可測的;如果需要,輸入引腳可以開啟內(nèi)置的上拉電阻,這樣可以保證信號的確定的;每個I/O端口都是由3個I/O寄存器中位的設置來控制。

(2)外部中斷AVR內(nèi)核可以識別和響應兩種不同的外部中斷;ATmega328有INT0和INT1腳,ATmega2560有INT0-7腳;外部中斷是嵌入式應用程序極為有用的資源,正確地使用外部中斷可以解放主應用程序,使其不再需要不斷輪詢設備或狀態(tài)以決定是否采取行動。項目1

汽車單片機基礎知識認知項目1

汽車單片機基礎知識認知(3)定時器/計數(shù)器定時器/計數(shù)器0。它可以用作定時器或計數(shù)器,核心為1個8位的計數(shù)器。定時器/計數(shù)器1。它可以用作定時器或計數(shù)器,而且還有1個輸入捕獲單元,這個硬件可以非常精確地做輸入信號的時間測量;核心為1個16位的計數(shù)器。定時器/計數(shù)器2。它特殊在于能以自己的鼓點起舞,它的異步運行模式能以系統(tǒng)時鐘或外部信號之外的信號源驅(qū)動;核心為1個8位的計數(shù)器。ATmega2560則增加3個16位的定時器(編號3.4.5)(4)USART

USART為通用同步、異步接收、發(fā)射器;ATmega328芯片有1個USART,而ATmega2560則會有4個USART。

(5)兩線串行接口(TWI)

即IC,IC為IC間總線,是菲利普開發(fā)的一種通信協(xié)議,用于減少芯片間的連線;IC標準最多允許總線上最多127個設備。

(6)模擬輸入ATmega328芯片有6個輸入,而ATmega2560則會有16個輸入;ATmega328模擬輸入接口為A0A5,而ATmega2560模擬輸入接口為A0A15;模擬輸入可以測量的電壓為0~5V;ADC一旦正確配置和觸發(fā),可以模擬電壓轉(zhuǎn)化為0~1023之間的一個數(shù)值;0表示電壓是地電壓或接近地電壓;而讀到1023則表示電壓是AREF或接近AREF;這個是10比特的分辨率。項目1

汽車單片機基礎知識認知6.存儲空間Arduino的存儲空間即是其主控芯片所集成的存儲空間。也可以通過使用外設芯片的方式來擴展Arduino的存儲空間。ArduinoUNO的存儲空間分三種:Flash,容量為32KB。其中0.5KB作為BOOT區(qū)用于儲存引導程序,實現(xiàn)通過串口下載程序的功能;另外的31.5KB作為用戶儲存的空間。相對于現(xiàn)在動輒幾百GB的硬盤,可能覺得32KB太小了,但是在單片機上,32KB已經(jīng)可以存儲很大的程序了。SRAM,容量為2KB。SRAM相當于計算機的內(nèi)存,當CPU進行運算時,需要在其中開辟一定的存儲空間。當Arduino斷電或復位后,其中的數(shù)據(jù)都會丟失。EEPROM,容量為1KB。EEPROM的全稱為電可擦寫的可編程只讀存儲器,是一種用戶可更改的只讀存儲器,其特點是在Arduino斷電或復位后,其中的數(shù)據(jù)不會丟失。項目1

汽車單片機基礎知識認知7.串口ArduinoUNO有14個數(shù)字輸入/輸出端口,6個模擬輸入端口,如圖1-16所示。其中一些帶有特殊功能,這些端口如下:圖1-16ArduinoUNO14個數(shù)字輸入/輸出端口UART通信,為0(RX)和1(TX)引腳,被用于接收和發(fā)送串口數(shù)據(jù)。這兩個引腳通過連接到ATmega16U2來與計算機進行串口通信。外部中斷,為2和3引腳,可以輸入外部中斷信號。PWM輸出,為3.5.6.9.10和11引腳,可用于輸出PWM波。SPI通信,為10(SS)、11(MOSI)、12(MISO)和13(SCK)引腳,可用于SPI通信。TWI通信,為A4(SDA)、A5(SCL)引腳和TWI接口,可用于TWI通信,兼容IIC通信。AREF,模擬輸入?yún)⒖茧妷旱妮斎攵丝凇eset,復位端口。接低電平會使Arduino復位。當復位鍵被按下時,會使該端口接到低電平,從而使Arduino復位。項目1

汽車單片機基礎知識認知8.狀態(tài)燈ArduinoUNO帶有4個LED指示燈,如圖1-17所示,它們的作用分別是:圖1-17ArduinoUNO帶有4個LED指示燈ON,電源指示燈。當Arduino通電時,ON燈會點亮。TX,串口發(fā)送指示燈。當使用USB連接到計算機且Arduino向計算機傳輸數(shù)據(jù)時,TX燈會點亮。RX,串口接收指示燈。當使用USB連接到計算機且Arduino接收計算機傳來的數(shù)據(jù)時,RX燈會點亮。L,可編程控制指示燈。該LED通過特殊電路連接到Arduino的13號引腳,當13號引腳為高電平或高阻態(tài)時,該LED會點亮;當為低電平時,不會點亮。因此可以通過程序或者外部輸入信號來控制該LED的亮滅。項目1

汽車單片機基礎知識認知9.電源ArduinoUNO有三種供電方式,如圖1-18所示:

通過USB接口供電,電壓為5V。通過DC電源輸入接口供電,電壓要求7~12V。

通過電源接口處5V或者VIN端口供電,5V端口處供電必須為5V,VIN端口處供電為7~12V。圖1-18ArduinoUNO三種供電方式項目1

汽車單片機基礎知識認知【任務工單頁】

任務實施:單片機的硬件認知1.Arduino其實是一塊AVR的開發(fā)板,其體系結(jié)構(gòu)為_______指令集計算機(RISC)。2.DIP封裝(DualIn-linePackage),指采用_______形式封裝的集成電路芯片。3._______作用是CPU中的大多數(shù)算術(shù)和邏輯指令都可以在一個時鐘周期內(nèi)直接讀寫寄存器組里的單個寄存器。4.單片機內(nèi)部有構(gòu)成一部分完整計算機的電路,包括內(nèi)存塊、_______和接口外圍設備;所以一部分低端的微處理器不能稱呼為單片機。5.ArduinoUNO有____種供電方式。項目1

汽車單片機基礎知識認知學習任務3單片機的軟件基礎認知【任務描述】單片機是以C語言為基礎進行編程。C語言具有簡潔緊湊、靈活方便;運算符豐富;數(shù)據(jù)結(jié)構(gòu)簡單;執(zhí)行效率高;適用范圍廣,可移植性好等特點。本教材將重點介紹C語言的程序結(jié)構(gòu)、條件判斷、循環(huán)函數(shù)、算數(shù)運算符、比較運算符、布爾運算符、指針運算符、位運算符、復合運算符、常數(shù)變量、數(shù)據(jù)類型、變量作用域及修飾符、數(shù)字I/O、模擬I/O、高級I/O、時間函數(shù)、數(shù)學運算、中斷函數(shù)、通信?!緦W習目標】1.能夠使用C語言編程。2.能夠在單片機上實現(xiàn)軟件控制。項目1

汽車單片機基礎知識認知1.基于Arduino的主函數(shù)介紹

在Arduino中,setup函數(shù)和loop函數(shù)是兩個最重要的主函數(shù),下面將對這兩個函數(shù)進行介紹。

(1)setup函數(shù)

在Arduino中程序運行時將首先調(diào)用setup函數(shù)。用于初始化變量、設置針腳的輸出\輸入類型、配置串口、引入類庫文件等。每次Arduino上電或重啟后,setup函數(shù)只運行一次。參考程序:intbuttonPin=3;voidsetup(){Serial.begin(9600);pinMode(buttonPin,INPUT);}voidloop(){//...}(2)loop函數(shù)

在setup函數(shù)中初始化和定義了變量,然后執(zhí)行l(wèi)oop函數(shù)。顧名思義,該函數(shù)在程序運行過程中不斷的循環(huán),根據(jù)一些反饋,相應改變執(zhí)行情況。通過該函數(shù)動態(tài)控制Arduino主控板。參考程序:intbuttonPin=3;//setup中初始化串口和按鍵針腳.voidsetup(){beginSerial(9600);pinMode(buttonPin,INPUT);}//loop中每次都檢查按鈕,如果按鈕被按下,就發(fā)送信息到串口voidloop(){if(digitalRead(buttonPin)==HIGH)serialWrite('H');elseserialWrite('L');delay(1000);}項目1

汽車單片機基礎知識認知項目1

汽車單片機基礎知識認知2.常數(shù)變量

(1)HIGH|LOW(引腳電壓定義)

引腳電壓定義HIGH和LOW,當讀?。╮ead)或?qū)懭耄╳rite)數(shù)字引腳時只有兩個可能的值:HIGH和LOW。HIGH。HIGH(參考引腳)的含義取決于引腳(pin)的設置,引腳定義為INPUT或OUTPUT時含義有所不同。當一個引腳通過pinMode被設置為INPUT,并通過digitalRead讀取(read)時。如果當前引腳的電壓大于等于3V,微控制器將會返回為HIGH。引腳也可以通過pinMode被設置為INPUT,并通過digitalWrite設置為HIGH。輸入引腳的值將被一個內(nèi)在的20K上拉電阻控制在HIGH上,除非一個外部電路將其拉低到LOW。當一個引腳通過pinMode被設置為OUTPUT,并digitalWrite設置為HIGH時,引腳的電壓應在5V。在這種狀態(tài)下,它可以輸出電流。例如,點亮一個通過一串電阻接地或設置為LOW的OUTPUT屬性引腳的LED。LOW。LOW的含義同樣取決于引腳設置,引腳定義為INPUT或OUTPUT時含義有所不同。當一個引腳通過pinMode配置為INPUT,通過digitalRead設置為讀?。╮ead)時,如果當前引腳的電壓小于等于2V,微控制器將返回為LOW。當一個引腳通過pinMode配置為OUTPUT,并通過digitalWrite設置為LOW時,引腳為0V。在這種狀態(tài)下,它可以倒灌電流。例如,點亮一個通過串聯(lián)電阻連接到+5V,或到另一個引腳配置為OUTPUT、HIGH的LED。項目1

汽車單片機基礎知識認知(2)INPUT|OUTPUT(數(shù)字引腳(Digitalpins)定義)

數(shù)字引腳(Digitalpins)定義,INPUT和OUTPUT,數(shù)字引腳當作INPUT或OUTPUT都可以。用pinMode()方法使一個數(shù)字引腳從INPUT到OUTPUT變化。引腳(Pins)配置為輸入(Inputs)。Arduino(Atmega)引腳通過pinMode()配置為輸入(INPUT)即是將其配置在一個高阻抗的狀態(tài)。配置為INPUT的引腳可以理解為引腳取樣時對電路有極小的需求,即等效于在引腳前串聯(lián)一個100兆歐姆(Megohms)的電阻。這使得它們非常利于讀取傳感器,而不是為LED供電。引腳(Pins)配置為輸出(Outputs)。引腳通過pinMode()配置為輸出(OUTPUT)即是將其配置在一個低阻抗的狀態(tài)。

這意味著它們可以為電路提供充足的電流。Atmega引腳可以向其他設備/電路提供(提供正電流positivecurrent)或倒灌(提供負電流negativecurrent)達40毫安(mA)的電流。這使得它們利于給LED供電,而不是讀取傳感器。輸出(OUTPUT)引腳被短路的接地或5V電路上會受到損壞甚至燒毀。Atmega引腳在為繼電器或電機供電時,由于電流不足,將需要一些外接電路來實現(xiàn)供電。項目1

汽車單片機基礎知識認知(3)true|false(邏輯層定義)

邏輯層定義,true與false(布爾Boolean常量),在Arduino內(nèi)有兩個常量用來表示真和假:true和false。false。在這兩個常量中false更容易被定義。false被定義為0(零)。true。true通常被定義為1,這是正確的,但true具有更廣泛的定義。在布爾含義里任何非零整數(shù)為true。所以在布爾含義內(nèi)-1,2和-200都定義為ture。需要注意的是true和false常量,不同于HIGH,LOW,INPUT和OUTPUT,需要全部小寫。integerconstants(整數(shù)常量)。整數(shù)常量是直接在程序中使用的數(shù)字,如123。默認情況下,這些數(shù)字被視為int,但你可以通過U和L修飾符進行更多的限制(見下文)。通常情況下,整數(shù)常量默認為十進制,但可以加上特殊前綴表示為其他進制。不同進制對比如表1-2所示。進制示例數(shù)碼二進制1111011二進位計數(shù)制僅用兩個數(shù)碼,0和1,逢二進一八進制173用0,1,2,3,4,5,6,7八個數(shù)字,逢八進1十進制1230、1、2、3、4、5、6、7、8、9,逢十進一十六進制7b0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F,逢十六進一項目1

汽車單片機基礎知識認知小數(shù)是十進制數(shù)。這是數(shù)學常識。如果一個數(shù)沒有特定的前綴,則默認為十進制。二進制以2為基底,只有數(shù)字0和1是有效的。示例101//和十進制5等價(1*2^2+0*2^1+1*2^0)二進制格式只能是8位的,即只能表示0-255之間的數(shù)。如果輸入二進制數(shù)更方便的話,你可以用以下的方式:myInt=(B11001100*256)+B10101010;//B11001100作為高位。八進制是以8為基底,只有0-7是有效的字符。前綴“0”(數(shù)字0)表示該值為八進制。0101//等同于十進制數(shù)65((1*8^2)+(0*8^1)+1)項目1

汽車單片機基礎知識認知3.變量作用域及修飾符

在Arduino使用的C編程語言的變量,有一個名為作用域(scope)

的屬性。這一點與類似BASIC的語言形成了對比,在BASIC語言中所有變量都是全局(global)

變量。

在一個程序內(nèi)的全局變量是可以被所有函數(shù)所調(diào)用的。局部變量只在聲明它們的函數(shù)內(nèi)可見。在Arduino的環(huán)境中,任何在函數(shù)(例如,setup(),loop()等)外聲明的變量,都是全局變量。

當程序變得更大更復雜時,局部變量是一個有效確定每個函數(shù)只能訪問其自己變量的途徑。這可以防止,當一個函數(shù)無意中修改另一個函數(shù)使用的變量的程序錯誤。

有時在一個for循環(huán)內(nèi)聲明并初始化一個變量也是很方便的選擇。這將創(chuàng)建一個只能從for循環(huán)的括號內(nèi)訪問的變量。參考程序:intgPWMval;//任何函數(shù)都可以調(diào)用此變量voidsetup(){//...}voidloop(){inti;//"i"只在"loop"函數(shù)內(nèi)可用floatf;//"f"只在"loop"函數(shù)內(nèi)可用//...for(intj=0;j<100;j++){//變量j只能在循環(huán)括號內(nèi)訪問}}項目1

汽車單片機基礎知識認知

(1)static(靜態(tài)變量)static關(guān)鍵字用于創(chuàng)建只對某一函數(shù)可見的變量。然而,和局部變量不同的是,局部變量在每次調(diào)用函數(shù)時都會被創(chuàng)建和銷毀,靜態(tài)變量在函數(shù)調(diào)用后仍然保持著原來的數(shù)據(jù)。靜態(tài)變量只會在函數(shù)第一次調(diào)用的時候被創(chuàng)建和初始化。參考程序:/*RandomWalk*PaulBadger2007*RandomWalk

函數(shù)在兩個終點間隨機的上下移動*在一個循環(huán)中最大的移動由參數(shù)“stepsize”決定*一個靜態(tài)變量向上和向下移動一個隨機量*這種技術(shù)也被稱為“粉紅噪聲”或“醉步”*/#definerandomWalkLowRange-20#definerandomWalkHighRange20intstepsize;intthisTime;inttotal;voidsetup(){Serial.begin(9600);}voidloop(){//測試randomWalk

函數(shù)stepsize=5;thisTime=randomWalk(stepsize);serial.println(thisTime);delay(10);}intrandomWalk(intmoveSize){staticintplace;//在randomwalk

中存儲變量//聲明為靜態(tài)因此它在函數(shù)調(diào)用之間能保持數(shù)據(jù),但其他函數(shù)無法改變它的值place=place+(random(-moveSize,

moveSize+1));if(place<randomWalkLowRange){//檢查上下限place=place+(randomWalkLowRange-place);//將數(shù)字變?yōu)檎较騷elseif(place>randomWalkHighRange){place=place-(place-randomWalkHighRange);//將數(shù)字變?yōu)樨摲较騷returnplace;}(2)volatilevolatile

這個關(guān)鍵字是變量修飾符,常用在變量類型的前面,以告訴編譯器和接下來的程序怎么對待這個變量。聲明一個

volatile變量是編譯器的一個指令。編譯器是一個將你的C/C++代碼轉(zhuǎn)換成機器碼的軟件,機器碼是arduino

上的

Atmega芯片能識別的真正指令。具體來說,它指示編譯器從

RAM而非存儲寄存器中讀取變量,存儲寄存器是程序存儲和操作變量的一個臨時地方。在某些情況下,存儲在寄存器中的變量值可能是不準確的。如果一個變量所在的代碼段可能會意外地導致變量值改變,那此變量應聲明為

volatile,比如并行多線程等。在arduino

中,唯一可能發(fā)生這種現(xiàn)象的地方就是和中斷有關(guān)的代碼段,成為中斷服務程序。參考程序://當中斷引腳改變狀態(tài)時,開閉LEDintpin=13;volatileintstate=LOW;voidsetup(){pinMode(pin,OUTPUT);attachInterrupt(0,blink,CHANGE);}voidloop(){digitalWrite(pin,state);}voidblink(){state=!state;}項目1

汽車單片機基礎知識認知項目1

汽車單片機基礎知識認知(3)constconst關(guān)鍵字代表常量。它是一個變量限定符,用于修改變量的性質(zhì),使其變?yōu)橹蛔x狀態(tài)。這意味著該變量,就像任何相同類型的其他變量一樣使用,但不能改變其值。如果嘗試為一個const變量賦值,編譯時將會報錯。const關(guān)鍵字定義的常量,遵守variablescoping管轄的其他變量的規(guī)則。這一點加上使用#define的缺陷,使const關(guān)鍵字成為定義常量的一個的首選方法。參考程序:constfloatpi=3.14;floatx;//....x=pi*2;//在數(shù)學表達式中使用常量不會報錯pi=7;//錯誤的用法-你不能修改常量值,或給常量賦值。#define或const可以使用const或#define創(chuàng)建數(shù)字或字符串常量。但arrays,只能使用const。一般const相對的#define是首選的定義常量語法。項目1

汽車單片機基礎知識認知4.數(shù)字I/O(1)pinMode()pinMode()用于將指定的引腳配置成輸出或輸入。詳情請見digitalpins。pinMode()語法為pinMode(pin,mode),參數(shù)pin:要設置模式的引腳;參數(shù)mode:INPUT或OUTPUT,無返回。參考程序:ledPin=13//LED連接到數(shù)字腳

13voidsetup(){pinMode(ledPin,OUTPUT);//設置數(shù)字腳為輸出}voidloop(){digitalWrite(ledPin,HIGH);//點亮LEDdelay(1000);//等待1sdigitalWrite(ledPin,LOW);//滅掉LEDdelay(1000);//等待第二個}注意:模擬輸入腳也能當做數(shù)字腳使用,參見A0,A1等。項目1

汽車單片機基礎知識認知(2)digitalWrite()

用于給一個數(shù)字引腳寫入

HIGH或者LOW。如果一個引腳已經(jīng)使用pinMode()配置為

OUTPUT模式,其電壓將被設置為相應的值,HIGH為5V(3.3V控制板上為3.3V),LOW為0V。如果引腳配置為

INPUT模式,使用digitalWrite()寫入

HIGH值,將使內(nèi)部20kΩ上拉電阻(詳見數(shù)字引腳教程)。寫入LOW將會禁用上拉。上拉電阻可以點亮一個LED讓其微微亮,如果LED工作,但是亮度很低,可能是因為這個原因引起的。補救的辦法是使用pinMode()函數(shù)設置為輸出引腳。注意:數(shù)字

13號引腳難以作為數(shù)字輸入使用,因為大部分的控制板上使用了一顆

LED與一個電阻連接到他。如果啟動了內(nèi)部的20K上拉電阻,他的電壓將在1.7V左右,而不是正常的5V,因為板載LED串聯(lián)的電阻把他使他降了下來,這意味著他返回的值總是LOW。如果必須使用數(shù)字

13號引腳的輸入模式,需要使用外部上拉下拉電阻。digitalWrite()語法為digitalWrite(pin,

value),參數(shù)pin:引腳編號(如1,5,10,A0,A3);參數(shù)value:HIGH或者LOW,無返回。項目1

汽車單片機基礎知識認知參考程序:intledPin=13;//LED連接到數(shù)字13號端口voidsetup(){pinMode(ledPin,OUTPUT);//設置數(shù)字端口為輸入模式}voidloop(){digitalWrite(ledPin,HIGH);//使LED亮delay(1000);//延遲1sdigitalWrite(ledPin,LOW);//使LED滅delay(1000);//延遲1s}13號端口設置為高電平,延遲1s,然后設置為低電平。注意:模擬引腳也可以當作數(shù)字引腳使用,使用方法是輸入端口

A0,A1,A2等。項目1

汽車單片機基礎知識認知(3)digitalRead()digitalRead()用于讀取指定引腳的值。digitalRead()語法為digitalRead(Pin),

參數(shù)Pin:讀取的引腳號(int),返回HIGH或LOW。參考程序:ledPin=13//LED連接到13腳intinPin=7;//按鈕連接到數(shù)字引腳7intval=0;//定義變量存以儲讀值voidsetup(){pinMode(ledPin,OUTPUT);//將13腳設置為輸出pinMode(inPin,INPUT);//將7腳設置為輸入}voidloop(){val=digitalRead(inPin);//讀取輸入腳digitalWrite(ledPin,val);//將LED值設置為按鈕的值}將13腳設置為輸入腳7腳的值。注意:如果引腳懸空,digitalRead()會返回HIGH或LOW(隨機變化)。模擬輸入腳能當做數(shù)字腳使用,參見A0,A1等。項目1

汽車單片機基礎知識認知5.模擬

I/O(1)analogReference()

analogReference()配置用于模擬輸入的基準電壓(即輸入范圍的最大值)。analogReference()語法及參數(shù)含義見表1-2。analogReference()語法參數(shù)參數(shù)含義analogReference(type)typetype使用哪種參考類型:DEFAULT、

INTERNAL、INTERNAL1V1、

INTERNAL2V56、EXTERNALDEFAULT:默認5V(Arduino

板為5V)或3.3V(Arduino

板為

3.3V)為基準電壓INTERNAL:在ATmega168和ATmega328上以1.1V為基準電壓,以及在ATmega8上以2.56V為基準電壓(ArduinoMega無此選項)INTERNAL1V1:以1.1V為基準電壓(此選項僅針對ArduinoMega)INTERNAL2V56:以2.56V為基準電壓(此選項僅針對ArduinoMega)EXTERNAL:以AREF引腳(0至5V)的電壓作為基準電壓

analogReference()返回無無表1-2analogReference()語法及參數(shù)含義注意事項:改變基準電壓后,之前從analogRead()讀取的數(shù)據(jù)可能不準確。項目1

汽車單片機基礎知識認知

警告:不要在AREF引腳上使用任何小于0V或超過5V的外部電壓。如果使用AREF引腳上的電壓作為基準電壓,在調(diào)用analogRead()前必須設置參考類型為EXTERNAL。否則,將會削短有效的基準電壓(內(nèi)部產(chǎn)生)和AREF引腳,這可能會損壞Arduino板上的單片機。

另外,可以在外部基準電壓和AREF引腳之間連接一個5K電阻,這樣能在外部和內(nèi)部基準電壓之間切換。請注意,總阻值將會發(fā)生改變,因為AREF引腳內(nèi)部有一個32K電阻。這兩個電阻都有分壓作用。所以,例如,如果輸入2.5V的電壓,最終在AREF引腳上的電壓將為2.5×32/(32+5)V=2.2V。項目1

汽車單片機基礎知識認知(2)analogRead()

analogRead()用于從指定的模擬引腳讀取數(shù)據(jù)值。Arduino

板包含一個

6通道(Mini和Nano有8個通道,Mega有16個通道),10位模擬數(shù)字轉(zhuǎn)換器。這意味著它將

0至5V之間的輸入電壓映射到

0至1023之間的整數(shù)值。這將產(chǎn)生讀數(shù)之間的關(guān)系:5V/1024單位,或0.0049V(4.9mV)每單位。輸入范圍和精度可以使用analogReference()改變。它需要大約

100μs(0.0001)來讀取模擬輸入,所以最大的閱讀速度是每s

10000次。analogRead()語法為analogRead(Pin),參數(shù)Pin:從輸入引腳(大部分板子從

0到5,Mini和Nano從0到7,Mega從0到15)讀取數(shù)值,返回:從

0到1023的整數(shù)值。注意事項:如果模擬輸入引腳沒有連入電路,由analogRead()返回的值將根據(jù)多項因素(例如其他模擬輸入引腳,你的手靠近板子等)產(chǎn)生波動。參考程序:intanalogPin=3;//電位器(中間的引腳)連接到模擬輸入引腳3//另外兩個引腳分別接地和+5Vintval=0;//定義變量來存儲讀取的數(shù)值voidsetup(){serial.begin(9600);//設置波特率(9600)}voidloop(){val=analogRead(analogPin);//從輸入引腳讀取數(shù)值serial.println(val);//顯示讀取的數(shù)值}項目1

汽車單片機基礎知識認知(3)analogWrite()

analogWrite()用于PWM從一個引腳輸出模擬值(PWM)??捎糜谧?/p>

LED以不同的亮度點亮或驅(qū)動電機以不同的速度旋轉(zhuǎn)。analogWrite()輸出結(jié)束后,該引腳將產(chǎn)生一個穩(wěn)定的特殊占空比方波,直到下次調(diào)用analogWrite()(或在同一引腳調(diào)用digitalRead()或digitalWrite())。PWM信號的頻率大約是490赫茲。在大多數(shù)arduino

板(ATmega168或ATmega328),只有引腳3,5,6,9,10和11可以實現(xiàn)該功能。在aduino

Mega上,引腳2到13可以實現(xiàn)該功能。老的Arduino

板(ATmega8)的只有引腳9.10.11可以使用analogWrite()。在使用analogWrite()前,你不需要調(diào)用pinMode()來設置引腳為輸出引腳。analogWrite

函數(shù)與模擬引腳、analogRead

函數(shù)沒有直接關(guān)系。analogWrite()語法為analogWrite(pin,value),參數(shù)pin:用于輸入數(shù)值的引腳;參數(shù)value:占空比,0(完全關(guān)閉)到255(完全打開)之間,無返回。說明:引腳

5和6的PWM輸出將高于預期的占空比(輸出的數(shù)值偏高)。這是因為millis()和delay()功能,和PWM輸出共享相同的內(nèi)部定時器。這將導致大多時候處于低占空比狀態(tài)(如:0-10),并可能導致在數(shù)值為0時,沒有完全關(guān)閉引腳5和6。通過讀取電位器的阻值控制

LED的亮度。項目1

汽車單片機基礎知識認知參考程序:intledPin=9;//LED連接到數(shù)字引腳9intanalogPin=3;//電位器連接到模擬引腳3intval=0;//定義變量存以儲讀值voidsetup(){pinMode(ledPin,OUTPUT);//設置引腳為輸出引腳}voidloop(){val=analogRead(analogPin);//從輸入引腳讀取數(shù)值analogWrite(ledPin,val/4);//以val/4的數(shù)值點亮LED(因為analogRead

讀取的數(shù)值從

0到1023,而analogWrite

輸出的數(shù)值從

0到255)}項目1

汽車單片機基礎知識認知(4)高級I/Otone()。tone()用于在一個引腳上產(chǎn)生一個特定頻率的方波(50%占空比)。持續(xù)時間可以設定,否則波形會一直產(chǎn)生直到調(diào)用noTone()函數(shù)。該引腳可以連接壓電蜂鳴器或其他喇叭播放聲音。

在同一時刻只能產(chǎn)生一個聲音。如果一個引腳已經(jīng)在播放音樂,那調(diào)用

tone()將不會有任何效果。如果音樂在同一個引腳上播放,它會自動調(diào)整頻率。

使用

tone()函數(shù)會與3腳和11腳的PWM產(chǎn)生干擾(Mega板除外)。

注意:如果你要在多個引腳上產(chǎn)生不同的音調(diào),你要在對下一個引腳使用

tone()函數(shù)前對此引腳調(diào)用noTone()函數(shù)。tone()語法及參數(shù)含義見表1-3。tone()語法參數(shù)參數(shù)含義tone(pin,frequency)type要產(chǎn)生聲音的引腳frequency產(chǎn)生聲音的頻率,單位

Hz,類型unsignedinttone(pin,frequency,duration)type要產(chǎn)生聲音的引腳frequency產(chǎn)生聲音的頻率,單位

Hz,類型unsignedintduration聲音持續(xù)的時間,單位ms(可選),類型unsignedlong表1-3tone()語法及參數(shù)含義項目1

汽車單片機基礎知識認知noTone()。noTone()用于停止由

tone()產(chǎn)生的方波。如果沒有使用tone()將不會有效果。注意:如果你想在多個引腳上產(chǎn)生不同的聲音,你要在對下個引腳使用

tone()前對剛才的引腳調(diào)用noTone()。noTone()語法為noTone(pin),參數(shù)pin:所要停止產(chǎn)生聲音的引腳。shiftOut()。shiftOut()將一個數(shù)據(jù)的一個字節(jié)一位一位的移出。從最高有效位(最左邊)或最低有效位(最右邊)開始。依次向數(shù)據(jù)腳寫入每一位,之后時鐘腳被拉高或拉低,指示剛才的數(shù)據(jù)有效。

注意:如果所連接的設備時鐘類型為上升沿,要確定在調(diào)用shiftOut()前時鐘腳為低電平,如調(diào)用digitalWrite(clockPin,

LOW)。這是一個軟件實現(xiàn);Arduino

提供了一個硬件實現(xiàn)的

SPI庫,它速度更快但只在特定腳有效。項目1

汽車單片機基礎知識認知shiftOut()語法及參數(shù)含義見表1-4。shiftOut()語法參數(shù)參數(shù)含義shiftOut(dataPin,

clockPin,

bitOrder,value)dataPin輸出每一位數(shù)據(jù)的引腳(int)clockPin時鐘腳,當

dataPin

有值時此引腳電平變化(int)bitOrder輸出位的順序,最高位優(yōu)先或最低位優(yōu)先value要移位輸出的數(shù)據(jù)(byte)shiftOut()返回無無表1-4shiftOut()語法及參數(shù)含義注意:dataPin和clockPin要用pinMode()配置為輸出。shiftOut目前只能輸出1個字節(jié)(8位),所以如果輸出值大于255需要分兩步。項目1

汽車單片機基礎知識認知//最高有效位優(yōu)先串行輸出int數(shù)據(jù)=500;//移位輸出高字節(jié)shiftOut(dataPin,

clock,MSBFIRST,(data>>8));//移位輸出低字節(jié)shiftOut(data,clock,MSBFIRST,data);//最低有效位優(yōu)先串行輸出data=500;//移位輸出低字節(jié)shiftOut(dataPin,

clock,LSBFIRST,data);//移位輸出高字節(jié)shiftOut(dataPin,

clock,LSBFIRST,(data>>8));項目1

汽車單片機基礎知識認知參考程序://**************************************************************////Name:shiftOut

代碼,

HelloWorld////Author:CarlynMaw,TomIgoe////Date:25Oct,2006////版本:1.0////注釋:使用74HC595移位寄存器從0到255計數(shù)//////****************************************************************//引腳連接到74HC595的ST_CPintlatchPin=8;//引腳連接到74HC595的SH_CP intclockPin=12;////引腳連接到74HC595的DSintdataPin=11;voidsetup(){//設置引腳為輸出pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,OUTPUT);}voidloop(){//向上計數(shù)程序(J=0;J<256;J++){//傳輸數(shù)據(jù)的時候?qū)atchPin

拉低digitalWrite(latchpin,LOW);shiftOut

的(dataPin,clockPin,LSBFIRST,J);//之后將latchPin

拉高//它不需要再接受信息了digitalWrite(latchpin,HIGH);delay(1000);}}相應電路,查看

tutorialoncontrollinga74HC595shiftregister。項目1

汽車單片機基礎知識認知shiftIn()。shiftIn()用于將一個數(shù)據(jù)的一個字節(jié)一位一位的移入。從最高有效位(最左邊)或最低有效位(最右邊)開始。對于每個位,先拉高時鐘電平,再從數(shù)據(jù)

傳輸線中讀取一位,再將時鐘線拉低。

注意:這是一個軟件實現(xiàn);Arduino

提供了一個硬件實現(xiàn)的

SPI庫,它速度更快但只在特定腳有效。shiftIn()語法及參數(shù)含義見表1-5。shiftIn()語法參數(shù)參數(shù)含義shiftIn(dataPin,clockPin,bitOrder)dataPin輸出每一位數(shù)據(jù)的引腳(int)clockPin時鐘腳,當

dataPin

有值時此引腳電平變化(int)bitOrder輸出位的順序,最高位優(yōu)先或最低位優(yōu)先value要移位輸出的數(shù)據(jù)(byte)表1-5

shiftIn()語法及參數(shù)含義項目1

汽車單片機基礎知識認知pulseIn()。pulseIn()用于讀取一個引腳的脈沖(HIGH或LOW)。例如,如果value是HIGH,pulseIn()會等待引腳變?yōu)?/p>

HIGH,開始計時,再等待引腳變?yōu)長OW并停止計時。返回脈沖的長度,單位μs。如果在指定的時間內(nèi)無脈沖函數(shù)返回。此函數(shù)的計時功能由經(jīng)驗決定,長時間的脈沖計時可能會出錯。計時范圍從

10μs至3min(1s=1000ms=1000000μs)。pulseIn()語法及參數(shù)含義見表1-6。pulseIn()語法參數(shù)參數(shù)含義pulseIn(pin,value)pin要進行脈沖計時的引腳號(int)value要讀取的脈沖類型,HIGH或LOW(int)

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論