紅外報警器18頁_第1頁
紅外報警器18頁_第2頁
紅外報警器18頁_第3頁
紅外報警器18頁_第4頁
紅外報警器18頁_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、課程設計報告課程名稱:單片機原理及應用課程設計設計題目: 紅外報警器 系 別: 通信與控制工程系 專 業: 電子信息工程 班 級: 學生姓名: 學 號: 起止日期: 指導教師: 教研室主任: 指導教師評語: 指導教師簽名: 年 月 日成績評定項 目權重成績1、設計過程中出勤、學習態度等方面0.22、課程設計質量與答辯0.53、設計報告書寫及圖紙規范程度0.3總 成 績 教研室審核意見:教研室主任簽字: 年 月 日教學系審核意見: 主任簽字: 年 月 日摘 要本次紅外報警器的設計分為三部分:紅外發送、串口通信、紅外接收。本次設計用到了兩塊51單片機開發板,分別稱為A機、B機。A機作為紅外發送使用

2、,B機作為紅外接收用。用外中斷0、外中斷1控制紅外發送的啟停和清零。本次設計采用C語言編制程序,A機實現了發送頻率為38khz左右的紅外線,并將發送次數在A機上顯示。再通過串口通信,將發送次數傳到B機,同時B機的紅外接收頭接收紅外線,并將接收到的次數在B機上顯示,將接收次數與發送次數對比,若相等則繼續接收,若不等則驅動蜂鳴器報警。本次設計的外電路有:51單片機最小系統,紅外發送電路,紅外接收電路,8255擴展單片機I/O口驅動數碼管、報警電路等。關鍵詞:紅外發送 紅外接收 數據傳輸 報警 目錄設計要求11 方案論證與對比11.1 整體設計思路11.2 方案一11.3 方案二11.4 方案對比1

3、2 硬件電路設計12.1 紅外發送電路的設計12.2 紅外接收電路的設計22.3 報警電路的設計22.4 顯示電路設計22.5 主控電路設計33系統流程圖44系統功能測試與整體指標55使用的儀器及元件56總結與致謝5參考文獻6附錄一:軟件編程7紅外報警器設計要求發送端:發送紅外線,并記錄發送的次數,用數碼管顯示同時將發送的次數通過串口發給接收端,由按鍵來控制控制開、停和清零。接收端:接收紅外線,并記錄接收到的次數,與發送端通過串口連接,當紅外接收到的次數小于次數小于串口傳送過來的次數時,報警。1 方案論證與對比1.1 整體設計思路A機發射紅外線,記錄發送次數并顯示,發送與B機的聯絡信號,串口通

4、信,實現數據的傳輸B機接收紅外,記錄接收次數,并與傳來的數據進行比較,不等,報警1.2 方案一采用匯編語言編制程序,分兩個大模塊進行編程即發送模塊和接收模塊,數據的通信放到兩個模塊中,形成統一的波特率,并握手連接。此外B機接收紅外時,采用定時器0的計數功能對所接收的紅外進行計數,同時可以顯示。1.3 方案二采用C語言編制,模塊劃分同方案一,但是B機接收紅外時通過查詢P1.1是否是低電平來計數,與數碼管顯示不同步。1.4 方案對比方案一編程復雜,寄存器存儲器的使用受限,加大了編程的難度。查詢紅外時需將P1.1口與定時器0相連,才可以用定時器0的計數功能,采用此方案,還需改進開發板。方案二編程相對

5、簡單,可以降低設計的難度。查詢是否有紅外時,不需要改進開發板。綜上所述,選擇方案二來進行設計。2 硬件電路設計2.1 紅外發送電路的設計根據設計要求,51單片機要控制紅外發送端,其具體電路如圖1所示:圖 1 紅外發送原理圖此處的P1.0即為單片機的P1.0口,這里低電平有效。當P1.0=0時,有紅外發送。反之沒有紅外發送。通過使用單片機內部的定時器,控制P1.0的輸出脈沖周期,進而產生38khz的調制紅外線,即所需發送的紅外線。設計中不斷對P1.0取反,取反50次后,即算為A機發了一次紅外。之后讓P1.0 = 1,持續一小段時間后,再對P1.0反復取反,執行50次后,再計數。依此類推。2.2

6、紅外接收電路的設計接收端采用接收電路,原理圖如圖2所示:圖 2 紅外接收電路原理圖 這里連接單片機的P1.1口,低點平有效。當P1.1=0時,表示接收到了紅外。反之沒有接收到紅外。2.3 報警電路的設計當接收次數與發送次數不等時,報警。其電路電路如圖3示:圖 3 報警電路當控制單片機的P3.3引腳為一定頻率的脈沖電平時,即產生用于發聲脈沖,就可以驅動蜂鳴器電路,也即報警。2.4 顯示電路設計用數碼管顯示發送接收次數,電路如圖4示:圖 4 顯示電路原理圖數碼管由8255控制,8255的A口控制數碼管的位選,低電平有效。B口控制段選,通過編碼可以顯示09的數字,也是低電平有效。2.5主控電路設計主

