2017畢業(yè)論文-基于AT89C51單片機(jī)萬(wàn)年歷設(shè)計(jì).doc
本科生畢業(yè)設(shè)計(jì)基于AT89C51單片機(jī)萬(wàn)年歷設(shè)計(jì)院 系電氣信息工程學(xué)院 專 業(yè)電氣工程及其自動(dòng)化班 級(jí) 07級(jí)本科四班 學(xué) 號(hào) 學(xué) 生 姓 名 聯(lián) 系 方 式 指 導(dǎo) 教 師職稱:助理實(shí)驗(yàn)師2011年5月獨(dú) 創(chuàng) 性 聲 明本人鄭重聲明:所呈交的畢業(yè)論文是本人在指導(dǎo)老師指導(dǎo)下取得的研究成果。除了文中特別加以注釋和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰寫的研究成果。與本研究成果相關(guān)的所有人所做出的任何貢獻(xiàn)均已在論文中作了明確的說明并表示了謝意。簽名: 年月日授 權(quán) 聲 明本人完全了解許昌學(xué)院有關(guān)保留、使用本科生畢業(yè)論文的規(guī)定,即:有權(quán)保留并向國(guó)家有關(guān)部門或機(jī)構(gòu)送交畢業(yè)論文的復(fù)印件和磁盤,允許畢業(yè)論文被查閱和借閱。本人授權(quán)許昌學(xué)院可以將畢業(yè)論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存、匯編論文。本人論文中有原創(chuàng)性數(shù)據(jù)需要保密的部分為(如沒有,請(qǐng)?zhí)顚憽盁o(wú)”): 簽名: 年 月 日指導(dǎo)教師簽名: 年 月 摘 要該電子萬(wàn)年歷主要采用AT89C51單片機(jī)作為主控核心,由DS1302時(shí)鐘芯片提供時(shí)鐘、LCD液晶顯示屏顯示。AT89C51單片機(jī)是由ATMEL公司推出的,功耗小,電壓可選用46V電壓供電;DS1302時(shí)鐘芯片是美國(guó)DALLAS公司推出的具有涓細(xì)電流充電功能的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),而且DS1302的使用壽命長(zhǎng),誤差?。粩?shù)字顯示是采用的LCD液晶顯示屏來(lái)顯示,可以同時(shí)顯示年、月、日、星期、時(shí)、分、秒等信息。關(guān)鍵詞:時(shí)鐘電路;時(shí)鐘芯片DS1302;LCD;AT89C51ABSTRACTThe electronic calendar using AT89C51 microcontroller as the master key core clock from the clock chip DS1302, LCD liquid crystal screen display. Atmel AT89C51 microcontroller is introduced, the power consumption, voltage can be selected 4 6V supply voltage; DS1302 clock chip introduced in the United States with Juan DALLAS small low-power charging current real time clock chip, which can in , Month, day, week, hour,minute, seconds time, and the DS1302s long life, small error; digital LCD display is used to display the LCD screen can be displayed simultaneously on ,Month, day,week, hours, minutes, seconds and other information. In addition, the electronic calendar is also a time for calibration and other functions.Keywords:clock circuit;clock chip DS1302;LCD;AT89C51目 錄緒 論11 設(shè)計(jì)要求與方案論證21.1 引言21.2功能要求21.3方案論證21.3.1 技術(shù)可行性21.3.2 單片機(jī)的選擇31.3.3 顯示模塊的選擇31.3.4 時(shí)鐘芯片的選擇方案與論證41.3.5鍵盤模塊的選擇41.3.6總體方案論證與選擇52 系統(tǒng)硬件電路的設(shè)計(jì)52.1電路設(shè)計(jì)52.2系統(tǒng)硬件概述62.2.1 主控制器AT89C5162.2.2 時(shí)鐘電路DS130272.3主要單元電路的設(shè)計(jì)72.3.1顯示電路72.3.2鍵盤接口82.3.3時(shí)鐘電路113 系統(tǒng)的軟件設(shè)計(jì)133.1 程序設(shè)計(jì)133.2 程序流程圖133.3時(shí)間控制流程圖144 proteus軟件仿真144.1 Proteus ISIS簡(jiǎn)介144.2 Proteus運(yùn)行流程154.3 Proteus功能仿真16結(jié)束語(yǔ)19參考文獻(xiàn)20附 錄21致 謝28緒 論隨著人們生活水平的提高和生活節(jié)奏的加快,對(duì)時(shí)間的要求越來(lái)越高,精準(zhǔn)數(shù)字計(jì)時(shí)的消費(fèi)需求也是越來(lái)越多。二十一世紀(jì)的今天,最具代表性的計(jì)時(shí)產(chǎn)品就是電子萬(wàn)年歷,它是近代世界鐘表業(yè)界的新突破。第一次是擺和擺輪游絲的發(fā)明,相對(duì)穩(wěn)定的機(jī)械振蕩頻率源使鐘表的走時(shí)差從分級(jí)縮小到秒級(jí),代表性的產(chǎn)品就是帶有擺或擺輪游絲的機(jī)械鐘或表。第二次是石英晶體振蕩器的應(yīng)用,發(fā)明了走時(shí)精度更高的石英電子鐘表,使鐘表的走時(shí)月差從分級(jí)縮小到秒級(jí)。第三次就是單片機(jī)數(shù)碼計(jì)時(shí)技術(shù)的應(yīng)用(電子萬(wàn)年歷),使計(jì)時(shí)產(chǎn)品的走時(shí)日差從分級(jí)縮小到1/600萬(wàn)秒,從原有傳統(tǒng)指針計(jì)時(shí)的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示方式,直觀明了,并增加了全自動(dòng)日期、星期、溫度以及其他日常附屬信息的顯示功能,它更符合消費(fèi)者的生活需求!因此,電子萬(wàn)年歷的出現(xiàn)帶來(lái)了鐘表計(jì)時(shí)業(yè)界跨躍性的進(jìn)步。我國(guó)生產(chǎn)的電子萬(wàn)年歷有很多種,總體上來(lái)說以研究多功能電子萬(wàn)年歷為主,使萬(wàn)年歷除了原有的顯示時(shí)間,日期等基本功能外,還具有鬧鈴,報(bào)警等功能。商家生產(chǎn)的電子萬(wàn)年歷更從質(zhì)量,價(jià)格,實(shí)用上考慮,不斷的改進(jìn)電子萬(wàn)年歷的設(shè)計(jì),使其更加的具有市場(chǎng)。本設(shè)計(jì)為軟件,硬件相結(jié)合的一組設(shè)計(jì)。在軟件設(shè)計(jì)過程中,應(yīng)對(duì)硬件部分有相關(guān)了解,這樣有助于對(duì)設(shè)計(jì)題目的更深了解,有助于軟件設(shè)計(jì)?;镜囊私庖恍┲饕骷幕竟δ芎妥饔?。除了采用集成化的時(shí)鐘芯片外,還采用MCU的方案,利用AT89系列單片微機(jī)制成萬(wàn)年歷電路,采用軟件和硬件結(jié)合的方法,控制LCD液晶顯示屏輸出,分別用來(lái)顯示年、月、日、星期、時(shí)、分、秒,其最大特點(diǎn)是:硬件電路簡(jiǎn)單,安裝方便易于實(shí)現(xiàn),軟件設(shè)計(jì)獨(dú)特,可靠。AT89C51是由ATMEL公司推出的一種小型單片機(jī)。95年出現(xiàn)在中國(guó)市場(chǎng)。其主要特點(diǎn)為采用FLASH存貯器技術(shù),降低了制造成本,其軟件、硬件與MCS-51完全兼容,所以很快被中國(guó)廣大的用戶接受。本文介紹了基于AT89C51單片機(jī)設(shè)計(jì)的電子萬(wàn)年歷。在緒論中簡(jiǎn)單介紹了單片機(jī)的發(fā)展與其在中低端領(lǐng)域中的優(yōu)勢(shì)以及課題的開發(fā)意義;接著介紹了AT89C51單片機(jī)的硬件結(jié)構(gòu)和本畢業(yè)設(shè)計(jì)所要外擴(kuò)的LCD顯示及其驅(qū)動(dòng)方法,并在此基礎(chǔ)上實(shí)現(xiàn)了萬(wàn)年歷基本電路的設(shè)計(jì);然后使用單片機(jī)高級(jí)C語(yǔ)言進(jìn)行萬(wàn)年歷程序的設(shè)計(jì),程序采用模塊化結(jié)構(gòu),使得邏輯關(guān)系簡(jiǎn)單明了,維護(hù)方便。 1 設(shè)計(jì)要求與方案論證1.1 引言隨著電子技術(shù)的發(fā)展,人類不斷研究,不斷創(chuàng)新紀(jì)錄。目前萬(wàn)年歷已經(jīng)不再局限于以書本形式出現(xiàn)。以電腦軟件或者電子產(chǎn)品形式出現(xiàn)的萬(wàn)年歷被稱為電子萬(wàn)年歷。與傳統(tǒng)書本形式的萬(wàn)年歷相比,電子萬(wàn)年歷得到了越來(lái)越廣泛的應(yīng)用,采用電子時(shí)鐘作為時(shí)間顯示已經(jīng)成為一種時(shí)尚。目前市場(chǎng)上各式各樣的電子時(shí)鐘數(shù)不勝數(shù),但多數(shù)是只針對(duì)時(shí)間顯示,功能單一不能滿足人們?nèi)粘I钚枨蟆?本文提出了一種基于AT89C51單片機(jī)的萬(wàn)年歷設(shè)計(jì)方案,本方案以AT89C51單片機(jī)作為主控核心,與時(shí)鐘芯片DS1302、按鍵、LCD顯示等模塊組成硬件系統(tǒng)。在硬件系統(tǒng)中設(shè)有獨(dú)立按鍵和LCD顯示器,能顯示豐富的信息,根據(jù)使用者的需要可以隨時(shí)對(duì)時(shí)間進(jìn)行校準(zhǔn)、選擇時(shí)間等,綜上所述此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。1.2功能要求本設(shè)計(jì)準(zhǔn)備實(shí)現(xiàn)的功能: (1) 顯示公歷日期功能(年、月、日、時(shí)、分、秒以及星期) (2) 可通過按鍵切換年、月、日及時(shí)、分、秒的顯示狀態(tài)(3) 可隨時(shí)調(diào)校年、月、日或時(shí)、分、秒(4) 可每次增、減1進(jìn)行時(shí)間調(diào)節(jié)(5) 可動(dòng)態(tài)完整顯示年份,實(shí)現(xiàn)真正的萬(wàn)年歷顯示1.3方案論證1.3.1 技術(shù)可行性 隨著國(guó)內(nèi)超大規(guī)模集成電路的出現(xiàn),微處理器及其外圍芯片有了迅速的發(fā)展。集成技術(shù)的最新發(fā)展之一是將CPU和外圍芯片,如程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、并行I/O口、串行I/O口、定時(shí)/計(jì)數(shù)器、中斷控制器及其他控制部件集成在一個(gè)芯片之中,制成單片計(jì)算機(jī)。而近年來(lái)推出的一些高檔單片機(jī)還包括有許多特殊功能單元,如A/D、D/A轉(zhuǎn)換器、調(diào)制解調(diào)器、通信控制器、鎖相環(huán)、DMA、浮點(diǎn)運(yùn)算單元、PWM控制輸出單元、PWM輸出時(shí)的死區(qū)可編程控制功能等。因此,只要外加一些擴(kuò)展電路及必要的通道接口就可以構(gòu)成各種計(jì)算機(jī)應(yīng)用系統(tǒng),如工業(yè)流水線控制系統(tǒng)、作為家用電器的主控制器、分布式控制系統(tǒng)的終端節(jié)點(diǎn)或作為其主控制節(jié)點(diǎn)起中繼的作用、數(shù)據(jù)采集系統(tǒng)、自動(dòng)測(cè)試系統(tǒng)等。單片機(jī)的出現(xiàn),并在各技術(shù)領(lǐng)域中得到如此迅猛的發(fā)展,與單片機(jī)構(gòu)成計(jì)算機(jī)應(yīng)用系統(tǒng)所形成的下述特點(diǎn)有關(guān):1、單片機(jī)構(gòu)成的應(yīng)用系統(tǒng)有較大的可靠性。這些可靠性的獲得除了依靠單片機(jī)芯片本身的高可靠性以及應(yīng)用有最少的聯(lián)接外,還可以方便地采用軟、硬件技術(shù)。2、系統(tǒng)配置、系統(tǒng)擴(kuò)展較典型、規(guī)范,容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)有較高的軟、硬件利用系數(shù)。3、由于構(gòu)成的應(yīng)用系統(tǒng)是一個(gè)計(jì)算機(jī)系統(tǒng),相當(dāng)多的測(cè)、控功能由軟件實(shí)現(xiàn),故具有柔性特征,不須改變硬件系統(tǒng)就能適當(dāng)?shù)馗淖兿到y(tǒng)功能。4、具有優(yōu)異的性能、價(jià)格比。1.3.2 單片機(jī)的選擇方案一:采用傳統(tǒng)的AT89C51作為萬(wàn)年歷的控制核心。單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度比較大,可用軟件編程實(shí)現(xiàn)各種算法和邏輯控制,并且由于其體積小、功耗低、技術(shù)成熟和成本低等優(yōu)點(diǎn),使其在各個(gè)領(lǐng)域應(yīng)用廣泛。方案二:采用FTC10F04單片機(jī),還帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能、低功耗的8位CMOS微處理芯片,市場(chǎng)應(yīng)用最多。其主要特點(diǎn)如下:8KB FLASH ROM,可以擦除1000次以上,數(shù)據(jù)保存10年。由于本系統(tǒng)對(duì)CPU運(yùn)算速度要求很高,需要執(zhí)行很復(fù)雜的運(yùn)算,方案一成本比較低,適合做設(shè)計(jì),方案二運(yùn)算速度高、性能好,所以兩種方案都有可取之處。選用方案一作為主方案,方案二作為備用方案。1.3.3 顯示模塊的選擇 方案一:使用傳統(tǒng)的LED數(shù)碼管顯示。 數(shù)碼管具有:低能耗、低損耗、低壓、壽命長(zhǎng)、耐老化、防曬、防潮、防火、防高(低)溫,對(duì)外界環(huán)境要求低,易于維護(hù),同時(shí)其精度比較高,稱重輕,精確可靠,操作簡(jiǎn)單。數(shù)碼管采用BCD編碼顯示數(shù)字,程序編譯容易,資源占用較少。方案二: 使用液晶顯示屏顯示時(shí)間數(shù)字。 液晶顯示屏(LCD)具有輕薄短小、低耗電量、無(wú)輻射危險(xiǎn),平面直角顯示以及影象穩(wěn)定不閃爍等優(yōu)勢(shì),可視面積大,畫面效果好,分辨率高,抗干擾能力強(qiáng)等特點(diǎn)。但由于液晶是以點(diǎn)陣的模式顯示各種符號(hào),需要利用控制芯片創(chuàng)建字符庫(kù),編程工作量大,控制器的資源占用較多,其成本稍微偏高。在使用時(shí),不能有靜電干擾,否則易燒壞液晶的顯示芯片,不易維護(hù)。方案三:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以也不用此種作為顯示。 根據(jù)以上的論述,采用方案二。在本系統(tǒng)中,我們采用了LM016L液晶顯示,由于顯示位數(shù)較多,故應(yīng)使用排阻RESPACK-8驅(qū)動(dòng),排阻一般有九個(gè)腳,一個(gè)腳接VCC,其他腳接單片機(jī)I/O口。1.3.4 時(shí)鐘芯片的選擇方案與論證方案一:直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大,所以不采用此方案。方案二:采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,DS1302芯片是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,而且精度高,工作電壓為2.5V5.5V,2.5V時(shí)電流小于300nA。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。根據(jù)以上的論述,采用方案二。在本系統(tǒng)中,我采用了DS1302時(shí)鐘芯片。1.3.5鍵盤模塊的選擇在對(duì)日期和時(shí)間進(jìn)行切換,對(duì)日期和時(shí)間進(jìn)行調(diào)節(jié)校準(zhǔn)過程中,系統(tǒng)需要產(chǎn)生激勵(lì)電流,因此需要用按鍵。 方案一:使用獨(dú)立式鍵盤。獨(dú)立式鍵盤是指直接用I/O口線構(gòu)成的單個(gè)按鍵電路。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單。 方案二:使用矩陣式鍵盤。矩陣式鍵盤是由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上,行線、列線分別連接到按鍵開關(guān)的兩端。其特點(diǎn)是簡(jiǎn)單且不增加成本,這種鍵盤適合按鍵數(shù)量較多的場(chǎng)合。 根據(jù)以上的論述,因本系統(tǒng)需要的按鍵不多,日期加1鍵,月數(shù)加1鍵,年數(shù)加1鍵,秒數(shù)加1鍵,分?jǐn)?shù)加1鍵,時(shí)數(shù)加1鍵,時(shí)間/日期切換鍵,要求簡(jiǎn)單。所以采用方案一獨(dú)立式鍵盤。1.3.6總體方案論證與選擇按照系統(tǒng)設(shè)計(jì)功能的要求,初步確定系統(tǒng)由主控模塊、時(shí)控模塊、顯示驅(qū)動(dòng)及顯示模塊和鍵盤接口模塊共4個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1-1所示。圖1-1電子萬(wàn)年歷電路系統(tǒng)構(gòu)成框圖煮控芯片使用51系列AT89C51單片機(jī),時(shí)鐘芯片使用美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘DS1302。采用DS1302作為計(jì)時(shí)芯片,可以做到計(jì)時(shí)準(zhǔn)確。更重要的是,DS1302可以在很小電流的后備電源(2.55.5V電源,在2.5V時(shí)耗電小于300nA),而且DS1302可以編程選擇多種充電電流來(lái)對(duì)后備電源進(jìn)行慢速充電,可以保證后備電源基本不耗電。顯示驅(qū)動(dòng)采用排阻RESPACK-8驅(qū)動(dòng)和LM016L液晶顯示 、圖條/柱圖顯示或64 點(diǎn)陣顯示接口的小型串行輸入/輸出芯片。片內(nèi)包括BCD 譯碼器、多路掃描控制器、字和位驅(qū)動(dòng)器和8*8 靜態(tài)RAM。RESPACK-8需九導(dǎo)線連接,每位顯示數(shù)字有一個(gè)地址由微處理器寫入。允許使用者選擇每位是BCD 譯碼或不譯碼。使用者還可選擇停機(jī)模式、數(shù)字亮度控制、從18 選擇掃描位數(shù)和對(duì)所有LCD顯示器的測(cè)試模式。顯示模塊采用普通的LCD顯示屏。2 系統(tǒng)硬件電路的設(shè)計(jì)2.1電路設(shè)計(jì)如圖2-1示為電子萬(wàn)年歷電路設(shè)計(jì)原理圖,系統(tǒng)由主控制器AT89C51、時(shí)鐘電路DS1302、顯示驅(qū)動(dòng)RESPACK-8電路,LM016L液晶顯示電路及鍵掃描電路組成。圖2-1 電子萬(wàn)年歷電路原理圖2.2系統(tǒng)硬件概述2.2.1 主控制器AT89C51ATMEL公司生產(chǎn)的AT89C51單片機(jī)采用高性能的靜態(tài)80C51設(shè)計(jì),并采用先進(jìn)工藝制造,還帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能、低功耗的8位CMOS微處理芯片,市場(chǎng)應(yīng)用最多。其主要特點(diǎn)如下:8KB Flash ROM,可以擦除1000次以上,數(shù)據(jù)保存10年。 256字節(jié)內(nèi)部RAM; 電源控制模式; 時(shí)鐘可停止和恢復(fù); 空閑模式; 掉電模式; 6個(gè)中斷源; 4個(gè)中斷優(yōu)先級(jí); 4個(gè)8位I/O口; 全雙工增強(qiáng)型TUAR; 3個(gè)16位定時(shí)/計(jì)數(shù)器:T0、T1(標(biāo)準(zhǔn)80C51)和增加的T2(捕獲和比較) 全靜態(tài)工作方式:024MHZ2.2.2 時(shí)鐘電路DS1302 DS1302的性能特性: 實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行比較; 用于高速數(shù)據(jù)暫存的31*8位RAM; 最少引腳的串行I/O; 2.55.5V電壓工作范圍; 2.5V時(shí)電流小于300nA; 用于時(shí)鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式; 簡(jiǎn)單的三線接口; 可選的慢速充電(至VCC1)的能力。DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被訪問到。在開始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫操作時(shí)寫入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在VCC2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。2.3主要單元電路的設(shè)計(jì)2.3.1顯示電路顯示部分采用普通的LM016L液晶顯示,如圖2-2,以減少硬件電路。LM016L液晶模塊采用hd 44780控制器,hd44780具有簡(jiǎn)單而功能較強(qiáng)的指令集,可以實(shí)現(xiàn)字符移動(dòng),閃爍等功能,LM016L與單片機(jī)MCU通訊可采用8位或4位并行傳輸兩種方式,hd44780控制器由兩個(gè)8位寄存器,指令寄存器(IR)和數(shù)據(jù)寄存器(DR)忙標(biāo)志(BF),顯示數(shù)RAM(DDRAM),字符發(fā)生器ROM(CGOROM)字符發(fā)生器RAM(CGRAM),地址計(jì)數(shù)器RAM(AC)。IR用于寄存指令碼,只能寫入不能讀出,DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動(dòng)寫入DDRAM和CGRAM,或者暫存從DDRAM和CGRAM讀出的數(shù)據(jù),BF為1時(shí),液晶模塊處于內(nèi)部模式,不響應(yīng)外部操作指令和接受數(shù)據(jù),DDRAM用來(lái)存儲(chǔ)顯示的字符,能存儲(chǔ)80個(gè)字符碼,CGROM由8位字符碼生成5*7點(diǎn)陣字符160中和5*10點(diǎn)陣字符32種8位字符編碼和字符的對(duì)應(yīng)關(guān)系。圖2-2 LCD液晶顯示屏顯示模塊2.3.2鍵盤接口鍵盤在單片機(jī)系統(tǒng)中是一個(gè)很重要的部件。為了輸入數(shù)據(jù)、查詢和控制系統(tǒng)的工作狀態(tài),都要用到鍵盤,鍵盤是人工干預(yù)計(jì)算機(jī)的主要手段。鍵盤可分為編碼和非編碼鍵盤兩種。編碼鍵盤采用硬件線線路來(lái)實(shí)現(xiàn)鍵盤編碼,每按下一個(gè)鍵,鍵盤能自動(dòng)生成按鍵代碼,鍵數(shù)較多,而且還具有去抖動(dòng)功能。這種鍵盤使用方便,但硬件較復(fù)雜,PC機(jī)所用的鍵盤就屬于這種。非編碼鍵盤僅提供按鍵開關(guān)工作狀態(tài),其他工作由軟件完成,這種鍵盤鍵數(shù)較少,硬件簡(jiǎn)單,一般在單片機(jī)應(yīng)用系統(tǒng)中廣泛使用。此處主要介紹該類非編碼鍵盤及其與MCS51型單片機(jī)的接口。2.3.3.1按鍵開關(guān)去抖動(dòng)問題按鍵開關(guān)在電路中的連接如圖2-3 a)所示。按鍵未按下時(shí),A點(diǎn)電位為高電平5V;按鍵按下時(shí),A點(diǎn)電位為低電平。A點(diǎn)電位就用于向CPU傳遞按鍵的開關(guān)狀態(tài)。但是由于按鍵的結(jié)構(gòu)為機(jī)械彈性開關(guān),在按鍵按下和斷開時(shí),觸點(diǎn)在閉合和斷開瞬間還會(huì)接觸不穩(wěn)定,引起A點(diǎn)電平不穩(wěn)定,如圖2-3 b)所示,鍵盤的抖動(dòng)時(shí)間一般為510ms,抖動(dòng)現(xiàn)象會(huì)引起CPU對(duì)一次鍵操作進(jìn)行多次處理,從而可能產(chǎn)生錯(cuò)誤。因此必須設(shè)法消除抖動(dòng)的不良后果。圖2-3 鍵操作和鍵抖動(dòng)消除抖動(dòng)的不良后果的方法有硬件、軟件兩種。為了節(jié)省硬件,通常在單片機(jī)系統(tǒng)中,一般不采用硬件方法消除鍵的抖動(dòng),而是用軟件消除抖動(dòng)的方法。根據(jù)抖動(dòng)特性,在第一次檢測(cè)到按鍵按下后,執(zhí)行一段延時(shí)510ms讓前延抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給510ms的延時(shí),待后延抖動(dòng)消失后才轉(zhuǎn)入該鍵處理程序。2.3.2.2查詢式按鍵及其接口按照鍵盤與CPU的連接方式可以分為查詢按鍵和矩陣式鍵盤。查詢式按鍵是各按鍵相互獨(dú)立,每個(gè)按鍵占用一根I/O口線,每根I/O口線上的按鍵工作狀態(tài)不會(huì)影響其他I/O口線上按鍵的工作狀態(tài)。查詢式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/O口線,在按鍵數(shù)量較多時(shí),I/O口線浪費(fèi)較大,且電路結(jié)構(gòu)顯得繁雜。故這種形式適用于按鍵數(shù)量較少的場(chǎng)合。2.3.2.3矩陣式鍵盤及其接口矩陣式鍵盤又稱行列式鍵盤,有n個(gè)行線和m個(gè)列線,經(jīng)限流電阻接+5V電源上,按鍵跨接在行線和列線上,n*m行列結(jié)構(gòu)可構(gòu)成mn個(gè)按鍵,組成一個(gè)鍵盤。與獨(dú)立式按鍵相比,mn個(gè)按鍵只占用m+n根I/O口線,因此適用于按鍵較多的場(chǎng)合。當(dāng)無(wú)鍵閉合時(shí),相應(yīng)的I/O之間開路。當(dāng)有鍵閉合時(shí),與閉合鍵相連接的兩條I/O口線之間短路。判斷有無(wú)鍵按下的方法是:第一步,置列線相關(guān)I/O口為輸入態(tài),從行線相對(duì)應(yīng)的I/O口輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,置行線相關(guān)I/O口輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等待近按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。2.3.2.4鍵盤掃描控制方式在單片機(jī)應(yīng)用系統(tǒng)中,對(duì)鍵盤的處理工作僅是CPU工作內(nèi)容的一部分,CPU還要進(jìn)行數(shù)據(jù)處理、顯示和其他輸入輸出操作,因此鍵盤處理工作既不能占用CPU太多時(shí)間,又需要CPU對(duì)鍵盤操作及時(shí)作出響應(yīng)。CPU對(duì)鍵盤處理控制的工作方式有以下幾種:1 程序控制掃描方式程序控制掃描方式是在CPU工作空余,調(diào)用鍵盤掃描子程序,響應(yīng)鍵輸入信號(hào)要求。2 定時(shí)控制掃描方式定時(shí)控制掃描方式是利用定時(shí)/計(jì)數(shù)器每隔一段時(shí)間生成定時(shí)中斷,CPU響應(yīng)中斷后對(duì)鍵盤進(jìn)行掃描,并在有鍵閉合時(shí)轉(zhuǎn)入該鍵的功能子程序。3 中斷控制掃描方式中斷控制掃描方式是利用外部中斷源,響應(yīng)輸入信號(hào)。當(dāng)無(wú)按鍵按下時(shí),CPU執(zhí)行正常工作程序。當(dāng)有按鍵按下時(shí),CPU立即產(chǎn)生中斷。在中斷服務(wù)子程序中掃描鍵盤,判斷是哪一個(gè)鍵被按下,然后執(zhí)行該鍵的功能子程序。這種控制方式克服了前兩種控制方式可能產(chǎn)生的空掃描和不能及時(shí)響應(yīng)鍵輸入的缺點(diǎn),既能及時(shí)處理鍵輸入,又能提高CPU運(yùn)行效率,但要占用一個(gè)寶貴的中斷資源。圖2-4即工作于中斷方式的矩陣式鍵盤接口電路。在初始化時(shí)P1.4P1.7置輸出0,P1.0P1.3置為輸入態(tài),P1.0P1.3分別接至與門各輸入端。當(dāng)有鍵閉合時(shí)=0,CPU中斷后,在中斷服務(wù)子程序中,再完成鍵識(shí)別和鍵功能處理。在有鍵按下后,有一定的延時(shí),防止鍵盤抖動(dòng)。 圖2-4 工作于中斷方式的矩陣式鍵盤接口電路2.3.3時(shí)鐘電路2.3.3.1 DS1302工作方式簡(jiǎn)介及數(shù)據(jù)操作原理DS1302可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償功能,工作電壓寬達(dá)2.55.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)33*8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是的DS1202升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時(shí)提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。DS1302時(shí)鐘芯片包括實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過一個(gè)簡(jiǎn)單的串行接口與微處理器通信。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、日、周、月和年等信息。對(duì)于小于31天的月和月末的日期自動(dòng)進(jìn)行調(diào)整,還包括閏年校正的功能。時(shí)鐘的運(yùn)行可以采用24小時(shí)或帶AM/PM的12小時(shí)格式。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302有主電源/后備電源雙電源引腳:VCC1在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電磁備份;VCC1在雙電池系統(tǒng)中提供主電源。在這種運(yùn)行方式中,VCC1里連接到后備電源,以便在沒有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。DS1302由VCC1或VCC2中較大者供電。當(dāng)VCC2(VCC1+02V)時(shí),VCC2給DS1302供電;當(dāng)VCC2VCC1時(shí),DS1302由VCC1供電。如圖2-5為DS1302的引腳圖。圖2-5 DS1302的引腳圖DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被訪問到。在開始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫操作時(shí)寫入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在VCC25V之前,RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。DS1302的控制字如表2.1所示。控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1則表示存取RAM數(shù)據(jù)。位51(A4A0)指示操作單元的地址。最低有效位(位0)如果為0,則表示要進(jìn)行寫操作;位1表示進(jìn)行讀操作??刂谱止?jié)總是從最低位開始輸入/輸出。表2-1 DS1302控制字寄存器名 命令字取值范圍各位內(nèi)容寫操作讀操作76543210秒寄存器80H81H0059CH10SECSEC分寄存器82H83H0059010MINMIN時(shí)寄存器84H85H0112或002312/24010HRHR日寄存器86H87H0128,29,30,310010DATEDATE月寄存器88H89H011200010MMONTH周寄存器8AH8BH010700000DAY年寄存器8CH8DH009910 YEARYEAR為了提高對(duì)32個(gè)地址尋址能力(地址/命令位15=邏輯1),可以把時(shí)鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時(shí)鐘或RAM,而位0規(guī)定讀或?qū)?。在時(shí)鐘/日歷寄存器中的地址931或RAM寄存器中的地址31不能存儲(chǔ)數(shù)據(jù)。在多字節(jié)方式下,讀或?qū)憦牡刂?的位0開始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?個(gè)寄存器。但是,當(dāng)以多字節(jié)方式寫RAM時(shí),為了傳送數(shù)據(jù)不必寫所有的31字節(jié),不管是否寫了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM。DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時(shí)間寄存器及其控制字如表2.1所示,其中奇數(shù)為讀操作,偶數(shù)為寫操作。時(shí)鐘暫停:秒寄存器的位7定義位時(shí)鐘暫停位。當(dāng)它為1時(shí),DS1302停止振蕩,進(jìn)入低功耗的備份方式,通常在對(duì)DS1302進(jìn)行寫操作時(shí)(如進(jìn)入時(shí)鐘調(diào)整程序),停止振蕩。當(dāng)它為0時(shí),時(shí)鐘將開始啟動(dòng)。AM-PM/12-24小時(shí)方式:小時(shí)寄存器的位7定義為12或24小時(shí)方式選擇位。它為高電平時(shí),選擇12小時(shí)方式。DS1302的晶振選用32768Hz,電容推薦值為6pF。因?yàn)檎袷庮l率較低,也可以不接電容,對(duì)計(jì)時(shí)精度影響不大。3 系統(tǒng)的軟件設(shè)計(jì)3.1 程序設(shè)計(jì)電子萬(wàn)年歷的程序主要包括3個(gè)方面的內(nèi)容:一是DS1302從單片機(jī)中讀取數(shù)據(jù)進(jìn)行計(jì)數(shù),二是利用按鍵進(jìn)行時(shí)間的調(diào)整,三是LM016L顯示時(shí)間。AT89C51單片機(jī)主要I/O口的分配,P2.0P2.2分別接LM0L16的RS,RW,E三個(gè)功能端,P3接查詢式按鍵,P1.0P1.2分別接DS1302的IO,SCLK,RST端。3.2 程序流程圖圖3-1程序流程圖3.3時(shí)間控制流程圖圖3-2 DS1302時(shí)控流程圖4 proteus軟件仿真4.1 Proteus ISIS簡(jiǎn)介Proteus ISIS是英國(guó)Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路。該軟件的特點(diǎn)是:(1)全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢(shì)。(2)具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。(3)目前支持的單片機(jī)類型有:ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。(4)支持大量的存儲(chǔ)器和外圍芯片。總之,該軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真ARM、51、AVR、PIC。Proteus啟動(dòng)畫面如圖4-1:圖4-1 proteus啟動(dòng)畫面4.2 Proteus運(yùn)行流程Proteus ISIS的工作界面是一種標(biāo)準(zhǔn)的Windows界面,如圖4-2所示。包括:標(biāo)題欄、主菜單、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對(duì)象選擇器窗口、圖形編輯窗口。運(yùn)行Proteus程序后,進(jìn)入軟件的主界面。通過左側(cè)工具欄中的P(從庫(kù)中選擇元件命令)命令,在Pick Devices 左側(cè)窗口中選擇所需元件的關(guān)鍵字,然后放置元件并調(diào)整方向和位置以及參數(shù)設(shè)置,最后進(jìn)行連線。Proteus ISIS的工作界面如圖4-2:圖4-2 Proteus ISIS的工作界面4.3 Proteus功能仿真Proteus仿真效果:最后載入hex文件后可以進(jìn)行模擬仿真,可以全速運(yùn)行也可以單步調(diào)試運(yùn)行(如圖4-3為運(yùn)行按鍵)。 圖4-3運(yùn)行按鍵上電后后LCD顯示如圖4-4:圖4-4調(diào)節(jié)年份如圖4-5:圖4-5調(diào)節(jié)月份如圖4-6:圖4-6調(diào)節(jié)日期如圖4-7:圖4-7調(diào)節(jié)時(shí)鐘如圖4-8:圖4-8調(diào)節(jié)分鐘如圖4-9:圖4-9按鍵功能如圖4-10,自上而下依次為:選擇修改項(xiàng)鍵K1、加鍵K2、減鍵K3、確定鍵K4。圖4-10結(jié)束語(yǔ)在三月份,我開始了我的畢業(yè)論文工作,時(shí)至今日,論文基本完成。從最初的茫然,到慢慢的進(jìn)入狀態(tài),再到對(duì)思路逐漸的清晰,整個(gè)寫作過程難以用語(yǔ)言來(lái)表達(dá)。歷經(jīng)了一個(gè)多月的努力,緊張而又充實(shí)的畢業(yè)設(shè)計(jì)終于落下了帷幕?;叵脒@段日子的經(jīng)歷和感受,在這次畢業(yè)設(shè)計(jì)的過程中,我擁有了無(wú)數(shù)難忘的回憶和收獲。在設(shè)計(jì)過程中,充分發(fā)揮人的主觀能動(dòng)性,自主學(xué)習(xí),學(xué)到了許多沒學(xué)到的知識(shí)。較好的完成了設(shè)計(jì),達(dá)到了預(yù)期的目的,完了最初的設(shè)想。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時(shí)遇到了很多的問題,經(jīng)過靜下心來(lái)思考,和同學(xué)討論,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我的耐心,做什么事都在有耐心。此次畢業(yè)設(shè)計(jì)中學(xué)到了很多很多東西,這是最重要的。總之,這次畢業(yè)設(shè)計(jì)使我的能力得到了全方位的提高,使得我的操作能力和專業(yè)技能都有了很大的提高。這次畢業(yè)設(shè)計(jì)的制作過程是我的一次再學(xué)習(xí),再提高的過程。在論文中我充分地運(yùn)用了大學(xué)期間所學(xué)到的知識(shí)。參考文獻(xiàn)1 劉建輝,翼常鵬等.單片機(jī)智能控制技術(shù)M.國(guó)防工業(yè)大學(xué)出版社,2007.4 2 李朝青單片機(jī)&DSP外圍數(shù)字IC技術(shù)手冊(cè)M北京航空航天大學(xué)出版社,2005.103 關(guān)德新,馮文全單片機(jī)外圍器件實(shí)用手冊(cè) 電源分冊(cè)M北京航空航天大學(xué)出版社,1998.6 4 蔡美琴等.MCS-51單片機(jī)系統(tǒng)及其應(yīng)用M.高等教育出版社,1992.35 HellDale Chip Weems Mark Headington M.PROGRAMMING IN CFF 6 陳明熒.8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教程M清華大學(xué)出版社7 郁慧娣.微機(jī)系統(tǒng)及其接口技術(shù)M.東南大學(xué)出版社,1999 8 何立民.單片機(jī)高級(jí)教程M.北京航空航天大學(xué)出版社,2003 9 王毓銀.數(shù)字電路邏輯設(shè)計(jì)M.高等教育出版社10 陳志旺.51系列單片機(jī)系統(tǒng)設(shè)計(jì)與實(shí)踐M.電子工業(yè)出版社,20100111 李廣弟.單片機(jī)原理及應(yīng)用M.北京航空航天大學(xué)出版社,2004 12 謝嘉奎.電子線路M.高等教育出版社,199913 譚浩強(qiáng).C程序設(shè)計(jì)M.清華大學(xué)出版社 2004.614 關(guān)德新,馮文全.單片機(jī)外圍器件實(shí)用手冊(cè) 電源分冊(cè)M.北京航空航天大學(xué)出版社,1998.6 15 顧筠,錢琦,林小寧.單片微型計(jì)算機(jī)原理與應(yīng)用M.東南大學(xué)出版社,2003.1216 李華.MCS-51系列單片機(jī)實(shí)用接口技術(shù)M北京航空航天大學(xué)出版社,1993.317 何立民.MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)系統(tǒng)配置與接口技術(shù)M北京航空航天大學(xué)出版社,199018 孫涵芳.MCS-51/96系列單片機(jī)原理及應(yīng)用M.北京航空航天大學(xué)出版社,199621附 錄附錄1:電路原理圖附圖1 電子萬(wàn)年歷原理圖附錄2:電路仿真圖附圖2 電子萬(wàn)年歷仿真圖附錄3:電子萬(wàn)年歷程序#include #include #define uchar unsigned char#define uint unsigned intsbit SDA=P10; /DS1302數(shù)據(jù)線sbit CLK = P11; /DS1302時(shí)鐘線sbit RST = P12; /DS1302復(fù)位線sbit RS = P20; /LCD寄存器選擇sbit RW = P21; /LCD讀/寫控制sbit EN = P22; /LCD啟用sbit K1 = P34; /按鍵選擇sbit K2 = P35; /按鍵加sbit K3 = P36; /按鍵減 sbit K4 = P37; /按鍵確定uchar tCount =0;/一年中的每個(gè)月的天數(shù),2月的天數(shù)有年份決定uchar MonthsDays = 0,31,0,31,30,31,30,31,31,30,31,30,31;/周日,周一到周六(0,1-6)讀取DS1302時(shí)分別是1-7uchar *WEEK = SUN,MON,TUS,WEN,THU,F(xiàn)RI,SAT;/LCD顯示緩沖uchar LCD_DSY_BUFFER1 = DATE 00-00-00 ;uchar LCD_DSY_BUFFER2 = TIME 00-00-00 ;uchar DateTime7; /所讀取的日期時(shí)間char Adjust_Index = -1; /當(dāng)前調(diào)節(jié)的時(shí)間對(duì)象:秒,分,時(shí),日,月,年(0,1,2,3,4,5,6)uchar Change_Flag = -MHDM-Y; /(分,時(shí),日,月,年) void Write_A_Byte_TO_DS1302(uchar x) /向DS1302寫入一字節(jié)uchar i;for ( i = 0; i =1;void Write_DS1302 (uchar addr,uchar dat) /向DS1302某地址寫入數(shù)據(jù) CLK = 0;RST = 1;Write_A_Byte_TO_DS1302(addr);Write_A_Byte_TO_DS1302(dat);CLK = 0;RST =0 ;/設(shè)置時(shí)間void SET_DS1302 () uchar i;/寫控制字,取消寫保護(hù)Write_DS1302 (0 x8E,0 x00);/分時(shí)日月年依次寫入for(i = 1; i 7; i+)/分的起始地址10000010(0 x82),后面依次是時(shí),日,月,周,年,寫入地址每次遞減2Write_DS1302(0 x80 + 2*i,(DateTimei/104) | (DateTimei%10);Write_DS1302(0 x8E,0 x80); /加保護(hù)uchar Get_A_Byte_FROM_DS1302() /從DS1302讀取一字節(jié)uchar i,b,t;for (i = 0;i =1;t=SDA;b|=t7;CLK=1;CLK=0;return b/16*10+b%16;unchar Read_Data (uchar addr) /從DS1302指定位置讀數(shù)據(jù)uchar dat;RST = 0;CLK = 0;RST = 1;Write_A_Byte_TO_DS1302(addr);dat = Get_A_Byte_FROM_DS1302();CLK=1;RST=0;return dat;/讀取當(dāng)前日期時(shí)間void GetTime()uchar i;for (i = 0; i 7; i+)DateTimei = Read_Date(0 x81 + 2*i);/在LCD上顯示字符串viod Display_LCD_String(uchar p,uchar *s)uchar i;Set_LCD_POS(p);for (i = 0;i 16;i+)Write_LCD_Data(si); DelayMS(1);/日期與時(shí)間值轉(zhuǎn)換成為數(shù)字字符void Format_DateTime(uchar d, uchar *a)a0 = d/10+0; a1 = d%10 + 0;/判斷是否為閏年uchar isLeapYear(uint y)return (y % 4 = =&y % 100!=0)|(y%400 = = 0);/求自2000.1.1開始的任何一天是星期幾/函數(shù)沒有通過,求出總天數(shù)后再求星期幾/因?yàn)榍罂偺鞌?shù)可能會(huì)越出uint的范圍viod RefreshWeekDay()uint i,d,w=5; /1999.12.31是星期五for (i = 2000; i 2000+DateTime6;i+)d = isLeapYear(i) ? 366 :365;w = (w + d) % 7;d = 0;for (i = 1; i DateTime4 ; i+ ) d += MonthsDaysi;d += DateTime3;/保存星期,06表示星期日,星期一,二,六,為了與DS1302的星期格式匹配,返回值需加1DateTime5 = (w + d) % 7 + 1;/年月日時(shí)分+/-void DateTime_Adjust(char x)switch ( Adjust_Index )case 6: if (x = =1 & DateTime6 0) DateTime6-;/獲取2月天數(shù) MonthsDays2 = isLeapYear(2000 + DateTime6) ? 29 : 28; /如果年份變化后當(dāng)前月份的天數(shù)大于上限則設(shè)為上限 if ( DateTime3 MonthsDaysDateTime4 ) DateTime3 = MonthsDaysDateTime4; RefreshWeekDay(); /刷新星期 break;case 4: if (x = =1 & DateTime4 1) DateTime4-; /獲取2月天數(shù) MonthsDays2 = isLeapYear(2000 + DateTime6) ? 29 : 28; /如果年份變化后當(dāng)前月份的天數(shù)大于上限則設(shè)為上限 if ( DateTime3 MonthsDaysDateTime4 ) DateTime3 = MonthsDaysDateTime4; RefreshWeekDay(); /刷新星期 break;case 3: /日00-28/29/30/31;調(diào)節(jié)之前首先根據(jù)年份得出該年中2月份的天數(shù) MonthsDays2 = isLeapYear(2000 + DateTime6) ? 29 : 28; /如果年份變化后當(dāng)前月份的天數(shù)大于上限則設(shè)為上限 if (x = =1 & DateTime3 0) DateTime3-; RefreshWeekDay(); /刷新星期 break;case 2: /時(shí) if (x = =1 & DateTime2 0) DateTime2-; break;case 1: /分 if (x = =1 & DateTime1 0) DateTime1-; break;/定時(shí)器0每秒刷新LCD顯示void T0_INT() interrupt 1TH0 = -50000 / 256;TL0 = -50000 % 256;if (+tCount != 2) return;tCount = 0;Format_DateTime(DateTime6,LCD_DSY_BUFFR1 + 5);Format_DateTime(DateTime4,LCD_DSY_BUFFR1 + 8);Format_DateTime(DateTime3,LCD_DSY_BUFFR1 + 11);strcpy(LCD_DSY_BUFFER1 + 13,WEEKDateTime5 - 1 );Format_DateTime(DateTime2,LCD_DSY_BUFFR1 + 5);Format_DateTime(DateTime1,LCD_DSY_BUFFR1 + 8);Format_DateTime(DateTime0,LCD_DSY_BUFFR1 + 11);Display_LCD-String(0 x00, LCD-DSY_BUFFER1);Display_LCD-String(0 x40, LCD-DSY_BUFFER2);/鍵盤中斷(INT0)void EX_INT0 () interrupt 0 if (K1 = =0) /選擇調(diào)整對(duì)象 while (K1 = = 0); if (Adjust_Index = = -1 | Adjust_Index = =1) Adjust_Index = 7;0 Adjust_Index-; if (Adjust_Index = = 5 ) Adjust_Index = 4; LCD_DSY_BUFFER213 = ; LCD_DSY_BUFFER214 = Change_FlagAdjust_Index; LCD_DSY_BUFFER215 = ; else if (K2 = = 0) /加 while (K2 = =0); DateTim