版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘要本系統(tǒng)由兩部分組成,溫度采集端和溫度顯示端,通過溫度傳感器采集溫度顯示在液晶屏或者數(shù)碼管上,并將溫度通過紅外發(fā)送到紅外接收頭,然后解調(diào)解碼數(shù)據(jù),將溫度顯示出來,實(shí)現(xiàn)溫度的無線測(cè)量 關(guān)鍵字:STC89C52RC;紅外;溫度;調(diào)制;解調(diào)1方案論證與選擇1.1控制器的選擇方案一:采用SP430來處理Msp430是一種超低功耗的混合信號(hào)處理器,采用精簡(jiǎn)指令集,單個(gè)始終走起就可以執(zhí)行一條指令,速度比51快得多。因此用430來處理比較器返回來的數(shù)據(jù)是比較快捷的,但價(jià)格相對(duì)較貴。430供電為3.3V,且操作起來較復(fù)雜。方案二:采用51內(nèi)核單片機(jī)單片機(jī)操作方便快捷,成本低,開發(fā)資源豐富,位尋址方便等,來的
2、數(shù)據(jù)不需要很大的數(shù)據(jù)處理過程,51已完全能夠勝方便,所以該裝置采用STC89c52型的單片機(jī)來進(jìn)行處理,本單片機(jī)一個(gè)機(jī)器一個(gè)時(shí)鐘周期執(zhí)行一條指令,無法解密,低功耗,超低價(jià),高速,高可靠性。1.2溫度顯示方式的選擇與比較方案一:采用數(shù)碼管顯示數(shù)碼管是由多個(gè)發(fā)光二極管封裝在一起組成的8字型的器件,引線已在內(nèi)部連接完成,只需引出他們的各個(gè)筆畫和公共電極??梢杂脕盹@示數(shù)字和字母。方案二:采用LCD1602一種專門用來顯示字母,數(shù)字,符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等的點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣自字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,可以顯示兩行,每行16位數(shù)字或者字符。
3、1602采用標(biāo)準(zhǔn)的16腳借口,相比數(shù)碼管,同樣引腳的情況下,顯示的內(nèi)容更多,焊接更加方便快捷,所以我們選用顯示部分選用LCD1602.1.3紅外的編碼和解碼采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”,其波形如下圖所示。上述“0”和“1”組成的32位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)行二次調(diào)制以提高發(fā)射效率,達(dá)到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射。編碼數(shù)據(jù),載波,發(fā)射,接收解碼如下圖所示2.系統(tǒng)設(shè)計(jì)溫度傳感器控制器溫度顯
4、示紅外發(fā)射紅外接收溫度顯示控制器本系統(tǒng)的溫度傳感器使用DS18b20,控制器選用stc89c51,溫度顯示模塊用LCD1602。(1)對(duì)溫度采集電路采集的溫度進(jìn)行編碼后,紅外發(fā)射管發(fā)射數(shù)據(jù)。(2)紅外一體化接收頭接收到紅外信號(hào)后,對(duì)紅外進(jìn)行解調(diào),因?yàn)榧t外接收頭接收到信號(hào)后就對(duì)信號(hào)進(jìn)行了解調(diào),所以我們就不用設(shè)計(jì)解調(diào)電路。3.電路設(shè)計(jì)3.1單片機(jī)最小系統(tǒng)上圖是比較常用的單片機(jī)最小系統(tǒng)3.2溫度采集發(fā)射電路紅外發(fā)送模塊溫度傳感器模塊液晶顯示模塊溫度傳感器DS18B20采集的溫度,通過單片機(jī)處理顯示在液晶上,然后對(duì)溫度數(shù)據(jù)進(jìn)行編碼,通過紅外發(fā)射電路將溫度信息發(fā)射出去。3.3溫度接收顯示電路接收頭液晶模
5、塊紅外接收頭對(duì)接收到的信號(hào)解調(diào),然后送到單片機(jī)處理,判斷高低電平的時(shí)間來解碼,將溫度數(shù)據(jù)顯示在液晶上。4.軟件設(shè)計(jì)4.1概述:此次用的是DSl8B20作為溫度傳感器進(jìn)行溫度采集,然后將溫度數(shù)據(jù)轉(zhuǎn)化為電信號(hào),通過紅外線發(fā)射,再讓接受端收到溫度信息,并顯示出來。因?yàn)槭俏覀兒附拥氖菃纹瑱C(jī)最小系統(tǒng),所以,我們用的就是無線紅外發(fā)射管和無線紅外接收管來實(shí)現(xiàn)發(fā)送端與接收端數(shù)據(jù)的傳輸,基本可以實(shí)現(xiàn)五米以上距離的信息傳輸。接收端主循環(huán)一直檢測(cè)紅外是否接收完成,如果完成清除完成標(biāo)志,并進(jìn)行數(shù)據(jù)校驗(yàn),校驗(yàn)通過則對(duì)紅外數(shù)據(jù)進(jìn)行轉(zhuǎn)換,temperature為全局,將在display.c由定時(shí)器掃描數(shù)碼管進(jìn)行顯示。信號(hào)燈
6、的閃爍則利用ledcount變量自減進(jìn)行控制發(fā)送端主循環(huán)以一定間隔進(jìn)行18B20溫度讀取,再將溫度數(shù)據(jù)轉(zhuǎn)換為紅外數(shù)據(jù)碼,進(jìn)行紅外發(fā)射,伴隨信號(hào)燈閃爍定時(shí)器0進(jìn)行38K載波的產(chǎn)生。紅外數(shù)據(jù)存入IR_Code數(shù)組,前兩位為引導(dǎo)碼 318為校驗(yàn)碼 1941數(shù)據(jù)具體編碼0 和1 的表示參考NEC紅外協(xié)議,對(duì)0 1的編碼時(shí)間適當(dāng)增大了,以避免其他紅外遙控的干擾。4.2 程序流程圖發(fā)射端計(jì)算溫度值并進(jìn)行存儲(chǔ)顯示在lcd顯示器上將溫度值轉(zhuǎn)化為電信號(hào),用紅外發(fā)射端發(fā)射出去結(jié)束接收端是否有紅外信號(hào)初始化開始錯(cuò)誤顯示error將信息以數(shù)字形式顯示在數(shù)碼管顯示器上否是溫度是否高于x度報(bào)警器報(bào)警是結(jié)束否4.3關(guān)鍵程序
7、模塊(1)數(shù)據(jù)采集模塊#include"18b20.h"void DelayUs2x(unsigned char t) while(-t); void DelayMs(unsigned char t) /延時(shí)tms while(t-) DelayUs2x(245);DelayUs2x(245); /大致延時(shí)1mS /*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0;DQ = 1; /DQ復(fù)位 DelayUs2x(10);DQ = 0; /稍做延時(shí) /單片機(jī)將DQ拉低 DelayUs2x(200); DelayUs2x(200);
8、/精確延時(shí) 大于 480us 小于960us DQ = 1; DelayUs2x(50); /拉高總線 /1560us 后 接收60-240us的存在脈沖 dat=DQ; DelayUs2x(25); /如果x=0則初始化成功, x=1則初始化失敗 /稍作延時(shí)返回 return dat;/*- 讀取一個(gè)字節(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; / 給脈沖信號(hào)/ 給脈沖信號(hào) if(DQ)
9、 dat|=0x80;DelayUs2x(25); return(dat); /*- 寫入一個(gè)字節(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); / 跳過讀序號(hào)列號(hào)的操作WriteOneChar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換DelayMs(20);Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號(hào)列號(hào)的操作 WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度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ā)射碼個(gè)數(shù)/*11.0592M晶振下t毫秒延時(shí)函數(shù)*函數(shù)名 :Delay_ms()*參 數(shù) :unsigned int t*功 能 :t毫秒延時(shí)*返回值 :無*/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-);/*信號(hào)燈
12、閃爍函數(shù)*函數(shù)名 :SignalFlicker()*參 數(shù) :count閃爍次數(shù),time 閃爍時(shí)間*功 能 :信號(hào)燈以time ms時(shí)間間隔閃爍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);/*定時(shí)器0初始化函數(shù)*函數(shù)名 :CarrierWaveInit()*參 數(shù) :無*功 能 :38K載波信號(hào)定時(shí)器初始化*返回值 :無*/void Carr
13、ierWaveInit(void)TMOD|= 0X02; /八位自動(dòng)重裝模式TH0 = 0XF4; /1111 0100 /38k載波信號(hào)TL0 = 0XF4;ET0 = 0; /關(guān)閉TR0 = 0;/*定時(shí)器0中斷函數(shù)載波發(fā)生*函數(shù)名 :CarrierWave()*參 數(shù) :無*功 能 :定時(shí)器中斷產(chǎn)生38KHZ載波信號(hào)*返回值 :無*/void CarrierWave(void) interrupt 1 IR_SEND_IO = IR_SEND_IO;/*紅外數(shù)據(jù)復(fù)位函數(shù)*函數(shù)名 :IrcodeReset()*參 數(shù) :無*功 能 :將紅外發(fā)射碼數(shù)據(jù)進(jìn)行復(fù)位*返回值 :無*/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ā)射碼個(gè)數(shù)*/void DataConversion(unsigned int num,unsigned char* irdata)unsigned char i=IR_CODE_SIZI-3,n=1,f=1;IrcodeReset(); /存儲(chǔ)區(qū)初始化for(n=3;n<18;n+=2) /前8個(gè)存放校驗(yàn)碼10101010 0xAA if(f) irdatan = IR_CODE_1;f=0;else irdatan = IR_CODE_0;f=1;while(num!=0) /數(shù)據(jù)碼存放 十進(jìn)制轉(zhuǎn)二進(jìn)制if(num%2) irdatai = IR_
16、CODE_1; else irdatai = IR_CODE_0; num = num/2;i-=2;/*紅外波發(fā)射函數(shù)*函數(shù)名 :SendIrWave()*參 數(shù) :儲(chǔ)存紅外編碼數(shù)據(jù)的首地址irdata*功 能 :以紅外的方式發(fā)送irdata 的紅外波形數(shù)據(jù)*返回值 :無*/void SendIrWave(unsigned char* irdata)unsigned char count=0;unsigned char i=0;while(1) /發(fā)射引導(dǎo)碼 校驗(yàn)碼 數(shù)據(jù)碼 ON_CARR;for(i=irdatacount; i>0; i-) /載波發(fā)射延時(shí) CarrierWave_
17、DELAY; OFF_CARR;IR_SEND_OFF; /低電平保持count+; for(i=irdatacount; i>0; i-) /低電平延時(shí) 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ù)碼存儲(chǔ)區(qū)unsigned char Ir_Time_count=0;/紅外時(shí)間計(jì)數(shù)變量unsi
18、gned char IR_RECEIVE_OK=0;/紅外接收完成標(biāo)志/*紅外數(shù)據(jù)接收初始化函數(shù)*函數(shù)名 :InitIrReceive*參 數(shù) :無*功 能 :配置紅外接收需要的定時(shí)器和中斷*返回值 :無*/void InitIrReceive(void)/*- 定時(shí)器0初始化-*/TMOD|= 0x02;/定時(shí)器0工作方式2,TH0是重裝值,TL0是初值/8位自動(dòng)重裝 TH0 = 0x00;/重載值 TL0 = 0x00;/初始化值 ET0 = 1;/開中斷 TR0 = 1;/定時(shí)器/計(jì)數(shù)器啟動(dòng)/*- 外部中斷0初始化-*/IT0 = 1;/指定外部中斷0下降沿觸發(fā),INT0 (P3.2)E
19、X0 = 1;/使能外部中斷EA = 1;/*紅外數(shù)據(jù)時(shí)間計(jì)數(shù)函數(shù)*函數(shù)名 :IRTimeCount()*參 數(shù) :無*功 能 :記錄每?jī)蓚€(gè)紅外脈沖時(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) /引導(dǎo)碼判斷 bitnum=0; IR_CODEbitnum=Ir_Time_count; /引導(dǎo)碼 TC9012的頭碼,9ms+4.5ms Ir_Time_count=0; bitnum+; if(bitnum=IR_CODE_SIZI) /接收完成 IR_RECEIVE_OK=1; bitnum=0; else /第一個(gè)觸發(fā)信號(hào)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);/二進(jìn)制轉(zhuǎn)十進(jìn)制 return num;/*紅外碼數(shù)據(jù)校驗(yàn)*函數(shù)名: CheckSucceed()*參 數(shù): 無*功能描述:轉(zhuǎn)換IR_CODE 18的校驗(yàn)碼,與事先設(shè)定值進(jìn)行比較判斷*返回值: 成功1 失敗0*/unsig
22、ned char CheckSucceed(void)unsigned char i=1;unsigned int num=0;for(i=1;i<9;i+) /校驗(yàn)碼位于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)/校驗(yàn)碼和引導(dǎo)碼均校驗(yàn) return 1; else return 0; 5.系統(tǒng)測(cè)試5.1溫度測(cè)試測(cè)試溫度傳感器DSl8B20測(cè)量的溫度是否正確。我們用傳感器和商用電子溫度計(jì)測(cè)試常溫狀態(tài)的的水。然后對(duì)比我們的傳感器是否精確。測(cè)量次數(shù)123456789測(cè)量溫度31.130.431.432.331.629.8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外賣食品合同范例
- 企業(yè)銷售訂單合同范例
- 公會(huì)簽署合同模板
- 建筑工作合同范例
- 農(nóng)資配件出售合同范例
- ddp外貿(mào)合同范例
- 信陽合理用工合同范例
- 廢舊設(shè)備工廠出售合同范例
- 臺(tái)歷印刷合同范例
- 單位燈具供貨合同范例
- 社會(huì)組織協(xié)會(huì)換屆選舉會(huì)議主持詞
- 呼吸科(呼吸與危重癥醫(yī)學(xué)科)出科理論試題及答案
- 鏈工寶在線學(xué)習(xí)平臺(tái)學(xué)員使用操作步聚
- 清新個(gè)人工作述職報(bào)告PPT模板
- 公路工程通用(專用)合同條款匯編.
- 工程施工現(xiàn)場(chǎng)及常用對(duì)話場(chǎng)景英語集錦
- 肺癌的靶向治療法PPT課件.ppt
- 凸透鏡成像規(guī)律動(dòng)畫演示
- 專賣店空間設(shè)計(jì)(課堂PPT)
- 用待定系數(shù)法求一次函數(shù)解析式(1)
- 新安全生產(chǎn)法執(zhí)法檢查表.docx
評(píng)論
0/150
提交評(píng)論