基于WIFI模塊和單片機的無線數(shù)據(jù)傳輸(附代碼)_第1頁
基于WIFI模塊和單片機的無線數(shù)據(jù)傳輸(附代碼)_第2頁
基于WIFI模塊和單片機的無線數(shù)據(jù)傳輸(附代碼)_第3頁
基于WIFI模塊和單片機的無線數(shù)據(jù)傳輸(附代碼)_第4頁
基于WIFI模塊和單片機的無線數(shù)據(jù)傳輸(附代碼)_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、南京工業(yè)大學計算機科學與技術(shù)學院Project3課程設(shè)計2014-2015學年第二學期 班 級: 浦電子1203 組員姓名: 組員學號: 指導老師:武曉光,胡方強,包亞萍 袁建華,毛錢萍 2015年7月8日31目 錄第1章 階段任務(wù)第二章基于WIFI模塊的無線數(shù)據(jù)傳輸?shù)脑?.1 時鐘模塊1.2 最小單片機系統(tǒng)的原理1.3 溫度傳感器DS18B201.4 串口 1.5 WIFI模塊第三章 基于WIFI模塊的無線數(shù)據(jù)傳輸?shù)膶崿F(xiàn)2.1 WIFI模塊設(shè)置 2.2 串口部分設(shè)置 2.3 調(diào)試與運行過程第四章 程序與框圖第五章 小結(jié) 第一章 階段任務(wù):第一階段(1天)1、了解課程所給的WIFI模塊,并詳

2、細研讀其說明書 2、復習單片機知識(2天)1、了解溫濕度傳感器模塊,并設(shè)計其硬件模塊 2、了解lcd1602顯示模塊,并設(shè)計其硬件模塊(2天)1、設(shè)計整合電路:5v轉(zhuǎn)3.3v電路 2、串口通訊電路第二階段(4天) 1、鏈接并完成整體電路圖的設(shè)計,并檢查 2、焊接電路并調(diào)試。第三階段(3天)1、根據(jù)設(shè)計的硬件模塊設(shè)計程序 (1):溫濕度傳感器模塊 (2):串口通訊模塊 (3):WIFI傳輸與接收模塊 (4):顯示電路模塊 (3天)2、將設(shè)計好的模塊程序燒錄到單片機內(nèi),調(diào)試第四階段:2天 (2天)寫報告 第二章 基于WIFI模塊的無線數(shù)據(jù)傳輸?shù)脑頃r鐘DS1302模塊:電路原理圖:DS1302與單

3、片機的連接也僅需要3條線:CE引腳、SCLK串行時鐘引腳、I/O串行數(shù)據(jù)引腳,Vcc2為備用電源,外接32.768kHz晶振,為芯片提供計時脈沖。讀寫時序說明:DS1302是SPI總線驅(qū)動方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)??刂谱挚偸菑淖畹臀婚_始輸出。在控制字指令輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時序如圖單片機最小系統(tǒng)的原理:說明復位電路:由電容串聯(lián)電阻構(gòu)成,由圖并結(jié)合"電容電壓

4、不能突變"的性質(zhì),可以知道,當系統(tǒng)一上電,RST腳將會出現(xiàn)高電平,并且,這個高電平持續(xù)的時間由電路的RC值來決定.典型的51單片機當RST腳的高電平持續(xù)兩個機器周期以上就將復位,所以,適當組合RC的取值就可以保證可靠的復位.晶振電路:典型的晶振取11.0592MHz(因為可以準確地得到9600波特率和19200波特率,用于有串口通訊的場合)/12MHz(產(chǎn)生精確的uS級時歇,方便定時操作)單片機:一片AT89S51/52或其他51系列兼容單片機特別注意:對于31腳(EA/Vpp),當接高電平時,單片機在復位后從內(nèi)部ROM的0000H開始執(zhí)行;當接低電平時,復位后直接從外部ROM的00

