




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于紅外通信的聲光報(bào)警系統(tǒng)1 設(shè)計(jì)要求1) 包括電信號轉(zhuǎn)化成數(shù)字信號系統(tǒng),數(shù)字顯示系統(tǒng),報(bào)警系統(tǒng)等2) 測量系統(tǒng)的性能特點(diǎn)等3) 利用光電傳感器進(jìn)行信號的采集及控制。二方案介紹 本設(shè)計(jì)方案是通過溫度傳感器12b20采集溫度數(shù)據(jù),單片機(jī)a接收到溫度數(shù)據(jù)后,通過紅外發(fā)射管發(fā)送出去,單片機(jī)b通過紅外接受管hs0038b接收數(shù)據(jù),經(jīng)過單片機(jī)處理后得到溫度信息,最終來實(shí)現(xiàn)聲光報(bào)警系統(tǒng)的功能。3 各模塊功能介紹 1.紅外發(fā)送模塊 在實(shí)際的通信領(lǐng)域,發(fā)出來的信號一般有較寬的頻譜,而且都是在比較低的頻率段分布大量的能量,所以稱之為基帶信號,這種信號是不適合直接在信道中傳輸?shù)摹楸阌趥鬏?、提高抗干擾能力和有效的
2、利用帶寬,通常需要將信號調(diào)制到適合信道和噪聲特性的頻率范圍內(nèi)進(jìn)行傳輸,這就叫做信號調(diào)制。在通信系統(tǒng)的接收端要對接收到的信號進(jìn)行解調(diào),恢復(fù)出原來的基帶信號。 本方案參考普通電視遙控器38k載波,來對信號進(jìn)行調(diào)制。 38k載波通過單片機(jī)定時(shí)來實(shí)現(xiàn)。 2.紅外接收模塊hs0038b 正常的通信來講,接收端要首先對信號通過監(jiān)測、放大、濾波、解調(diào)等等一系列電路處理,然后輸出基帶信號。但是紅外通信的一體化接收頭 HS0038B,已經(jīng)把這些電路全部集成到一起了,我們只需要把這個(gè)電路接上去,就可以直接輸出我們所要的基帶信號,及溫度數(shù)據(jù)。 3.溫度傳感器18b20單片機(jī)可以通過 1-Wire 協(xié)議與 DS18B
3、20 進(jìn)行通信,最終將溫度讀出。 1-Wire 總線的硬件接口很簡單,只需要把 DS18B20 的數(shù)據(jù)引腳和單片機(jī)的一個(gè) IO 口接上就可以。通過查看該芯片時(shí)序圖,用編程方式讀取溫度。 4.數(shù)碼管 本方案采用的是八段共陽極數(shù)碼管,通過動態(tài)掃描方式顯示數(shù)據(jù)。 5.蜂鳴器 采用無源蜂鳴器,給輸入引腳接上不同頻率的方波,可以產(chǎn)生不同音階的聲音。本實(shí)驗(yàn)采用1000hz。 4 方案設(shè)計(jì)過程 紅外發(fā)送編碼參考了nec協(xié)議并稍作修改。定義了起始碼為9ms低電平和4ms的高電平。低電平0定義為1ms的低電平和1ms的高電平,高電平1定義為1ms的低電平和3ms的高電平。38k載波采用定時(shí)器0的8位自動重裝模式
4、,初值0xf4。在設(shè)計(jì)過程中,使用示波器測量發(fā)送接收的波形,基本一樣,沒有誤差。收發(fā)有效距離為1米,超過1米數(shù)據(jù)顯示錯(cuò)誤,本方案還有很大的提高空間5 實(shí)驗(yàn)源程序 發(fā)送 main.c #include<reg52.h> sbit CarryWave = P17;sbit ir_send = P16; void TransData(unsigned char _data);void CarrierWaveInit(void);void delay_ms(unsigned int t);void ConfigTimer0(unsigned int ms);void TransData2(
5、unsigned char _data2);extern bit Start18B20();extern bit Get18B20Temp(int *temp);bit flag1s=0;bit res=0; int temp; /讀取到的當(dāng)前溫度值unsigned char T0RH = 0; /T0重載值的高字節(jié)unsigned char T0RL = 0; /T0重載值的低字節(jié)unsigned char intT,decT; void main() EA=1; PT1=1; ConfigTimer0(1); CarrierWaveInit(); Start18B20(); /啟動DS18
6、B20 while(1) TransData(intT); TransData2(decT); if (flag1s) /每秒更新一次溫度 flag1s = 0; res = Get18B20Temp(&temp); /讀取當(dāng)前溫度 if (res) /讀取成功時(shí),刷新當(dāng)前溫度顯示 intT = temp >> 4;/intT=intT/16+intT%16; /分離出溫度值整數(shù)部分 decT = temp & 0xF; /分離出溫度值小數(shù)部分 decT = decT*10/16;/a=intT/10; /整數(shù)部分?jǐn)?shù)據(jù)處理/b=intT%10; Start18B20
7、(); /重新啟動下一次轉(zhuǎn)換 void TransData(unsigned char _data) unsigned char i; ir_send = 0; delay_ms(9); ir_send= 1; /輸出0 delay_ms(4); /4ms的啟動低電平 for(i=0;i<8;i+) ir_send= 0; /輸出1delay_ms(1); if(_data&(1<<i) ir_send=1;delay_ms(3); /1左移i位 ,先發(fā)低位 /如果發(fā)送1 則高低電平比為1:1 else ir_send=1; delay_ms(1); /如果發(fā)送0 則
8、高低電平比為1:3 ir_send = 1;/delay_ms(300);void TransData2(unsigned char _data2) unsigned char j; for(j=0;j<8;j+) ir_send= 0; /輸出1delay_ms(1); if(_data2&(1<<j) ir_send=1;delay_ms(3); /1左移i位 ,先發(fā)低位 /如果發(fā)送1 則高低電平比為1:1 else ir_send=1; delay_ms(1); /如果發(fā)送0 則高低電平比為1:3 ir_send=1;/*定時(shí)器1初始化函數(shù)*函數(shù)名 :Carri
9、erWaveInit()*參 數(shù) :無*功 能 :38K載波信號定時(shí)器初始化*返回值 :無*/void CarrierWaveInit(void) EA=1; TMOD &= 0x0f; /清零T0的控制位 TMOD |= 0x20; /八位自動重裝模式TH1 = 0XF4; /38k載波信號TL1 = 0XF4;ET1 = 1; /打開TR1 = 1;/*定時(shí)器1中斷函數(shù)載波發(fā)生*/*函數(shù)名 :CarrierWave()*參 數(shù) :無*功 能 :定時(shí)器中斷產(chǎn)生38KHZ載波信號*返回值 :無*/void CarrierWave(void) interrupt 3 CarryWave
10、= CarryWave; void delay_ms(unsigned int t) /誤差 -0.651041666667us unsigned char a,b;for(;t>0;t-) for(b=4;b>0;b-) for(a=43;a>0;a-);void ConfigTimer0(unsigned int ms) unsigned long tmp; /臨時(shí)變量 tmp = 11059200 / 12; /定時(shí)器計(jì)數(shù)頻率 tmp = (tmp * ms) / 1000; /計(jì)算所需的計(jì)數(shù)值 tmp = 65536 - tmp; /計(jì)算定時(shí)器重載值 tmp = tm
11、p + 12; /補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差 T0RH = (unsigned char)(tmp>>8); /定時(shí)器重載值拆分為高低字節(jié) T0RL = (unsigned char)tmp; TMOD &= 0xf0; /清零T0的控制位 TMOD |= 0x01; /配置T0為模式1 TH0 = T0RH; /加載T0重載值 TL0 = T0RL; ET0 = 1; /使能T0中斷 TR0 = 1; /啟動T0/* T0中斷服務(wù)函數(shù),完成1秒定時(shí) */void InterruptTimer0() interrupt 1 static unsigned int tmr1s
12、 = 0; TH0 = T0RH; /重新加載重載值 TL0 = T0RL; tmr1s+; if (tmr1s >=700) /定時(shí)1s tmr1s = 0; flag1s = 1; 18b20.源程序#include <reg52.h>#include <intrins.h>sbit IO_18B20 = P32; /DS18B20通信引腳/* 軟件延時(shí)函數(shù),延時(shí)時(shí)間(t*10)us */void DelayX10us(unsigned char t) do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(
13、); _nop_(); _nop_(); while (-t);bit Get18B20Ack()bit ack;EA = 0;IO_18B20 = 0;DelayX10us(50);IO_18B20 = 1;DelayX10us(6);ack = IO_18B20;while(!IO_18B20);EA = 1;return ack;void Write18B20(unsigned char dat)unsigned char mask;EA = 0;for(mask=0x01; mask!= 0; mask<<=1)IO_18B20 = 0;_nop_();_nop_();if
14、(mask&dat) = 0)IO_18B20 = 0;elseIO_18B20 = 1;DelayX10us(6);IO_18B20 = 1;EA = 1;unsigned char Read18B20()unsigned char dat;unsigned char mask;EA = 0;for(mask=0x01; mask!=0; mask<<=1)IO_18B20 = 0;_nop_();_nop_();IO_18B20 = 1;_nop_();_nop_();if(!IO_18B20)dat &= mask;elsedat |= mask;DelayX
15、10us(6);EA = 1;return dat;bit Start18B20()bit ack;ack = Get18B20Ack();if(ack = 0)Write18B20(0xCC);Write18B20(0x44);return ack;bit Get18B20Temp(int *temp)bit ack;unsigned char LSB, MSB;ack = Get18B20Ack();if(ack = 0)Write18B20(0xCC);Write18B20(0xBE);LSB = Read18B20();MSB = Read18B20();*temp = (int)MS
16、B<<8) + LSB;return ack;接收 main.c#include <reg52.h>sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;sbit LED0=P00;sbit LED1=P03;sbit LED2=P04;sbit LED3=P07;sbit BUZZ=P16;bit led0=1,led1=1,led2=1,led3=1;unsigned char code LedChar = /數(shù)碼管顯示字符轉(zhuǎn)換表 0xC0, 0xF9
17、, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E;unsigned char LedBuff6 = /數(shù)碼管顯示緩沖區(qū) 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF;unsigned char T0RH = 0; /T0重載值的高字節(jié)unsigned char T0RL = 0; /T0重載值的低字節(jié)unsigned char intT=0;extern bit irflag;extern unsigned char ircode4;extern vo
18、id InitInfrared(void);void ConfigTimer0(unsigned int ms);void main() EA = 1; /開總中斷 ENLED = 0; ADDR3 = 1; InitInfrared(); /初始化紅外功能 ConfigTimer0(1); /配置T0定時(shí)1ms PT0 = 1; /配置T0中斷為高優(yōu)先級,啟用本行可消除接收時(shí)的閃爍 while (1) if (irflag=1) /接收到紅外數(shù)據(jù)時(shí)刷新顯示 irflag = 0;intT=ircode0&0x0f+(ircode0>>4)*16 ; LedBuff2 =
19、LedCharintT/10; /用戶碼顯示 LedBuff1 = LedCharintT%10 & 0x7f; ;/ LedBuff1 = LedChar5; /鍵碼顯示 LedBuff0 = LedCharircode1; /* 配置并啟動T0,ms-T0定時(shí)時(shí)間 */void ConfigTimer0(unsigned int ms) unsigned long tmp; /臨時(shí)變量 tmp = 11059200 / 12; /定時(shí)器計(jì)數(shù)頻率 tmp = (tmp * ms) / 1000; /計(jì)算所需的計(jì)數(shù)值 tmp = 65536 - tmp; /計(jì)算定時(shí)器重載值 tmp =
20、 tmp + 10; /補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差 T0RH = (unsigned char)(tmp>>8); /定時(shí)器重載值拆分為高低字節(jié) T0RL = (unsigned char)tmp; TMOD &= 0xF0; /清零T0的控制位 TMOD |= 0x01; /配置T0為模式1 TH0 = T0RH; /加載T0重載值 TL0 = T0RL; ET0 = 1; /使能T0中斷 TR0 = 1; /啟動T0/* 數(shù)碼管動態(tài)掃描刷新函數(shù),需在定時(shí)中斷中調(diào)用 */void LedScan() static unsigned char i = 0; /動態(tài)掃描索引P
21、0=0xff; switch(i)case 0: ADDR2=0; ADDR1=0; ADDR0=0; i+; P0=LedBuff0;break;case 1: ADDR2=0; ADDR1=0; ADDR0=1; i+; P0=LedBuff1;break;case 2: ADDR2=0; ADDR1=1; ADDR0=0; i+; P0=LedBuff2;break;case 3: ADDR2=1; ADDR1=1; ADDR0=0; i+; LED0=led0;break;case 4: ADDR2=1; ADDR1=1; ADDR0=0;i+; LED1=led1;break;cas
22、e 5: ADDR2=1; ADDR1=1; ADDR0=0; i+; LED2=led2;break;case 6: ADDR2=1; ADDR1=1; ADDR0=0; i=0; LED3=led3;break;default:break;/* T0中斷服務(wù)函數(shù),執(zhí)行數(shù)碼管掃描顯示 */void InterruptTimer0() interrupt 1 static unsigned char i; TH0 = T0RH; /重新加載重載值 TL0 = T0RL; LedScan(); /數(shù)碼管掃描顯示 i+;if(i>=100) i=0; if(intT>=32) led0
23、=led0;led1=led1; led2=led2;led3=led3; else led0=1; led1=1;led2=1;led3=1; if(intT>=32) BUZZ=BUZZ;紅外接收初始化函數(shù) #include <reg52.h>sbit IR_INPUT = P33; /紅外接收引腳bit irflag = 0; /紅外接收標(biāo)志,收到一幀正確數(shù)據(jù)后置1unsigned char ircode4; /紅外代碼接收緩沖區(qū)unsigned char i;void InitInfrared(void)IR_INPUT = 1;TMOD &= 0X0F;TMOD |= 0x10;TR1 = 0;ET1 = 0;IT1 = 1;EX1 = 1;unsigned in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人租賃裝載機(jī)作業(yè)合同示例
- 2025年企業(yè)餐飲綜合服務(wù)合同示例
- 2025年個(gè)人商用房抵押借款合同范文
- 2025年健身空間裝修施工合同
- 2025年化工原料年訂購合同范文
- 2025年國際人力資源租賃合同模板
- 2025年度設(shè)施維護(hù)管理策劃合同
- 2025年化工原料訂購合同協(xié)議
- 2025年甘肅建筑職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性考試題庫完整版
- 2025年廣西工商職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試題庫及參考答案1套
- 溶質(zhì)的質(zhì)量分?jǐn)?shù)課件-九年級化學(xué)人教版(2024)下冊
- 2025年湖南汽車工程職業(yè)學(xué)院單招職業(yè)技能測試題庫完整版
- 全國河大版(三起)小學(xué)信息技術(shù)第三冊第1單元第1課《珍藏童年的回憶-文字輸入和格式設(shè)置》教學(xué)設(shè)計(jì)
- 10我們所了解的環(huán)境污染 (教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版道德與法治四年級上冊
- 2025中國煙草/中煙工業(yè)招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 新教科版小學(xué)科學(xué)三年級下冊教案(全冊)
- 2025小學(xué)語文一年級下冊第二單元教學(xué)課件匯編(配套新教材)
- 2025年新蘇教版數(shù)學(xué)一年級下冊課件 期末復(fù)習(xí) 第4課時(shí) 數(shù)據(jù)分類
- 語文課堂中的多媒體教學(xué)方法研究
- 2025年湖南交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 小學(xué)生傳統(tǒng)文化教育的家庭學(xué)校社會協(xié)同機(jī)制
評論
0/150
提交評論