紅外遙控密碼鎖畢業(yè)設計_第1頁
已閱讀1頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  基于51單片機的紅外遙控密碼鎖</p><p>  摘 要:關于如何加強家庭住房安全問題日益突出。傳統(tǒng)的機械防盜鎖構造過于簡單,盡管有些經過加固以及增加相應的防護措施,但是鎖被撬現(xiàn)象屢見不鮮,無法保障人們的安全。本次設計中制作的一種密碼鎖,具有很好的保密性。另外,此處采用的是雙控模式,即使用鍵盤控制的同時,也可以使用遙控器。操作中的提示語用LCD來顯示。密碼由六位0到9的數(shù)字夠成,加大保密

2、強度,此外,本設計中采用的AT24c02具有防止掉電丟失數(shù)據(jù)的作用。</p><p>  關鍵詞:51單片機;密碼鎖;紅外;LCD1602</p><p>  Based on 51 SCM Infrared Remote Control Combination Lock </p><p>  Abstract: Security issues have becom

3、e increasingly prominent on how to strengthen the family home. Traditional mechanical anti-theft lock structure is too simple, although some had been strengthened and increased appropriate protective measures, but lock p

4、ry common occurrences, can not guarantee the safety of people. A lock made ??in the design, with good confidentiality. In addition, here is the dual-control mode that is controlled using the keyboard at the same time, yo

5、u can also use the remot</p><p>  Key words: 51 SCM; Combination lock;Infrared;LCD1602</p><p><b>  目 錄</b></p><p>  1 引言- 1 -</p><p>  1.1研究背景與意義- 1 -&

6、lt;/p><p>  1.2 研究現(xiàn)狀- 1 -</p><p>  1.3 研究內容- 1 -</p><p>  2 系統(tǒng)設計方案- 2 -</p><p>  2.1 總體方案- 2 -</p><p>  2.2 系統(tǒng)框圖- 2 -</p><p>  3 系統(tǒng)硬件電路設計-

7、3 -</p><p>  3.1 單片機最小系統(tǒng)設計- 3 -</p><p>  3.2 LCD顯示電路設計- 4-</p><p>  3.3 矩陣鍵盤電路設計- 5 -</p><p>  3.4 存儲電路設計-6 -</p><p>  3.5紅外發(fā)送接收電路設計- 7 -</p>&

8、lt;p>  3.6 模擬鎖與報警電路設計- 10 -</p><p>  3.7系統(tǒng)PCB設計- 11 -</p><p>  4 系統(tǒng)軟件設計- 12 -</p><p>  4.1 程序設計思路- 12 -</p><p>  4.2 算法與流程圖-13 -</p><p>  5 系統(tǒng)仿真與硬件

9、調試- 14 -</p><p>  5.1系統(tǒng)仿真和調試方案- 14 -</p><p>  5.2 系統(tǒng)硬件調試- 16 -</p><p>  5.3 調試結果- 17 -</p><p>  6 總結與展望- 17 -</p><p><b>  致謝-17 -</b><

10、/p><p>  參考文獻- 18-</p><p><b>  附錄- 18 -</b></p><p>  1.元器件清單- 18 -</p><p>  2.源程序-18 -</p><p><b>  1 引言</b></p><p> 

11、 1.1 研究背景與意義</p><p>  我們知道當某一個公司研發(fā)一些新產品時都會特別重視其資料的安全問題,在競爭日益激烈的當下,新研發(fā)的產品資料,科研項目,以及單位的文件檔案、財務報表,個人資料等等,都是特別保護的對象,萬一泄露將直接關系到一個企業(yè)的存亡。再從我們身邊來說,家庭住房多采用一般的機械鎖。這樣不僅不安全,而且,每天都要帶鑰匙很不方便。若不慎丟失鑰匙更會產生事倍功半的效果。本次設計的密碼鎖將滿足

12、人們的要求。</p><p>  在科技高速發(fā)展的今天,非接觸式控制越來越受大家歡迎,利用紅外遙控,方便又安全。另外,紅外線不會產生信號干擾,反應速度迅速、工作穩(wěn)定度高等特點。而在工業(yè)制造中,在高壓、輻射、腐蝕等惡劣環(huán)境下,采用紅外遙控能夠很好地隔離這些干擾。在本次設計中,為了更加方便操作,除了采用矩陣鍵盤對密碼鎖進行控制外,還可以用遙控器進行控制,以達到雙控的目的。</p><p>&l

13、t;b>  1.2 研究現(xiàn)狀</b></p><p>  目前大部分的家庭用鎖采用的都是機械式的,一種鑰匙對應一把鎖,但鑰匙可復制,這無疑給人們的安全帶來極大威脅。另外,其最大的缺點是利用簡單工具就能很容易地把鎖撬開。加深了人們的安全隱患。針對這種情況,本次設計制作了一種紅外遙控密碼鎖,遙控器型號很常見,應用及為廣泛,若突然摔壞或丟失即可到商店購買。由于本設計采用的存儲器可防止斷電數(shù)據(jù)丟失,因

