基于單片機(jī)的防盜報警器的畢業(yè)設(shè)計(jì)_第1頁
基于單片機(jī)的防盜報警器的畢業(yè)設(shè)計(jì)_第2頁
基于單片機(jī)的防盜報警器的畢業(yè)設(shè)計(jì)_第3頁
基于單片機(jī)的防盜報警器的畢業(yè)設(shè)計(jì)_第4頁
基于單片機(jī)的防盜報警器的畢業(yè)設(shè)計(jì)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于單片機(jī)的防盜報警器的設(shè)計(jì)摘要:本文介紹了基于AT89S52單片機(jī)控制的由EEPROM和LED組成的防盜報警器的控制電路和控制程序的設(shè)計(jì)。首先本文對AT89S52單片機(jī)和EEPROM的24C04存儲器芯片原理做了介紹,同時分析了防盜報警器控制原理,經(jīng)過分析,設(shè)計(jì)出能實(shí)現(xiàn)存儲報警號碼及自動報警的防盜報警0器硬件電路和單片機(jī)程序。最后利用Proteus仿真軟件對該系統(tǒng)進(jìn)行仿真,查看效果。關(guān)鍵詞:單片機(jī),24C04,ADesignofTheft-proofAlarmBasedonMCUAbstract:Thisarticledescribesadesignoftheft-proofalarmcontrolcircuitandcontrolproceduresbasedontheAT89S52MCU’controlingonEEPROM24c04andtheLED.First,thispaperintroducetheAT89S52andtheworkingprincipleoftheEEPROM24C04,andanalyzestheburglaralarmcontrolprinciple.Afteranalysis,thisarticledesignoutthecircuitandmicrocontrollerprocedureofthetheft-proofalarmtwhichcansavethealarmnumberandautosendoutthealarmsignal.Finally,thisarticleusetheProteussimulationsoftwaretosimulatethesystemtoviewtheresults.Keyword:MCU,24C04,Proteus目錄1引言11.1防盜報警控制器研究背景11.1.1防盜報警器概述11.2單片機(jī)技術(shù)簡介21.3Keil技術(shù)簡介21.4Proteus技術(shù)簡介41.5本課題的主要內(nèi)容、要求及說明書安排41.5.1主要內(nèi)容、要求41.5.2說明書安排52系統(tǒng)結(jié)構(gòu)及硬件電路設(shè)計(jì)62.1系統(tǒng)的結(jié)構(gòu)框圖及工作原理62.2電源模塊62.3AT89S52單片機(jī)最小系統(tǒng)72.4鍵盤模塊82.5顯示模塊102.6EEPROM113程序設(shè)計(jì)133.1主程序流程133.2鍵盤輸入模塊的程序設(shè)計(jì)133.3數(shù)碼管顯示模塊的程序設(shè)計(jì)153.4EEPROM的驅(qū)動程序設(shè)計(jì)163.2.124C04的I2C總線構(gòu)成及其協(xié)議163.2.224C04的I2C總線根本操作183.2.224C04的驅(qū)動子程序194Proteus仿真204.1Proteus7.5SP3簡介204.2仿真流程215結(jié)論25參考文獻(xiàn)26致謝28附錄A291引言本文詳細(xì)介紹了一種基于單片機(jī)和EEPROM的防盜報警控制器的設(shè)計(jì)。以下對該系統(tǒng)所涉及的原理和應(yīng)用到的技術(shù),如:單片機(jī)技術(shù)、Keil技術(shù)、Proteus等做了簡要的介紹。1.1防盜報警控制器研究背景隨著社會的不斷開展,人們對室內(nèi)財產(chǎn)的平安要求也越來越高,而比擬普遍的防盜措施是安裝防盜報警裝置,而防盜報警器的控制電路和控制程序在整個防盜報警裝置中處于重要地位。1.1.1防盜報警器概述防盜報警系統(tǒng)是用物理方法或電子技術(shù),自動探測發(fā)生在布防監(jiān)測區(qū)域內(nèi)的侵入行為,產(chǎn)生報警信號,并提示值班人員發(fā)生報警的區(qū)域部位,顯示可能采取對策的系統(tǒng)。防盜報警系統(tǒng)是預(yù)防搶劫、盜竊等意外事件的重要設(shè)施。一旦發(fā)生突發(fā)事件,就能通過聲光報警信號在安??刂浦行臏?zhǔn)確顯示出事地點(diǎn),使于迅速采取應(yīng)急措施。防盜報警系統(tǒng)與出入口控制系統(tǒng)、閉路電視監(jiān)控系統(tǒng)、訪客對講系統(tǒng)和電子巡更系統(tǒng)等一起構(gòu)成了平安防范系統(tǒng)。防盜報警系統(tǒng)通常由:探測器和傳輸通道、報警控制器、報警裝置三局部構(gòu)成。報警探測器是由傳感器和信號處理組成的,用來探測入侵者入侵行為的,由電子和機(jī)械部件組成的裝置。傳輸通道是探測器與警控制器的之間的信道,用來傳輸探測器的信號給報警控制電路。報警裝置那么是采用聲、光、電等信號采取的報警措施。報警控制器經(jīng)過分析探測器傳來的信號,驅(qū)動報警裝置,做出相應(yīng)的處理。隨著科學(xué)技術(shù)的進(jìn)步,為對付不斷升級的偷盜手段,人們研制開發(fā)了不同方式結(jié)構(gòu)的防盜器。第一代是機(jī)械式防盜器第二代是電子式防盜器第三代是芯片式數(shù)碼防盜器第四代是網(wǎng)絡(luò)防盜系統(tǒng)采用不同原理的探測器、報警器就可以構(gòu)成不同種類、不同用途、到達(dá)不同探測目的的報警探測裝置。而報警控制器那么相對統(tǒng)一,變化不大,但又處于整個報警系統(tǒng)的重要地位。沒有報警控制器那么無法對探測器的信號進(jìn)行分析處理,同時無法控制報警裝置發(fā)出報警信號。1.2單片機(jī)技術(shù)簡介單片機(jī)簡稱單片微型計(jì)算機(jī),是典型的嵌入式微控制器〔MicrocontrollerUnit〕,常用英文字母的縮寫MCU表示單片機(jī),它最早是被用在工業(yè)控制領(lǐng)域。單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計(jì)時器等功能〔可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路〕集成到一塊硅片上構(gòu)成的一個小而完善的計(jì)算機(jī)系統(tǒng),使得計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對體積要求嚴(yán)格的控制設(shè)備當(dāng)中。INTEL的Z80是最早按照這種思想設(shè)計(jì)出的處理器,從此以后,單片機(jī)和專用處理器的開展便分道揚(yáng)鑣。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,這是別的器件需要費(fèi)很大力氣才能做到的,有些那么是花大力氣也很難做到的。一個不是很復(fù)雜的功能要是用美國50年代開發(fā)的74系列,或者60年代的CD4000系列這些純硬件來搞定的話,電路一定是一塊大PCB板!但是如果要是用美國70年代成功投放市場的系列單片機(jī),結(jié)果就會有天壤之別!因?yàn)閱纹瑱C(jī)的只要通過編寫程序就可以可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!單片機(jī)的應(yīng)用目前單片機(jī)滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機(jī)的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動化過程的實(shí)時控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的平安保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開單片機(jī)。更不用說自動控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械以及各種智能機(jī)械了。因此,單片機(jī)的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的科學(xué)家、工程師。單片機(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域。1.3Keil技術(shù)簡介KeilC51是美國KeilSoftware公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。單片機(jī)開發(fā)中除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)镃PU可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目前已極少使用手工匯編的方法了。機(jī)器匯編是通過匯編軟件將源程序變?yōu)闄C(jī)器碼,用于MCS-51單片機(jī)的匯編軟件有早期的A51,隨著單片機(jī)開發(fā)技術(shù)的不斷開展,從普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機(jī)的開發(fā)軟件也在不斷開展,Keil軟件是目前最流行開發(fā)MCS-51系列單片機(jī)的軟件,這從近年來各仿真機(jī)廠商紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境〔uVision〕將這些局部組合在一起。運(yùn)行Keil軟件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對于使用51系列單片機(jī)的愛好者來說是十分必要的,如果你使用C語言編程,那么Keil幾乎就是你的不二之選〔目前在國內(nèi)你只能買到該軟件、而你買的仿真機(jī)也很可能只支持該軟件〕,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會令你事半功倍。1.系統(tǒng)概述KeilC51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會到KeilC51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能表達(dá)高級語言的優(yōu)勢。下面詳細(xì)介紹KeilC51開發(fā)系統(tǒng)各局部功能和使用。2.KeilC51單片機(jī)軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)C51工具包的整體結(jié)構(gòu),uVision與Ishell分別是C51forWindows和forDos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)立生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。1.4Proteus技術(shù)簡介Proteus軟件是英國Labcenterelectronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機(jī)愛好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。Proteus從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺,其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2023年增加Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。Proteus軟件提供了豐富的資源〔1〕Proteus可提供的仿真元器件資源:仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件,有30多個元件庫?!?〕Proteus可提供的仿真儀表資源:示波器、邏輯分析儀、虛擬終端、SPI調(diào)試器、I2C調(diào)試器、信號發(fā)生器、模式發(fā)生器、交直流電壓表、交直流電流表。理論上同一種儀器可以在一個電路中隨意的調(diào)用?!?〕除了現(xiàn)實(shí)存在的儀器外,Proteus還提供了一個圖形顯示功能,可以將線路上變化的信號,以圖形的方式實(shí)時地顯示出來,其作用與示波器相似,但功能更多。這些虛擬儀器儀表具有理想的參數(shù)指標(biāo),例如極高的輸入阻抗、極低的輸出阻抗。這些都盡可能減少了儀器對測量結(jié)果的影響?!?〕Proteus可提供的調(diào)試手段Proteus提供了比擬豐富的測試信號用于電路的測試。這些測試信號包括模擬信號和數(shù)字信號。1.5本課題的主要內(nèi)容、要求及說明書安排1.5.1主要內(nèi)容、要求本課題主要在研究單片機(jī)的工作原理后,選用適宜的單片機(jī)存取EEPROM存儲器,設(shè)計(jì)相應(yīng)的硬件電路,并配合相應(yīng)的軟件編程編寫控制程序,最后使用Proteus仿真軟件對防盜報警器的控制電路和控制程序進(jìn)行仿真。工作內(nèi)容:掌握一種單片機(jī)應(yīng)用,如AT89S52;掌握EEPROM(24C04)的工作原理;掌握Keil程序設(shè)計(jì)軟件;掌握Proteus仿真軟件。工作要求:設(shè)計(jì)相應(yīng)的報警控制器硬件電路;編寫相應(yīng)的報警控制器軟件程序;使用Proteus仿真軟件,實(shí)現(xiàn)系統(tǒng)功能仿真;1.5.2說明書安排本文詳細(xì)介紹了防盜報警器的控制電路和控制程序的設(shè)計(jì)。共分為五章,內(nèi)容安排如下:第一章:介紹了研究背景及利用到的主要技術(shù)。第二章:概括介紹了系統(tǒng)結(jié)構(gòu)和工作原理,同時具體介紹了系統(tǒng)的硬件設(shè)計(jì),詳細(xì)介紹了整個系統(tǒng)的各個模塊的電路設(shè)計(jì)、器件選型及理由。第三章:具體介紹了單片機(jī)程序的設(shè)計(jì)。第四章:具體介紹了如何利用Proteus進(jìn)行系統(tǒng)仿真。第五章:總結(jié)了本次畢業(yè)設(shè)計(jì)取得的成果和心得2系統(tǒng)結(jié)構(gòu)及硬件電路設(shè)計(jì)2.1系統(tǒng)的結(jié)構(gòu)框圖及工作原理EEPROMAT89S52最小系統(tǒng)電源模塊EEPROMAT89S52最小系統(tǒng)電源模塊顯示模塊鍵盤模塊本系統(tǒng)采用單片機(jī)AT89S52為控制核心,系統(tǒng)主要由四個模塊:電源模塊、AT89S52最小系統(tǒng)、EEPROM存儲模塊、LED和數(shù)碼管顯示模塊構(gòu)成:1、電源模塊作為整個系統(tǒng)的各個模塊提供穩(wěn)定的電源。2、AT89S52最小系統(tǒng)作為控制系統(tǒng),控制著整個系統(tǒng)的功能實(shí)現(xiàn)。3、鍵盤模塊提供了人機(jī)交流的輸入控制功能。4、顯示模塊由LED和數(shù)碼管組成,提供了人機(jī)交流的顯示功能。2.2電源模塊本系統(tǒng)中芯片的工作電壓有5V??梢岳猛獠?V電池然后利用7805進(jìn)行電壓調(diào)整獲得5V穩(wěn)定電壓值。7805為3端正穩(wěn)壓電路,提供固定的輸出電壓,應(yīng)用范圍廣。內(nèi)含過流、過熱和過載保護(hù)電路。帶散熱片時,輸出電流可達(dá)1A。雖然是固定穩(wěn)壓電路,但使用外接元件,可獲得不同的電壓和電流。其主要特點(diǎn)如下:輸出電流可達(dá)1A輸出電壓有:5V過熱保護(hù)短路保護(hù)輸出晶體管SOA保護(hù)其TO-220封裝結(jié)構(gòu)如圖2-2所示圖2-27805封裝結(jié)構(gòu)圖圖2-35V電源模塊圖D1為電源指示燈,用以指示電源正常工作。圖中C1電源濾波電容,穩(wěn)定電源電壓,亦為抗沖擊電容,防止上電時產(chǎn)生的沖擊電壓過大而影響后續(xù)電路。C2為去耦電容,防止干擾信號返回電源影響其正常。2.3AT89S52單片機(jī)最小系統(tǒng)本設(shè)計(jì)的的單片機(jī)采用Atmel公司的AT89S52。AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計(jì)數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。AT89S52最小系統(tǒng)包括晶體振蕩電路、復(fù)位開關(guān)和電源局部。電源局部有電源模塊提供穩(wěn)定的電壓。圖2-4為AT89S52的最小系統(tǒng)原理圖。如圖2-4所示C4、C5、X1組成晶體振蕩電路連接到單片機(jī)的XTAL1、XTAL2引腳上。C3、R11和按鍵開關(guān)組成復(fù)位電路連接到單片機(jī)的RST引腳上。圖2-4AT89S52單片機(jī)最小系統(tǒng)2.4鍵盤模塊在單片機(jī)應(yīng)用系統(tǒng)中,特別是在工業(yè)測控和智能化儀器儀表中,通常都要有人人機(jī)對話功能,他包括人對應(yīng)用系統(tǒng)的狀態(tài)干預(yù)、數(shù)據(jù)的輸入以及應(yīng)用系統(tǒng)向人報告運(yùn)行狀態(tài)和運(yùn)行結(jié)果,這就需要配接鍵盤和顯示器等外設(shè)。本節(jié)結(jié)束鍵盤的接口技術(shù)。鍵盤電路的設(shè)計(jì)應(yīng)使CPU能識別是否有鍵按下以及是哪一個鍵按下,并將此鍵所代表的信息翻譯成所能接收的形式,例如ASCII碼或預(yù)定的其他編碼。鍵盤按接口原理可分為全編碼方式和非編碼方式兩種。全編碼方式有硬件邏輯來提供與被按鍵對應(yīng)的編碼。非編碼方式只簡單地提供輸入按鍵連接電路,其他的工作靠軟件來完成,具有經(jīng)濟(jì)實(shí)用的特點(diǎn)。對于一個鍵盤或一組按鍵,單片機(jī)系統(tǒng)利用一個接口電路與CPU相連。CPU可以采用查詢或中斷方式了解有無按鍵輸入并檢查是哪一個鍵按下,將該鍵號保存在某一變量中,然后通過跳轉(zhuǎn)指令轉(zhuǎn)入執(zhí)行該鍵的功能程序,執(zhí)行完后再返回主程序。按鍵一般是由機(jī)械觸點(diǎn)構(gòu)成的。當(dāng)機(jī)械觸點(diǎn)斷開、閉合時,會有抖動,如下列圖2-5所示。在觸點(diǎn)抖動期間檢測按鍵的通與斷狀態(tài),可能導(dǎo)致判斷出錯。即按鍵一次按下或釋放被錯誤地認(rèn)為是屢次操作,這種情況是不允許出現(xiàn)的。所以就必須對按鍵進(jìn)行消抖。常用的有硬件方法、軟件方法兩種。軟件方法具有硬件設(shè)計(jì)簡易、本錢低等特點(diǎn)。圖2-5鍵盤抖動由上所述,考慮到本設(shè)計(jì)中按鍵不多,且單片機(jī)的接口較多,同時考慮簡易經(jīng)濟(jì)性,本設(shè)計(jì)采用由軟件消抖的非編碼方式獨(dú)立鍵盤電路,如圖2-6所示。圖2-6鍵盤輸入模塊在圖2-6的電路中,按鍵輸入都采用低電平有效,上拉電阻保證了按鍵斷開時I/O口由確定的高電平。2.5顯示模塊在單片機(jī)應(yīng)用系統(tǒng)中,為了觀察單片機(jī)的運(yùn)行情況,進(jìn)行人機(jī)之間的交流,通常采用顯示器作為其輸出設(shè)備,用于顯示輸入鍵值中間信息及運(yùn)算結(jié)果等。本設(shè)計(jì)采用常用的發(fā)光二極管〔LED=LightEmittingDiode〕顯示器,即7段數(shù)碼管和LED指示燈。他們具有耗電省、線路簡單、價格低廉、安裝方便、耐振動等優(yōu)點(diǎn)。我們最常用的是七段式和八段式LED數(shù)碼管,八段比七段多了一個小數(shù)點(diǎn),其他的根本相同。所謂的八段就是指數(shù)碼管里有八個小LED發(fā)光二極管,通過控制不同的LED的亮滅來顯示出不同的字形。數(shù)碼管又分為共陰極和共陽極兩種類型,其實(shí)共陰極就是將八個LED的陰極連在一起,讓其接地,這樣給任何一個LED的另一端高電平,它便能點(diǎn)亮。而共陽極就是將八個LED的陽極連在一起。其原理圖如下。圖2-7數(shù)碼管顯示器外形結(jié)構(gòu)及兩種連接方式在本設(shè)計(jì)中采用共陰極連接方式,原理圖如圖2-8所示。圖2-8數(shù)碼管顯示器連接電路在圖2-8所示的數(shù)碼管顯示器連接電路中,考慮到單片機(jī)的輸出電流有限,所以在P0端口與數(shù)碼管之間接入一個上拉電阻到+5V,確使在P0口輸出高電平時,VCC與P0口同時給數(shù)碼管供電,這樣可以減小P0口的輸出電流保護(hù)端口。上拉電阻是用來限制電流的。對照圖2-7所示的字段,字型碼各位定義如表2-1所示。可以看出,如果要顯示“7〞字形,a、b、c、三個字段應(yīng)點(diǎn)亮,所以對應(yīng)的字型碼為00000111B,依此類推可寫出所要顯示的各字形碼存放在程序存儲器的固定區(qū)域中,構(gòu)成顯示代碼表。表2-1P0.0P0.1P0.2P0.3P0.4P0.5P0.6abcdefg對于系統(tǒng)中的指示燈,本設(shè)計(jì)采用如圖2-9所示的電路。圖中D2為LED指示燈,R5作為限流電阻。P1口可輸出5V電壓,LED導(dǎo)通時壓降為1.7V左右,通常電流限制在10mA以下,所以R5的阻值不小于330歐姆〔〔5-1.7〕V/10mA〕。在本設(shè)計(jì)中采用500歐姆。圖2-9LED指示電路2.6EEPROMEEPROM(ElectricallyErasableProgrammableRead-OnlyMemory),電可擦可編程只讀存儲器,一種掉電后數(shù)據(jù)不喪失的存儲芯片。EEPROM可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。一般用在即插即用。在本設(shè)計(jì)中使用24C04。24C04是一個4K位串行CMOSEEPROM,內(nèi)部含有512個8位字節(jié)。其內(nèi)部有一個16字節(jié)頁寫緩沖器,該器件通過I2C總線接口進(jìn)行操作,同時有一個專門的寫保護(hù)功能。與400KHzI2C總線兼容1.8到6.0伏工作電壓范圍低功耗CMOS技術(shù)寫保護(hù)功能:當(dāng)WP為高電平時進(jìn)入寫保護(hù)狀態(tài)頁寫緩沖器自定時擦寫周期1,000,000編程/擦除周期可保存數(shù)據(jù)100年8腳DIP、SOIC或TSSOP封裝圖2-10為24C04的管腳配置,同時在表2-2給出了各管腳簡易功能描述。圖2-1024C04管腳配置表2-224C04管腳描述圖2-11EEPROM電路原理圖如圖2-11所示為本設(shè)計(jì)的EEPROM電路原理圖。3程序設(shè)計(jì)本系統(tǒng)的單片機(jī)程序利用KeiluVisionV4.02進(jìn)行程序設(shè)計(jì),以下介紹整個系統(tǒng)的程序流程,具體程序參見附錄。主程序流程開始變量定義端口初始化開始變量定義端口初始化無操作?NoYes數(shù)碼管初始化當(dāng)前狀態(tài)判斷報警?顯示、計(jì)時Yes輸入?顯示、保存Yes查找?顯示、保存YesNoNoNo圖3-1主程序流程圖如3-1所示圖所示為單片機(jī)的主程序流程圖。首先進(jìn)行各個模塊的初始化工作,如變量定義、單片機(jī)端口和EERPOM端口初始化、顯示模塊初始化等。然后進(jìn)入程序的主流程,判斷系統(tǒng)的當(dāng)前狀態(tài),掃描鍵盤輸入確定狀態(tài)后,執(zhí)行相應(yīng)的處理。鍵盤輸入模塊的程序設(shè)計(jì)本設(shè)計(jì)采用由軟件消抖的非編碼方式獨(dú)立鍵盤電路,所以在進(jìn)行鍵盤輸入模塊的程序設(shè)計(jì)時,需考慮兩個過程:1、鍵盤按鍵的識別;2、消抖。首先在程序中定義各個鍵盤的輸入信號管腳,如下所示。在key_input=0時代表輸號鍵被按下,其他按鍵同此。sbitkey_input =P1^0; //輸號sbitkey_find =P1^1; //查號sbitkey_reset =P1^2; //復(fù)位sbitkey_jingbao=P1^6; //警報信號然后在一個子程序中實(shí)現(xiàn)鍵盤的識別及消抖。本系統(tǒng)中把鍵盤的輸入狀態(tài)作為整個系統(tǒng)的狀態(tài),所以定義一個ucharstate(void)子程序,其返回值為鍵盤的當(dāng)前狀態(tài),其定義如下:#definestate_null 0 //無按鍵狀態(tài)#definestate_input 1 //輸號鍵按下#definestate_find 2 //查詢鍵按下#definestate_reset 3 //復(fù)位鍵按下#definestate_jingbao 4 //報警鍵按下在ucharstate(void)子程序中本設(shè)計(jì)利用變量keycount的條件自加來實(shí)現(xiàn)消抖和長短按鍵的識別過程。每次進(jìn)入子程序時keycount清零,然后進(jìn)入循環(huán),keycount自加,同時查詢按鍵狀態(tài):當(dāng)keycount自加到N1時,表示長按,那么返回狀態(tài)值,退出子程序;當(dāng)無按鍵按下時,退出按鍵查詢循環(huán),并判斷keycount是否小于于N2,即是否為抖動,當(dāng)keycount<N2時,為抖動信號那么返回0,當(dāng)keycount>=N2時,為有效按鍵返回狀態(tài)值。整個ucharstate(void)子程序流程如圖3-2所示。開始開始Keycount=0按鍵?YesKeycount自加返回按鍵值長按?返回按鍵值No保存按鍵值抖動?NoNo退出子程序YesYes圖3-2主程序流程圖數(shù)碼管顯示模塊的程序設(shè)計(jì)由上章所述,本設(shè)計(jì)利用table數(shù)組保存字形碼,作為顯示代碼表,如下所示:ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0123456789 0x3e,0x73,0x7c,0x40//“U〞-10,“P〞-11,“b〞-12,“-〞-13};由table數(shù)組可知,總共可以顯示0~9、U、P、b、-共14個字符。同時在程序中編寫Display(uchardata_disp)函數(shù),data_disp為要顯示的字符,程序如下:voidDisplay(uchardata_disp){ if(data_disp>=13) //不在表內(nèi) P0=table[13]; //顯示“-〞 else //表內(nèi) P0=table[data_disp]; //查表顯示}對于LED指示燈,本設(shè)計(jì)中采用高電平點(diǎn)亮的方式,利用P0.7端口控制。由此在程序中定義sbitLed=P1^7,當(dāng)LED=0時,輸出低電平,LED燈滅,當(dāng)LED=1時,輸出高電平,LED燈亮。EEPROM的驅(qū)動程序設(shè)計(jì)本設(shè)計(jì)中利用EEPROM〔24C04〕來存儲報警用的號碼,24C04支持I2C總線數(shù)據(jù)傳送協(xié)議,要在單片機(jī)系統(tǒng)中應(yīng)用I2C總線的24C04做存儲設(shè)備時,先要了解I2C總線的根本驅(qū)動方法,以下介紹24C04的I2C驅(qū)動程序3.4.124C04的I2C總線構(gòu)成及其協(xié)議I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。I2C總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器,任何從總線接收數(shù)據(jù)的器件為接收器,數(shù)據(jù)傳送是由產(chǎn)生串行時鐘和所有起始停止信號的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)發(fā)送或接收的模式。在本設(shè)計(jì)中AT89S52單片機(jī)作為主器件,通過器件地址輸入端A0、A1的不同設(shè)置,可以實(shí)現(xiàn)將最多4個24C04器件連接到總線上。由上一章所述的電路設(shè)計(jì),本設(shè)計(jì)中只用一個24C04,其地址為[A1、A0]為[0、0],寫保護(hù)無效。242C04管腳描述如下:SCL:串行時鐘輸入管腳,用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時鐘。SDA:雙向串行數(shù)據(jù)/地址管腳,用于器件所有數(shù)據(jù)的發(fā)送或接收,SDA是一個開漏輸出管腳,可與其它開漏輸出或集電極開路輸出進(jìn)行線或〔wire-OR〕。A0、A1、A2:器件地址輸入端,用于多個器件級聯(lián)時設(shè)置器件地址,當(dāng)這些腳懸空時默認(rèn)值為0WP:寫保護(hù)管腳,如果WP管腳連接到Vcc,所有的內(nèi)容都被寫保護(hù),只能讀;當(dāng)WP管腳連接到Vss或懸空,允許器件進(jìn)行正常的讀/寫操作。I2C總線協(xié)議定義如下1、總線空閑時,SDA、SCL為高電平,只有在總線空閑時才允許啟動數(shù)據(jù)傳送。2、數(shù)據(jù)傳輸前,總線要求有一個START〔開始位〕位做為數(shù)據(jù)開始的標(biāo)識,它的要求是SCL為高時,SDA有一個從高到低的電平跳變動作,完成這個動作后才可以進(jìn)行數(shù)據(jù)傳輸,時序圖參看圖3-3中的“開始〞。3、數(shù)據(jù)傳輸時,總線要有一個穩(wěn)定的數(shù)據(jù)狀態(tài),來保證數(shù)據(jù)為有效數(shù)據(jù),它的要求是在SCL為高電平時,SDA必須保持電平穩(wěn)定,不允許有跳變。編寫單片機(jī)向總線送數(shù)據(jù)程序時那么可以在SCL還在低電平時,把數(shù)據(jù)電平送到SDA,然后拉高SCL,這時SDA不應(yīng)有電平跳變,延時后拉低SCL,再進(jìn)行下一位的數(shù)據(jù)傳送直到完成。在總線上讀數(shù)據(jù)時也是只有在SCL為高時,SDA為有效數(shù)據(jù)。時序參看圖3-3的“保持〞。4、數(shù)據(jù)傳輸后,總線要有一個STOP〔結(jié)束位〕位,來通知總線本次傳輸已結(jié)束,它的要求是SCL為高時,SDA有一個從低到高的電平跳變動作,正好和START位相反。時序參看圖3-3的“停止〞。圖3-3I2C根本信號5、I2C總線在每接收完一個字節(jié)〔8個二進(jìn)制位〕后,在第九個時鐘信號時,會在SDA上回應(yīng)一個低電平的ACK應(yīng)答信號,以此說明當(dāng)前受控的器件已接收完一個字節(jié),可以開始下一個字節(jié)的傳送了。假設(shè)未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。時序圖可以參看圖3-4。圖3-4I2C的ACK信號6、I2C總線在操作受控器件時,需要先發(fā)送受控器件的器件地址,24C04也不例外,在每次命令前需要先發(fā)送一個字節(jié)的器件地址和讀寫標(biāo)識,也可稱為器件錄址。圖3-5是24C04的器件尋址命令中每個位所代表的意思。A1、A0位是器件地址,它是對應(yīng)于芯片的A1、A0引腳。這樣不難看出在同一總線可以掛4個24C04。器件地址字節(jié)中的R/W位是用于標(biāo)識當(dāng)前操作是讀器件還是寫器件,寫器件時R/W位設(shè)置0,讀器件時R/W位設(shè)置1。圖3-524C04的器件尋址命令3.4.224C04的I2C總線根本操作24C04的I2C總線根本操作包括寫入單個字節(jié)、頁寫入、讀當(dāng)前地址數(shù)據(jù)、讀任意地址數(shù)據(jù)、連續(xù)讀取數(shù)據(jù)等。在本設(shè)計(jì)中使用到了寫入單個字節(jié)、讀當(dāng)前地址數(shù)據(jù)、讀任意地址數(shù)據(jù)、連續(xù)讀取數(shù)據(jù)等操作,以下對這1、單字節(jié)寫入寫入字節(jié)指令每次只能向芯片中的一個地址寫入一個字節(jié)的數(shù)據(jù)。首先發(fā)送開始位來通知芯片開始進(jìn)行指令傳輸,然后傳送設(shè)置好的器件地址字節(jié),R/W位應(yīng)置0,接著是分開傳送十六位地址的上下字節(jié),再傳送要寫入的數(shù)據(jù),最后發(fā)送停止位表示本次指令結(jié)束。圖3-6是寫入單個字節(jié)的時序圖。圖3-624C04的單字節(jié)寫入時序2、讀當(dāng)前地址數(shù)據(jù)這種讀取模式是讀取當(dāng)前芯片內(nèi)部的地址指針指向的數(shù)據(jù)。每次讀寫操作后,芯片會把最后一次操作過的地址作為當(dāng)前的地址。在這里要注意的是在微處理器接收完芯片傳送的數(shù)據(jù)后不必發(fā)送給低電平的ACK給芯片,直接拉高SDA等待一個時鐘后發(fā)送停止位。圖3-7是讀當(dāng)前地址時序圖。圖3-724C04的讀當(dāng)前地址數(shù)據(jù)時序3、讀任意地址數(shù)據(jù)"讀當(dāng)前地址"可以說是讀的根本指令,讀任意地址時只是在這個根本指令之前加一個'偽操作',這個偽操作傳送一個寫指令,但這個寫指令在地址傳送完成后就要結(jié)束,這時芯片內(nèi)部的地址指針指到這個地址上,再用讀當(dāng)前地址指令就可以讀出該地址的數(shù)據(jù)。圖3-8是讀任意地址的時序圖。圖3-824C04的讀任意地址數(shù)據(jù)時序4、連續(xù)讀取連續(xù)讀取操作時只要在上面二種讀取方式中芯片傳送完讀取數(shù)據(jù)后,微處理器回應(yīng)給芯片一個低電平的ACK應(yīng)答,那么芯片地址指針自動加一并傳送數(shù)據(jù),直到微處理器不回應(yīng)并停止操作。圖十二是連續(xù)讀取的時序圖。圖3-924C04的讀連續(xù)讀取時序3.4.324C04的驅(qū)動子程序由上述的分析,可編寫24C04的驅(qū)動子程序,首先利用_nop()定義空操作宏,作為等待延時操作。然后利用sbit定義數(shù)據(jù)和時鐘引腳。最后根據(jù)時序編寫子程序。具體的程序參見附錄。4Proteus仿真本系統(tǒng)利用是英國Labcenterelectronics公司出版的EDA工具軟件Proteus7.5SP3進(jìn)行系統(tǒng)的仿真,來調(diào)試系統(tǒng)的功能完整性。本章介紹利用Proteus進(jìn)行系統(tǒng)仿真的主要流程及操作,其余局部可參考Proteus的幫助文檔。Proteus7.5SP3界面安裝完P(guān)roteus后,翻開Proteus軟就就會出現(xiàn)如圖4-1所示的操作界面。圖4-1Proteus操作界面圖4-1中的原理圖編輯窗口〔TheEditingWindow〕,是用來繪制原理圖的。藍(lán)色方框內(nèi)為可編輯區(qū),元件要放到它里面。注意,這個窗口是沒有滾動條的,你可用預(yù)覽窗口來改變原理圖的可視范圍。其余各局部可參考有關(guān)書籍。仿真流程1、添加元件到元件列表中本例要用到的元件有:AT89S52、7805、LED、24C04、LED等。單擊如圖4-2所示的“P〞按鈕,出現(xiàn)挑選元件對話框,在對話框的KEYWORDS中輸入AT89C52,即可得到圖4-3所示結(jié)果圖4-2Proteus的“P〞按鈕圖4-3Proteus的器件選取然后單擊OK,關(guān)閉對話框,這時元件列表中列出AT89S52,以同樣方式即可添加所需要的器件。最終結(jié)果如圖4-4所示。圖4-4Proteus中已選取的器件2、放置元件首先添加元器件:在元件列表中左鍵選取AT89S52,在原理圖編輯窗口中單擊左鍵,這樣AT89S52就被放到原理圖編輯窗口中了。以同樣方式即可放置其他元件。然后添加“地〞:左鍵選擇模型選擇工具欄中的圖標(biāo),出現(xiàn)如圖4-5所示的終端,左鍵選擇GROUND,并在原理圖編輯窗口中左擊,這樣“地〞就被放置到原理圖編輯窗口中了。再以同樣方式可添加電源VCC的仿真端口。圖4-5Proteus的終端選取3、連線在Proteus中元器件的VSS、VDD、VEE不需連接,默認(rèn)VSS=0V、VDD=5V、VEE=-5V、GND=0V。其余電氣節(jié)點(diǎn),可在在需要連接的兩個端點(diǎn)單擊鼠標(biāo)左鍵,就可連接兩個電氣節(jié)點(diǎn)。如圖4-6即為連接完后的電路圖。圖4-6連接后的Proteus電路圖4、添加仿真文件左鍵單擊連好線的AT89S52,出現(xiàn)如圖4-7所示的EditComponent界面,在ProgramFile中單擊出現(xiàn)文件瀏覽對話框,找到Keil程序編譯完成的dianzhen.hex文件,單擊確定,完成添加文件;在ClockFrequency中把頻率改為12MHz,單擊OK退出,就完成仿真文件的添加工作,在Proteus進(jìn)行仿真時,AT89S52即可以12M晶振運(yùn)行dianzhen.hex里的程序。圖4-7仿真文件添加界面5、仿真單擊開始仿真。電氣節(jié)點(diǎn)上的紅色代表高電平,蘭色代表低電平,灰色代表不確定電平〔floating〕。運(yùn)行時,在Debug菜單中可以查看AT89S52的相關(guān)資源。圖4-8為仿真運(yùn)行時的整體效果圖。圖4-8仿真效果圖5結(jié)論本設(shè)計(jì)詳細(xì)介紹了基于單片機(jī)的防盜報警器的控制電路和控制程序設(shè)計(jì)過程,研究了24C04的I2C總線協(xié)議,同時對硬件電路,軟件編程,做出了詳細(xì)的說明,設(shè)計(jì)并仿真出根本符合課題要求的防盜報警器的控制電路和控制程序。本文首先介紹了本設(shè)計(jì)的設(shè)計(jì)要求,及所采用的器件和手段,并根據(jù)課題的實(shí)際要求提出了整體的設(shè)計(jì)方案和原理圖。接著分別從硬件和軟件兩個方面對系統(tǒng)的設(shè)計(jì)做出了詳細(xì)的說明,最后對仿真操作的流程作了詳細(xì)介紹。在本次畢業(yè)設(shè)計(jì)中,掌握了AT89S52的結(jié)構(gòu)原理和24C04的I2C總線的驅(qū)開工作原理,熟悉了Keil程序設(shè)計(jì)軟件和Proteus仿真軟件的使用。在整個系統(tǒng)的設(shè)計(jì)和調(diào)試仿真的過程中,我學(xué)到了許多課本上學(xué)不到的珍貴知識,增長了實(shí)踐經(jīng)驗(yàn),體會到了科研工作不僅是知識的應(yīng)用,更是知識不斷積累的過程。它不僅需要有豐富的知識,冷靜的頭腦和分析能力,而且需要踏實(shí)、認(rèn)真、嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,同時更要持之以恒的不懈精神和不斷學(xué)習(xí)的進(jìn)取精神。這一段時間的實(shí)踐,必將給我今后的工作和人生帶來積極的經(jīng)驗(yàn)和影響。參考文獻(xiàn)[1]王洪建,AT89C2051在小區(qū)防盜報警系統(tǒng)中的應(yīng)用.《儀器儀表學(xué)報》,2005年8期[2]王芳,馬幼軍,蔣國平.智能化住宅防盜防火報警系統(tǒng)設(shè)計(jì).《傳感器技術(shù)》,2002年10期.[3]何立民.單片機(jī)實(shí)驗(yàn)與實(shí)踐教程.北京航空航天大學(xué)出版社,2004.7[4]郭天祥.新概念51單片機(jī)C語言教程——入門、提高、開發(fā)、拓展.電子工業(yè)出版社,2023.1[5]彭偉.單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)100例——基于8051+Proteus仿真.電子工業(yè)出版社,2023.6[6]朱清慧,張鳳蕊,翟天嵩,王志奎.Proteus教程——電子線路設(shè)計(jì)、制版與仿真.清華大學(xué)出版社,2023.9[7]李學(xué)禮,林海峰.基于Proteus軟件的單片機(jī)實(shí)驗(yàn)室建設(shè)[J];單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005年09期

