無(wú)線傳感網(wǎng)絡(luò)課件_第1頁(yè)
無(wú)線傳感網(wǎng)絡(luò)課件_第2頁(yè)
無(wú)線傳感網(wǎng)絡(luò)課件_第3頁(yè)
無(wú)線傳感網(wǎng)絡(luò)課件_第4頁(yè)
無(wú)線傳感網(wǎng)絡(luò)課件_第5頁(yè)
已閱讀5頁(yè),還剩129頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

無(wú)線傳感網(wǎng)絡(luò)(WSN)無(wú)線傳感網(wǎng)絡(luò)(WSN)1無(wú)線傳感網(wǎng)絡(luò)關(guān)鍵詞英文:WirelessSensorsNetworking傳感無(wú)線網(wǎng)絡(luò)無(wú)線傳感網(wǎng)絡(luò)關(guān)鍵詞英文:WirelessSensorsN2概念無(wú)線傳感器網(wǎng)絡(luò)是一種分布式傳感網(wǎng)絡(luò),它的末梢是可以感知和檢查外部世界的傳感器。WSN中的傳感器通過(guò)無(wú)線方式通信,因此網(wǎng)絡(luò)設(shè)置靈活,設(shè)備位置可以隨時(shí)更改,還可以跟互聯(lián)網(wǎng)進(jìn)行有線或無(wú)線方式的連接。通過(guò)無(wú)線通信方式形成的一個(gè)多跳自組織網(wǎng)絡(luò)。概念無(wú)線傳感器網(wǎng)絡(luò)是一種分布式傳感網(wǎng)絡(luò),它的末梢是可以感知和3無(wú)線傳感網(wǎng)絡(luò)課件4課程內(nèi)容傳感技術(shù)應(yīng)用無(wú)線傳感網(wǎng)絡(luò)通信基礎(chǔ)無(wú)線傳感網(wǎng)絡(luò)應(yīng)用課程內(nèi)容傳感技術(shù)應(yīng)用5考核辦法平時(shí)成績(jī):20%期末大作業(yè):80%考核辦法平時(shí)成績(jī):20%6Zigduino開(kāi)發(fā)平臺(tái)Arduino體系優(yōu)點(diǎn):易上手,可實(shí)現(xiàn)快速應(yīng)用單片機(jī)開(kāi)發(fā)實(shí)質(zhì):配置寄存器Zigduino開(kāi)發(fā)平臺(tái)Arduino體系7硬件平臺(tái)硬件平臺(tái)8無(wú)線傳感網(wǎng)絡(luò)課件9無(wú)線傳感網(wǎng)絡(luò)課件10軟件平臺(tái)Eclipse,相比ArduinoIDE、KEIL、IARArduino程序特點(diǎn)軟件平臺(tái)Eclipse,相比ArduinoIDE、KEIL11Arduino核心庫(kù)函數(shù)和系統(tǒng)庫(kù)函數(shù)voidsetup()//初始化配置函數(shù),在main函數(shù)中首先被執(zhí)行,只執(zhí)行一次voidloop()//無(wú)限循環(huán)函數(shù)delay()//延遲函數(shù)……Arduino核心庫(kù)函數(shù)和系統(tǒng)庫(kù)函數(shù)voidsetup()12Zigduino基礎(chǔ)實(shí)驗(yàn)通用數(shù)字IO口點(diǎn)亮LED串口的使用ADC口光敏傳感器控制外部中斷點(diǎn)亮LED定時(shí)器的使用1602型LCD的應(yīng)用Zigduino基礎(chǔ)實(shí)驗(yàn)通用數(shù)字IO口點(diǎn)亮LED13備料led電阻若干:150Ohm、10KOhm、2KOhm光敏電阻面包線按鍵開(kāi)關(guān)備料led14常用傳感器驅(qū)動(dòng)開(kāi)發(fā)和應(yīng)用DHT11:溫濕度傳感器ADXL345:三軸加速度傳感器BH1750FVI:光照傳感器DS18B20:溫度傳感器常用傳感器驅(qū)動(dòng)開(kāi)發(fā)和應(yīng)用DHT11:溫濕度傳感器15單片機(jī)IO接口I/O口是輸入/輸出的簡(jiǎn)寫,I/O口分?jǐn)?shù)字I/O口和外設(shè)I/O口兩種。外設(shè)I/O口有ADC接口,TIMER接口(時(shí)鐘),中斷接口,I2C接口,串口等等。一個(gè)芯片的I/O口引腳是用于數(shù)字I/O口還是外設(shè)I/O口,可以通過(guò)寄存器配置進(jìn)行選擇。單片機(jī)IO接口I/O口是輸入/輸出的簡(jiǎn)寫,I/O口分?jǐn)?shù)字I/16IO口實(shí)驗(yàn)一第一步:

連接電路

數(shù)字IO口實(shí)驗(yàn)一IO口實(shí)驗(yàn)一第一步:數(shù)字IO口實(shí)驗(yàn)一17IO口實(shí)驗(yàn)一第二步:寫程序,新建名字叫IO1的工程項(xiàng)目;在setup()函數(shù)里面寫入:在loop()函數(shù)里面寫入:pinMode(3,OUTPUT);digitalWrite(3,HIGH);delay(1000);//延時(shí)1000msdigitalWrite(3,LOW);delay(1000);怎么理解delay()函數(shù)?就好像一個(gè)要走路的人在原地踏步!MCU一旦上電,根本停不下來(lái)IO口實(shí)驗(yàn)一第二步:寫程序,新建名字叫IO1的工程項(xiàng)目;pi18Arduino包含的以下數(shù)字IO口庫(kù)函數(shù)voidpinMode(uint8_tpin,uint8_tmode):設(shè)置管腳的方向,pin表示管腳的序號(hào),mode表示方向,只能取INPUT,OUTPUT兩個(gè)值,如下面的代碼把管腳10設(shè)成輸入:pinMode(10,INPUT);voiddigitalWrite(uint8_tpin,uint8_tval):設(shè)置管腳的數(shù)字電平,pin表示管腳的序號(hào),value表示電平,只能取HIGH,LOW兩個(gè)值,如下面的代碼把管腳5設(shè)成高電平:digitalWrite(5,HIGH);intdigitalRead(uint8_tpin):返回管腳的數(shù)字電平,pin表示管腳的序號(hào),返回值只能是HIGH或LOW,如下面的代碼將返回管腳7的數(shù)字電平:val=digitalRead(7);Arduino包含的以下數(shù)字IO口庫(kù)函數(shù)voidpinMo19IO口實(shí)驗(yàn)二電路連接IO口實(shí)驗(yàn)二電路連接20新建IO2工程項(xiàng)目下載程序后,LED紅燈亮了。然后你用黑色導(dǎo)線的另外一端插入到GND即地,此時(shí)就可以發(fā)現(xiàn)燈滅了,因?yàn)?號(hào)引腳讀取的電平是低電平。(默認(rèn)情況下管腳輸入的讀取值是高電平)#include"io2.h"voidsetup(){pinMode(3,OUTPUT);//配置3號(hào)數(shù)字引腳為輸出模式pinMode(1,INPUT);//配置1號(hào)數(shù)字引腳為輸入模式}voidloop(){if(digitalRead(1))//讀取1號(hào)引腳的電平判斷是否為高電平digitalWrite(3,HIGH);//將3號(hào)引腳的電平設(shè)置為高電平else//否則digitalWrite(3,LOW);//將3號(hào)引腳的電平設(shè)置為低電平}新建IO2工程項(xiàng)目下載程序后,LED紅燈亮了。然后你用黑色導(dǎo)21總結(jié)數(shù)字IO口既可以是輸入,也可以是輸出。但是無(wú)論是輸入還是輸出,它是都是數(shù)字型的,要么是0(零電壓LOW),要么是1(電源電壓HIGH)。當(dāng)它為高電平即電源電壓,它相當(dāng)于電源正極,但是它的輸出電流受限于單片機(jī)IO口。為低電平時(shí),相當(dāng)于GND即地??偨Y(jié)數(shù)字IO口既可以是輸入,也可以是輸出。但是無(wú)論是輸入還是22(UART)串口:串行通信接口(UART)串口:串行通信接口23無(wú)線傳感網(wǎng)絡(luò)課件24無(wú)線傳感網(wǎng)絡(luò)課件25Zigduino里面