14、此更換遙控器或在整個電路斷電又重啟的情況下密碼仍為先前設定值,具有很好的保密性。</p><p>  此外,密碼共有六位,每位由0到9,十個數(shù)字構成,因此可設定106種密碼,提高密保安全。然而,一般設備都采用專用的遙控編碼及解碼集成電路,此類電路雖然制作簡單,但由于某些特定功能的限制,例如編碼解碼等協(xié)議限制,只適用于專用的電器產品,配套性強,應用范圍也因此受到限制。</p><p><

15、;b>  1.3 研究內容</b></p><p>  主要的設計實施過程:本次設計選用ATMEL公司的單片機AT89C51,用于控制的LCD等。第二步,使用Altium Designer 6完成原理圖,并設計PCB圖完成人工布線。并腐蝕電路板。第三步,在Keil uVision4軟件中用C語言進行編程,外加仿真軟件對程序進行修改,調試。第四部,結合軟、硬件對電路板進行調試。最后完成本次設計。

16、</p><p><b>  2 系統(tǒng)設計方案</b></p><p><b>  2.1 總體方案</b></p><p><b>  方案一:</b></p><p>  采用矩陣按鍵,通過單片機將字符送到數(shù)碼管顯示,另外,密碼鎖部分用電磁繼電器來進行模擬。 存儲密碼為

17、防止斷電丟失,用存儲器進行存儲。報警部分采用比較常用的蜂鳴器,外圍驅動電路較簡單。</p><p><b>  方案二:</b></p><p>  同樣采用矩陣鍵盤,考慮到需要顯示多個字符的問題,此時采用液晶顯示LCD1602。此處的模擬鎖用發(fā)光二極管來代替。用存儲器AT24c02來存儲密碼,報警部分依然采用蜂鳴器。</p><p>  通過

18、兩個方案的比較綜合,考慮到外圍設備,成本等問題,本次設計將采用第二種方案。</p><p>  硬件方面解決單片機與外圍電路的設計,主控模塊采用方案二來進行設計,另外用遙控器作為發(fā)送端的同時,應在主控模塊加上接收模塊,對遙控器發(fā)射的信號進行接收,解碼等處理。由于鍵碼值由商家提供,因此只需將每個鍵碼值賦予特定的功能,以此來控制密碼鎖的開關,改密等,并送到LCD1602上顯示。另外,還有單片機最小系統(tǒng)。</p&

19、gt;<p>  軟件方面,首先是按鍵掃描問題,如何判斷哪一個按鍵按下,如何讓其并以何種形式顯示到LCD1602上,這里就要考慮到1602的顯示,地址寫入等問題。紅外的控制是本設計的難點,遙控器是以紅外波的方式將特定的信號送給紅外接收頭。由于本設計采用的遙控器比較普遍,因此編碼解碼問題可以很容易查閱到。</p><p><b>  2.2 系統(tǒng)框圖</b></p>

20、<p>  本文所設計的作品系統(tǒng)由AT89S51單片機及其最小系統(tǒng)、矩陣鍵盤、紅外接收頭、遙控器、蜂鳴器、模擬鎖、LCD1602液晶顯示等部分組成。其系統(tǒng)框架圖如圖1所示</p><p>  圖1 總體系統(tǒng)框架圖</p><p>  3 系統(tǒng)硬件電路設計</p><p>  3.1 單片機最小系統(tǒng)設計</p><p>  本

21、次設計的單片機采用ATMEL公司推出的AT89S51系列單片機。最小系統(tǒng)包括上電復位電路和晶振電路【1】【2】。</p><p>  上電復位電路結構如圖2中R1,R2,C3和sw1.其中R1和R2分別為1K和10K。通過手動來進行復位。</p><p><b>  圖2 上電復位電路</b></p><p>  晶振電路結構如圖3中Y1,C1

22、,C2.本設計選擇12MHz頻率的石英晶體,補償電容采用30pF左右的瓷片電容.</p><p><b>  圖3 晶振電路</b></p><p>  3.2 LCD顯示電路設計</p><p>  從設計成本來考慮,顯示電路部分首先會想到用數(shù)碼管,但由于一個數(shù)碼管只可以顯示一個字符,例如本次設計中,進入界面要顯示welcome,輸入密碼是

23、也要提示input code等等,就要用到10多個數(shù)碼管。此外,每個數(shù)碼管的位選端必須要通過單片機的IO口進行控制,這就要占用多個IO口,且在PCB板中進行手動布線時會很復雜。因此這次設計中,采用LCD1602。</p><p>  由于采用的LCD1602是16×2兩行顯示。第一行顯示提示內容,第二行顯示鍵入的數(shù)值。LCD1602具有很高的性價比,且應用很廣泛。另外本設計使用插針將1602接到電路中,

24、若1602出現(xiàn)故障更換方便。1602外觀如下圖4所示:</p><p>  圖4 LCD1602管腳圖</p><p>  LCD1602在電路中的連接方式,如下圖所示:</p><p>  圖5 LCD硬件連接圖</p><p>  3.3 矩陣鍵盤電路設計</p><p>  本次設計要運用按鍵來控制,這時會想到

