智能電子鬧鐘設(shè)計(jì)_第1頁(yè)
智能電子鬧鐘設(shè)計(jì)_第2頁(yè)
智能電子鬧鐘設(shè)計(jì)_第3頁(yè)
智能電子鬧鐘設(shè)計(jì)_第4頁(yè)
智能電子鬧鐘設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

遼東學(xué)院畢業(yè)論文智能電子鬧鐘設(shè)計(jì)學(xué)生姓名:XXXX學(xué)號(hào):XXXX班級(jí):XXXX專(zhuān)業(yè):計(jì)算機(jī)應(yīng)用技術(shù)指導(dǎo)教師:XXXX2012年12月摘要本系統(tǒng)設(shè)計(jì)是基于STC89C51RC的一種帶8K閃爍可編程可擦除只讀存儲(chǔ)器〔FPETOM-FlashProgrammabalandErasableReadOnlyMemory〕的低電壓、高性能CMOS8位微型處理器,即單片機(jī)芯片。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次,內(nèi)部FLASH擦寫(xiě)次數(shù)為100000次以上。該芯片使用高密度非易失存儲(chǔ)制造技術(shù),與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器集成在單個(gè)芯片中,使得STC89C51RC成為了一種性?xún)r(jià)比極高的微型處理器芯片,在許多電路設(shè)計(jì)中都得到了應(yīng)用。由單片機(jī)控制數(shù)碼管的顯示,,修改設(shè)置時(shí)間采用操作方便的鍵盤(pán),整點(diǎn)報(bào)時(shí)系統(tǒng)使用無(wú)源蜂鳴器,通過(guò)調(diào)節(jié)輸入方波的占功比,到達(dá)美妙旋律的聲音實(shí)現(xiàn)報(bào)時(shí)的功能,整個(gè)系統(tǒng)設(shè)計(jì)比擬完善,有顯示時(shí)間日期、整點(diǎn)報(bào)時(shí)、時(shí)間日期調(diào)節(jié)設(shè)置的功能,除些之外還介紹了單片機(jī)和匯編程序一些經(jīng)驗(yàn)和方法,以便將單片機(jī)的匯編程序經(jīng)過(guò)局部的修改就可以移植到單片機(jī)上,實(shí)現(xiàn)不同的功能,節(jié)約重新開(kāi)發(fā)的時(shí)間。最后總結(jié)了一些關(guān)于在做基于單片機(jī)的智能鬧鐘所遇到的問(wèn)題和困難,其最大的特點(diǎn)是只讀存儲(chǔ)器可以反復(fù)擦除,精簡(jiǎn)版本高效微控制器STC89C51RC單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案,也是它應(yīng)用較為廣泛的原因。關(guān)鍵詞:STC89C51RC單片機(jī);數(shù)碼管;蜂鳴器AbstractThesystemdesignisbasedonaSTC89C51RCwith8kscintillationprogrammablecanerasereadonlymemory(FPETOM-FlashProgrammabalandErasableReadOnlyMemory)lowvoltage,highperformanceCMOS8amicroprocessor,namelymicrocontrollerchip.SCMcaneraseread-onlymemorycanberepeatederase1000times,internalFLASHintegration.itnumberfor100000timesormore.Thechipusinghighdensitynonvolatilestoragemanufacturingtechnology,andindustrystandardMCS-51instructionsetandoutputpipeJiaoXiangcompatible.Becauseofthemulti-functioneightCPUandscintillationmemoryintegratedonasinglechip,maketheSTC89C51RCbecomeakindofhighperformancemicroprocessorchip,inmanycircuitdesignhavebeenapplied.Thesingle-chipmicrocomputercontrol,digitaltubedisplay,,modifythesetuptimeuseconvenientoperationkeyboard,integralpointtimesystemsusepassivebuzzer,throughthecontrolinputsquare-waveoccupyworkthantothevoiceofmelodytorealizethefunctionofthetime,thewholesystemdesignisperfect,haveshowtimedate,onthehourtime,timedateregulationsettingfunction,inadditiontosomeoutsidestillintroducestheSCMandassemblersomeexperienceandmethodstoMCUassemblyprogramthroughlocalmodificationcanbetransplantedintosinglechipmicrocomputer,therealizationofdifferentfunction,savetodevelopmenttime.Finally,summarizedtheaboutdoingbasedonsinglechipmicrocomputerintelligentalarmclockmeetproblemsanddifficulties,itsbiggestcharacteristicistoreadonlymemorycanberepeatederase,streamlinedversionefficientmicrocontrollerSTC89C51RCmicrocontrollerasmanyembeddedcontrolsystemprovidesahighflexibilityandcheapscheme,itismorewidelyapplicationofreason.Keywords:STC89C51RCmicrocontroller;Digitaltube;buzzer目錄前言…….………………………….51.電子時(shí)鐘的設(shè)計(jì)原理和方法6設(shè)計(jì)原理62.硬件電路的設(shè)計(jì)72.1STC89C51RC簡(jiǎn)介72.2鍵盤(pán)電路的設(shè)計(jì)8蜂鳴器驅(qū)動(dòng)電路92.4數(shù)碼管驅(qū)動(dòng)電路102.5晶振電路113軟件局部的設(shè)計(jì)12主程序局部的設(shè)計(jì)12中斷計(jì)時(shí)器及時(shí)間進(jìn)位133.3鬧鐘子函數(shù)143.4按鍵掃描153.5時(shí)鐘鬧鐘設(shè)置163.6顯示數(shù)字函數(shù)173.7顯示界面函數(shù)173.8鬧鐘記錄及讀取184總結(jié)225參考文獻(xiàn)……………….……..236致謝………………………..…….24附錄A:電路原理圖.25附錄B:源程序..26前言隨著科學(xué)技術(shù)的開(kāi)展和電子技術(shù)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整,單片機(jī)開(kāi)始迅速開(kāi)展,由于家用電器逐漸普及,市場(chǎng)對(duì)于智能時(shí)鐘控制系統(tǒng)的需求也越來(lái)越大。單片機(jī)以其芯片集成度高、處理功能強(qiáng)、可靠性高等優(yōu)點(diǎn),成功應(yīng)用于工業(yè)自動(dòng)化、智能儀器儀表、家電產(chǎn)品等領(lǐng)域。近些年,人們對(duì)數(shù)字鐘的要求也越來(lái)越高,傳統(tǒng)的時(shí)鐘已不能滿足人們的需求。多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質(zhì)的變化,有電子鬧鐘、數(shù)字鬧鐘等等。單片機(jī)在多功能數(shù)字鐘中的應(yīng)用已是非常普遍的,人們對(duì)數(shù)字鐘的功能及工作順序都非常熟悉。但是卻很少知道它的內(nèi)部結(jié)構(gòu)以及工作原理。由單片機(jī)作為數(shù)字鐘的核心控制器,可以通過(guò)它的時(shí)鐘信號(hào)進(jìn)行計(jì)時(shí)實(shí)現(xiàn)計(jì)時(shí)功能,將其時(shí)間數(shù)據(jù)經(jīng)單片機(jī)輸出,利用顯示器顯示出來(lái)。通過(guò)鍵盤(pán)可以進(jìn)行定時(shí)、校時(shí)功能。輸出設(shè)備顯示器可以用液晶顯示技術(shù)和數(shù)碼管顯示技術(shù)。單片機(jī)系統(tǒng)作為一種典型的嵌入式系統(tǒng),其系統(tǒng)設(shè)計(jì)包括硬件設(shè)計(jì)和軟件編程設(shè)計(jì)兩個(gè)方面,其調(diào)試過(guò)程一般分為軟件調(diào)試、硬件測(cè)試、系統(tǒng)調(diào)試,通常不用制作具體的電路板用單片機(jī)系統(tǒng)的虛擬仿真軟件Proteus 實(shí)現(xiàn)仿真功能。本文所述智能時(shí)鐘設(shè)計(jì)主要指時(shí)鐘顯示、時(shí)間設(shè)置、整點(diǎn)報(bào)時(shí)等控制系統(tǒng)。本文采用STC89C51RC型單片機(jī)為核心實(shí)現(xiàn)智能鬧鐘控制,至所以選擇STC89C51RC型單片機(jī)而沒(méi)有選擇其他單片機(jī)主要原因在于STC89C51RC型單片機(jī)進(jìn)入市場(chǎng)時(shí)間早、總線開(kāi)放、仿真開(kāi)發(fā)設(shè)備多、芯片及其開(kāi)發(fā)設(shè)備價(jià)格低廉、速度較快、電磁兼容性較好的。STC89C51RC單片機(jī)與工業(yè)標(biāo)準(zhǔn)的MCS-51的各方面性能比擬,其最大的特點(diǎn)是只讀存儲(chǔ)器可以反復(fù)擦除,是一種精簡(jiǎn)版本高效微控制器,STC89C51RC單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。1.電子時(shí)鐘的設(shè)計(jì)原理和方法設(shè)計(jì)原理原理為:該電子時(shí)鐘由STC89C51RC、晶振、按鍵、六段數(shù)碼管、蜂鳴器等構(gòu)成,采用外部晶振電路作為單片機(jī)的振蕩電路,由延時(shí)程序和循環(huán)程序產(chǎn)生的一秒定時(shí),到達(dá)時(shí)分秒的計(jì)時(shí),六十秒為一分鐘,六十分鐘為一小時(shí),滿二十四小時(shí)為一天。而電路通過(guò)控制鍵實(shí)現(xiàn)時(shí)間調(diào)節(jié)、鬧鐘設(shè)置等功能。按下時(shí)間調(diào)節(jié)按鍵之后再按加減功能鍵實(shí)現(xiàn)時(shí)間的加減,每按一次數(shù)值加一,移動(dòng)按鍵可以選擇要調(diào)節(jié)的選項(xiàng)。按下鬧鐘功能鍵可以實(shí)現(xiàn)鬧鐘時(shí)間的調(diào)節(jié)。那么可實(shí)現(xiàn)小時(shí)的調(diào)節(jié),同樣每按一次小時(shí)加一。使用單片機(jī)內(nèi)部計(jì)數(shù)器的定時(shí)器功能,編程設(shè)置主要針對(duì)定時(shí)器/計(jì)數(shù)器工作方式存放器TMOD。具體為:工作方式選擇位,設(shè)置為方式2;計(jì)數(shù)/定時(shí)方式選擇位,設(shè)置為定時(shí)器工作方式。電子時(shí)鐘每一秒鐘更新一次,因此MCU須產(chǎn)生一秒鐘定時(shí),工程上常采用如下方法:定時(shí)器使用方式一,設(shè)系統(tǒng)使用12MHz晶振,可使T0或T1產(chǎn)生50毫秒鐘定時(shí)中斷,再在中斷效勞程序中,對(duì)中斷次數(shù)進(jìn)行計(jì)數(shù),計(jì)數(shù)到20次即可產(chǎn)生一秒鐘定時(shí)。STC89C51RC六位數(shù)碼STC89C51RC六位數(shù)碼管蜂鳴器按鍵晶振計(jì)2.1STC89C51RC簡(jiǎn)介STC89C51RC是一種帶8K閃爍可編程可擦除只讀存儲(chǔ)器〔FPETOM-FlashProgrammabalandErasableReadOnlyMemory〕的低電壓、高性能CMOS8位微型處理器,即單片機(jī)芯片。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次,內(nèi)部FLASH擦寫(xiě)次數(shù)為100000次以上。該芯片使用高密度非易失存儲(chǔ)制造技術(shù),與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器集成在單個(gè)芯片中,使得STC89C51RC成為了一種性?xún)r(jià)比極高的微型處理器芯片,在許多電路設(shè)計(jì)中都得到了應(yīng)用。STC89C51RC單片機(jī)特點(diǎn):工作電壓:工作頻率:0-40MHz用戶(hù)應(yīng)用程序空間:8K片上集成128*8RAMISP〔在系統(tǒng)可編程〕/IAP〔在應(yīng)用可編程〕,無(wú)需專(zhuān)用編程器/仿真器可通過(guò)串口〔〕直接下載用戶(hù)程序EEPROM功能共3個(gè)16位定時(shí)器/計(jì)數(shù)器,其中定時(shí)0還可以當(dāng)成2個(gè)8位定時(shí)器使用外部中斷4路通用異步串行口〔UART〕,還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè)UART工作溫度范圍:0-75℃引腳說(shuō)明:VCC:供電電壓GND:接地P0:P0是一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,低8位地址復(fù)用總線端口。P1:P1是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,靜態(tài)通用端口。P2:P2是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,高8位地址總線動(dòng)態(tài)端口。P3:P3是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,雙功能靜態(tài)端口。P3口也可作為一些特殊功能口。P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)。RST:復(fù)位自輸入。XTAL1/XTAL2:反向振蕩器的輸入與輸出。STC89C51RC芯片外形結(jié)構(gòu)和引腳分布圖2.2鍵盤(pán)電路的設(shè)計(jì)采取獨(dú)立式鍵盤(pán)接口的編程模式,此鍵盤(pán)接口程序的功能實(shí)際上就是驅(qū)動(dòng)鍵盤(pán)工作,完成鍵盤(pán)的識(shí)別,根據(jù)所識(shí)別按鍵的鍵值,完成子程序的正確散轉(zhuǎn),從而完成單片機(jī)應(yīng)用系統(tǒng)對(duì)用戶(hù)按鍵動(dòng)作的預(yù)定義的響完成單片機(jī)應(yīng)用系統(tǒng)對(duì)用戶(hù)按鍵動(dòng)作的預(yù)定義的響應(yīng)。采取獨(dú)立式鍵盤(pán)的原因是每一個(gè)按鍵只占用一個(gè)應(yīng)。采取獨(dú)立式鍵盤(pán)的原因是每一個(gè)按鍵只占用一個(gè)I/O口,同時(shí)每個(gè)按鍵的工作不影響其他按鍵,可直接依據(jù)每個(gè)I/O口線的狀態(tài)進(jìn)行子程序的散轉(zhuǎn),因此編制的程序較簡(jiǎn)練。本程序中利用查詢(xún)方式對(duì)按鍵進(jìn)行判斷,假設(shè)有鍵按下,那么進(jìn)行軟件延時(shí)消抖,防止了抖動(dòng)引起的干擾,同時(shí)只有當(dāng)按鍵松開(kāi)后,才判斷其有效并進(jìn)行識(shí)別,最后根據(jù)識(shí)別的按鍵轉(zhuǎn)子程序處理(主要是對(duì)具體按鍵的系統(tǒng)功能的執(zhí)行)。通過(guò)按鍵來(lái)調(diào)整內(nèi)部的存儲(chǔ)單元。89C51的P0口和P2口外接由八個(gè)LED數(shù)碼管(LED8~LED1)構(gòu)成的顯示器,用P0口作LED的段碼輸出口,P2口作八個(gè)LED數(shù)碼管的位控輸出線,P1口外接按鍵構(gòu)成鍵盤(pán)電路。鍵盤(pán)采用四個(gè)個(gè)獨(dú)立按鍵配以實(shí)現(xiàn)對(duì)時(shí)鐘和鬧鐘的設(shè)定及修改。按鍵未按下時(shí),IO口為高電平,按鍵按下后IO口被拉低。蜂鳴器驅(qū)動(dòng)電路發(fā)音局部是通過(guò)三極管放大驅(qū)動(dòng)蜂鳴器工作,當(dāng)IO口輸出低電平時(shí),三極管導(dǎo)通,蜂鳴器響。2.4數(shù)碼管驅(qū)動(dòng)電路動(dòng)態(tài)顯示驅(qū)動(dòng):數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制翻開(kāi),該位就顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。通過(guò)分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過(guò)程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。動(dòng)態(tài)顯示:所謂動(dòng)態(tài)顯示就是一位一位的輪流點(diǎn)亮各個(gè)位,對(duì)于顯示器的每一位來(lái)說(shuō),每隔一段時(shí)間點(diǎn)亮一次。利用人的視覺(jué)暫留功能可以看到整個(gè)顯示,但必須保證掃描速度足夠快,字符才不閃爍。顯示器的亮度既與導(dǎo)通電流有關(guān),也于點(diǎn)亮?xí)r間與間隔時(shí)間的比例有關(guān)。調(diào)整參數(shù)可以實(shí)現(xiàn)較高穩(wěn)定度的顯示。動(dòng)態(tài)顯示節(jié)省了I/O口,降低了能耗。動(dòng)態(tài)顯示,也稱(chēng)掃描顯示。顯示器由6個(gè)共陰極LED數(shù)碼管構(gòu)成。單片機(jī)的P1口輸出顯示段碼,經(jīng)由一片74LS245驅(qū)動(dòng)輸出給LED管,由P0口輸出位碼,經(jīng)由74LS06輸出給LED管。電路由于點(diǎn)亮數(shù)碼管所需電流較大,對(duì)單片機(jī)IO口連接上拉電阻,提高IO口的電流輸出能力。圖3.軟件局部的設(shè)計(jì)主程序局部的設(shè)計(jì)利用單片機(jī)制作簡(jiǎn)易電子時(shí)鐘,由六個(gè)LED數(shù)碼管分別顯示小時(shí)十位、小時(shí)個(gè)位、分鐘十位、分鐘個(gè)位、秒鐘十位、秒鐘個(gè)位。本程序設(shè)計(jì)中,在主程序之外,可以設(shè)置時(shí)間值處理子程序,時(shí)間值顯示前的處理子程序,按鍵情況掃描子程序,1S定時(shí)中斷子程序以及50ms延時(shí)消除按鍵抖動(dòng)子程序等多個(gè)小型的子程序。另外,可以設(shè)置一些數(shù)據(jù)單元作為數(shù)據(jù)存放器。用30H,31H,40H和41H地址單元分別作為顯示位數(shù)的掃描指針值存放器,時(shí)存放器,分存放器和秒存放器。flag=0flag=0flag!=0開(kāi)始初始化定時(shí)器讀取鬧鐘時(shí)間進(jìn)位函數(shù)鬧鐘函數(shù)顯示切換界面按鍵掃描設(shè)置按鍵掃描切換界面按鍵掃描設(shè)置標(biāo)志位當(dāng)程序開(kāi)始時(shí),先讀取鬧鐘所示時(shí)間,用定時(shí)器進(jìn)行初始化定時(shí),先調(diào)用時(shí)間進(jìn)位函數(shù),再調(diào)用鬧鐘函數(shù),顯示切換界面按鍵掃描,設(shè)置按鍵掃描,切換界面按鍵掃描,到達(dá)指定的標(biāo)志位,函數(shù)通過(guò)判斷標(biāo)志位flag_sw判斷需要顯示的界面。程序局部主要采用了程序結(jié)構(gòu)的模塊化設(shè)計(jì),防止了一些函數(shù)的不必要的重復(fù)書(shū)寫(xiě),使程序變得單間易懂。程序在執(zhí)行時(shí),主程序要須通過(guò)調(diào)用子函數(shù)就可完成相應(yīng)的功能。中斷計(jì)時(shí)器及時(shí)間進(jìn)位數(shù)字電子鐘設(shè)計(jì)中主要使用定時(shí)器T0中斷ET0,利用ET0中斷進(jìn)行計(jì)時(shí)時(shí)間的自增,從而實(shí)現(xiàn)計(jì)時(shí)功能。STC89C51RC有兩個(gè)通用定時(shí)/計(jì)數(shù)器。兩者均可配置為定時(shí)器或事件計(jì)數(shù)器。另外增加了定時(shí)器T0/T1,溢出時(shí)T0/T1腳自動(dòng)翻轉(zhuǎn)的功能選項(xiàng)。用作“定時(shí)器”功能時(shí),每經(jīng)過(guò)一個(gè)機(jī)器周期,存放器值加1。用作“計(jì)數(shù)器”功能時(shí),存放器在對(duì)應(yīng)的外部輸入管腳T0/T1上每發(fā)生一次1到0的跳變時(shí)加1。使用該功能時(shí),外部輸入每個(gè)機(jī)器周期被采樣一次。設(shè)計(jì)中采用了中斷方式1作為定時(shí)中斷,其定時(shí)計(jì)數(shù)初值的設(shè)置可由以下公式計(jì)算得到。3.3鬧鐘子函數(shù)YYYNN開(kāi)始時(shí)間到且開(kāi)關(guān)開(kāi)鬧鈴一分鐘或按鍵按下結(jié)束鬧鐘流程圖鬧鐘時(shí)間的判別主要是通過(guò)設(shè)定時(shí)間與實(shí)時(shí)時(shí)間對(duì)逐位比照確定是否進(jìn)行鬧鈴。當(dāng)程序開(kāi)始執(zhí)行時(shí),首先要判斷設(shè)置的時(shí)間是否到達(dá)設(shè)定時(shí)間,假設(shè)到達(dá)那么鬧鐘開(kāi)始發(fā)出響聲,否那么此程序結(jié)束。當(dāng)鬧鈴響時(shí),判斷是否響一分鐘,或?qū)Ⅳ[鈴關(guān)閉,假設(shè)超過(guò)一分鐘火箭鬧鈴關(guān)閉那么程序結(jié)束;否那么將返回循環(huán)程序。3.4按鍵掃描<b<b(<=a)(>a)>=b按下未按下開(kāi)始變量++(--)Key變量結(jié)束變量=a(=b)按鍵掃描流程這些函數(shù)主要是判斷是否有按鍵按下,當(dāng)按鍵按下時(shí),執(zhí)行變量++,判斷變量>b(<=a),那么變量=a〔=b〕,程序結(jié)束;假設(shè)變量<b〔<a〕,那么結(jié)束;假設(shè)未按下,那么結(jié)束程序。3.5時(shí)鐘鬧鐘設(shè)置圖圖=3=2=1=3=2=1=3=2=1=3=2=1開(kāi)始flag_swflag_set設(shè)置時(shí)鐘月結(jié)束設(shè)置時(shí)鐘日設(shè)置時(shí)鐘年flag_set設(shè)置鬧鐘分鐘設(shè)置鬧鐘開(kāi)關(guān)設(shè)置鬧鐘小時(shí)flag_set設(shè)置時(shí)鐘分鐘設(shè)置時(shí)鐘秒設(shè)置時(shí)鐘小時(shí)由時(shí)鐘鬧鐘程序開(kāi)始時(shí),當(dāng)flag_sw=1時(shí),執(zhí)行flag_set,假設(shè)flag_set=1時(shí),設(shè)置時(shí)鐘小時(shí),假設(shè)flag_set=2時(shí),設(shè)置時(shí)鐘分鐘,假設(shè)flag_set=3時(shí),設(shè)置時(shí)鐘秒;當(dāng)flag_sw=2時(shí),繼續(xù)執(zhí)行flag_set,假設(shè)flag_set=1時(shí),設(shè)置時(shí)鐘年,假設(shè)flag_set=2時(shí),設(shè)置時(shí)鐘月,假設(shè)flag_set=3時(shí),設(shè)置時(shí)鐘日;當(dāng)flag_sw=3時(shí),再執(zhí)行flag_set,假設(shè)flag_set=1時(shí),設(shè)置鬧鐘小時(shí),假設(shè)flag_set=2時(shí),設(shè)置鬧鐘分鐘,假設(shè)flag_set=3時(shí),設(shè)置鬧鐘開(kāi)關(guān);結(jié)束設(shè)置。3.6顯示數(shù)字函數(shù)開(kāi)始開(kāi)始數(shù)及顯示位置判斷顯示位置在相應(yīng)位置顯示結(jié)束函數(shù)由開(kāi)始,輸入顯示的數(shù)字及顯示的位置,判斷需要顯示的數(shù)字及顯示的位置并在相應(yīng)位置進(jìn)行顯示,并結(jié)束。3.7顯示界面函數(shù)=3=3=2=1開(kāi)始結(jié)束標(biāo)志位顯示時(shí)間顯示日期顯示鬧鐘界面顯示圖由開(kāi)始,函數(shù)通過(guò)判斷標(biāo)志位flag_sw判斷需要顯示的界面。當(dāng)flag_sw=1時(shí),顯示時(shí)間;當(dāng)flag_sw=2時(shí),顯示日期;當(dāng)flag_sw=3時(shí),顯示鬧鐘。3.8鬧鐘記錄及讀取STC89C51RC單片機(jī)內(nèi)部集成了的EEPROM是與程序空間是分開(kāi)的,利用ISP/IAP技術(shù)可將內(nèi)部DataFlash當(dāng)EEPROM,擦寫(xiě)次數(shù)在10萬(wàn)次以上。EEPROM可分為假設(shè)干個(gè)扇區(qū),每個(gè)扇區(qū)包含512字節(jié)。使用時(shí),建議同一次修改的數(shù)據(jù)放在同一個(gè)扇區(qū),不是同一次修改的數(shù)據(jù)放在不同的扇區(qū),不一定要用滿。數(shù)據(jù)存儲(chǔ)器的擦除操作是按扇區(qū)進(jìn)行的。EEPROM可用于保存一些需要在應(yīng)用過(guò)程中修改并且掉電不喪失的參數(shù)數(shù)據(jù)。在用戶(hù)程序中,可以對(duì)EEPROM進(jìn)行字節(jié)讀/字節(jié)編程/扇區(qū)擦除操作。IAP及EEPROM新增特殊功能存放器介紹符號(hào)描述地址位地址及符號(hào)MSBLSB復(fù)位值ISP_DATAISP/IAPFlashDataRegisterE2H11111111BISP_ADDRHISP/IAPFlashAddressHighE3H00000000BISP_ADDRLISP/IAPFlashAddressLowE4H00000000BISP_CMDISP/IAPFlashCommandRegisterE5H------MS1MS0xxxxxx00BISP_TRIGISP/IAPFlashCommandTriggerE6HxxxxxxxxBISP_CONTRISP/IAPControlRegisterE7HISPENSWBSSWRST--WT2WT1WT0000xx000B1.ISP/IAP數(shù)據(jù)存放器ISP_DATAISP_DATA:ISP/IAP操作時(shí)的數(shù)據(jù)存放器。ISP/IAP從Flash讀出的數(shù)據(jù)放在此處,向Flash寫(xiě)的數(shù)據(jù)也需放在此處2.ISP/IAP地址存放器ISP_ADDRH和ISP_ADDRLISP_ADDRH:ISP/IAP操作時(shí)的地址存放器高八位。該存放器地址為E3H,復(fù)位后值為00H.ISP_ADDRL:ISP/IAP操作時(shí)的地址存放器低八位。該存放器地址為E4H,復(fù)位后值為00H.3.ISP/IAP命令存放器ISP_CMDISP/IAP命令存放器IAP_CMD格式如下:SFRnameAddressbitB7B6B5B4B3B2B1B0ISP_CMDE5Hname------MS1MS0MS2MS1MS0命令/操作模式選擇000Standby待機(jī)模式,無(wú)ISP操作001從用戶(hù)的應(yīng)用程序區(qū)對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)讀010從用戶(hù)的應(yīng)用程序區(qū)對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行字節(jié)編程011從用戶(hù)的應(yīng)用程序區(qū)對(duì)"DataFlash/EEPROM區(qū)"進(jìn)行扇區(qū)擦除程序在系統(tǒng)ISP程序區(qū)時(shí)可以對(duì)用戶(hù)應(yīng)用程序區(qū)/數(shù)據(jù)Flash區(qū)(EEPROM)進(jìn)行字節(jié)讀/字節(jié)編程/扇區(qū)擦除;程序在用戶(hù)應(yīng)用程序區(qū)時(shí),僅可以對(duì)數(shù)據(jù)Flash區(qū)(EEPROM)進(jìn)行字節(jié)讀/字節(jié)編程/扇區(qū)擦除。已經(jīng)固化有ISP引導(dǎo)碼,并設(shè)置為上電復(fù)位進(jìn)入ISP4.ISP/IA命令觸發(fā)存放器ISP_TRIGISP_TRIG:ISP/IAP操作時(shí)的命令觸發(fā)存放器。在ISPEN(ISP_CONTR.7)=1時(shí),對(duì)ISP_TRIG先寫(xiě)入46h,再寫(xiě)入B9h,ISP/IAP命令才會(huì)生效。ISP/IAP操作完成后,ISP地址高八位存放器ISP_ADDRH、ISP地址低八位存放器ISP_ADDRL和ISP命令存放器ISP_CMD的內(nèi)容不變。如果接下來(lái)要對(duì)下一個(gè)地址的數(shù)據(jù)進(jìn)行ISP/IAP操作,需手動(dòng)將該地址的高8位和低8位分別寫(xiě)入ISP_ADDRH和ISP_ADDRL存放器。每次ISP操作時(shí),都要對(duì)ISP_TRIG先寫(xiě)入46H,再寫(xiě)入B9H,ISP/IAP命令才會(huì)生效。5.ISP/IAP命令存放器ISP_CONTRISP/IAP控制存放器IAP_CONTR格式如下:SFRnameAddressbitB7B6B5B4B3B2B1B0IAP_CONTRE7HnameISPENSWBSSWRST--WT2WT2WT0ISPEN:ISP/IAP功能允許位。0:禁止IAP/ISP讀/寫(xiě)/擦除DataFlash/EEPROM1:允許IAP/ISP讀/寫(xiě)/擦除DataFlash/EEPROMSWBS:軟件選擇從用戶(hù)應(yīng)用程序區(qū)啟動(dòng)(送0),還是從系統(tǒng)ISP監(jiān)控程序區(qū)啟動(dòng)(送1)。要與SWRST直接配合才可以實(shí)現(xiàn)SWRST:0:不操作;1:產(chǎn)生軟件系統(tǒng)復(fù)位,硬件自動(dòng)復(fù)位。設(shè)置等待時(shí)間CPU等待時(shí)間(機(jī)器周期),(1個(gè)機(jī)器周期=12個(gè)CPU工作時(shí)鐘)WT2WT1WT0Read/讀Program/編程(=72uS)SectorErase扇區(qū)擦除(=13.1304ms)RecommendedSystemClock跟等待參數(shù)對(duì)應(yīng)的推薦系統(tǒng)時(shí)鐘0116個(gè)機(jī)器周期30個(gè)機(jī)器周期5471個(gè)機(jī)器周期5MHz01011個(gè)機(jī)器周期60個(gè)機(jī)器周期10942個(gè)機(jī)器周期10MHz00122個(gè)機(jī)器周期120個(gè)機(jī)器周期21885個(gè)機(jī)器周期20MHz00043個(gè)機(jī)器周期240個(gè)機(jī)器周期43769個(gè)機(jī)器周期40MHzSTC89C51RC/RD+系列單片機(jī)EEPROM空間大小及地址STC89C51RC/RD+系列單片機(jī)內(nèi)部可用EEPROM的地址與程序空間是分開(kāi)的:程序在用戶(hù)應(yīng)用程序區(qū)時(shí),可以對(duì)EEPROM行IAP/ISP操作。具體某個(gè)型號(hào)單片機(jī)內(nèi)部EEPROM大小及詳細(xì)地址請(qǐng)參閱:1.STC89C51RC/RD+系列單片機(jī)內(nèi)部EEPROM詳細(xì)地址表2.STC89C51RC/RD+系列單片機(jī)內(nèi)部EEPROM空間大小選型一覽表STC89C51RC系列單片機(jī)內(nèi)部EEPROM詳細(xì)地址表具體某型號(hào)有多少扇區(qū)的EEPROM,參照前面的EEPROM空間大小選型一覽表,每個(gè)扇區(qū)0.5K字節(jié)第一扇區(qū)第二扇區(qū)第三扇區(qū)第四扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2000h21FFh2200h23FFh2400h25FFh2600h27FFh第五扇區(qū)第六扇區(qū)第七扇區(qū)第八扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2800h29FFh2A00h2BFFh2C00h2DFFh2E00h2FFFh每個(gè)扇區(qū)512字節(jié),建議同一次修改的數(shù)據(jù)放在同一扇區(qū),不是同一次修改的數(shù)據(jù)放在不同的扇區(qū),不必用滿,當(dāng)然可全用。4.總結(jié)在這次畢業(yè)設(shè)計(jì)調(diào)試過(guò)程中,我碰到很多困難,如時(shí)間設(shè)置時(shí)按鍵的判斷,由于之初程序的問(wèn)題時(shí)間顯示不能根據(jù)按鍵的變化而變化,還有跳轉(zhuǎn)指令的使用,導(dǎo)致程序運(yùn)行時(shí)時(shí)常進(jìn)入死循環(huán),修改程序時(shí)思考不周全,如整點(diǎn)報(bào)時(shí)的問(wèn)題,由于報(bào)時(shí)時(shí)間,導(dǎo)致時(shí)間顯示時(shí)延遲,時(shí)鐘不夠精確。通過(guò)本次畢業(yè)設(shè)計(jì),讓我對(duì)單片機(jī)整體有了一次全面的了解,原來(lái)單片機(jī)的功能是如此強(qiáng)大,其實(shí)學(xué)習(xí)單片機(jī)沒(méi)有我們想象的那么困難,做完這次畢業(yè)設(shè)計(jì)我直接體會(huì)要學(xué)會(huì)單片機(jī)只要我們熟練控制單片機(jī)32個(gè)I/O輸入輸出,會(huì)對(duì)所有功能塊的模式存放器和控制存放器進(jìn)行設(shè)置,掌握程序的編寫(xiě),我們學(xué)習(xí)的目的就到達(dá)了。這次設(shè)計(jì)使我深刻認(rèn)識(shí)到學(xué)習(xí)的理論必須用到實(shí)際中才能表達(dá)它的價(jià)值,才能學(xué)有所用,也就是所謂理論必須聯(lián)系實(shí)際,這次設(shè)計(jì)對(duì)我查閱資料、程序編寫(xiě)、動(dòng)手設(shè)計(jì)、對(duì)一些陌生軟件的自主學(xué)習(xí)能力等都有很大的提高。本文采用STC89C51RC單片機(jī)用匯編語(yǔ)言進(jìn)行編程,根本到達(dá)了設(shè)計(jì)的要求,由于設(shè)計(jì)者學(xué)識(shí)有限,設(shè)計(jì)還可以進(jìn)一步優(yōu)化和完善,真正實(shí)現(xiàn)“智能”時(shí)鐘。5.參考文獻(xiàn)[1]郭天祥新概念51單片機(jī)C語(yǔ)言教程——入門(mén)、提高、開(kāi)發(fā)、拓展電子工業(yè)出版社2009年[2]梅麗鳳、王艷秋、汪毓鐸、張軍單片機(jī)原理及接口技術(shù)清華大學(xué)出版社2006-8[3]李朝青單片機(jī)原理及接口技術(shù)北京航空航天大學(xué)出版社2005-5[4]閻石數(shù)字電路技術(shù)根底北京高等教育出版社1998[5]童詩(shī)白、華成英模擬電子技術(shù)根底北京高等教育出版社2001[6]夏路易石宗義電路原理圖與電路設(shè)計(jì)教程Protel99SE[M]北京希望電子出版社2002[7]丁明亮唐前輝單片機(jī)原理及應(yīng)用——基于Keilc與Proteus北京航空航天大學(xué)出版社2009-2[8]龔運(yùn)新單片機(jī)C語(yǔ)言開(kāi)發(fā)技術(shù)清華大學(xué)出版社2006年。[9]孫涵芳MCS-51系列單片機(jī)原理及應(yīng)用[M]北京航空航天大學(xué)出版社1996-4[10]陳明熒8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材清華大學(xué)出版社2004年[11]賈好來(lái)MCS—51單片機(jī)原理及應(yīng)用機(jī)械工業(yè)出版社2007年[12]徐江海單片機(jī)實(shí)用教程機(jī)械工業(yè)出版社2007年[13]陳海宴51單片機(jī)原理及應(yīng)用——基于Keilc與Proteus北京航空航天大學(xué)出版社2010-7[14]劉秀英單片機(jī)應(yīng)用設(shè)計(jì)200例北京航空航天大學(xué)出版社2006年[15]林立張俊亮曹旭東單片機(jī)原理及應(yīng)用:基于Proteus和KeilC電子工業(yè)出版社2009-76.致謝經(jīng)歷了近2個(gè)月的時(shí)間,畢業(yè)論文暫告收尾,這也意味著我在北京城市學(xué)院的四年的學(xué)習(xí)生活既將結(jié)束。回首既往,自己一生最珍貴的時(shí)光能于這樣的校園之中,能在眾多學(xué)富五車(chē)、才華橫溢的老師們的熏陶下度過(guò),實(shí)是榮幸之極。在這幾年的時(shí)間里,我在學(xué)習(xí)上和思想上都受益非淺。這除了自身努力外,與各位老師、同學(xué)和朋友的關(guān)心、支持和鼓勵(lì)是分不開(kāi)的論文的寫(xiě)作是枯燥艱辛而又富有挑戰(zhàn)的。在指導(dǎo)老師的諄諄誘導(dǎo)、同學(xué)的出謀劃策及家長(zhǎng)的支持鼓勵(lì),是我堅(jiān)持完成論文的動(dòng)力源泉。在此,我要感謝我的指導(dǎo)老師,從論文的選題、文獻(xiàn)的采集、框架的設(shè)計(jì)、結(jié)構(gòu)的布局到最終的論文定稿,從內(nèi)容到格式,從標(biāo)題到標(biāo)點(diǎn),他都費(fèi)盡心血。沒(méi)有老師的辛勤栽培、孜孜教誨,就沒(méi)有我論文的順利完成。感謝各位同學(xué),與他們的交流使我受益頗多。最后要感謝我的家人以及我的朋友們對(duì)我的理解、支持、鼓勵(lì)和幫助,正是因?yàn)橛辛怂麄?,我所做的一切才更有意義;也正是因?yàn)橛辛怂麄?,我才有了追求進(jìn)步的勇氣和信心。時(shí)間的倉(cāng)促及自身專(zhuān)業(yè)水平的缺乏,整篇論文肯定存在尚未發(fā)現(xiàn)的缺點(diǎn)和錯(cuò)誤。懇請(qǐng)閱讀此篇論文的老師、同學(xué),多予指正,不勝感謝!隨著畢業(yè)設(shè)計(jì)的結(jié)束,大學(xué)生活也即將結(jié)束,我也要馬上就步入工作崗位,走進(jìn)社會(huì),在整個(gè)畢業(yè)設(shè)計(jì)的過(guò)程中所學(xué)到的獨(dú)立閱讀,查閱資料,遇到問(wèn)題通過(guò)理論結(jié)合實(shí)踐解決問(wèn)題,與人溝通研討的能力是我受益匪淺,會(huì)為我以后的踏入社會(huì),參加工作打下堅(jiān)實(shí)的根底,我也會(huì)在日后學(xué)習(xí)和工作中不斷的充實(shí)和完善自己,以?xún)?yōu)秀的業(yè)績(jī)向母校匯報(bào)!附錄A:電路原理圖附錄B:源程序#include<reg51.h>#include<intrins.h>#definedp10charsec,min,h,date=1,mon=1,year=12;charh_ala=0,min_ala=1,sw_ala=1;charflag_set,flag_sw;charcount;sbitnum1=P0^0;sbitnum2=P0^4;sbitnum3=P2^7;sbitnum4=P2^3;sbitnum5=P2^0;sbitnum6=P2^1;sbitbell=P2^2;sbitkey_set=P3^0;sbitkey_sw=P3^1;sbitkey_l=P3^2;sbitkey_down=P3^3;sbitkey_ok=P3^4;sbitkey_up=P3^5;sbitkey_r=P3^6;voidDelay(unsignedintz); voiddisplay_num(charnum,charpo);voiddisplay_sec(void);voiddisplay_min(void);voiddisplay_h(void);voiddisplay_year(void);voiddisplay_mon(void);voiddisplay_date(void);voiddisplay_time(void);voiddisplay_dates(void);voiddisplay_h_ala(void);voiddisplay_min_ala(void);voiddisplay_sw_ala(void);voiddisplay_alarm(void);voiddisplay(void);voidcarry(void);voidkey_swscan(void);voidkey_setscan(void);voidset(void);voidalarm(void);voidInitTimer0(void);#defineRdCommand0x01 //定義ISP的操作命令#definePrgCommand0x02#defineEraseCommand0x03#defineError1#defineOk0#defineWaitTime0x01 //定義CPU等待時(shí)間sfrISP_DATA=0xe2;sfrISP_ADDRH=0xe3;sfrISP_ADDRL=0xe4;sfrISP_CMD=0xe5;sfrISP_TRIG=0xe6;sfrISP_CONTR=0xe7;voidISP_IAP_enable(void);voidISP_IAP_disable(void);voidISPgoon(void);unsignedcharbyte_read(unsignedintbyte_addr);voidSectorErase(unsignedintsector_addr);voidbyte_write(unsignedintbyte_addr,unsignedcharoriginal_data);voidread_ala(void);voidrecord_ala(void);voidmain(void){ read_ala(); //讀取鬧鈴 InitTimer0(); //定時(shí)器0初始化 while(1) { carry(); //進(jìn)位 display(); //顯示 alarm(); //鬧鐘 key_swscan(); //切換界面按鍵掃描 key_setscan(); //設(shè)置按鍵〔改變?cè)O(shè)置標(biāo)志位〕掃描 if(flag_set!=0) //設(shè)置標(biāo)志位不為'0',開(kāi)始設(shè)置 { set(); } }}//================延時(shí)函數(shù)================voidDelay(unsignedintz) { unsignedintx,y; for(x=z;x>0;x--) for(y=120;y>0;y--);}//================顯示數(shù)字================voiddisplay_num(charnum,charpo){ unsignedcharcodeTab[]={0x77,0x14,0xB3,0xB6,0xD4,0xE6,0xE7,0x34,0xF7,0xF6,0x08}; if(!(num==0&&(po==1||po==3||po==5))||(flag_sw==1&&po==1)) { switch(po) { case1: P1=Tab[num]; num1=0; Delay(1); num1=1; break; case2: P1=Tab[num]; num2=0; Delay(1); num2=1; break; case3: P1=Tab[num]; num3=0; Delay(1); num3=1; break; case4: P1=Tab[num]; num4=0; Delay(1); num4=1; break; case5: P1=Tab[num]; num5=0; Delay(1); num5=1; break; default: P1=Tab[num]; num6=0; Delay(1); num6=1; } }}//================顯示秒================voiddisplay_sec(void){ if(flag_set==3&&count>10||flag_set!=3) { display_num(sec/10,5); display_num(sec%10,6); }}//================顯示分================voiddisplay_min(void){ if(flag_set==2&&count>10||flag_set!=2) { display_num(min/10,3); display_num(min%10,4); } display_num(dp,4);}//================顯示時(shí)================voiddisplay_h(void){ if(flag_set==1&&count>10||flag_set!=1) { display_num(h/10,1); display_num(h%10,2); } display_num(dp,2);}//================顯示日================voiddisplay_date(void){ if(flag_set==3&&count>10||flag_set!=3) { display_num(date/10,5); display_num(date%10,6); }}//================顯示月================voiddisplay_mon(void){ if(flag_set==2&&count>10||flag_set!=2) { display_num(mon/10,3); display_num(mon%10,4); } display_num(dp,4);}//================顯示年================voiddisplay_year(void){ if(flag_set==1&&count>10||flag_set!=1) { display_num(year/10,1); display_num(year%10,2); } display_num(dp,2);}//================顯示時(shí)間================voiddisplay_time(void){ display_sec(); display_min(); display_h();}//================顯示日期================voiddisplay_dates(void){ display_date(); display_mon(); display_year();}//================顯示鬧鐘時(shí)================voiddisplay_h_ala(void){ if(flag_set==1&&count>10||flag_set!=1) { display_num(h_ala/10,1); display_num(h_ala%10,2); } display_num(dp,2);}//================顯示鬧鐘分================voiddisplay_min_ala(void){ if(flag_set==2&&count>10||flag_set!=2) { display_num(min_ala/10,3); display_num(min_ala%10,4); }}//================顯示鬧鐘開(kāi)關(guān)================voiddisplay_sw_ala(void){ if(flag_set==3&&count>10||flag_set!=3) { display_num(sw_ala,6); }}//================顯示鬧鐘================voiddisplay_alarm(void){ display_h_ala(); display_min_ala(); display_sw_ala();}//================顯示各界面================voiddisplay(void){ switch(flag_sw) //判斷要顯示的界面 { case0: display_time(); break; case1: display_dates(); break; default: display_alarm(); }}//================時(shí)間進(jìn)位================voidcarry(void){ if(count>=20) { count=0; sec++; } if(sec>=60) { sec=0; min++; } if(min>=60) { min=0; h++; } if(h>=24) { h=0; date++; } if(date>=29&&mon==2&&(year%4!=0)) { date=1; mon++; } if(date>=30&&mon==2&&(year%4==0)) { date=1; mon++; } if(date>=31&&(mon==4||mon==6||mon==9||mon==11)) { date=1; mon++; } if(date>=32&&(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)) { date=1; mon++; } if(mon>=13) { mon=0; year++; } if(year>=100) { year=0; }}//================初始化定時(shí)器================voidInitTimer0(void){TMOD=0x01;TH0=0x3C; //設(shè)置定時(shí)器初值,定時(shí)時(shí)間50msTL0=0x0B0;EA=1;ET0=1;TR0=1;}//================切換界面按鍵掃描================voidkey_swscan(void){ if(key_sw==0) { Delay(10); if(key_sw==0) { flag_sw++; if(flag_sw>=3) { record_ala(); flag_sw=0; } while(!key_sw); } }}//================設(shè)置按鍵掃描================voidkey_setscan(void){ if(key_set==0) { Delay(10); if(key_set==0) { flag_set++; if(flag_set>=4) { flag_set=0; } while(!key_set); } } if(flag_set!=0) //左右鍵功能 { if(key_l==0) { Delay(10); if(key_l==0) { flag_set--; if(flag_set<=0) { flag_set=3; } while(!key_l); } } if(key_r==0) { Delay(10); if(key_r==0) { flag_set++; if(flag_set>=4) { flag_set=1; } while(!key_r); } } if(key_ok==0) { flag_set=0; record_ala(); } }}//================時(shí)間、鬧鐘設(shè)置================voidset(void){ switch(flag_sw) { case0: //時(shí)間界面下 switch(flag_set) { case1: if(key_up==0) //設(shè)置時(shí) { Delay(10); if(key_up==0) { h++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { h--; while(!key_down); } } break; case2: //設(shè)置分 if(key_up==0) { Delay(10); if(key_up==0) { min++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { min--; while(!key_down); } } break; default: //設(shè)置秒 if(key_up==0) { Delay(10); if(key_up==0) { sec++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { sec--; while(!key_down); } } } break; case1: //日期界面下 switch(flag_set) { //設(shè)置年 case1: if(key_up==0) { Delay(10); if(key_up==0) { year++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { year--; while(!key_down); } } break; case2: //設(shè)置月 if(key_up==0) { Delay(10); if(key_up==0) { mon++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { mon--; while(!key_down); } } break; default: //設(shè)置日 if(key_up==0) { Delay(10); if(key_up==0) { date++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { date--; while(!key_down); } } } break; default: //鬧鐘界面下 switch(flag_set) { case1: //設(shè)置鬧鐘時(shí) if(key_up==0) { Delay(10); if(key_up==0) { h_ala++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { h_ala--; while(!key_down); } } break; case2: //設(shè)置鬧鐘分 if(key_up==0) { Delay(10); if(key_up==0) { min_ala++; while(!key_up); } } if(key_down==0) { Delay(10); if(key_down==0) { min_ala--; while(!key_down); } } break; default: //設(shè)置鬧開(kāi)關(guān) if(key_up==0||key_down==0) { Delay(10); if(key_up==0||key_down==0) { sw_ala=!sw_ala; while(!key_up||!key_down); } } } } if(sec<0) { sec=59; } if(sec>=60) { sec=0; } if(min<0) { min=59; } if(min>=60) { min=0; } if(h<0) { h=23; } if(h>=24) { h=0; } if(date<=0&&mon==2&&(year%4!=0)) { date=28; } if(date<=0&&mon==2&&(year%4==0)) { date=29; } if(date<=0&&(mon==4||mon==6||mon==9||mon==11)) { date=30; } if(date<=0&&(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)) { date=31; } if(date>=29&&mon==2&&(year%4!=0)) { date=1; } if(date>=30&&mon==2&&(year%4==0)) { date=1; } if(date>=31&&(mon==4||mon==6||mon==9||mon==11)) { date=1; } if(date>=32&&(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)) { date=1; } if(mon<1) { mon=12; } if(mon>12) { mon=1; } if(year<0) { year=99; } if(year>=100) { year=0; } if(h_ala<0) { h_ala=23; } if(h_ala>=24) { h_ala=0; } if(min_ala<0) { min_ala=59; } if(min_ala>=60) { min_ala=0; } }//================

溫馨提示

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

評(píng)論

0/150

提交評(píng)論