串口的英文單詞用Serial串口通信有兩個(gè)方向:發(fā)送和接收串口有一個(gè)參數(shù):波特率,(單位是bps)即數(shù)據(jù)通信的傳輸速率。常用波特率數(shù)值有(300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200bps)。通信的接收方需要設(shè)置與發(fā)送方一致的波特率才可以正確接收到數(shù)據(jù)。假定我們自己是單片機(jī),單片機(jī)讀,是輸入;寫則是輸出。Zigduino里面

串口的英文單詞用Serial串口通信有26串口庫(kù)函數(shù)voidbegin(unsignedlongbaud):串口使能,并工作在數(shù)值為baud的波特率下,如下面的代碼啟動(dòng)了UART,并工作在57600的波特率下:Serial.begin(57600);intavailable(void):返回串口緩沖區(qū)中有多少字節(jié)沒(méi)有讀取的數(shù)據(jù);intread(void):返回串口讀取到的當(dāng)前數(shù)據(jù),同時(shí)從緩沖區(qū)中刪除此數(shù)據(jù);size_twrite(uint8_t):往串口寫入一個(gè)字節(jié);size_twrite(constchar*str):往串口寫入一個(gè)字符串;size_twrite(constuint8_t*buffer,size_tsize):往串口寫入一個(gè)字節(jié)數(shù)組的前面的大小為size的部分;print(data):往串口寫入數(shù)據(jù),可以是數(shù)字型的也可以是字符串;print(data,encoding):往串口寫入格式化數(shù)值數(shù)據(jù),encoding可以是十進(jìn)制(DEC),十六進(jìn)制(HEX),八進(jìn)制(OCT),二進(jìn)制(BIN),字符(BYTE),如下面的輸出;Serial.print(75);//輸出"75"Serial.print(75,DEC);//輸出"75"Serial.print(75,HEX);//輸出"4B"Serial.print(75,OCT);//輸出"113"Serial.print(75,BIN);//輸出"1001011"Serial.print(75,BYTE);//輸出"K",75代表的字符println(data):和print(data)基本相同,不過(guò)在最后加上了回車換行。串口庫(kù)函數(shù)voidbegin(unsignedlong27串口實(shí)驗(yàn)一:

Serial.print和Serial.write的區(qū)別inti=52;voidsetup(){Serial.begin(57600);}voidloop(){Serial.print(i);Serial.println();Serial.write(i);Serial.println();delay(1000);}Serial.print()打印的是原來(lái)的內(nèi)容;而Serial.write()打印出來(lái)的是ASCII碼值串口實(shí)驗(yàn)一:

Serial.print和Serial.wri28串口實(shí)驗(yàn)二:

實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)之間的串口通信臺(tái)式機(jī)也有串口,所以可以與單片機(jī)通信只需要usb線連接臺(tái)式機(jī)和單片機(jī)開(kāi)發(fā)板就可以了用到AcessPort串口軟件這里程序的功能是將計(jì)算機(jī)發(fā)給單片機(jī)的數(shù)據(jù)發(fā)回給計(jì)算機(jī)串口實(shí)驗(yàn)二:

實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)之間的串口通信臺(tái)式機(jī)也有串口29

思考:為什么這里Serial.write沒(méi)有打印出ASCII碼值?voidsetup(){Serial.begin(57600);}voidloop(){while(Serial.available())Serial.write(Serial.read());delay(1000);}