5、00H開始執(zhí)行.溫度傳感器DS18B20的原理(連接到單片機最小系統(tǒng),并將溫度發(fā)送給WIFI模塊): 3.1.1 DS18B20性能特點 (1) 獨特的單線接口方式,只需一個接口引腳即可通信;(2) 每一個DS18B20都有一個唯一的64位ROM序列碼;(3) 在使用中不需要任何外圍元件;(4) 可用數(shù)據(jù)線供電,電壓范圍:+3.0V-+5.5 V;(5) 測溫范圍:-55 -+125,在-10-+85范圍內(nèi)精度為+0.5,分辨率為0.0625;(6) 通過編程可實現(xiàn)9-12位的數(shù)字讀數(shù)方式。溫度轉(zhuǎn)換成12位數(shù)字信號所需時間最長為750ms,而在9位分辯模式工作時僅需93.75ms;(7) 用戶

6、可自設(shè)定非易失性的報警上下限值;(8) 告警搜索命令可識別和定位那些超過報警限值的DS18B20;(9) 多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點測溫;(10)電源極性接反時,DS18B20不會因發(fā)熱而燒毀,但不能正常工作;3.1.2 DS18B20內(nèi)部存儲器及溫度數(shù)據(jù)格式對于DS18B20內(nèi)部存儲器結(jié)構(gòu)(如圖3.1),它包括一個暫存RAM和一個非易失性電可擦除EERAM,后者存放報警上下限TH、TL。當改變TH、T L中的值時,數(shù)據(jù)首先被寫進暫存器的第二、三字節(jié)中,主機可再讀出其中內(nèi)容進行驗證。如果正確,當主機發(fā)送復制暫存器命令,暫存器的第二、三字節(jié)將被復制到TH、TL中,這樣處理

7、有利于確保該數(shù)據(jù)在單總線上傳輸?shù)耐暾?。暫存器結(jié)構(gòu) EERAM結(jié)構(gòu)溫度低字節(jié) (BYTE0)溫度高字節(jié) (BYTE1)上限報警溫度TH(BYTE2)下限報警溫度TL(BYTE3)結(jié)構(gòu)寄存器 (BYTE4)保留 (BYTE5)保留 (BYTE6)保留 (BYTE7)CRC ( BYTE8)THTL結(jié)構(gòu)寄存器圖3.1 DS18B20結(jié)構(gòu)框圖 暫存存儲器作用是在單線通信時確保數(shù)據(jù)的完整性,它由8字節(jié)組成,頭兩個字節(jié)表示測得的溫度讀數(shù)。以12位轉(zhuǎn)化為例說明溫度高低字節(jié)存放形式(溫度的存儲形式如表3.1)及計算:12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個高低8位的RAM中,二進制中的前面5位

8、是符號位。如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1,再乘于0.0625才能得到實際溫度8。 表3.1 溫度的存儲形式高8位SSSSS262524低8位232221202-12-22-32-4S=1時表示溫度為負,S=0時表示溫度為正,其余低位以二進制補碼形式表示,最低位為1時表示0.0625 。溫度/數(shù)字對應(yīng)關(guān)系如表3.2所示。表3.2 DS18B20溫度/數(shù)字對應(yīng)關(guān)系表溫度()輸出的二進制碼對應(yīng)的十六進制碼+1250000 0111 1101 000007D0H+850000 0101 0101 0

9、0000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0110 1110FF5EH-25.06251111 1110 0110 1111FF6FH-551111 1100 1001 0000FC90HDS18B20有六條控制命令,如表3.3所示: 表3.3 控制命令指    令約定代碼

10、操      作    說      明溫度轉(zhuǎn)換44H啟動DS18B20進行溫度轉(zhuǎn)換讀暫存器BEH讀暫存器9個字節(jié)內(nèi)容寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)復制暫存器48H把暫存器的TH、TL字節(jié)寫到E2RAM中重新調(diào)E2RAMB8H把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)讀電源供電方式B4H啟動DS18B20發(fā)送電源供電方式的信號給主CPU3.1.3 DS18B20操作命令及時序特性DS18B20對讀寫的數(shù)據(jù)位有著嚴格的時序要求,它是在一根I