25、有獨立式鍵盤和矩陣式鍵盤兩種連接方式,其中,獨立鍵盤需要使用多個IO口,由于本次設計要用到16個按鍵,因此若用獨立按鍵會極大降低IO口的利用率。</p><p>  因此,本次實驗采用的是4×4矩陣鍵盤,電路連接比較復雜,但同時提高了IO口的利用率。如下圖所示,16個按鍵上分別實現(xiàn)不同功能,其中輸入數(shù)字鍵:0、1、2、3、4、5、6、7、8、9;以及相應的功能鍵。鍵盤的每個按鍵所代表的功能如下圖所示:&

26、lt;/p><p>  圖6 4×4矩陣鍵盤</p><p>  3.4 存儲電路設計</p><p>  關于密碼保護問題,除了由六位隨機數(shù)字組成,還要考慮到斷電之后數(shù)據(jù)會丟失的問題,為了防止掉電丟失,本設計采用AT24c02存儲器。是一個2K位串行CMOS E2PROM。內部含有256個8位字節(jié),CATALYST公司的先進CMOS技術實質上減少了器件的

27、功耗。</p><p>  管腳圖如圖7所示: </p><p>  圖7 AT24c02管腳圖</p><p>  表1 AT24c02管腳功能</p><p><b>  圖8存儲器地址位</b></p><p>  下圖為24C02在硬件中的的連接圖,根據(jù)各個管腳功能只需把A0、A1、A2

28、、wp接地,按照I2C協(xié)議,時鐘線SCL和數(shù)據(jù)線SDA需接10K上拉電阻。</p><p>  圖9 AT24c02硬件連接圖</p><p>  3.5 紅外發(fā)送接收電路設計</p><p><b>  1)紅外發(fā)送模塊</b></p><p>  這次設計中用到的遙控器其實物圖如下圖所示:</p>&

29、lt;p><b>  圖10 小型遙控器</b></p><p>  特點:通過無線來控制,攜帶方便,低成本,低功耗等。</p><p>  遙控器應用范圍:電器、兒童玩具等。</p><p>  按編碼分類,有兩種編碼方式,主要分為RC5碼和NEC碼【3-5】。</p><p>  由于本次設計用到的遙控器采用的

30、是NEC編碼協(xié)議,下面將重點描述NEC碼特性。</p><p><b>  NEC格式的特征:</b></p><p> ?。?)使用16位客戶代碼</p><p> ?。?)使用8位數(shù)據(jù)代碼</p><p> ?。?)引導碼間隔是9 ms + 4.5 ms</p><p> ?。?)使用38 k

31、Hz載波頻率</p><p>  下圖為接收頭上觀察到的波形: </p><p>  圖11 遙控信號周期波形</p><p>  圖12 引導碼間隔圖</p><p>  NEC碼編碼原理如下:</p><p> ?。?)數(shù)據(jù)幀結構(組成)</p><p>  圖13 數(shù)據(jù)幀結構圖</p

32、><p> ?。?)“0”、“1”的表示方法:</p><p>  圖14 “0”和“1”的發(fā)射圖</p><p><b>  2)紅外接收</b></p><p>  本次設計采用的紅外遙控信號的接收集紅外接收和放大于一體,不需要添加其他外圍電路,就可以輸出與TTL電平兼容的信號。以此來完成紅外遙控的發(fā)送于接收。本次設計采

33、用的是VS_1838b。外觀如下:</p><p>  圖15 紅外接收頭VS_1838b</p><p>  由于密碼采用雙控模式,在主控模塊采用矩陣鍵盤進行密碼的輸入及修改,因此,將紅外接收端接到單片機的外部中斷1來檢測是否有紅外信號,進而判斷遙控器是否有按鍵按下,并進行密碼的輸入與修改。由原理圖可知,接收頭的三個管腳,只需要將GND接地VCC接入電源,另一根輸出線接入到單片機的外部中

34、斷1口即可。</p><p>  紅外接收頭與單片機的連接硬件電路如下圖所示:</p><p>  圖16 紅外接收頭連接圖</p><p>  3.6 模擬鎖與報警電路設計</p><p>  本次設計采用led來模擬鎖,將發(fā)光二極管接到單片機的IO口上,實際應用中接上一個1K電阻以保證發(fā)光二極管的亮度。如下圖所示:</p>

35、<p>  圖17 led連接圖</p><p>  報警電路采用的是蜂鳴器,由于蜂鳴器的工作電流一般比較大,這將導致單片機的IO口無法直接進行驅動【6】【7】。以至于單片機的I/O 口是無法直接驅動,所以要使用放大電路用以驅動蜂鳴器,本次設計采用三極管來進行蜂鳴器的驅動。</p><p>  蜂鳴器驅動電路的外圍設計:蜂鳴器、三極管再加上一個1K電阻接到單片機的IO口上。蜂鳴

36、器外圍電路如下:</p><p>  圖18 蜂鳴器連接圖</p><p>  3.7 系統(tǒng)PCB設計</p><p>  根據(jù)上述每個模塊的設計,以及單片機的各個管腳特性整體電路如圖19。由于LCD接的是單片機的P0口所以每個管腳要接一個10K的上拉電路,即10K排阻。電源部分采用的是USB給單片機提供+5V的電源,發(fā)光二極管來指示有沒有給單片機供電。再考慮每個