7、控電路即單片機的接口及其與8255芯片的連接,其具體電路如圖5:圖 5 主控芯電路原理圖 此部分電路是本次設計的核心,同過對單片機編程,將各部分電路連接成一個整體,實現紅外報警器這一設計。使用單片機對可編程I/O擴展芯片8255進行操控,用來控制六位數碼管顯示。3系統流程圖8255與中斷初始化紅外調制與發送紅外次數記錄串口發送次數顯示紅外次數發連絡信號A機8255與中斷初始化查詢紅外顯示接收紅外次數NY接收紅外次數記錄接收發送?循環已完?Y結束N循環已完?Y結束開始開始B機N報警4系統功能測試與整體指標將代碼燒入到相應的A、B機,進行測試,可得到以下的測量結果,見下表:表格 1 系統測試結果測

8、量序號A機發送值B機接收值是否報警1000000000000否2000080000078否3000120000117是4000255000255否5000000000000否6000003000003否由以上表格的數據可知,發送次數為255時,A,B機將自動清零,再重新發送并計數。當發送和接收的值不相等時也即相差大于2時,將會報警,這里的誤差允許為2是為了避免開機脈沖造成一個干擾紅外而誤報。相等時不報警并繼續接收。以上已證明紅外報警器的功能已實現。5使用的儀器及元件紅外報警器元件清單元件及器件數量單片機開發板 版本:2011B2杜邦線25V電源1USB電源線16總結與致謝 通過本次紅外報警器的

9、設計,自我感覺已對51單片機有一個深入的了解,為后面單片機的學習打下了基礎。編程思想也得到了鍛煉,在編程中,學會了嚴謹的思維模式。我們懂得了,作為一個程序員,要有探索精神,要懂得將問題細化,分模塊解決問題,還要有堅持不懈,不怕困難的精神 。實例項目的研究,可以讓我們更具體的,更有目標的去學習單片機課程。通過自我學習,我們可以學到課本以外的知識,體驗單片機在做項目時可能遇到的問題。另外,我們感謝學校給我們提供課程設計這樣一個機會,讓我們能自主研究,自主學習,共同探索。參考文獻1 張鑫.單片機原理與應用(第二版) 電子工業出版社2 何立民.MCS-51 單片機應用系統設計.北京:北京航空航天大學出

10、版社,2003.3 朱定華,戴汝平.單片微機原理與應用.(M) 北京:清華大學出版社,200316附錄一:軟件編程 這一部分由A機來完成,實現37 khz的紅外發送,并將所發次數記錄并顯示再通過串口通信傳送出去。發送次數最大為255次。具體代碼如下:#include#include8255.h#includedelay.h#define uint unsigned int #define uchar unsigned char#define sint signed int #define schar signed char#define ulong unsigned long sbit irs

11、end=P10;/紅外控制端接在P1.0上void send_ir();/申明發送紅外函數void count_ir_times();/申明計錄紅次數函數void display_times();/申明顯示函數uchar serial_send(uchar dat);/申明串口發送函數void init();/申明串口和外中斷初始化函數void timestrans();/申明“次數轉換”函數,將紅外的次數拆開,為顯示作準備。uchar code smg_du=0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28;/定義“09“對應的數碼管段碼數組