11、/O線上讀寫數(shù)據(jù)的。同時,DS18B20為了保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性,它有著嚴格的通信協(xié)議。DS18B20每一步操作都要遵循嚴格的工作時序和通信協(xié)議,如主機控制DS18B20完成溫度轉(zhuǎn)換這一過程,根據(jù)DS18B20的通訊協(xié)議,須經(jīng)三個步驟:每一次讀寫之前都要對DS18B20進行復位,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作 。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始的,如果要單總線器件送回數(shù)據(jù),在進行寫命令后,主機需啟動

12、讀時序完成數(shù)據(jù)的接收。另外,數(shù)據(jù)和命令的傳輸都是低位在先9。(1)DS18B20的復位時序主機控制DS18B20完成任何操作之前必須先初始化,即主機發(fā)一復位脈沖(最短為480µs的低電平),接著主機釋放總線進入接收狀態(tài),DS18B20在檢測到I/0引腳上的上升沿之后,等待1560µs,然后發(fā)出存在脈沖(60240)µs的低電平。如圖3.2所示。(2)DS18B20的讀時序DS18B20的讀時序分為讀0時序和讀1時序兩個過程。DS18B20的讀時序是從主機把單總線拉低后,在15秒之內(nèi)就得釋放單總線,從而讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20完成一個讀時

13、序的過程,至少需要60µs。如圖3.3所示。圖3.2 DS18B20的復位時序圖3.3 DS18B20的讀時序(3)DS18B20的寫時序DS18B20的寫時序同讀時序一樣,仍然分為寫0時序和寫1時序兩個過程。DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60µs,保證DS18B20能夠在15µs到45µs之間能正確地采樣I/O總線上的“0”電平,當要寫1時序時,單總線被拉低之后,在15µs之內(nèi)就得釋放單總線。如圖3.4所示。圖3.4 DS18B20的寫時序由DS18B20的通訊協(xié)議得知,主機控制DS18B20完

14、成溫度轉(zhuǎn)換的過程必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復位,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,從而對DS18B20進行預定的操作。復位要求主CPU將數(shù)據(jù)線下拉500µs,然后釋放,DS18B20收到信號后等待1660µs左右,然后發(fā)出60240µs的存在低脈沖,主CPU收到此信號表示復位成功。串口部分(讓WIFI與電腦,單片機進行通訊)串口原理圖:80C51串行口的結(jié)構(gòu)圖:80C51串行口的工作方式 :方式1方式1是10位數(shù)據(jù)的異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)的格式如圖所示。其中1位起始位,8位

15、數(shù)據(jù)位,1位停止位。1、 方式1輸出 方式1輸入用軟件置REN為1時,接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生負跳變時,則說明起始位有效,將其移入輸入移位寄存器,并開始接收這一幀信息的其余位。接收過程中,數(shù)據(jù)從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時,控制電路進行最后一次移位。當RI=0,且SM2=0(或接收到的停止位為1)時,將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接收SBUF,第9位(停止位)進入RB8,并置RI=1,向CPU請求中斷 始位1位,數(shù)據(jù)9位(含1位附加的第9位,發(fā)送時為SCON中的TB8,接收時為RB8),停止位1位,一幀數(shù)據(jù)

16、為11位。方式2的波特率固定為晶振頻率的1/64或1/32,方式3的波特率由定時器T1的溢出率決定。WIFI模塊:使用接口:1 電源接口系統(tǒng)采用標準電源插座,外徑5.5mm內(nèi)徑2.1mm的標準尺寸,內(nèi)正外負,輸入電壓范圍548V,電流350mA2 指示燈 ID 名稱 描述 1 Power 設(shè)備供電后亮 2 Ready 內(nèi)部Linux系統(tǒng)啟動完成后亮 3 Link 網(wǎng)絡(luò)連接建立后亮 4 RXD 本設(shè)備的串口收到數(shù)據(jù)閃爍 5 TXD 本設(shè)備通過串口向外發(fā)送數(shù)據(jù)時閃爍2.3 RS232接口設(shè)備的串口為公口(針),RS232 電平(可以直接連電腦串口的電平),引腳順序與計算機的COM 口保持一致,與電