37、模塊需要加入的外圍電路,以及接入到單片機相應的IO口,為了方便程序的修改,要嚴格按照仿真的接法接到單片機的管腳,本設計總體原理圖如下圖所示:</p><p><b>  圖19 總體原理圖</b></p><p><b>  4 系統(tǒng)軟件設計</b></p><p>  4.1 程序設計思路</p>&l

38、t;p>  本次設計的密碼鎖,采用的是雙控模式,即在主控模塊中有4×4矩陣鍵盤可以輸入數(shù)字來進行改密等功能,同時也可以用遙控器來實現(xiàn)。</p><p>  首先考慮到矩陣鍵盤的掃描問題,單片機IO口默認為高電平,如上面矩陣鍵盤圖所示,鍵盤的列和行分別接P1口的高低電平,可以先固定在某一行進行掃描,利用switch語句返回每個按鍵鎖表示的數(shù)值及跳轉到某個功能函數(shù)中去,以此來實現(xiàn)按鍵控制。</p

39、><p>  其次是1602LCD顯示問題,先將LCD初始化,首行顯示提示語例如登陸界面 顯示welcome,開鎖是顯示input code等。第二行用來顯示密碼??紤]到安全性,將會將數(shù)字顯示成*,提示語及密碼均顯示在LCD的正中間以保證屏幕的整體美觀效果。其中密碼為六位數(shù)。</p><p>  然后是AT24c02存儲器,防止密碼斷電丟失。先寫24c02的驅動程序,時鐘信號,讀寫數(shù)據(jù)等等,要

40、考慮怎么將密碼寫入到24c02中,以及從中讀取等問題。讓LCD顯示字符的同時保存到AT24c02中。</p><p>  最后要考慮遠程遙控問題,遙控器來發(fā)送紅外波,并由接收頭接收信號經過處理之后傳到單片機中,再經過程序運行處理來進行開鎖、改密等。由前面的硬件介紹部分可知接收頭連接的是外部中斷1,當發(fā)射器發(fā)送信號時,外部中斷1打開,此時進入中斷程序,遙控器的21個按鍵有各自的鍵碼值,同上述按鍵掃描采用switch

41、語句可返回各個按鍵代表的數(shù)字及功能,以此來實現(xiàn)遙控器對密碼鎖的控制。</p><p>  另外,密碼鎖是用發(fā)光二極管來模擬,只需用高低電平來控制IO口即可。即當接發(fā)光二極管接的IO口為低電平時led點亮(可認為開鎖)。當IO口味高電平時led熄滅,此時認為上鎖。蜂鳴器是用三極管來驅動接入到單片機的IO口,如發(fā)光二極管,當IO口為低電平時蜂鳴器響。所以,當密碼錯誤時,給IO口送低電平即可達到報警效果。</p&

42、gt;<p>  4.2 算法與流程圖</p><p>  鑒于密碼鎖在輸入密碼時可有矩陣按鍵及遙控器進行雙控,紅外遙控采用中斷的方式進行接收信號,先是按鍵的掃描,判斷是執(zhí)行某個任務還是將輸入密碼輸送到LCD1602上面。</p><p>  接收頭的輸出管腳連接的是單片機的外部中斷1口,因此,在程序運行時,首先要判斷是否產生中斷。先是遙控器發(fā)射出紅外波,由接收部分將發(fā)射過

43、來的信號轉換為電信號,再經過放大電路等將其還原成相應的編碼信號,然后通過譯碼器譯碼,將相應的解碼賦予不同的功能,從而進行對密碼鎖的控制,實現(xiàn)遙控效果。本設計的主流程圖如下圖所示:</p><p>  圖20 主程序流程圖</p><p>  5 系統(tǒng)仿真與硬件調試</p><p>  5.1 系統(tǒng)仿真和調試方案</p><p>  根據(jù)上

44、述各個模塊的功能以及PCB設計可用PROTEUS來進行仿真,修改程序。仿真圖如下圖21所示:</p><p><b>  圖21整體仿真圖</b></p><p>  仿真圖與PCB原理圖稍有差異,例如圖5.1中的存儲器24c02實物為8個管腳,但在PROTEUS仿真中卻只有六個管腳,其中少的兩個管腳:管腳4為GND即直接接地,管腳8為VCC,為電源。SCK接時鐘線即

45、為SCL,SDA接數(shù)據(jù)線,其余均接地。另外,1602本為16個管腳,在PROTEUS仿真中是14個管腳,管腳3調節(jié)1602亮度接1K滑動變阻器。實際電路中,管腳3應接10K滑動變阻器,管腳15接10歐電阻。</p><p>  為了保證程序可在實物中使用,每個芯片接入到單片機的IO口都會與PCB原理圖保持一致。然后分模塊逐一進行調試。</p><p>  由于本次設計采用的是市場賣的遙控器

46、,在PROTEUS中無法進行仿真,所以在PROTEUS仿真中只有主控模塊的原理圖。因此,先寫矩陣鍵盤控制密碼鎖的程序。根據(jù)程序設計思路首先對矩陣鍵盤進行掃描,將對應的數(shù)字以*的形式顯示到1602上,這里要考慮1602的寫地址。以及24c02的讀寫操作。</p><p>  5.2 系統(tǒng)硬件調試</p><p>  1)1602顯示模塊</p><p>  電源能夠