12、uchar code smg_we=0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/定義數碼管的位選碼uchar timesdata6;/定義timesdata數組,用于保存times拆開后的數據.uchar times;/定義全局變量times,用于保存紅外發送的次數。uchar sendover;/定義一個發送完成標志位。uchar start;/定義一個開始標志。/*void main ()/主函數 COM8255=0x80;/初始化8255為工作方式0,端口為輸出方式.init();/串口和外中斷工作初始化.while(1)/大循環。 if(start)/如果start非

13、零,則執行以下。(此處用start來控制紅外的發送開始與暫停,start的值由外中斷1的按鍵來控制)send_ir();/發送紅外線。count_ir_times();/記錄紅外次數。/以上說明:如果start標志被打開,則會發送紅外并記錄紅外次數,如果start標志沒有打開,則不會發送紅外,且不會計錄紅外次數。serial_send(times);/通過串口將紅外發送的次數times發給B機。display_times();/顯示紅外次數。serial_send(0x00);/發聯絡信號。用于使B機退出顯示去查詢紅外。/*void init()/申明串口初始化函數TMOD=0x20;/設置定

14、時器1為工作方式2TH1=0xfd;/裝初值,用于產生串口通信的波特率。TL1=0xfd;/裝入初值,同上。TR1=1;/啟動定時器1SM0=0;SM1=1;/設置串口為工作方式1EA=1;/開總中斷。EX0=1;/開外中斷0。EX1=1;/開外中斷1。IT0=1;/外中斷0為負邊緣觸發。IT1=1;/外中斷1為負邊緣觸發。 void send_ir()/發送紅外函數 uchar i;for(i=50;i0;i-)irsend=0; /調制紅外為38KHz左右delay_10us(2); /用于控制調制的頻率.irsend=1; /翻轉。irsend=1;/發完紅外后,關掉紅外控制口(發送紅外

15、時電流很大,發完關掉好些)sendover=1;/發完后,發關完成標志置1,供后面計數查詢。/*void count_ir_times()/計錄紅次數函數if(sendover)/查詢紅外發送是否完成。完成則執行以下。 sendover=0;/發送完成標志清零,為下次使用作初始化。times+;/次數加1,記錄紅外次數。/*8void display_times()/顯示函數uchar i,j;timestrans();/拆解紅外次數。見下方詳細函數for(j=50;j0;j-)/此處把顯示循環50次,有延時的作用for(i=0;i6;i+)/動態示次數.PB8255=smg_dutimesd

16、atai;/送段碼。PA8255=smg_wei;/送位選碼。delay_50us(20);/延時點亮。PB8255=0xff;/熄滅。防鬼影。/*uchar serial_send(uchar dat)/串口發送函數 if(dat=255) times=0;/如果發送的是255,則將紅外次數清零(程序設計中,255是作為清零的標志,0零是作為雙機握手信號,B機中會提到。) SBUF=dat;/將要發送的數據通過串口發送給B機。if(!TI);/等待發送完成。TI=0;/發送完成則軟件清零。/*void timestrans()/“16進制數轉10進制數”函數timesdata0=times%

17、10;/取得紅外次數的個位值存timedata0.timesdata1=times%100/10;/取得紅外次數的十位值存timedata1.timesdata2=times%1000/100;/取得紅外次數的百位值存timedata2.void int0() interrupt 0serial_send(255);/當按下外中斷0的按鍵時,發送一個255,(發255是供查詢的,A機查詢到時是255時,會將A機清零,B機如果查詢到發的是255,則會將B機清零)void int1() interrupt 2/外中斷1start+;/當按一次外中斷1按鍵時,start標志變為1,供A機查詢用于控制

18、開始與暫停發送紅外。if(start=2) start=0;/當第二次按外中斷1按鍵時,start標志變為0,功能同上。這一部分由B機來完成,B機使用接收頭接收紅外,將接收次數保存并顯示,并與A機傳來的次數進行比較,不等,則報警。具體代碼如下:#include #include8255.h#includedelay.h#define uint unsigned int #define uchar unsigned char#define sint signed int #define schar signed char#define ulong unsigned long sbit ir=P1

19、1;/位定義紅外按收引腳sbit beep=P33;/位定義蜂鳴器控制引腳void check_ir();/申明查詢紅外函數。void display_times();/申明顯示函數void serial_init();/申明串口初始化函數void timestrans();/申明次數拆解函數void ring();/申明報警函數。unsigned char code smg_du=0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28;/定義“09“對應的數碼管段碼數組unsigned char code smg_we=0xdf,0xef,0xf7

20、,0xfb,0xfd,0xfe;/定義六位數碼管的位選碼uchar timesdata6;/定義timesdata數組,保存16進制數轉10進制數的數據.uint times;/定義全局變量times,用于保存紅外發送的次數。uchar receiveok;/定義一個接收完成標志位。uchar serialdat;/定義一個串口接收變量,用于存放串口收到的數據。uchar checkir;/定義一個查詢紅外的標志。uchar ringflag;/定義一個報警標志。void main ()/主函數 COM8255=0x80;/初始化8255為工作方式0,端口為輸出方式.serial_init()

21、;/串口工作初始化.while(1)/大循環。 check_ir();/查詢紅外。if(!checkir) display_times();/查詢后顯示已接收到紅外的次數。if(ringflag)/如果報警標志開啟,則報警。 ring();/報警。void serial_init()/申明串口初始化函數TMOD=0x20;/設置定時器1為工作方式2TH1=0xfD;TL1=0xfD;/裝入初值TR1=1;/啟動定時器1SM0=0;SM1=1;/設置串口為工作方式1REN=1;/接收使能。EA=1;/開總中斷。ES=1;/串口中斷始能。void check_ir()if(!times)/當times為零時(即開機或復位) if(ir);/等待第一次紅外。(第二次則不要等待,第二次t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論