單片機微機原理及接口技術 綜合系統設計報告 題目:紅外線控制密碼鎖 學 院:信息工程學院系電子通信工程 專業班級:電子信息類164班
關于15單片機紅外控制密碼鎖的設計
摘要 電子系統設計環節是為了學生能夠更好地鞏固和實踐所學專業知識而設置的,在本次實踐中,我以《單片機原理及接口》課程中所學知識為基礎,設計了紅外密碼鎖。該系統通過紅外遙控器,判斷哪個按鍵,經數據轉換把數值送入數碼管顯示并識別密碼的正確性。 本系統的設計說明重點介紹了如下幾方面的內容: 1)基于單片機紅外密碼鎖的基本功能,同時對紅外接收與發送進行了簡單的闡述; 2)介紹了系統的總體設計、給出了系統的整體流程框圖,并對其進行了功能模塊劃分及所采用的元器件進行了詳細說明;
目錄 摘要 Ⅰ Abstract Ⅱ 第一章 緒論 5 1 .1 課題背景及目的 5 1. 2 國內外研究現狀 6 第二章 課題任務 6 2 .1 設計簡介 6 2. 2 設計目的 6 2. 3 設計任務 6 第三章 方案描述 7 第四章 理論分析 7 4 .1 遙控器對應碼值 7 4. 2 密碼鎖部分 7 第五章 理論分析 8 5 .1 15單片機 8 5. 2 紅外線原理 8 第六章 電路與程序設計 8 第七章 程序操作實現 10 附件(程序) 10 參考文獻(References) 15
第一章 緒論 1 .1 課題背景及目的 在日常的生活和工作中, 住宅與部門的安全防范、單位的文件檔案、財務報表以及一些個人資料的保存多以加鎖的辦法來解決。若使用傳統的機械式鑰匙開鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。隨著科學技術的不斷發展,人們對日常生活中的安全保險器件的要求越來越高。為滿足人們對鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應運而生。密碼鎖具有安全性高、成本低、功耗低、易操作等優點。 在安全技術防范領域,具有防盜報警功能的電子密碼鎖逐漸代替傳統的機械式密碼鎖,克服了機械式密碼鎖密碼量少、安全性能差的缺點,使密碼鎖無論在技術上還是在性能上都大大提高一步。隨著大規模集成電路技術的發展,特別是單片機的問世,出現了帶微處理器的智能密碼鎖,它除具有電子密碼鎖的功能外,還引入了智能化管理、專家分析系統等功能,從而使密碼鎖具有很高的安全性、可靠性,應用日益廣泛。 隨著人們對安全的重視和科技的發展,許多電子智能鎖(指紋識別、IC卡辨認)已在國內外相繼面世。但是這些產品的特點是針對特定的指紋和有效卡,只能適用于保密要求的箱、柜、門等。而且指紋識識別器若在公共場所使用存在容易機械損壞,IC卡還存在容易丟失、損壞等特點。加上其成本較高,一定程度上限制了這類產品的普及和推廣。鑒于目前的技術水平與市場的接收程度,電子密碼鎖是這類電子防盜產品的主流。 但是接觸式密碼鎖系統都相應的存在著不同的缺點。例如:接觸式密碼鎖系統成本較低,體積小,卡片本身無須電源,但使用不太方便,而且有接觸磨損。相比之下,紅外遙控密碼鎖系統的成本與接觸式密碼鎖系統相當,而且可以進行近距離遙控,使用十分方便。而且它已經與 PC 機的數據庫相結合,可以組成一套酒店房間的門禁管理系統。 由于紅外遙控具有許多優點, 例如紅外線發射裝置采用紅外發光二極管遙控發射器易于小型化且價格低廉; 采用數字信號編碼和二次調制方式,不僅可以實現多路信息的控制,增加遙控功能,提高信號傳輸的抗干擾性,減少誤動作,而且功率消耗低;紅外線不會向室外泄露,不會產生信號串擾;反應速度快、傳輸效率高、工作穩定可靠等。工業設備中,在高壓、輻射、有毒氣體、粉塵等環境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。所以紅外線遙控是目前使用最廣泛的一種通信和遙控手段。 在本設計中,紅外遙控密碼鎖和 PC 機、數據庫相結合,能夠實現適時的、強大的管理,使得整個紅外遙控系統得到更好的完善。 目前大部分的鎖采用的都是機械式的,其最大的缺點是利用簡單工具就能很容易地把鎖打開。針對這種情況,我們設計了一種紅外遙控密碼鎖,而一般設備都采用專用的遙控編碼及解碼集成電路,其制作簡單、容易,但由于特定功能的限制,只適用于專用的電器產品,其應用范圍受到限制。而設計的紅外遙控密碼鎖系統能提高門禁系統的可靠性和安全性,適應市場需要。該系統具有普通電子密碼鎖功能的同時,還增加了遙控功能。該系統具有較強的實際應用價值,所涉及的技術包括:紅外載波數據傳輸技術、單片機控制技術、紅外遙控系統編碼及譯碼技術、電路設計與演示板制作技術等。 第二章 課題任務 2 .1 設計簡介 單片機由于其微小的體積和極低的成本,廣泛的應用于家用電器、工業控制等領域中。在工業生產中。單片機微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片機微型計算機簡稱單片機,特別適用于控制領域,故又稱為微控制器。本系統避開了傳統的鍵盤輸入計算器,大大減少了I/O引腳和鍵盤的復雜性。系統采用STC15系列單片機為中心器件來設計計算器控制器并用數碼管來進行顯示。 2. 2 設計目的 通過本次課題實踐,運用《單片機原理及接口》所學知識及查閱相關資料,完成簡易計算器的設計,達到理論知識與實踐更好結合、提高綜合運用所學知識和設計能力的目的。 通過本次設計訓練,可以使我們在基本思路和基本方法上對基于STC15單片機的嵌入式系統設計有一個比較感性的認識,并具備一定程度的設計能力。 2. 3 設計任務 在本次課題實踐中,主要完成如下方面的設計任務: 1)掌握15單片機的最小電路及外圍擴展電路的設計方法; 2)了解單片機數據轉換功能及工作過程; 3)完成主要功能模塊的硬件電路設計及必要的參數確定; 4)用keil軟件完成程序的編寫及調試。 第三章 方案描述 總體框圖如圖1所示。   圖1
本密碼鎖是以STC15W4系列58S4單片機為核心構成的簡易密碼鎖系統。該系統通過單片機控制,實現對紅外遙控器掃描進行實時的按鍵檢測,并把檢測數據存儲并判斷顯示出來。 第四章 理論分析 4 .1 遙控器對應碼值 先確定輸入的數字,并把數字顯示出來。首先要判斷紅外遙控器上是哪個鍵按下,找到每個數字的編碼地址,依次如下: “0”: 0x16 “1”: 0x0c “2”: 0x18 “3”: 0x5e “4”: 0x08 “5”: 0x1c “6”: 0x5a “7”: 0x42 “8”: 0x52 “9”: 0x4a 當按下數字鍵的時候可直接讓它在顯示在數碼管上,再輸入第二個數(同第一個數的顯示方法一樣),以上各顯示結果的地址均已固定。 4. 2 密碼鎖部分 先用3個數碼管位碼分別顯示輸入的密碼,輸入第幾位密碼,密碼是否正確(0/1)。開始定義一個數組用來存儲初始密碼,再有另一個數組存儲輸入的8位密碼,然后通過數碼管顯示,最后是密碼判斷,即兩個數組進行比較,若相等則密碼正確,否則錯誤。 第五章 主要器件介紹 5.1、單片機 本次實驗采用了STC15系列單片機,編程實驗所應用的STC15W4K32S4芯片電壓工作范圍寬,不需要任何轉換芯片,可以直接通過電腦USB接口進行ISP下載編程,集成了更多的SRAM、定時器、串口,集成了更多的高能部件,比較器,帶死區控制的6路15位專用PWM,開發了功能強大的在線編程軟件。 5.2、紅外線發射和接收 人們見到的紅外遙控系統分為發射和接收兩部分。發射部分的發射元件為紅外發光二極管,它發出的是紅外線而不是可見光。 常用的紅外發光二極管發出的紅外線波長為 940nm 左右,外形與普通φ5mm 發光二極管相同,只是顏色不同。一般有透明、黑色和深藍等三種。判斷紅外發 光二極管的好壞與判斷普通二極管一樣的方法。單只紅外發光二極管的發射功率約 100mW。紅外發光二極管的發光效率需用專用儀器測定,而業余條件下,只能憑經驗用拉距法進行粗略判定。 接收電路的紅外接收管是一種光敏二極管,使用時要給紅外接收二極管加反向偏壓,它才能正常工作而獲得高的靈敏度。紅外接收二極管一般有圓形和方形兩種。由于紅外發光二極管的發射功率較小,紅外接收二極管收到的信號較弱,所以接收端就要增加高增益放大電路。然而現在不論是業余制作或正式的產品,大都采用成品的一體化接收頭。紅外線一體化接收頭是集紅外接收、放大、濾波和比較器輸出等的模塊,性能穩定、可靠。所以,有了一體化接收頭,人們不再制作接收放大電路,這樣紅外接收電路不僅簡單而且可靠性大大提高。 第六章 電路與程序設計 主程序進行程序中用到的一些存儲單元的初始化。首先,進行存儲單元初始化,給數碼管顯示單元,紅外發送與接收程序,數碼管顯示數據轉換程序,數碼管顯示數據轉換子程序和顯示子程序。 5.1.紅外信號發射程序框圖
5.2.遙控接收程序框圖
紅外遙控器的0碼和1碼 進入中斷 紅外接收程序
第七章 程序操作實現  
(輸入密碼) (密碼錯誤顯示0) (密碼正確顯示1)
附件(程序) - #include "stc15.h"//包含單片機頭文件
- #include "gpio.h"//包含初始化UO端口頭文件
- #include <intrins.h>
- #define uchar unsigned char
- #include"595hc.h"//包含數碼管是示頭文件
- unsigned char IR_UserH=0;//用戶碼(地址)高字節
- unsigned char IR_UserL=0;//用戶碼(地址)低字節
- unsigned char IR_data=0;//數排碼
- unsigned char IR_data2=0; //數據反碼
- unsigned char passnum[8]={6,6,6,6,6,6,6,6};//初始正確密碼
- unsigned char intnum[8]={0,0,0,0,0,0,0,0};
- unsigned char number=0;
- unsigned char t;
- unsigned char l;
- unsigned char i;
- typedef unsigned char u8;
- sbit out_0=P4^6;
- sbit out_1=P4^7;
- unsigned char code_length=0;//遙控代碼長度
- unsigned long code_t=0;//臨時保存遙控代碼
- unsigned long code_tt=0;//保存遙控代碼
- bit bdata code_right=0;//接收代碼是否為正確標志位
- unsigned char d_code_x(unsigned int t) //判斷紅外位是0還是1的子程序
- {
- if(t<=0x480&&t>=0x300) //0x300~0x480為有效0碼
- return 0;
- else
- {
- if(t<=0x8ee&&t>=0x700) //0x700~0x8ee為有效1 碼
- return 1;
- else
- return 0xff; //錯誤
- }
- }
- void receive_code()interrupt 10 //判斷中斷INT2下降沿觸發接收代碼
- {
- unsigned int temp;
- unsigned long dd_code;
- if(TR0==0)
- {
- TH0=TL0=0;
- TR0=1;
- }
- else
- {
- TR0=0;
- temp=TH0*256+TL0;
- TH0=TL0=0;
- TR0=1;
- dd_code=d_code_x(temp);
- if(dd_code==0||dd_code==1)
- {
- code_t=code_t+(dd_code<<code_length);
- code_length++; //遙控代碼長度
- }
- else
- {
- if(code_length>=32&&code_right==0)
- {
- code_tt=code_t;
- code_right=1; //正確
- }
- code_length=0; //清零
- code_t=0;
- }
- }
- }
- //延遲
- void yans(u8 n) //@11.0592MHz
- {
- unsigned char i, j,x;
- for(x=0;x<n;x++)
- {
- _nop_();
- _nop_();
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
- }
- void main(void)
- {
- GPIO(); //初始化IO端口為準雙向口
- TMOD=0x11; //T0定時方式1,T定時方式1
- INT_CLKO|=0X10; //開外部中斷INT2,下降沿觸發
- TR0=0; //定時器0計數開關
- EA=1; //開CPU總中斷EA
- while(1){
- number=0;
- i=0;
- while(number!=8)
- {
- IR_UserL=(unsigned char)(code_tt&0xff); //用戶碼低8位
- IR_UserH=(unsigned char)((code_tt>>8)&0xff); //高八位
- IR_data=(unsigned char)((code_tt>>16)&0xff); //數據碼8位
- IR_data2=(unsigned char)((code_tt>>24)&0xff); //數據反碼8位
- if(code_right==1)
- {
- INT_CLKO&=0xEF; //關外部中斷INT2
- code_right=0;
- switch(IR_data) //紅外接收判斷
- {
- case 0x16:intnum[l]=(unsigned char)(0);Dis_buf[0]=0;l++;number++;/*yans(50000);*/break; //掃描碼對應為十六進制數,0
- case 0x0c:intnum[l]=(unsigned char)(1);Dis_buf[0]=1;l++;number++;/*yans(50000);*/break; //1
- case 0x18:intnum[l]=(unsigned char)(2);Dis_buf[0]=2;l++;number++;/*yans(50000);*/break; //2
- case 0x5e:intnum[l]=(unsigned char)(3);Dis_buf[0]=3;l++;number++;/*yans(50000);*/break; //3
- case 0x08:intnum[l]=(unsigned char)(4);Dis_buf[0]=4;l++;number++;/*yans(50000);*/break; //4
- case 0x1c:intnum[l]=(unsigned char)(5);Dis_buf[0]=5;l++;number++;/*yans(50000);*/break; //5
- case 0x5a:intnum[l]=(unsigned char)(6);Dis_buf[0]=6;l++;number++;/*yans(50000);*/break; //6
- case 0x42:intnum[l]=(unsigned char)(7);Dis_buf[0]=7;l++;number++;/*yans(50000);*/break; //7
- case 0x52:intnum[l]=(unsigned char)(8);Dis_buf[0]=8;l++;number++;/*yans(50000);*/break; //8
- case 0x4a:intnum[l]=(unsigned char)(9);Dis_buf[0]=9;l++;number++;/*yans(50000);*/break; //9
-
- /*default:code_tt=0;*/
- }
- }
- INT_CLKO|=0x10; //開外部中斷INT2
- }
- Dis_buf[3]=(unsigned char)(number+1);
- display();
- }
- //密碼判斷
- {for(i=0;i<8;i++)
- {
- if(intnum[i]==passnum[i])t++;
- else if(intnum[i]!=passnum[i])
- {
- Dis_buf[7]=(unsigned char)(0);
-
-
- display();break;
- }
- }
- if(t==8){
- Dis_buf[7]=(unsigned char)(1);
-
-
- display();t=0;
- }
- }
- }
- }
復制代碼
完整的Word格式文檔51黑下載地址:
NANCHANG UNIVERSITY.docx
(942.54 KB, 下載次數: 33)
2018-7-11 15:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|