47、供電并芯片沒有出現(xiàn)發(fā)熱等不正常現(xiàn)象說明焊接正確。將1602的顯示程序通過學習板燒到做好的電路板中,檢測1602是否正常顯示,若1602只亮屏不顯示字符此時調節(jié)滑動變阻器改變對比度。若調節(jié)滑動變阻器1602依然不顯示,此時再看看程序中1602初始化函數(shù)是否有錯,再看硬件有沒有問題,本人在調試1602的時候就遇到類似問題,電路與程序都完全正確,1602卻依然不能正常顯示,有時會出現(xiàn)亂碼的現(xiàn)象,最后發(fā)現(xiàn)竟然是單片機沒有與插槽接觸完全,導致16

48、02的控制端與單片機接觸不良,因此,會出現(xiàn)時而亂碼時而不顯示的狀況。單片機固定牢固之后1602便可正常顯示。</p><p><b>  2)按鍵掃描</b></p><p>  1602能夠正常顯示之后再看通過按鍵掃描能不能將數(shù)字傳遞到1602顯示,首先檢測硬件電路是否完全通路,再將程序燒進單片機中,按下數(shù)字鍵看能否將數(shù)字顯示到1602制定的位置上,此時還要注意密碼

49、不能超過六位數(shù)。一般按鍵如果電路正確,并且程序和硬件都無差錯則在仿真中運行正確實物也可以輕松實現(xiàn)器功能。</p><p><b>  3)存儲器硬件調試</b></p><p>  在本次設計中,如上述介紹為了防止掉電丟失采用AT24c02進行存儲數(shù)據(jù)。主要是將按鍵按下的值保存到存儲器中,并能夠從中讀取。按下解鎖鍵,LCD1602首行顯示提示語,令一行則是顯示將要輸進

50、去的密碼。此時程序中還要進行密碼的對比,若正確,led亮,說明鎖已經打開。錯誤,則燈滅,說明鎖已經關閉。本人在調試過程中發(fā)現(xiàn)輸入密碼時不能夠正常開鎖,而真正能通過的密碼無從得知,若不通過存儲器的讀取,將初始值直接與鍵入值比較,此時密碼正確。說明存儲器在讀密碼的時出現(xiàn)某些未知的錯誤。經過對程序的調試,讓此時存儲器隨機出現(xiàn)的密碼顯示到1602上,然后再在開鎖時鍵入對應的密碼,此時密碼正確。這說明原始設定的密碼在調用的過程中被某一句程序改寫。

51、此時再回到PROTEUS仿真,看下存儲器接線與PCB是否一致,以及芯片是否安置正確。經過檢查發(fā)現(xiàn)電路板上放置的芯片并不是AT24c02,更換芯片后便能夠實現(xiàn)開鎖,改密等功能。</p><p><b>  4)紅外遙控模塊</b></p><p>  首先寫一個紅外遙控發(fā)送接收程序,看是否將字符正確顯示到1602上。參考網上給的遙控器鍵碼值使用swith語句同矩陣按鍵掃

52、描返回數(shù)字及調用功能函數(shù)。經過參考網上給出的例程,加上外部中斷1程序,使用中斷,檢測是否發(fā)送信號。再將寫好的程序燒到單片機中,驗證通過則證明遙控器可以正確使用,再將兩個程序綜合到一起來實現(xiàn)雙控。</p><p><b>  5.3 調試結果</b></p><p>  本次設計整體調試結果:給電路板送入+5V電源,1602第一行中間顯示welcome,然后按解鎖鍵,

53、1602第一行顯示input code 此時輸入密碼再按確定鍵。若密碼正確模擬鎖led點亮并顯示right,密碼不正確顯示error蜂鳴器鳴叫并跳轉到最初的界面。按下改密按鍵,1602第一行顯示input old code,輸入舊密碼(密碼錯誤則提示,并重新輸入),若密碼正確,畫面提示input new code,此時鍵入新密碼(六位數(shù)),然后按確定鍵,畫面顯示input new code again。再一次鍵入設置的新密碼。若兩次密碼

54、相同,則1602顯示complete。然后切斷電源,重新給電路板供電,再次輸入密碼(輸入剛才設定的新密碼),1602顯示right并模擬鎖發(fā)光二極管點亮。</p><p>  然后用遙控器如上操作,同樣可以進行開鎖及修改密碼。</p><p><b>  6 總結與展望</b></p><p>  確定研究課題之后,查閱相關資料,設計相應的原

55、理圖。由于相同功能的芯片有很多,經過對比其實用性,是否易操作,外圍電路以及程序設計難易等等來選擇較合理的芯片。另外要考慮仿真與實物的不同,所以在畫PCB板時,除了注意與仿真保持一致還要注意在實物中的效果,因此要考慮元器件封裝及接入器件的電阻大小等等。寫程序時為了達到預期效果,對新接觸的芯片進行研究,通過多次修改完成每個模塊的運行。最艱難的應該是對電路板的調試,雖然在仿真中效果了令人滿意,但當在實物中時卻達不到仿真的效果,這就要通過多次檢