思考:為什么這里Serial.write沒(méi)有打印出ASCI30ADCADC,英文解釋為Analog-DigitConvert(模擬數(shù)字轉(zhuǎn)換),簡(jiǎn)單意思是單片機(jī)可以讀取外部的模擬電壓值轉(zhuǎn)化成數(shù)字值。ADCADC,英文解釋為Analog-DigitConve31Zigduino一共有6個(gè)AD管腳即模擬輸入管腳為了實(shí)現(xiàn)Zigduino管腳的模擬輸入,我們需要了解最基本的AD采樣。所謂AD采樣就是把模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),在轉(zhuǎn)化的過(guò)程中需要關(guān)注采樣精度、采樣頻率和采樣范圍,對(duì)于Zigduino使用的Atmega128RFA1來(lái)說(shuō),它內(nèi)置的是10位的AD采樣精度,即采集出來(lái)的數(shù)值范圍是0-1023,采樣頻率則和應(yīng)用程序相關(guān),但最快不能超過(guò)MCU的限制,采樣范圍表示的是允許的模擬信號(hào)的幅度。對(duì)于Atmega128RFA1來(lái)說(shuō),用戶可以選擇1.5V,1.6V,1.8V或任意外部輸入的在0-1.8V之間的電壓作為參考電壓,也是采樣的最高電壓,iDuino默認(rèn)的采樣范圍是0-1.8V,用戶可以通過(guò)下面的函數(shù)來(lái)改變參考電壓:voidanalogReference(uint8_tmode)其中mode可選列表如下:INTERNAL1V5:1.5V內(nèi)部參考電壓;INTERNAL1V6:1.6V內(nèi)部參考電壓;DEFAULT:默認(rèn)內(nèi)部1.8V參考電壓;EXTERNAL:通過(guò)AREF管腳輸入的外部參考電壓。Zigduino一共有6個(gè)AD管腳即模擬輸入管腳為了實(shí)現(xiàn)Zi32intanalogRead(uint8_tpin):返回管腳的模擬電平,即AD采樣的結(jié)果,只能用在模擬管腳上,pin表示管腳的序號(hào),返回值的范圍是0-1023,如下面的代碼將返回管腳A0的采樣結(jié)果:val=analogRead(A0);intanalogRead(uint8_tpin):返回33在實(shí)際應(yīng)用中,對(duì)于某些溫敏、光敏、壓敏、熱敏傳感器來(lái)說(shuō),為了測(cè)出它們的電阻變化,必要的分壓電路也是必須的,下面是一個(gè)簡(jiǎn)單的光敏測(cè)量電路:IO口D1拉高,相當(dāng)于電源。為了使信號(hào)的輸入符合Zigduino的電壓采樣范圍,對(duì)信號(hào)進(jìn)行必要的分壓是必須的。在實(shí)際應(yīng)用中,對(duì)于某些溫敏、光敏、壓敏、熱敏傳感器來(lái)說(shuō),為了34ADC實(shí)驗(yàn)一:自動(dòng)光感l(wèi)ed燈用到的元器件:電阻470歐姆一個(gè),(左)用于限流。電阻2K歐姆一個(gè),(右)用于分壓。10k光敏電阻一個(gè)Led一個(gè)導(dǎo)線5根ADC實(shí)驗(yàn)一:自動(dòng)光感l(wèi)ed燈用到的元器件:35程序intsensevalue=0;voidsetup(){pinMode(0,OUTPUT);pinMode(1,OUTPUT);Serial.begin(38400);}voidloop(){digitalWrite(0,HIGH);//供電sensevalue=analogRead(A1);//讀取ADC0口模擬值if(sensevalue>500)digitalWrite(1,HIGH);//當(dāng)光線暗時(shí),點(diǎn)亮led燈elsedigitalWrite(1,LOW);Serial.print(sensevalue);delay(1000);}串口可以調(diào)試你的程序,很方便程序intsensevalue=0;串口可以調(diào)試你的程序,36中斷Interrupt(INT)什么是中斷中斷的類型中斷三要素中斷作用中斷Interrupt(INT)什么是中斷37什么是中斷單片機(jī)暫停正在運(yùn)行的程序,保存現(xiàn)場(chǎng),自動(dòng)轉(zhuǎn)去執(zhí)行相應(yīng)的程序,執(zhí)行完以后再返回?cái)帱c(diǎn)繼續(xù)執(zhí)行被打斷的程序。這個(gè)過(guò)程就叫中斷。什么是中斷單片機(jī)暫停正在運(yùn)行的程序,保存現(xiàn)場(chǎng),自動(dòng)38中斷的類型可分為:內(nèi)部中斷和外部中斷內(nèi)部中斷有:內(nèi)部定時(shí)器中斷、串口中斷、AD中斷、SPI中斷等。這些設(shè)備或者接口都集成在單片機(jī)內(nèi)部。外部中斷有:外部信號(hào)引起的中斷中斷的類型可分為:內(nèi)部中斷和外部中斷39中斷三要素中斷源:中斷產(chǎn)生的來(lái)源。中斷方式(外部中斷):高電平、低電平、上升沿、下降沿等。中斷服務(wù)程序:中斷產(chǎn)生以后,單片機(jī)去執(zhí)行的程序。中斷三要素中斷源:中斷產(chǎn)生的來(lái)源。40中斷如何使用三個(gè)步驟:1.設(shè)置需要開(kāi)啟的中斷源。2.設(shè)置中斷方式。3.編寫中斷服務(wù)程序。中斷如何使用三個(gè)步驟:41中斷的作用中斷使得單片機(jī)實(shí)現(xiàn)系統(tǒng)調(diào)度,實(shí)時(shí)響應(yīng)。使用中斷,可以實(shí)現(xiàn)定時(shí)報(bào)警、外部中斷報(bào)警等功能。中斷的作用中斷使得單片機(jī)實(shí)現(xiàn)系統(tǒng)調(diào)度,實(shí)時(shí)響應(yīng)。42中斷庫(kù)函數(shù)voidattachInterrupt(uint8_tinterruptNum,void(*userFunc)(void),intmode)其中的第一個(gè)參數(shù)表示Arduino中的中斷號(hào),第二個(gè)參數(shù)是中斷處理函數(shù)名稱(需要用戶定義),第三個(gè)參數(shù)是中斷模式,就是什么情況下觸發(fā)中斷,一共有四種模式:LOW表示低電平觸發(fā),CHANGE表示電平改變時(shí)觸發(fā),RISING表示電平由低變高時(shí)觸發(fā),F(xiàn)ALLING表示電平由高變低時(shí)觸發(fā)。voiddetachInterrupt(uint8_tinterruptNum)有些中斷是會(huì)持續(xù)產(chǎn)生的,如低電平產(chǎn)生的中斷,此時(shí)如果不加以控制,系統(tǒng)會(huì)陷入持續(xù)的中斷處理中,為此在處理中斷函數(shù)時(shí)首先需要把中斷禁止掉,detachInterrupt就是用于完成此目標(biāo),后面的唯一參數(shù)就是中斷號(hào)。中斷庫(kù)函數(shù)voidattachInterrupt(uint43外部中斷的中斷號(hào)與管腳號(hào)對(duì)照表中斷號(hào)INT0INT1INT2INT3INT4INT5INT6管腳號(hào)632122012外部中斷的中斷號(hào)與管腳號(hào)對(duì)照表中斷號(hào)INT0INT1INT244中斷實(shí)驗(yàn)用一個(gè)按鍵開(kāi)關(guān)連接到一個(gè)外部中斷口,當(dāng)中斷觸發(fā)時(shí)就改變一次led燈的狀態(tài)中斷實(shí)驗(yàn)用一個(gè)按鍵開(kāi)關(guān)連接到一個(gè)外部中斷口,當(dāng)中斷觸發(fā)時(shí)就改45代碼voidmyhanlder()//中斷服務(wù)程序{detachInterrupt(1);//關(guān)中斷digitalWrite(0,!digitalRead(0));//將led燈的狀態(tài)改變一次}voidsetup(){pinMode(0,OUTPUT);pinMode(3,INPUT_PULLUP);//將中斷口上拉}voidloop(){attachInterrupt(1,myhanlder,FALLING);//開(kāi)中斷,設(shè)置中斷觸發(fā)方式為下降沿方式delay(1000);}attachInterrupt(1,myhanlder,FALLING)表示的是當(dāng)由下降沿觸發(fā)的中斷1產(chǎn)生時(shí)系統(tǒng)會(huì)自動(dòng)去執(zhí)行myhanlder函數(shù),從而讓綠燈的狀態(tài)發(fā)生變化。代碼voidmyhanlder()//中斷服務(wù)程序att46擴(kuò)展實(shí)驗(yàn)將INT1的中斷觸發(fā)方式設(shè)置成低電平觸發(fā),并實(shí)現(xiàn)當(dāng)觸發(fā)中斷時(shí)打印出“interrupttriggered!”擴(kuò)展實(shí)驗(yàn)將INT1的中斷觸發(fā)方式設(shè)置成低電平觸發(fā),并實(shí)現(xiàn)當(dāng)觸47總計(jì)外部中斷總共有8個(gè),它們可以組合起來(lái)使用??傆?jì)外部中斷總共有8個(gè),它們可以組合起來(lái)使用。48定時(shí)/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器(Timer/Counter,TC)是一種計(jì)數(shù)裝置,若計(jì)數(shù)內(nèi)部的時(shí)鐘脈沖,可視為定時(shí)器;若計(jì)數(shù)外部的脈沖,可視為計(jì)數(shù)器。實(shí)質(zhì)都是計(jì)數(shù)。定時(shí)/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器(Timer/Counter,TC49定時(shí)器(Timer)定時(shí)功能也是通過(guò)計(jì)數(shù)器的計(jì)數(shù)來(lái)實(shí)現(xiàn)的。不過(guò)此時(shí)的計(jì)數(shù)脈沖來(lái)自單片機(jī)的內(nèi)部。每個(gè)機(jī)器周期產(chǎn)生一個(gè)計(jì)數(shù)脈沖,也就是每個(gè)機(jī)器周期計(jì)數(shù)器加1。定時(shí)器(Timer)定時(shí)功能也是通過(guò)計(jì)數(shù)器的計(jì)數(shù)來(lái)實(shí)現(xiàn)的。不50定時(shí)器中斷定時(shí)器的應(yīng)用之一:設(shè)置內(nèi)部定時(shí)器中斷原理:專門有一個(gè)寄存器(8位或12位或16位)存放計(jì)數(shù),每個(gè)機(jī)器周期計(jì)數(shù)器加1,加滿就產(chǎn)生計(jì)數(shù)溢出中斷。定時(shí)器中斷定時(shí)器的應(yīng)用之一:設(shè)置內(nèi)部定時(shí)器中斷51設(shè)置一個(gè)一秒一次的定時(shí)器中斷,改變一次led的狀態(tài)。定時(shí)器中斷設(shè)置一個(gè)一秒一次的定時(shí)器中斷,改變一次led的狀態(tài)。定時(shí)器中52TimerOne實(shí)例#include"TimerOne.h"voidcallback(){digitalWrite(3,!digitalRead(3));}voidsetup(){pinMode(3,OUTPUT);Timer1.initialize(500000);//初始化定時(shí)器1,設(shè)置中斷周期為半秒Timer1.attachInterrupt(callback);//設(shè)置一個(gè)定時(shí)器溢出中斷服務(wù)程序}voidloop(){//yourprogramhere...}TimerOne實(shí)例#include"TimerOne.h53對(duì)比用delay()對(duì)比用delay()54LCD1602工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。(16列2行)1602液晶也叫1602字符型液晶,它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。LCD1602工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)55引腳1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:GND為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。第5腳:RW為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。引腳1602采用標(biāo)準(zhǔn)的16腳接口,其中:56字符集1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。字符集1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)57寫0x38設(shè)置為8-bit接口...寫0x06輸入方式設(shè)定寫0x0E開(kāi)啟顯示屏寫0x01屏幕清空寫0x80設(shè)置顯示位置寫0x01屏幕清空寫0x8x或0xCx寫數(shù)據(jù)寫0x01或0x02屏幕清空,光標(biāo)位置歸零或者新文字替換老文字寫數(shù)據(jù)寫0x38寫0x06寫0x0E寫0x01寫0x80寫0x0158無(wú)線傳感網(wǎng)絡(luò)課件59ZIGBEE無(wú)線通信原理短距離、低功耗、低速率的無(wú)線組網(wǎng)通信技術(shù)可使用2.4~2.485G之間的16個(gè)頻段通信zigbeewifi頻段2.4G、900M等2.4G、5G等距離(最遠(yuǎn))300m20m數(shù)據(jù)通信速率250k10M/100MZIGBEE無(wú)線通信原理短距離、低功耗、低速率的無(wú)線組網(wǎng)通信60無(wú)線通信數(shù)據(jù)包格式包頭包類型目的地址源地址有效數(shù)據(jù)包結(jié)束1字節(jié)1字節(jié)4字節(jié)4字節(jié)1-116字節(jié)1字節(jié)只有在同一頻段的無(wú)線節(jié)點(diǎn)之間才能進(jìn)行數(shù)據(jù)收發(fā)。無(wú)線通信數(shù)據(jù)包格式包頭包類型目的地址源地址有效數(shù)據(jù)包結(jié)束1字61ZigduinoRadio庫(kù)使用說(shuō)明1.初始化ZigduinoRadio庫(kù)voidbegin(intchan);以上函數(shù)必須在使用ZigduinoRadio之前調(diào)用。chan表示通訊頻段,取值范圍是11-26ZigduinoRadio庫(kù)使用說(shuō)明1.初始化Zigdui62ZigduinoRadio庫(kù)使用說(shuō)明2.發(fā)送數(shù)據(jù)包

發(fā)送數(shù)據(jù)有一般模式和精簡(jiǎn)模式兩種,不管在何種模式下,都是以數(shù)據(jù)包為最小傳輸單位。在復(fù)雜模式下,發(fā)送數(shù)據(jù)需要三步:

開(kāi)始發(fā)送voidbeginTransmission();voidbeginTransmission(uint16_tdestaddress);

寫入數(shù)據(jù)前,用戶必須調(diào)用beginTransmission方法,傳入?yún)?shù)表示目標(biāo)地址,如果沒(méi)有參數(shù),則表示發(fā)送廣播數(shù)據(jù)。寫入要發(fā)送的數(shù)據(jù)voidwrite(uint8_tc);voidwrite(char*str);voidwrite(uint8_t*arr,uint8_tlen);

