無線溫度測量設計報告(完整源代碼)_第1頁
無線溫度測量設計報告(完整源代碼)_第2頁
無線溫度測量設計報告(完整源代碼)_第3頁
無線溫度測量設計報告(完整源代碼)_第4頁
無線溫度測量設計報告(完整源代碼)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘要本系統(tǒng)由兩部分組成,溫度采集端和溫度顯示端,通過溫度傳感器采集溫度顯示在液晶屏或者數(shù)碼管上,并將溫度通過紅外發(fā)送到紅外接收頭,然后解調(diào)解碼數(shù)據(jù),將溫度顯示出來,實現(xiàn)溫度的無線測量 關鍵字:STC89C52RC;紅外;溫度;調(diào)制;解調(diào)1方案論證與選擇1.1控制器的選擇方案一:采用SP430來處理Msp430是一種超低功耗的混合信號處理器,采用精簡指令集,單個始終走起就可以執(zhí)行一條指令,速度比51快得多。因此用430來處理比較器返回來的數(shù)據(jù)是比較快捷的,但價格相對較貴。430供電為3.3V,且操作起來較復雜。方案二:采用51內(nèi)核單片機單片機操作方便快捷,成本低,開發(fā)資源豐富,位尋址方便等,來的

2、數(shù)據(jù)不需要很大的數(shù)據(jù)處理過程,51已完全能夠勝方便,所以該裝置采用STC89c52型的單片機來進行處理,本單片機一個機器一個時鐘周期執(zhí)行一條指令,無法解密,低功耗,超低價,高速,高可靠性。1.2溫度顯示方式的選擇與比較方案一:采用數(shù)碼管顯示數(shù)碼管是由多個發(fā)光二極管封裝在一起組成的8字型的器件,引線已在內(nèi)部連接完成,只需引出他們的各個筆畫和公共電極??梢杂脕盹@示數(shù)字和字母。方案二:采用LCD1602一種專門用來顯示字母,數(shù)字,符號等的點陣型液晶模塊。它由若干個5X7或者5X11等的點陣字符位組成,每個點陣自字符位都可以顯示一個字符,每位之間有一個點距的間隔,可以顯示兩行,每行16位數(shù)字或者字符。

3、1602采用標準的16腳借口,相比數(shù)碼管,同樣引腳的情況下,顯示的內(nèi)容更多,焊接更加方便快捷,所以我們選用顯示部分選用LCD1602.1.3紅外的編碼和解碼采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如下圖所示。上述“0”和“1”組成的32位二進制碼經(jīng)38kHz的載頻進行二次調(diào)制以提高發(fā)射效率,達到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射。編碼數(shù)據(jù),載波,發(fā)射,接收解碼如下圖所示2.系統(tǒng)設計溫度傳感器控制器溫度顯

4、示紅外發(fā)射紅外接收溫度顯示控制器本系統(tǒng)的溫度傳感器使用DS18b20,控制器選用stc89c51,溫度顯示模塊用LCD1602。(1)對溫度采集電路采集的溫度進行編碼后,紅外發(fā)射管發(fā)射數(shù)據(jù)。(2)紅外一體化接收頭接收到紅外信號后,對紅外進行解調(diào),因為紅外接收頭接收到信號后就對信號進行了解調(diào),所以我們就不用設計解調(diào)電路。3.電路設計3.1單片機最小系統(tǒng)上圖是比較常用的單片機最小系統(tǒng)3.2溫度采集發(fā)射電路紅外發(fā)送模塊溫度傳感器模塊液晶顯示模塊溫度傳感器DS18B20采集的溫度,通過單片機處理顯示在液晶上,然后對溫度數(shù)據(jù)進行編碼,通過紅外發(fā)射電路將溫度信息發(fā)射出去。3.3溫度接收顯示電路接收頭液晶模

5、塊紅外接收頭對接收到的信號解調(diào),然后送到單片機處理,判斷高低電平的時間來解碼,將溫度數(shù)據(jù)顯示在液晶上。4.軟件設計4.1概述:此次用的是DSl8B20作為溫度傳感器進行溫度采集,然后將溫度數(shù)據(jù)轉(zhuǎn)化為電信號,通過紅外線發(fā)射,再讓接受端收到溫度信息,并顯示出來。因為是我們焊接的是單片機最小系統(tǒng),所以,我們用的就是無線紅外發(fā)射管和無線紅外接收管來實現(xiàn)發(fā)送端與接收端數(shù)據(jù)的傳輸,基本可以實現(xiàn)五米以上距離的信息傳輸。接收端主循環(huán)一直檢測紅外是否接收完成,如果完成清除完成標志,并進行數(shù)據(jù)校驗,校驗通過則對紅外數(shù)據(jù)進行轉(zhuǎn)換,temperature為全局,將在display.c由定時器掃描數(shù)碼管進行顯示。信號燈