56、測,從每根線的焊接到每個芯片的管腳接通情況都要一一測量。每一次失敗都會離成功又進一步。本次畢業(yè)設計不僅僅是對我大學四年的檢測也是對我毅力的考驗,讓我在一次次的打擊之后變得更堅強。 </p><p><b>  致謝</b></p><p>  從開始選定課題到現(xiàn)在經歷了將近半年的時間,在這期間遇到一些困難想要放棄的時候室友們都會鼓勵我,讓我再次有了信心。遇到不懂的問題

57、實驗室那些經驗豐富的同學都會過來給予建議,感謝他們的幫助。另外,還要感謝*老師,總是在百忙之余指導我,幫我解決了不少難題,讓我順利完成了設計。</p><p><b>  參考文獻</b></p><p>  [1] 張毅剛. 單片機原理及應用(第二版)[M]. 北京:高等教育出版社, 2010: 16-42. </p><p>  [2] 林

58、伸茂. 8051單片機徹底研究基礎篇[M]. 北京:人民郵電出版社,2003:24-150. </p><p>  [3] 麥山,皮佑國.基于單片機的協(xié)議紅外遙控系統(tǒng)[J].1998.</p><p>  [4] 邱玉春,李文俊.單片機系統(tǒng)中的紅外通信接口[J].2000:56-163.</p><p>  [5] 張文崢,李先亮,張其善.IrDA 紅外通信在導航儀

59、中的應用[J]. 2000.</p><p>  [6] 康華光等.電子技術基礎第2版[M].北京:高等教育出版社,2004:10-156.</p><p>  [7] 牛翌光.單片機原理及接口技術[M].北京:電子工業(yè)出版社,2008:32-79.</p><p><b>  附錄</b></p><p><b&

60、gt;  1.元器件清單</b></p><p><b>  2.源程序</b></p><p>  #include<at89x52.h></p><p>  #include<intrins.h> //包含_nop_()函數(shù)定義的頭文件</p><p>  #define ucha

61、r unsigned char</p><p>  #define uint unsigned int</p><p>  #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};</p><p>  #define dword unsigned long</p><p>  #defin

62、e keypad P1</p><p>  #define PASSWORD_LENGTH 6 //不要超過9</p><p>  #define PASSWORD_ADDR 0x10</p><p>  #define PASSWORD_ENTRY 0x08</p><p>  #define AddWr 0xa0

63、 //寫數(shù)據(jù)地址,需要參考24c02芯片文檔</p><p>  #define AddRd 0xa1 //讀數(shù)據(jù)地址</p><p>  #define default_passwords 123456</p><p>  #define default_entrywords 20130411</p><p>  #defin

64、e wait_time 600 //等待600s后關閉顯示屏,節(jié)電</p><p>  uchar IRCOM[7];</p><p>  /****紅外延時函數(shù)聲明*****/</p><p>  void delay(uint);</p><p>  void delay1ms();</p>

65、<p>  void delay(unsigned char x) ;</p><p>  void display();</p><p>  void delay1(int ms);</p><p>  sbit IRIN=P3^3; //外部中斷1</p><p>  //sbit lock=P2^3;//模擬鎖</

66、p><p>  sbit buzzer=P2^4;//蜂鳴器</p><p>  void delay(unsigned char x) //x*0.14MS</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  while(x--)&

67、lt;/p><p><b>  {</b></p><p>  for (i = 0; i<13; i++) {}</p><p><b>  }</b></p><p><b>  }</b></p><p>  sbit sda=P2^6;<

68、/p><p>  sbit scl=P2^5;</p><p>  dword time_value=0,passwords=123456;</p><p>  bit key_flag=0,currentdisflag=1,lastdisflag=1,keystatusflag=0,dispassword_com=0,dispassword_flag=0;</p

69、><p>  uchar second=0,minute=0,hour=0;</p><p>  uchar key=0,keycounts=0,t_num=0;</p><p>  uchar code tab1[]={"Input code "};</p><p>  uchar code tab2[]={&qu

70、ot; Right! "};</p><p>  uchar code tab3[]={"Error "};</p><p>  uchar code tab4[]={"Welcome enter "};</p><p>  uchar code tab5[]={"I

71、nput old code "};</p><p>  uchar code tab6[]={"Input new code "};</p><p>  uchar code tab7[]={"Input code again"};</p><p>  uchar code tab8[]={"Compl

72、ete! "};</p><p>  uchar code cls[]= {" "};</p><p>  uchar code open[]={"Welcome... "};</p><p>  uchar code tab9[]={"----------

73、 "};</p><p>  uchar code message[16]={"0123456789abcdef"};</p><p>  /****************************LCD1602驅動**************************/</p><p>  #define LCD_Data P0

74、//數(shù)據(jù)接口</p><p>  sbit rs=P2^0;//定義接口</p><p>  sbit rw=P2^1;</p><p>  sbit en=P2^2;</p><p>  sbit led=P2^3;</p><p>  void LCD_Init(void);</p><p>

75、;  void LCD_WriteData(uchar WDLCD);</p><p>  void LCD_WriteCommand(uchar WCLCD);</p><p>  void DisplayOneChar(uchar X, uchar Y, uchar DData);</p><p>  void DisplayListChar(uchar X,

76、uchar Y, uchar code *DData);</p><p>  /******************************延時函數(shù)****************************/</p><p>  void delay11(){;;}</p><p>  void delay2(uint t) //延時函數(shù)ms</p&

77、gt;<p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=t;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  } </b>&