17、腦連接時需要用交叉線(2-3 交叉,7-8 交叉,5-5 直連,7-8 可以不接但是一定不能直連電腦,否則可能導致工作不正常),一共有6 根線有定義,其余懸空。 序號 名稱描述 2 RXD設(shè)備數(shù)據(jù)接收引腳 3 TXD設(shè)備數(shù)據(jù)發(fā)送引腳 GND信號地 RTS請求發(fā)送 CTS清除發(fā)送 VCC默認未使用,PCB 上有個焊盤跳線,需要時可以將它與設(shè)備的電源輸入正極連接,用于給串口傳感器供電或者外部通過串口線給設(shè)備供電。 第三章 基于WiFi模塊的無線傳輸?shù)膶崿F(xiàn)2.1 WIFI模塊的設(shè)置2.2串口部分設(shè)置2.3調(diào)試:運行過程:單片機首先運行,然后對DS18B20和DS1302,LCD1602進行初始化,接

18、著對DS18B20和DS1302進行寫設(shè)置,讀取溫度和時間,單片機處理數(shù)據(jù),將其在LCD1602上顯示,單片機進行串口初始化并通過串口程序?qū)囟群蜁r間準備好,等到串口接收到相應(yīng)的信號,在發(fā)送數(shù)據(jù)。在程序內(nèi)檢測溫度,若溫度超過設(shè)定的值(值可通過終端修改),將發(fā)出報警信號。蜂鳴器報警,待溫度下降后(可通過終端打開降溫系統(tǒng)),蜂鳴器關(guān)閉。 第五章 程序與框圖程序:#include<reg52.h>#include<string.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned

19、 intsbit DQ=P20;sbit lcden=P34;sbit lcdrs=P35;sbit dula=P26;sbit wela=P27;/sbit led=P10;sbit sclk=P14; /時鐘信號線sbit io=P15; /信號線sbit ce=P16; /片選,也是RSTsbit buzz=P23;sbit ledle=P25;unsigned int temp,temp1,temp2,temper,xs,flag,a,s,cc;unsigned char j;uchar code day="1234567"uchar shi,fen,miao,ni

20、an,yue,ri;uchar cdflag;uchar code number="0123456789"sbit ACC0 = ACC0; /定義寄存器ACC的零位sbit ACC7 = ACC7;void delay1(unsigned int m)unsigned int i,j;for(i=m;i>0;i-)for(j=110;j>0;j-);void delay(unsigned int m)while(m-);/*DS18B20程序*/void Init_DS18B20()unsigned char x=0;DQ=1;delay(8);DQ=0;de

21、lay(80);DQ=1;delay(4);x=DQ;delay(20);uchar ReadOneChar()unsigned char i=0;unsigned char dat=0;for(i=8;i>0;i-)DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);return(dat);void WriteOneChar(unsigned char dat)unsigned char i=0;for(i=8;i>0;i-)DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;void d

22、uwendu()unsigned char a=0;unsigned char b=0;Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0x44);delay(5);Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0xbe);delay(5);a=ReadOneChar();b=ReadOneChar();temp1=(b<<4)&0x7f; /去除高四位,即正負位 temp1+=(a&0xf0)>>4; /個位temp2=a&0x0f; /小數(shù)temp=

23、(b*256+a)>>4); /整數(shù)xs=temp2*0.0625*10;temper=temp+xs;/*lcd程序*/void write_com(uchar com)lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar date)lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;/* 串口初始化 */void ckinit()TMOD=0x20;/設(shè)置定時器1為工作方式2TH1=0xfa;TL1=0xfa;TR1=1;REN=1; /允許串

24、行接收SM0=0;SM1=1; /工作方式1/SCON=0x50;PCON=0x80; /波特率加倍EA=1;ES=1;/*LCD1602初始化 */void lcdinit()dula=0;wela=0;ledle=0;lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);write_com(0x80+0x10);/* 溫度顯示 */void display()write_com(0x80+0x40);/write_data(numbertemper/100);write_data(numbertemp

25、/10);write_data(numbertemp%10);write_data('.');write_data(numberxs%10);write_data('C');void fas(unsigned char dat) ES=0;/串口中斷允許位SBUF=dat;while(!TI);TI=0;ES=1;/* 發(fā)送字符串函數(shù) */void fss(unsigned char *str)uchar b,i;b=strlen(str);for(i=0;i<b;i+)fas(*str);str+; /* DS1302寫字節(jié)程序 */void write