6、的閃爍則利用ledcount變量自減進行控制發(fā)送端主循環(huán)以一定間隔進行18B20溫度讀取,再將溫度數(shù)據(jù)轉(zhuǎn)換為紅外數(shù)據(jù)碼,進行紅外發(fā)射,伴隨信號燈閃爍定時器0進行38K載波的產(chǎn)生。紅外數(shù)據(jù)存入IR_Code數(shù)組,前兩位為引導碼 318為校驗碼 1941數(shù)據(jù)具體編碼0 和1 的表示參考NEC紅外協(xié)議,對0 1的編碼時間適當增大了,以避免其他紅外遙控的干擾。4.2 程序流程圖發(fā)射端計算溫度值并進行存儲顯示在lcd顯示器上將溫度值轉(zhuǎn)化為電信號,用紅外發(fā)射端發(fā)射出去結(jié)束接收端是否有紅外信號初始化開始錯誤顯示error將信息以數(shù)字形式顯示在數(shù)碼管顯示器上否是溫度是否高于x度報警器報警是結(jié)束否4.3關鍵程序

7、模塊(1)數(shù)據(jù)采集模塊#include"18b20.h"void DelayUs2x(unsigned char t) while(-t); void DelayMs(unsigned char t) /延時tms while(t-) DelayUs2x(245);DelayUs2x(245); /大致延時1mS /*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0;DQ = 1; /DQ復位 DelayUs2x(10);DQ = 0; /稍做延時 /單片機將DQ拉低 DelayUs2x(200); DelayUs2x(200);

8、/精確延時 大于 480us 小于960us DQ = 1; DelayUs2x(50); /拉高總線 /1560us 后 接收60-240us的存在脈沖 dat=DQ; DelayUs2x(25); /如果x=0則初始化成功, x=1則初始化失敗 /稍作延時返回 return dat;/*- 讀取一個字節(jié)-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; dat>>=1; DQ = 1; / 給脈沖信號/ 給脈沖信號 if(DQ)

9、 dat|=0x80;DelayUs2x(25); return(dat); /*- 寫入一個字節(jié)-*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; DelayUs2x(25); DQ = 1; dat>>=1; DelayUs2x(25);/*- 讀取溫度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned in

10、t t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換DelayMs(20);Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作 WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=ReadOneChar(); /低位b=ReadOneChar(); /高位 t = (int)b << 8) + a;return(t);(2)發(fā)送模塊#include "irsend.h"

11、;#include "math.h"unsigned char IR_CodeIR_CODE_SIZI=0;/#define IR_CODE_SIZI 42發(fā)射碼個數(shù)/*11.0592M晶振下t毫秒延時函數(shù)*函數(shù)名 :Delay_ms()*參 數(shù) :unsigned int t*功 能 :t毫秒延時*返回值 :無*/void Delay_ms(unsigned int t) /誤差 -0.651041666667us unsigned char a,b;for(;t>0;t-) for(b=4;b>0;b-) for(a=113;a>0;a-);/*信號燈

12、閃爍函數(shù)*函數(shù)名 :SignalFlicker()*參 數(shù) :count閃爍次數(shù),time 閃爍時間*功 能 :信號燈以time ms時間間隔閃爍count次*返回值 :無*/void SignalFlicker(unsigned char count,unsigned int time )for(;count>0;count-)ON_SIG_LED;Delay_ms(time);OFF_SIG_LED;Delay_ms(time);/*定時器0初始化函數(shù)*函數(shù)名 :CarrierWaveInit()*參 數(shù) :無*功 能 :38K載波信號定時器初始化*返回值 :無*/void Carr

13、ierWaveInit(void)TMOD|= 0X02; /八位自動重裝模式TH0 = 0XF4; /1111 0100 /38k載波信號TL0 = 0XF4;ET0 = 0; /關閉TR0 = 0;/*定時器0中斷函數(shù)載波發(fā)生*函數(shù)名 :CarrierWave()*參 數(shù) :無*功 能 :定時器中斷產(chǎn)生38KHZ載波信號*返回值 :無*/void CarrierWave(void) interrupt 1 IR_SEND_IO = IR_SEND_IO;/*紅外數(shù)據(jù)復位函數(shù)*函數(shù)名 :IrcodeReset()*參 數(shù) :無*功 能 :將紅外發(fā)射碼數(shù)據(jù)進行復位*返回值 :無*/void I

14、rcodeReset()unsigned char i=0;for(i=0;i<IR_CODE_SIZI;i+)IR_Codei=IR_CODE_0; IR_Code0 = IR_CODE_START; IR_Code1 = IR_CODE_START/2;/*數(shù)據(jù)轉(zhuǎn)換函數(shù)*函數(shù)名 :DataConversion*參 數(shù) :待轉(zhuǎn)換的數(shù)值num,紅外碼存放地址 irdata*功 能 :將數(shù)值轉(zhuǎn)換為紅外發(fā)射碼*返回值 :無#define IR_CODE_0 20 /發(fā)射碼的0#define IR_CODE_1 50#define IR_CODE_START 240 /發(fā)射碼起始#define

15、 IR_CODE_SIZI 42 /發(fā)射碼個數(shù)*/void DataConversion(unsigned int num,unsigned char* irdata)unsigned char i=IR_CODE_SIZI-3,n=1,f=1;IrcodeReset(); /存儲區(qū)初始化for(n=3;n<18;n+=2) /前8個存放校驗碼10101010 0xAA if(f) irdatan = IR_CODE_1;f=0;else irdatan = IR_CODE_0;f=1;while(num!=0) /數(shù)據(jù)碼存放 十進制轉(zhuǎn)二進制if(num%2) irdatai = IR_