78、lt;/p><p>  /****************************1602寫數(shù)據(jù)函數(shù)**************************/</p><p>  void LCD_WriteData(uchar WDLCD)</p><p><b>  {</b></p><p><b>  rs=1

79、;</b></p><p><b>  rw=0;</b></p><p><b>  en=1;</b></p><p>  LCD_Data=WDLCD;</p><p>  delay2(1);</p><p><b>  en=0;</b&

80、gt;</p><p><b>  }</b></p><p>  /****************************1602寫指令函數(shù)**************************/</p><p>  void LCD_WriteCommand(uchar WCLCD)//BusyC為0時忽略忙檢測</p>&l

81、t;p><b>  {</b></p><p><b>  rs=0;</b></p><p><b>  rw=0;</b></p><p><b>  en=1;</b></p><p>  LCD_Data=WCLCD;</p>

82、<p>  delay2(1);</p><p><b>  en=0;</b></p><p><b>  }</b></p><p>  /****************************1602初始化函數(shù)**************************/</p><p>

83、  void LCD_Init(void)</p><p><b>  {</b></p><p>  LCD_WriteCommand(0x38); //設置顯示模式:16X2,5X7,8位數(shù)據(jù)接口</p><p>  LCD_WriteCommand(0x0c); //開顯示,顯示光標,光標閃爍</p>&

84、lt;p>  LCD_WriteCommand(0x06); //讀寫一個字符后,地址指針及光標加一,且光標加一整屏顯示不移動</p><p>  LCD_WriteCommand(0x80); //設置光標指針</p><p><b>  }</b></p><p>  /******************1602按指

85、定位置顯示一個字符函數(shù)**********************/</p><p>  void DisplayOneChar(uchar X, uchar Y, uchar DData)</p><p><b>  {</b></p><p><b>  Y &= 0x1;</b></p><

86、;p>  X &= 0xF;//限制X不能大于15,Y不能大于1</p><p>  if (Y) X |= 0x40;//當要顯示第二行時地址碼+0x40;</p><p>  X |= 0x80;// 算出指令碼</p><p>  LCD_WriteCommand(X);//這里不檢測忙信號,發(fā)送地址碼</p><p> 

87、 //delay(1);</p><p>  LCD_WriteData(DData);</p><p>  //delay(1);</p><p><b>  }</b></p><p>  /*******************1602按指定位置顯示一串字符函數(shù)*********************/</

88、p><p>  void DisplayListChar(uchar X, uchar Y, uchar code *DData)</p><p><b>  {</b></p><p>  uchar ListLength;</p><p>  ListLength = 0;</p><p><

89、;b>  Y &= 0x1;</b></p><p>  X &= 0xF;//限制X不能大于15,Y不能大于1</p><p>  while (DData[ListLength]!='\0')//若到達字串尾則退出</p><p><b>  {</b></p><p&g

90、t;  if (X <= 0xF)//X坐標應小于0xF</p><p><b>  {</b></p><p>  DisplayOneChar(X, Y, DData[ListLength]);//顯示單個字符</p><p>  ListLength++;</p><p><b>  X++;<

91、;/b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*********************************LCD1602驅動******************

92、****************/</p><p>  /*****************************24C02驅動*********************************/</p><p>  void start() //開始信號</p><p><b>  {</b></p>

93、<p><b>  sda=1;</b></p><p>  delay11();</p><p><b>  scl=1;</b></p><p>  delay11();</p><p><b>  sda=0;</b></p><p>

94、  delay11();</p><p><b>  scl=0;</b></p><p><b>  }</b></p><p>  void stop() //停止信號</p><p><b>  {</b></p><p>

95、;<b>  sda=0;</b></p><p>  delay11();</p><p><b>  scl=1;</b></p><p>  delay11();</p><p><b>  sda=1;</b></p><p>  delay11

96、();</p><p><b>  scl=0;</b></p><p><b>  sda=0;</b></p><p><b>  }</b></p><p>  void respons() //應答</p><p>&l

97、t;b>  {</b></p><p><b>  uchar i;</b></p><p><b>  sda=0;</b></p><p><b>  scl=1;</b></p><p>  delay11();</p><p>

98、  while((sda==1)&&(i<250))</p><p><b>  i++;</b></p><p><b>  scl=0;</b></p><p>  delay11();</p><p><b>  }</b></p>&

99、lt;p>  void write_byte(uchar indata) //寫一個字節(jié)</p><p><b>  {</b></p><p>  uchar i,temp;</p><p>  temp=indata;</p><p>  for(i=0;i<8;i++)</p&g

100、t;<p><b>  {</b></p><p>  temp=temp<<1;</p><p><b>  scl=0;</b></p><p>  delay11();</p><p><b>  sda=CY;</b></p>&

101、lt;p>  delay11();</p><p><b>  scl=1;</b></p><p>  delay11();</p><p><b>  }</b></p><p><b>  scl=0;</b></p><p>  delay

102、11();</p><p><b>  sda=1;</b></p><p>  delay11();</p><p><b>  }</b></p><p>  uchar read_byte() //讀一個字節(jié)</p><p><b>