在一個(gè)數(shù)據(jù)包內(nèi),用戶可以寫入多種數(shù)據(jù),但802.15.4/c標(biāo)準(zhǔn)規(guī)定一個(gè)數(shù)據(jù)包的最大長(zhǎng)度為128,再加上包頭9個(gè)字節(jié)和包尾2個(gè)字節(jié)的數(shù)據(jù),實(shí)際的有效數(shù)據(jù)最大為128-9-2=116。結(jié)束發(fā)送voidendTransmission();voidcancelTransmission();用戶可以調(diào)用endTransmission真正發(fā)送數(shù)據(jù),也可以通過(guò)cancelTransmission取消數(shù)據(jù)發(fā)送。在精簡(jiǎn)模式下,用戶只需調(diào)用以下方法即可:VoidsendFrame(uint16_tdestaddress,boolneedack,uint8_t*frm,uint8_tlen);其參數(shù)含義為目標(biāo)地址,是否要求ack,數(shù)據(jù)內(nèi)容和數(shù)據(jù)長(zhǎng)度。ZigduinoRadio庫(kù)使用說(shuō)明2.發(fā)送數(shù)據(jù)包633.接收數(shù)據(jù)包ZigduinoRadio自帶的接收處理方式和串口是一樣的,用緩沖區(qū)先把數(shù)據(jù)保存下來(lái),等待用戶處理,此時(shí),用戶可以使用的函數(shù)如下:int8_tavailable();返回緩沖區(qū)中有多少有效數(shù)據(jù),不包括包頭包尾。int16_tread();讀取當(dāng)前數(shù)據(jù),并從緩沖區(qū)中刪除此數(shù)據(jù),同樣,它實(shí)際的數(shù)據(jù)類型是uint8_t,如果返回值是-1則表示緩沖區(qū)中已經(jīng)沒(méi)有數(shù)據(jù)。3.接收數(shù)據(jù)包64廣播發(fā)送方發(fā)出的數(shù)據(jù)包,目的地址為0xFFFF。接收方只要接收到廣播數(shù)據(jù)包,都將收下來(lái)。廣播發(fā)送方發(fā)出的數(shù)據(jù)包,目的地址為0xFFFF。65點(diǎn)對(duì)點(diǎn)收發(fā)實(shí)驗(yàn)一一方發(fā)送:每秒發(fā)送一次字符'a'一次一方接收:接收發(fā)送過(guò)來(lái)的'a',并通過(guò)串口打印出來(lái)。點(diǎn)對(duì)點(diǎn)收發(fā)實(shí)驗(yàn)一一方發(fā)送:每秒發(fā)送一次字符'a'一次66廣播收發(fā)實(shí)驗(yàn)二一方發(fā)送,發(fā)送的內(nèi)容是串口收到的數(shù)據(jù)一方接收,將發(fā)送的數(shù)據(jù)通過(guò)串口打印出來(lái)廣播收發(fā)實(shí)驗(yàn)二一方發(fā)送,發(fā)送的內(nèi)容是串口收到的數(shù)據(jù)67廣播收發(fā)實(shí)驗(yàn)三一方發(fā)送DHT11采集到的溫濕度數(shù)據(jù),5秒一次。一方接收,并通過(guò)串口打印出來(lái),并在LCD1602或者四位數(shù)碼管上顯示。廣播收發(fā)實(shí)驗(yàn)三一方發(fā)送DHT11采集到的溫濕度數(shù)據(jù),5秒一次68廣播收發(fā)實(shí)驗(yàn)四一方采集模擬光敏電阻,當(dāng)光線暗時(shí)將無(wú)線發(fā)命令給另一方使其亮燈。廣播收發(fā)實(shí)驗(yàn)四一方采集模擬光敏電阻,當(dāng)光線暗時(shí)將無(wú)線發(fā)命令給69無(wú)線傳感網(wǎng)絡(luò)(WSN)無(wú)線傳感網(wǎng)絡(luò)(WSN)70無(wú)線傳感網(wǎng)絡(luò)關(guān)鍵詞英文:WirelessSensorsNetworking傳感無(wú)線網(wǎng)絡(luò)無(wú)線傳感網(wǎng)絡(luò)關(guān)鍵詞英文:WirelessSensorsN71概念無(wú)線傳感器網(wǎng)絡(luò)是一種分布式傳感網(wǎng)絡(luò),它的末梢是可以感知和檢查外部世界的傳感器。WSN中的傳感器通過(guò)無(wú)線方式通信,因此網(wǎng)絡(luò)設(shè)置靈活,設(shè)備位置可以隨時(shí)更改,還可以跟互聯(lián)網(wǎng)進(jìn)行有線或無(wú)線方式的連接。通過(guò)無(wú)線通信方式形成的一個(gè)多跳自組織網(wǎng)絡(luò)。概念無(wú)線傳感器網(wǎng)絡(luò)是一種分布式傳感網(wǎng)絡(luò),它的末梢是可以感知和72無(wú)線傳感網(wǎng)絡(luò)課件73課程內(nèi)容傳感技術(shù)應(yīng)用無(wú)線傳感網(wǎng)絡(luò)通信基礎(chǔ)無(wú)線傳感網(wǎng)絡(luò)應(yīng)用課程內(nèi)容傳感技術(shù)應(yīng)用74考核辦法平時(shí)成績(jī):20%期末大作業(yè):80%考核辦法平時(shí)成績(jī):20%75Zigduino開(kāi)發(fā)平臺(tái)Arduino體系優(yōu)點(diǎn):易上手,可實(shí)現(xiàn)快速應(yīng)用單片機(jī)開(kāi)發(fā)實(shí)質(zhì):配置寄存器Zigduino開(kāi)發(fā)平臺(tái)Arduino體系76硬件平臺(tái)硬件平臺(tái)77無(wú)線傳感網(wǎng)絡(luò)課件78無(wú)線傳感網(wǎng)絡(luò)課件79軟件平臺(tái)Eclipse,相比ArduinoIDE、KEIL、IARArduino程序特點(diǎn)軟件平臺(tái)Eclipse,相比ArduinoIDE、KEIL80Arduino核心庫(kù)函數(shù)和系統(tǒng)庫(kù)函數(shù)voidsetup()//初始化配置函數(shù),在main函數(shù)中首先被執(zhí)行,只執(zhí)行一次voidloop()//無(wú)限循環(huán)函數(shù)delay()//延遲函數(shù)……Arduino核心庫(kù)函數(shù)和系統(tǒng)庫(kù)函數(shù)voidsetup()81Zigduino基礎(chǔ)實(shí)驗(yàn)通用數(shù)字IO口點(diǎn)亮LED串口的使用ADC口光敏傳感器控制外部中斷點(diǎn)亮LED定時(shí)器的使用1602型LCD的應(yīng)用Zigduino基礎(chǔ)實(shí)驗(yàn)通用數(shù)字IO口點(diǎn)亮LED82備料led電阻若干:150Ohm、10KOhm、2KOhm光敏電阻面包線按鍵開(kāi)關(guān)備料led83常用傳感器驅(qū)動(dòng)開(kāi)發(fā)和應(yīng)用DHT11:溫濕度傳感器ADXL345:三軸加速度傳感器BH1750FVI:光照傳感器DS18B20:溫度傳感器常用傳感器驅(qū)動(dòng)開(kāi)發(fā)和應(yīng)用DHT11:溫濕度傳感器84單片機(jī)IO接口I/O口是輸入/輸出的簡(jiǎn)寫,I/O口分?jǐn)?shù)字I/O口和外設(shè)I/O口兩種。外設(shè)I/O口有ADC接口,TIMER接口(時(shí)鐘),中斷接口,I2C接口,串口等等。一個(gè)芯片的I/O口引腳是用于數(shù)字I/O口還是外設(shè)I/O口,可以通過(guò)寄存器配置進(jìn)行選擇。單片機(jī)IO接口I/O口是輸入/輸出的簡(jiǎn)寫,I/O口分?jǐn)?shù)字I/85IO口實(shí)驗(yàn)一第一步:

連接電路

數(shù)字IO口實(shí)驗(yàn)一IO口實(shí)驗(yàn)一第一步:數(shù)字IO口實(shí)驗(yàn)一86IO口實(shí)驗(yàn)一第二步:寫程序,新建名字叫IO1的工程項(xiàng)目;在setup()函數(shù)里面寫入:在loop()函數(shù)里面寫入:pinMode(3,OUTPUT);digitalWrite(3,HIGH);delay(1000);//延時(shí)1000msdigitalWrite(3,LOW);delay(1000);怎么理解delay()函數(shù)?就好像一個(gè)要走路的人在原地踏步!MCU一旦上電,根本停不下來(lái)IO口實(shí)驗(yàn)一第二步:寫程序,新建名字叫IO1的工程項(xiàng)目;pi87Arduino包含的以下數(shù)字IO口庫(kù)函數(shù)voidpinMode(uint8_tpin,uint8_tmode):設(shè)置管腳的方向,pin表示管腳的序號(hào),mode表示方向,只能取INPUT,OUTPUT兩個(gè)值,如下面的代碼把管腳10設(shè)成輸入:pinMode(10,INPUT);voiddigitalWrite(uint8_tpin,uint8_tval):設(shè)置管腳的數(shù)字電平,pin表示管腳的序號(hào),value表示電平,只能取HIGH,LOW兩個(gè)值,如下面的代碼把管腳5設(shè)成高電平:digitalWrite(5,HIGH);intdigitalRead(uint8_tpin):返回管腳的數(shù)字電平,pin表示管腳的序號(hào),返回值只能是HIGH或LOW,如下面的代碼將返回管腳7的數(shù)字電平:val=digitalRead(7);Arduino包含的以下數(shù)字IO口庫(kù)函數(shù)voidpinMo88IO口實(shí)驗(yàn)二電路連接IO口實(shí)驗(yàn)二電路連接89新建IO2工程項(xiàng)目下載程序后,LED紅燈亮了。然后你用黑色導(dǎo)線的另外一端插入到GND即地,此時(shí)就可以發(fā)現(xiàn)燈滅了,因?yàn)?號(hào)引腳讀取的電平是低電平。(默認(rèn)情況下管腳輸入的讀取值是高電平)#include"io2.h"voidsetup(){pinMode(3,OUTPUT);//配置3號(hào)數(shù)字引腳為輸出模式pinMode(1,INPUT);//配置1號(hào)數(shù)字引腳為輸入模式}voidloop(){if(digitalRead(1))//讀取1號(hào)引腳的電平判斷是否為高電平digitalWrite(3,HIGH);//將3號(hào)引腳的電平設(shè)置為高電平else//否則digitalWrite(3,LOW);//將3號(hào)引腳的電平設(shè)置為低電平}新建IO2工程項(xiàng)目下載程序后,LED紅燈亮了。然后你用黑色導(dǎo)90總結(jié)數(shù)字IO口既可以是輸入,也可以是輸出。但是無(wú)論是輸入還是輸出,它是都是數(shù)字型的,要么是0(零電壓LOW),要么是1(電源電壓HIGH)。當(dāng)它為高電平即電源電壓,它相當(dāng)于電源正極,但是它的輸出電流受限于單片機(jī)IO口。為低電平時(shí),相當(dāng)于GND即地??偨Y(jié)數(shù)字IO口既可以是輸入,也可以是輸出。但是無(wú)論是輸入還是91(UART)串口:串行通信接口(UART)串口:串行通信接口92無(wú)線傳感網(wǎng)絡(luò)課件93無(wú)線傳感網(wǎng)絡(luò)課件94Zigduino里面