[8]王建敏,詹華群.單片機(jī)仿真實(shí)驗(yàn)的探討與研究[J].江西科技師范學(xué)院學(xué)報,2005年04期

[9]周彬,劉曉燕.單片機(jī)實(shí)驗(yàn)的仿真教學(xué)[J].重慶職業(yè)技術(shù)學(xué)院學(xué)報,2006年03期

[10]方怡冰.單片機(jī)課程的教學(xué)與實(shí)驗(yàn)改革[J].電氣電子教學(xué)學(xué)報;2006年03期

[11]鄧力.PROTEUS51單片機(jī)的電路仿真[J].中國科技信息;2006年14期

[12]彭利軍,郝海峰.基于Proteus的單片機(jī)系統(tǒng)的虛擬仿真[J].電子與封裝,2006年07期

[13]寧成軍,張江霞.基于Proteus和Keil接口的單片機(jī)外圍硬件電路仿真[J].現(xiàn)代電子技術(shù),2006年18期

[14]代啟化.Proteus在單片機(jī)電路系統(tǒng)設(shè)計(jì)中的應(yīng)用[J].自動化與儀器儀表,2006年06期

[15]宋國富,王玉葉;用Proteus實(shí)現(xiàn)51單片機(jī)的動態(tài)仿真[J].安徽職業(yè)技術(shù)學(xué)院學(xué)報;2006年04期