16、CODE_1; else irdatai = IR_CODE_0; num = num/2;i-=2;/*紅外波發(fā)射函數(shù)*函數(shù)名 :SendIrWave()*參 數(shù) :儲存紅外編碼數(shù)據(jù)的首地址irdata*功 能 :以紅外的方式發(fā)送irdata 的紅外波形數(shù)據(jù)*返回值 :無*/void SendIrWave(unsigned char* irdata)unsigned char count=0;unsigned char i=0;while(1) /發(fā)射引導碼 校驗碼 數(shù)據(jù)碼 ON_CARR;for(i=irdatacount; i>0; i-) /載波發(fā)射延時 CarrierWave_

17、DELAY; OFF_CARR;IR_SEND_OFF; /低電平保持count+; for(i=irdatacount; i>0; i-) /低電平延時 Low_DELAY; if(count = IR_CODE_SIZI-1) /發(fā)射結(jié)束 break; count+;(3)接收模塊#include "irreceive.h"#include "math.h"idata unsigned char IR_CODEIR_CODE_SIZI=0; /紅外數(shù)據(jù)碼存儲區(qū)unsigned char Ir_Time_count=0;/紅外時間計數(shù)變量unsi

18、gned char IR_RECEIVE_OK=0;/紅外接收完成標志/*紅外數(shù)據(jù)接收初始化函數(shù)*函數(shù)名 :InitIrReceive*參 數(shù) :無*功 能 :配置紅外接收需要的定時器和中斷*返回值 :無*/void InitIrReceive(void)/*- 定時器0初始化-*/TMOD|= 0x02;/定時器0工作方式2,TH0是重裝值,TL0是初值/8位自動重裝 TH0 = 0x00;/重載值 TL0 = 0x00;/初始化值 ET0 = 1;/開中斷 TR0 = 1;/定時器/計數(shù)器啟動/*- 外部中斷0初始化-*/IT0 = 1;/指定外部中斷0下降沿觸發(fā),INT0 (P3.2)E

19、X0 = 1;/使能外部中斷EA = 1;/*紅外數(shù)據(jù)時間計數(shù)函數(shù)*函數(shù)名 :IRTimeCount()*參 數(shù) :無*功 能 :記錄每兩個紅外脈沖時間間隔*返回值 :無*/void IRTimeCount() interrupt 1 Ir_Time_count+; /*紅外碼接收中斷函數(shù)*函數(shù)名: IRReceive(void)*參 數(shù): 無*功能描述:接收紅外碼,存入IR_CODE*返回值: 無*/void IRReceive() interrupt 0static startflag=0,bitnum=0;if(startflag) if(Ir_Time_count<IR_STAR

20、T_TIEM_MAX && Ir_Time_count>IR_START_TIEM_MIN) /引導碼判斷 bitnum=0; IR_CODEbitnum=Ir_Time_count; /引導碼 TC9012的頭碼,9ms+4.5ms Ir_Time_count=0; bitnum+; if(bitnum=IR_CODE_SIZI) /接收完成 IR_RECEIVE_OK=1; bitnum=0; else /第一個觸發(fā)信號Ir_Time_count=0; startflag=1; /*紅外碼數(shù)據(jù)轉(zhuǎn)換函數(shù)*函數(shù)名: DataConversion()*參 數(shù): 無*功能描述

21、:接收紅外碼,存入IR_CODE*返回值: 數(shù)據(jù)區(qū)的數(shù)據(jù)*/unsigned int DataConversion(void) unsigned char i=9; unsigned int num=0; for(i=9;i<IR_CODE_SIZI-1;i+) if(IR_CODEi>IR_CODE_1)num+=pow(2,IR_CODE_SIZI-2-i);/二進制轉(zhuǎn)十進制 return num;/*紅外碼數(shù)據(jù)校驗*函數(shù)名: CheckSucceed()*參 數(shù): 無*功能描述:轉(zhuǎn)換IR_CODE 18的校驗碼,與事先設定值進行比較判斷*返回值: 成功1 失敗0*/unsig

22、ned char CheckSucceed(void)unsigned char i=1;unsigned int num=0;for(i=1;i<9;i+) /校驗碼位于18if(IR_CODEi>IR_CODE_1) num+=pow(2,8-i); /轉(zhuǎn)換 if(num=CHECK_NUM && IR_CODE0>IR_START_TIEM_MIN && IR_CODE0<IR_START_TIEM_MAX)/校驗碼和引導碼均校驗 return 1; else return 0; 5.系統(tǒng)測試5.1溫度測試測試溫度傳感器DSl8B20測量的溫度是否正確。我們用傳感器和商用電子溫度計測試常溫狀態(tài)的的水。然后對比我們的傳感器是否精確。測量次數(shù)123456789測量溫度31.130.431.432.331.629.8

溫馨提示

  • 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

提交評論