串口的英文單詞用Serial串口通信有兩個(gè)方向:發(fā)送和接收串口有一個(gè)參數(shù):波特率,(單位是bps)即數(shù)據(jù)通信的傳輸速率。常用波特率數(shù)值有(300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200bps)。通信的接收方需要設(shè)置與發(fā)送方一致的波特率才可以正確接收到數(shù)據(jù)。假定我們自己是單片機(jī),單片機(jī)讀,是輸入;寫則是輸出。Zigduino里面

串口的英文單詞用Serial串口通信有95串口庫(kù)函數(shù)voidbegin(unsignedlongbaud):串口使能,并工作在數(shù)值為baud的波特率下,如下面的代碼啟動(dòng)了UART,并工作在57600的波特率下:Serial.begin(57600);intavailable(void):返回串口緩沖區(qū)中有多少字節(jié)沒(méi)有讀取的數(shù)據(jù);intread(void):返回串口讀取到的當(dāng)前數(shù)據(jù),同時(shí)從緩沖區(qū)中刪除此數(shù)據(jù);size_twrite(uint8_t):往串口寫入一個(gè)字節(jié);size_twrite(constchar*str):往串口寫入一個(gè)字符串;size_twrite(constuint8_t*buffer,size_tsize):往串口寫入一個(gè)字節(jié)數(shù)組的前面的大小為size的部分;print(data):往串口寫入數(shù)據(jù),可以是數(shù)字型的也可以是字符串;print(data,encoding):往串口寫入格式化數(shù)值數(shù)據(jù),encoding可以是十進(jìn)制(DEC),十六進(jìn)制(HEX),八進(jìn)制(OCT),二進(jìn)制(BIN),字符(BYTE),如下面的輸出;Serial.print(75);//輸出"75"Serial.print(75,DEC);//輸出"75"Serial.print(75,HEX);//輸出"4B"Serial.print(75,OCT);//輸出"113"Serial.print(75,BIN);//輸出"1001011"Serial.print(75,BYTE);//輸出"K",75代表的字符println(data):和print(data)基本相同,不過(guò)在最后加上了回車換行。串口庫(kù)函數(shù)voidbegin(unsignedlong96串口實(shí)驗(yàn)一:

Serial.print和Serial.write的區(qū)別inti=52;voidsetup(){Serial.begin(57600);}voidloop(){Serial.print(i);Serial.println();Serial.write(i);Serial.println();delay(1000);}Serial.print()打印的是原來(lái)的內(nèi)容;而Serial.write()打印出來(lái)的是ASCII碼值串口實(shí)驗(yàn)一:

Serial.print和Serial.wri97串口實(shí)驗(yàn)二:

實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)之間的串口通信臺(tái)式機(jī)也有串口,所以可以與單片機(jī)通信只需要usb線連接臺(tái)式機(jī)和單片機(jī)開(kāi)發(fā)板就可以了用到AcessPort串口軟件這里程序的功能是將計(jì)算機(jī)發(fā)給單片機(jī)的數(shù)據(jù)發(fā)回給計(jì)算機(jī)串口實(shí)驗(yàn)二:

實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)之間的串口通信臺(tái)式機(jī)也有串口98

思考:為什么這里Serial.write沒(méi)有打印出ASCII碼值?voidsetup(){Serial.begin(57600);}voidloop(){while(Serial.available())Serial.write(Serial.read());delay(1000);}

思考:為什么這里Serial.write沒(méi)有打印出ASCI99ADCADC,英文解釋為Analog-DigitConvert(模擬數(shù)字轉(zhuǎn)換),簡(jiǎn)單意思是單片機(jī)可以讀取外部的模擬電壓值轉(zhuǎn)化成數(shù)字值。ADCADC,英文解釋為Analog-DigitConve100Zigduino一共有6個(gè)AD管腳即模擬輸入管腳為了實(shí)現(xiàn)Zigduino管腳的模擬輸入,我們需要了解最基本的AD采樣。所謂AD采樣就是把模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),在轉(zhuǎn)化的過(guò)程中需要關(guān)注采樣精度、采樣頻率和采樣范圍,對(duì)于Zigduino使用的Atmega128RFA1來(lái)說(shuō),它內(nèi)置的是10位的AD采樣精度,即采集出來(lái)的數(shù)值范圍是0-1023,采樣頻率則和應(yīng)用程序相關(guān),但最快不能超過(guò)MCU的限制,采樣范圍表示的是允許的模擬信號(hào)的幅度。對(duì)于Atmega128RFA1來(lái)說(shuō),用戶可以選擇1.5V,1.6V,1.8V或任意外部輸入的在0-1.8V之間的電壓作為參考電壓,也是采樣的最高電壓,iDuino默認(rèn)的采樣范圍是0-1.8V,用戶可以通過(guò)下面的函數(shù)來(lái)改變參考電壓:voidanalogReference(uint8_tmode)其中mode可選列表如下:INTERNAL1V5:1.5V內(nèi)部參考電壓;INTERNAL1V6:1.6V內(nèi)部參考電壓;DEFAULT:默認(rèn)內(nèi)部1.8V參考電壓;EXTERNAL:通過(guò)AREF管腳輸入的外部參考電壓。Zigduino一共有6個(gè)AD管腳即模擬輸入管腳為了實(shí)現(xiàn)Zi101intanalogRead(uint8_tpin):返回管腳的模擬電平,即AD采樣的結(jié)果,只能用在模擬管腳上,pin表示管腳的序號(hào),返回值的范圍是0-1023,如下面的代碼將返回管腳A0的采樣結(jié)果:val=analogRead(A0);intanalogRead(uint8_tpin):返回102在實(shí)際應(yīng)用中,對(duì)于某些溫敏、光敏、壓敏、熱敏傳感器來(lái)說(shuō),為了測(cè)出它們的電阻變化,必要的分壓電路也是必須的,下面是一個(gè)簡(jiǎn)單的光敏測(cè)量電路:IO口D1拉高,相當(dāng)于電源。為了使信號(hào)的輸入符合Zigduino的電壓采樣范圍,對(duì)信號(hào)進(jìn)行必要的分壓是必須的。在實(shí)際應(yīng)用中,對(duì)于某些溫敏、光敏、壓敏、熱敏傳感器來(lái)說(shuō),為了103ADC實(shí)驗(yàn)一:自動(dòng)光感l(wèi)ed燈用到的元器件:電阻470歐姆一個(gè),(左)用于限流。電阻2K歐姆一個(gè),(右)用于分壓。10k光敏電阻一個(gè)Led一個(gè)導(dǎo)線5根ADC實(shí)驗(yàn)一:自動(dòng)光感l(wèi)ed燈用到的元器件:104程序intsensevalue=0;voidsetup(){pinMode(0,OUTPUT);pinMode(1,OUTPUT);Serial.begin(38400);}voidloop(){digitalWrite(0,HIGH);//供電sensevalue=analogRead(A1);//讀取ADC0口模擬值if(sensevalue>500)digitalWrite(1,HIGH);//當(dāng)光線暗時(shí),點(diǎn)亮led燈elsedigitalWrite(1,LOW);Serial.print(sensevalue);delay(1000);}串口可以調(diào)試你的程序,很方便程序intsensevalue=0;串口可以調(diào)試你的程序,105中斷Interrupt(INT)什么是中斷中斷的類型中斷三要素中斷作用中斷Interrupt(INT)什么是中斷106什么是中斷單片機(jī)暫停正在運(yùn)行的程序,保存現(xiàn)場(chǎng),自動(dòng)轉(zhuǎn)去執(zhí)行相應(yīng)的程序,執(zhí)行完以后再返回?cái)帱c(diǎn)繼續(xù)執(zhí)行被打斷的程序。這個(gè)過(guò)程就叫中斷。什么是中斷單片機(jī)暫停正在運(yùn)行的程序,保存現(xiàn)場(chǎng),自動(dòng)107中斷的類型可分為:內(nèi)部中斷和外部中斷內(nèi)部中斷有:內(nèi)部定時(shí)器中斷、串口中斷、AD中斷、SPI中斷等。這些設(shè)備或者接口都集成在單片機(jī)內(nèi)部。外部中斷有:外部信號(hào)引起的中斷中斷的類型可分為:內(nèi)部中斷和外部中斷108中斷三要素中斷源:中斷產(chǎn)生的來(lái)源。中斷方式(外部中斷):高電平、低電平、上升沿、下降沿等。中斷服務(wù)程序:中斷產(chǎn)生以后,單片機(jī)去執(zhí)行的程序。中斷三要素中斷源:中斷產(chǎn)生的來(lái)源。109中斷如何使用三個(gè)步驟:1.設(shè)置需要開(kāi)啟的中斷源。2.設(shè)置中斷方式。3.編寫中斷服務(wù)程序。中斷如何使用三個(gè)步驟:110中斷的作用中斷使得單片機(jī)實(shí)現(xiàn)系統(tǒng)調(diào)度,實(shí)時(shí)響應(yīng)。使用中斷,可以實(shí)現(xiàn)定時(shí)報(bào)警、外部中斷報(bào)警等功能。中斷的作用中斷使得單片機(jī)實(shí)現(xiàn)系統(tǒng)調(diào)度,實(shí)時(shí)響應(yīng)。111中斷庫(kù)函數(shù)voidattachInterrupt(uint8_tinterruptNum,void(*userFunc)(void),intmode)其中的第一個(gè)參數(shù)表示Arduino中的中斷號(hào),第二個(gè)參數(shù)是中斷處理函數(shù)名稱(需要用戶定義),第三個(gè)參數(shù)是中斷模式,就是什么情況下觸發(fā)中斷,一共有四種模式:LOW表示低電平觸發(fā),CHANGE表示電平改變時(shí)觸發(fā),RISING表示電平由低變高時(shí)觸發(fā),F(xiàn)ALLING表示電平由高變低時(shí)觸發(fā)。voiddetachInterrupt(uint8_tinterruptNum)有些中斷是會(huì)持續(xù)產(chǎn)生的,如低電平產(chǎn)生的中斷,此時(shí)如果不加以控制,系統(tǒng)會(huì)陷入持續(xù)的中斷處理中,為此在處理中斷函數(shù)時(shí)首先需要把中斷禁止掉,detachInterrupt就是用于完成此目標(biāo),后面的唯一參數(shù)就是中斷號(hào)。中斷庫(kù)函數(shù)voidattachInterrupt(uint112外部中斷的中斷號(hào)與管腳號(hào)對(duì)照表中斷號(hào)INT0INT1INT2INT3INT4INT5INT6管腳號(hào)632122012外部中斷的中斷號(hào)與管腳號(hào)對(duì)照表中斷號(hào)INT0INT1INT2113中斷實(shí)驗(yàn)用一個(gè)按鍵開(kāi)關(guān)連接到一個(gè)外部中斷口,當(dāng)中斷觸發(fā)時(shí)就改變一次led燈的狀態(tài)中斷實(shí)驗(yàn)用一個(gè)按鍵開(kāi)關(guān)連接到一個(gè)外部中斷口,當(dāng)中斷觸發(fā)時(shí)就改114代碼voidmyhanlder()//中斷服務(wù)程序{detachInterrupt(1);//關(guān)中斷digitalWrite(0,!digitalRead(0));//將led燈的狀態(tài)改變一次}voidsetup(){pinMode(0,OUTPUT);pinMode(3,INPUT_PULLUP);//將中斷口上拉}voidloop(){attachInterrupt(1,myhanlder,FALLING);//開(kāi)中斷,設(shè)置中斷觸發(fā)方式為下降沿方式delay(1000);}attachInterrupt(1,myhanlder,FALLING)表示的是當(dāng)由下降沿觸發(fā)的中斷1產(chǎn)生時(shí)系統(tǒng)會(huì)自動(dòng)去執(zhí)行myhanlder函數(shù),從而讓綠燈的狀態(tài)發(fā)生變化。代碼voidmyhanlder()//中斷服務(wù)程序att115擴(kuò)展實(shí)驗(yàn)將INT1的中斷觸發(fā)方式設(shè)置成低電平觸發(fā),并實(shí)現(xiàn)當(dāng)觸發(fā)中斷時(shí)打印出“interrupttriggered!”擴(kuò)展實(shí)驗(yàn)將INT1的中斷觸發(fā)方式設(shè)置成低電平觸發(fā),并實(shí)現(xiàn)當(dāng)觸116總計(jì)外部中斷總共有8個(gè),它們可以組合起來(lái)使用??傆?jì)外部中斷總共有8個(gè),它們可以組合起來(lái)使用。117定時(shí)/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器(Timer/Counter,TC)是一種計(jì)數(shù)裝置,若計(jì)數(shù)內(nèi)部的時(shí)鐘脈沖,可視為定時(shí)器;若計(jì)數(shù)外部的脈沖,可視為計(jì)數(shù)器。實(shí)質(zhì)都是計(jì)數(shù)。定時(shí)/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器(Timer/Counter,TC118定時(shí)器(Timer)定時(shí)功能也是通過(guò)計(jì)數(shù)器的計(jì)數(shù)來(lái)實(shí)現(xiàn)的。不過(guò)此時(shí)的計(jì)數(shù)脈沖來(lái)自單片機(jī)的內(nèi)部。每個(gè)機(jī)器周期產(chǎn)生一個(gè)計(jì)數(shù)脈沖,也就是每個(gè)機(jī)器周期計(jì)數(shù)器加1。定時(shí)器(Timer)定時(shí)功能也是通過(guò)計(jì)數(shù)器的計(jì)數(shù)來(lái)實(shí)現(xiàn)的。不119定時(shí)器中斷定時(shí)器的應(yīng)用之一:設(shè)置內(nèi)部定時(shí)器中斷原理:專門有一個(gè)寄存器(8位或12位或16位)存放計(jì)數(shù),每個(gè)機(jī)器周期計(jì)數(shù)器加1,加滿就產(chǎn)生計(jì)數(shù)溢出中斷。定時(shí)器中斷定時(shí)器的應(yīng)用之一:設(shè)置內(nèi)部定時(shí)器中斷120設(shè)置一個(gè)一秒一次的定時(shí)器中斷,改變一次led的狀態(tài)。定時(shí)器中斷設(shè)置一個(gè)一秒一次的定時(shí)器中斷,改變一次led的狀態(tài)。定時(shí)器中121TimerOne實(shí)例#include"TimerOne.h"voidcallback(){digitalWrite(3,!digitalRead(3));}voidsetup(){pinMode(3,OUTPUT);Timer1.initialize(500000);//初始化定時(shí)器1,設(shè)置中斷周期為半秒Timer1.attachInterrupt(callback);//設(shè)置一個(gè)定時(shí)器溢出中斷服務(wù)程序}voidloop(){//yourprogramhere...}TimerOne實(shí)例#include"TimerOne.h122對(duì)比用delay()對(duì)比用delay()123LCD1602工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。(16列2行)1602液晶也叫1602字符型液晶,它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。LCD1602工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)124引腳1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:GND為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。第5腳:RW為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。引腳1602采用標(biāo)準(zhǔn)的16腳接口,其中:

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論