[16]李海鯤.Proteus在單片機(jī)課程設(shè)計(jì)中的應(yīng)用[J].電腦知識與技術(shù)(學(xué)術(shù)交流),2006年35期

[17]Anon.Embeddedsystems.ElectronicDesign,2002,50(3):74~75[18]Iain.Liu,Steve.Real-timeembeddedsystems.ComputingandControlBate,EngineeringJournal,2002,13(4):154~155[19]Compatible8-BitA/DConverterwith8-ChannelMultiplexerDatasheet.[20]Jerraya,A.A.;Wolf,W.Hardware/softwareinterfacecodesignforembeddedsystems.Computer,2005,38(2):9~63.[21]KeilElektronicGmbH.KeilC51Manual.[22]LeiJian,LuoKelu.Architectureofembeddedsystemsimulationdevelopmentplatform.JournalofInformationandComputationScience,2004,1(3):129~134.[23]LabcenterElectronicsLtd.ProteusIntroduction.致謝附錄A#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineNOP_nop_()#defineNNOPNOP;NOP;NOP;NOP;NOPvoidI2C_Start();voidI2C_Stop();voidAck_I2C();bitISendB(ucharsla,ucharc);bitIRcvB(ucharsla,uchar*c);bitISendStr(ucharsla,ucharsub,uchar*s,ucharn);bitIRcvStr(ucharsla,ucharsub,uchar*s,ucharn);voidDelay(uchar);ucharcodeledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*====================================全局變量定義&位定義====================================*/#defineWaitTime 3 //等待時間3s#definestate_null 0#definestate_input 1#definestate_find 2#definestate_reset 3#definestate_jingbao 4bitack;sbitSDA=P3^5 ;sbitSCL=P3^4 ;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,//012340x6d,0x7d,0x07,0x7f,0x6f,//56789 0x3e,//U-100x73,//P-11 0x7c,//b-12 0x40//- };uchartelephone[7]={0,1,2,3,4,5,6};ucharsec; //定義計(jì)數(shù)值,每過一秒加1uinttcnt; //定時中斷次數(shù)sbitgewei=P2^0; //個位選通定義sbitshiwei=P2^1; //十位選通定義sbitkey_input =P1^0; //輸號sbitkey_find =P1^1; //查號sbitkey_reset =P1^2; //復(fù)位sbitkey_jingbao=P1^6; //警報信號sbitLed =P1^7; //LEDuintkeycount=0;uchardata_tel; //數(shù)據(jù)ucharaddr_tel; //位/*====================================I2C驅(qū)動====================================*///n=1->10msvoidDelay(ucharn){ uchari,j; i=100; j=100; while(j--) { while(i--); };}/*====================================函數(shù)功能:開始入口參數(shù):說明:=====================================*/voidI2C_Start(void){ SDA=1; NOP; SCL=1; NNOP; SDA=0; NNOP; SCL=0; NOP; NOP;}/*====================================函數(shù)功能:I2CSTOP入口參數(shù):說明:=====================================*/voidI2C_Stop(void){ SDA=0; NOP; SCL=1; NNOP; SDA=1; NNOP;}/*====================================函數(shù)功能:送一字節(jié)入口參數(shù):說明:=====================================*/voidSendB(ucharc){ uchari; for(i=0;i<8;i++) { if((c<<i)&0x80)SDA=1; elseSDA=0; NOP; SCL=1; NNOP; SCL=0; } NOP; NOP; SDA=1; //8位傳完后釋放SDA,也就SDA=1// SCL=0; NOP; NOP; SCL=1; NOP; NOP; NOP; if(SDA==1)ack=0;//noack elseack=1; //ack SCL=0; NOP; NOP;}/*====================================函數(shù)功能:接收來處SLA的數(shù)據(jù)入口參數(shù):說明:操作后調(diào)用應(yīng)答函數(shù)ACK_I2C();=====================================*/ucharRcvB(void){ ucharrete; uchari; rete=0; SDA=1; //置數(shù)據(jù)線為接收狀態(tài) for(i=0;i<8;i++) { NOP; SCL=0; NNOP; SCL=1; NOP; NOP; rete=rete<<1; if(SDA==1)rete++; NOP; NOP; } SCL=0; NOP; NOP; return(rete);}/*====================================函數(shù)功能:主控器件應(yīng)答功能入口參數(shù):說明:送0發(fā)0,送1發(fā)1,發(fā)1表示NOACK=====================================*/voidAck_I2C(bita){ if(a==0)SDA=0; //是不發(fā)出應(yīng)答信號 elseSDA=1; NOP;NOP;NOP; SCL=1; //時鐘高電平同期大于4us NNOP; SCL=0; NOP; NOP;}/*====================================函數(shù)功能:發(fā)送一字節(jié)的數(shù)據(jù),返回ack入口參數(shù):說明:ack=1,應(yīng)答;ack=0,無應(yīng)答=====================================*/bitISendB(ucharsla,ucharc){ I2C_Start(); SendB(sla); if(ack==0)return(0); SendB(c); if(ack==0)return(0); I2C_Stop(); return(1);}/*====================================函數(shù)功能:接收一字節(jié)數(shù)據(jù)入口參數(shù):從器件地址,數(shù)據(jù)地址,操作數(shù)年地址,字節(jié)數(shù)說明:=====================================*/bitISendStr(ucharsla,ucharsub,uchar*s,ucharn){ uchari; I2C_Start(); SendB(sla); if(ack==0)return(0); SendB(sub); if(ack==0)return(0); for(i=0;i<n;i++) { SendB(*s); if(ack==0)return(0); s++; } I2C_Stop(); return(1);}/*====================================函數(shù)功能:收一字節(jié)的數(shù)據(jù)入口參數(shù):slaveaddress說明:=====================================*/bitIRcvB(ucharsla,uchar*c){ I2C_Start(); SendB(sla+1); if(ack==0)return(0); *c=RcvB(); Ack_I2C(1); I2C_Stop(); return(1);}/*====================================函數(shù)功能:讀取多字節(jié)數(shù)據(jù)入口參數(shù):從器件地址,數(shù)據(jù)地址,操作數(shù)年地址,字節(jié)數(shù)說明:成功那么返回1=====================================*/bitIRcvStr(ucharsla,ucharsub,uchar*s,ucharn){ uchartemp; I2C_Start(); SendB(sla); if(ack==0)return(0); SendB(sub); if(ack==0)return(0); I2C_Start(); SendB(sla+1); if(ack==0)return(0); temp=n-1; while(temp--) { *s=RcvB(); Ack_I2C(0); s++; } *s=RcvB(); Ack_I2C(1); I2C_Stop(); return(1);}/********************************I2C驅(qū)動結(jié)束************************///SEG7顯示voidDisplay(uchardata_disp){ if(data_disp>=13) P0=table[13]; else P0=table[data_disp];}///////////////////////////////////////////////////////T0中斷子程序voidt0_init(){ TMOD=0x01; //定時器工作在方式一 ET0=1; EA=1; TH0=(65536-50000)/256; //對TH0TL0賦值 TL0=(65536-50000)%256; //0.05中斷一次 tcnt=0; //每過500usttcnt加1}voidt0_start(){ TR0=1; //開始計(jì)時}voidt0_stop(){ TR0=0;}//定時0中斷效勞程序voidt0(void)interrupt1using0{ TH0=(65536-50000)/256; //對TH0TL0賦值 TL0=(65536-50000)%256; //重裝計(jì)數(shù)初值 tcnt++; //每過500usttcnt加1 if(tcnt==20) //記滿20次〔即1s〕時 { tcnt=0; //重新再計(jì) sec++; }}///////////////////////////////////////////////////////T0中斷子程序完ucharstate(){ ucharstate_temp; keycount=0; while(1) { keycount++; if (!key_input) state_temp=state_input; elseif(!key_find) state_temp=state_find; elseif(!key_reset) state_temp=state_reset; elseif(!key_jingbao) state_temp=state_jingbao; else break; if(keycount>30000) returnstate_temp; } //Display(state_temp); if(keycount>100) returnstate_temp; else return0;}//voidinput()//{ ucharnum=0;// ucharcount=0;// bit key=0;// while(num<8)// { count=10;// while(!key_inputorcount--);// while()// }//}voidbohao(){ }voidjingbao(){ sec=0; bohao(); //撥號 Display(12); //顯示b Led=1; //LED亮 t0_start(); while(sec!=WaitTime); //定時3s Display(10); Led=0;}voidinput_init(){ uchari; for(i=0;i<7;i++) telephone[i]=1; Led=0; data_tel=0; addr_tel=0; Display(0);}voidfind_init(){ uchari; addr_tel=0; Led=1; P3=0xff; IRcvStr(0xa0,0x00,telephone,7); }voidmain(){ //測試EEPROM// ucharSend_data[3]={1,5,9};// ucharRec_data[3];// uchar*s;// s=Send_data;// P1=0xff;// I2C_Start();// ISendStr(0xa0,0x20,s,3);// Delay(1);// P1=0xff;// s=Rec_data;// IRcvStr(0xa0,0x20,s,3); ucharcount=0; uchartemp=0; uchari=0; ucharstate_project=0; ucharstate_last=0; ucharstate_present=0; uchar*s; ucharSend_data[3]={1,5,9}; ucharRec_data[3]; t0_init(); sec=0;Display(10);Led=1;Delay(10); //測試鍵盤狀態(tài) while(0) { temp=state(); if(temp) { Led=1; Display(temp); } else Led=0; } //測試t0中斷 while(0) { sec=0; t0_start(); while(sec!=3) Led=!Led; } //讀取EEPROM中的號碼 s=telephone;// P3=0xff;// I2C_Start();// ISendStr(0xa0,0x00,s,7);// Delay(1); P3=0xff; s=telephone; IRcvStr(0xa0,0x00,s,7); //初始狀態(tài)設(shè)置 state_present=state_null; state_last=state_null; while(1) { switch(state_last) { casestate_null: casestate_jingbao: { state_present=s

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論