103、;  {</b></p><p>  uchar i,k=0;</p><p><b>  scl=0;</b></p><p>  delay11();</p><p><b>  sda=1;</b></p><p>  delay11();</p>

104、;<p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  scl=1;</b></p><p>  delay11();</p><p>  k=(k<<1)|sda;</p><p>

105、<b>  scl=0;</b></p><p>  delay11();</p><p><b>  }</b></p><p><b>  return k;</b></p><p><b>  }</b></p><p>  

106、void WrToROM_Byte(uchar address,uchar indata)</p><p><b>  {</b></p><p><b>  start();</b></p><p>  write_byte(AddWr);</p><p>  respons();</p&g

107、t;<p>  write_byte(address);</p><p>  respons();</p><p>  write_byte(indata);</p><p>  respons();</p><p><b>  stop();</b></p><p><b&g

108、t;  }</b></p><p>  uchar RdFromROM_Byte(uchar address)</p><p><b>  {</b></p><p>  uchar indata;</p><p><b>  start();</b></p><p&

109、gt;  write_byte(AddWr);</p><p>  respons();</p><p>  write_byte(address);</p><p>  respons();</p><p><b>  start();</b></p><p>  write_byte(AddR

110、d);</p><p>  respons();</p><p>  indata=read_byte();</p><p><b>  stop();</b></p><p>  return indata;</p><p><b>  }</b></p>&

111、lt;p>  void WrToROM_dword(uchar address,dword indata)</p><p><b>  {</b></p><p>  uchar temp=0,i=0;</p><p>  //refresh_display(0,1,cls);</p><p>  for(i=0;

112、i<4;i++){</p><p>  temp=(indata>>(8*i))&0xff;</p><p>  //DisplayOneChar(7-2*i,1,message[temp%0x10]);</p><p>  //DisplayOneChar(6-2*i,1,message[temp/0x10]);</p>&

113、lt;p>  delay2(1);</p><p>  WrToROM_Byte(address+i,temp);</p><p><b>  }</b></p><p>  delay2(1);</p><p>  //DisplayData(indata);</p><p><b&

114、gt;  }</b></p><p>  dword RdFromROM_dword(uchar address)</p><p><b>  {</b></p><p>  uchar i=0,temp=0;</p><p>  dword indata=0;</p><p>  /

115、/refresh_display(0,1,cls);</p><p>  for(i=0;i<4;i++){</p><p>  temp=RdFromROM_Byte(address+3-i);</p><p>  indata=(indata<<8)+temp;</p><p>  //DisplayOneChar(2*

116、i+1,1,message[temp%0x10]);</p><p>  //DisplayOneChar(2*i,1,message[temp/0x10]);</p><p>  delay2(1);</p><p><b>  }</b></p><p>  //DisplayData(indata);</p&

117、gt;<p>  delay2(1);</p><p>  return indata;</p><p><b>  }</b></p><p>  void init_24C02() //初始化</p><p><b>  {</b></p>&l

118、t;p><b>  sda=1;</b></p><p>  delay11();</p><p><b>  scl=1;</b></p><p>  delay11();</p><p><b>  }</b></p><p>  /*****

119、************************24C02驅動*********************************/</p><p>  /***************************定時器1中斷*********************************/</p><p>  void IR_IN() interrupt 1</p><p

120、><b>  {</b></p><p>  unsigned char j,k,N=0;</p><p>  unsigned char q=0;</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p&

121、gt;  EX1 = 0; </p><p>  delay(15);</p><p>  if (IRIN==1) </p><p><b>  { </b></p><p><b>  EX1 =1;</b></p><p><b>  return;<

122、;/b></p><p><b>  } </b></p><p>  //確認IR信號出現(xiàn)</p><p>  /**/while (!IRIN) //等IR變?yōu)楦唠娖?,跳過9ms的前導低電平信號。</p><p><b>  delay(1);</b></p&

123、gt;<p>  for (j=0;j<4;j++) //收集四組數(shù)據(jù)</p><p><b>  { </b></p><p>  for (k=0;k<8;k++) //每組數(shù)據(jù)有8位</p><p><b>  {</b></p><p>

124、;  while (IRIN) //等 IR 變?yōu)榈碗娖?,跳過4.5ms的前導高電平信號。</p><p>  {delay(1);}</p><p>  while (!IRIN) //等 IR 變?yōu)楦唠娖?lt;/p><p><b>  delay(1);</b></p><p>

125、  while (IRIN) //計算IR高電平時長</p><p><b>  {</b></p><p><b>  delay(1);</b></p><p>  N++; </p><p>  if (N>=30)</p><

126、p><b>  { </b></p><p><b>  EX1=1;</b></p><p><b>  return;</b></p><p>  } //0.14ms計數(shù)過長自動離開。</p><p>  }

溫馨提示

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

評論

0/150

提交評論