26、_ds1302_byte(uchar add) /DS1302寫一個字節(jié)數(shù)據(jù)uchar i; ACC = add; for(i=8; i>0; i-) io = ACC0; /就是把最低位的數(shù)據(jù)傳輸給IO sclk = 1; /時鐘拉高讀走數(shù)據(jù) sclk = 0; /時鐘拉低允許數(shù)據(jù)變化 ACC = ACC >> 1; /把ACC右移一位,然后又把最低的一位傳送過去 /* DS1302讀字節(jié) */uchar read_ds1302_byte() /讀DS1302一個字節(jié)uchar i; for(i=8; i>0; i-) ACC = ACC >>1; /特別

27、說明,讀回來的數(shù)據(jù)是從最低位到最高位。 ACC7 = io; /把讀回來的數(shù)據(jù)存到ACC寄存器的最高位,然后在移到最低位 sclk = 1; sclk = 0; return ACC; /* DS1302寫地址數(shù)據(jù) */void write_ds1302(uchar add, uchar dat)/寫任意地址,任意數(shù)據(jù)ce=0; /根據(jù)時序圖編寫sclk=0;ce=1; /片選打開write_ds1302_byte(add);write_ds1302_byte(dat);io=0; /釋放總線sclk=0; /時鐘釋放ce=0; /片選關(guān)閉/* DS1302讀地址數(shù)據(jù) 返回值:時間 */uch

28、ar read_ds1302(uchar add) /讀任意地址數(shù)據(jù)uchar temp;ce=0;sclk=0; ce=1; /片選打開write_ds1302_byte(add);temp=read_ds1302_byte();sclk=0; /時鐘釋放io=0; /釋放總線ce=0; /片選關(guān)閉return temp;/* 時間顯示函數(shù) */void dis_sj() uchar th,tl;nian=read_ds1302(0x8d); /年寄存器yue=read_ds1302(0x89); /月寄存器ri=read_ds1302(0x87); /日寄存器write_com(0x80+

29、0x08); /設(shè)置時位置th=nian>>4;write_data(numberth); /刷新年高位tl=nian&0x0f;write_data(numbertl); /刷新年低位write_data('-');th=yue>>4;write_data(numberth);tl=yue&0x0f;write_data(numbertl);write_data('-');th=ri>>4;write_data(numberth);tl=ri&0x0f;write_data(numbertl);shi

30、=read_ds1302(0x85); /時寄存器fen=read_ds1302(0x83); /分寄存器miao=read_ds1302(0x81); /秒寄存器write_com(0x80+0x48);th=shi>>4;write_data(numberth); /刷新時高位tl=shi&0x0f;write_data(numbertl); /刷新時低位write_data(':');th=fen>>4;write_data(numberth);tl=fen&0x0f;write_data(numbertl);write_data(

31、':');th=miao>>4;write_data(numberth);tl=miao&0x0f;write_data(numbertl);void fssj()uchar th,tl;th=nian>>4;fas(numberth);tl=nian&0x0f;fas(numbertl);fas('-');th=yue>>4;fas(numberth);tl=yue&0x0f;fas(numbertl);fas('-');th=ri>>4;fas(numberth);tl=

32、ri&0x0f;fas(numbertl);fss(" ");th=shi>>4;fas(numberth);tl=shi&0x0f;fas(numbertl);fas(':');th=fen>>4;fas(numberth);tl=fen&0x0f;fas(numbertl);fas(':');th=miao>>4;fas(numberth);tl=miao&0x0f;fas(numbertl);fss(" ");fss("Temp: ");void main()ckinit();lcdinit();cc=30;duwendu();delay1(1000);while(1)duwendu();d

溫馨提示

  • 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

提交評論