




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
電子設(shè)計(jì)競(jìng)賽作品設(shè)計(jì)報(bào)告作品題目序號(hào)A8作品題目名稱學(xué)校學(xué)生生活時(shí)間提示系統(tǒng)參賽隊(duì)伍序號(hào)參賽隊(duì)伍名稱參賽隊(duì)員姓名作品完成情況□作品完整□作品局部完成□作品未制作目錄TOC\o"1-2"\h\z\u1.方案設(shè)計(jì)與論證21.1、設(shè)計(jì)任務(wù)與要求21.2、方案設(shè)計(jì)與論證22.系統(tǒng)硬件設(shè)計(jì)32.1系統(tǒng)框圖32.2各模塊電路設(shè)計(jì)32.3電路原理圖及電路介紹63.軟件總體流程圖64.結(jié)語(yǔ)74.1電路調(diào)試及測(cè)試結(jié)果74.2結(jié)論與心得85.參考文獻(xiàn)8附表8摘要:本設(shè)計(jì)給出了以單片機(jī)ST89C52為核心的學(xué)校學(xué)生生活時(shí)間提示系統(tǒng)的根本原理和實(shí)現(xiàn)方案。該系統(tǒng)用LCD1602作為液晶顯示器,用時(shí)鐘芯片DS1302在斷電后仍可顯示正確時(shí)間,配合按鍵可實(shí)現(xiàn)手動(dòng)設(shè)置時(shí)間,同時(shí)實(shí)現(xiàn)鬧鐘提示等各種功能。電壓轉(zhuǎn)換通過(guò)7805實(shí)現(xiàn)9V轉(zhuǎn)換成5V供電路使用。通過(guò)程序的編寫(xiě)與調(diào)試及電路的焊接等工作,最終本設(shè)計(jì)能夠?qū)崿F(xiàn)顯示顯示時(shí)間并可人為調(diào)整時(shí)間及實(shí)現(xiàn)鬧鐘提示等功能的學(xué)校學(xué)生生活時(shí)間提示系統(tǒng)。關(guān)鍵詞:學(xué)校學(xué)生生活時(shí)間提示系統(tǒng)單片機(jī)液晶顯示器1、方案設(shè)計(jì)與論證1.1、設(shè)計(jì)任務(wù)與要求〔一〕、設(shè)計(jì)任務(wù):以單片機(jī)為主控制器,設(shè)計(jì)并制作一套學(xué)校學(xué)生生活時(shí)間提示系統(tǒng)。〔二〕、要求:1.根本要求:〔1〕計(jì)時(shí)和顯示功能〔24小時(shí)制〕,包括時(shí)、分、秒的顯示。〔2〕通過(guò)按鍵設(shè)置當(dāng)前時(shí)間〔時(shí)、分〕?!?〕實(shí)現(xiàn)根本學(xué)生生活時(shí)間提示,規(guī)定如下:06:00起床:聲音提示5秒、停2秒、再提示5秒。22:30熄燈:聲音提示5秒、停2秒、再提示5秒。2.發(fā)揮局部:〔1〕增加整點(diǎn)報(bào)時(shí)功能,整點(diǎn)時(shí)聲音提示10秒,有控制啟動(dòng)和關(guān)閉功能?!?〕增加起床、熄燈時(shí)間調(diào)整時(shí)的聲音提示功能。〔3〕增設(shè)上午4節(jié)課的上下課聲音提示功能,規(guī)定如下:7:50上課,8:35下課;8:45上課,9:30下課;9:50上課,10:35下課;10:45上課,11:30下課;每次聲音提示5秒。1.2、方案設(shè)計(jì)與論證1.2.1單片機(jī)的選擇方案一:采用STC89C52作為微控制器,單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度大,可用軟件編程實(shí)現(xiàn)各種算法和邏輯控制,并且由于其功耗低、體積小、技術(shù)成熟和本錢低等優(yōu)點(diǎn),使其在各個(gè)領(lǐng)域應(yīng)用廣泛。方案二:ATMEL公司生產(chǎn)的AT89CXX系列單片機(jī),其中有8位的單片機(jī),也有16位的單片機(jī)。STC89C52為8位的單片機(jī),它是一種低損耗、高性能的CMOS微處理器,并且可以在線進(jìn)行重復(fù)編程、快速擦除、快速寫(xiě)入程序,能重復(fù)擦除/寫(xiě)入1000次左右,數(shù)據(jù)保存時(shí)間為十年。綜上所述,在本設(shè)計(jì)中,由于本系統(tǒng)對(duì)CPU運(yùn)算速度要求不高,不需要執(zhí)行很復(fù)雜的運(yùn)算,加上本錢上和隊(duì)員各自的技術(shù)特點(diǎn)考慮,考慮到本人對(duì)單片機(jī)的運(yùn)用熟練度和單片機(jī)的功能領(lǐng)域,綜合起來(lái)選STC89C52單片機(jī)作為本設(shè)計(jì)的微控制器較適合本系統(tǒng)的要求。1.2.2LCD液晶顯示模塊的方案比照選擇方案一:顯示的方法有很多種,其中LED數(shù)碼管是常用的一種顯示方法。在這個(gè)設(shè)計(jì)中,可以用LED數(shù)碼管來(lái)顯示相應(yīng)數(shù)字,該設(shè)計(jì)中,數(shù)碼管使用數(shù)量較多,焊接較麻煩。另外在PCB布線過(guò)程中很困難,給設(shè)計(jì)帶來(lái)很不方便的使用。方案二:LCD1602液晶顯示器是一塊價(jià)廉物美的器件,其體積小,控制簡(jiǎn)單,使用方便。它能顯示2行16列的數(shù)字或英文信息,另外連接它的線很少,只要8根數(shù)據(jù)線和3根控制線,這樣給使用帶來(lái)很大的方便,節(jié)約單片機(jī)I/O口,價(jià)格比數(shù)碼管廉價(jià)。綜上所述,在LCD液晶顯示模塊上,選擇方案二中的LCD1602液晶顯示器作為本設(shè)計(jì)的顯示模塊,顯示時(shí)間年、月、日、時(shí)、分、秒。時(shí)鐘電路的選擇方案一:DS1302是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片它可以對(duì)年、月、日、日、時(shí)、分、秒進(jìn)行計(jì)時(shí)且具有閏年補(bǔ)償功能工作電壓寬達(dá)2.5-5.5V。采用三線接口與單片機(jī)進(jìn)行同步通信并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM存放器。DS1302是DS1202的升級(jí)產(chǎn)品與DS1202兼容但增加了主電源和后背電源雙電源引腳同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。方案二:STC89C52有3個(gè)內(nèi)部定時(shí)器中斷因此我們可以直接采用單片機(jī)內(nèi)部定時(shí)器來(lái)實(shí)現(xiàn)年月日時(shí)分秒的計(jì)時(shí)的功能綜合考慮以上兩種方案由于DS1302的高性能低功耗且內(nèi)部自帶RAM可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí)且具有閏年補(bǔ)償功能工作電壓寬編程簡(jiǎn)單有后備電源。所以我們選用DS1302作為時(shí)鐘芯片。2、系統(tǒng)硬件設(shè)計(jì)2.1、系統(tǒng)框圖P0PP0PSTC89C52RSTP2.0-P2.2/〔P2.4-P2.7〕P3.0-3.4XTAL2XTAL1排阻上電復(fù)位手動(dòng)按鍵鬧鐘工作指示燈LCD液晶顯示內(nèi)部時(shí)鐘讀寫(xiě)及使能信號(hào)/〔時(shí)鐘芯片〕單片機(jī)模塊:STC89C52俗稱單片機(jī),是一種帶8K字節(jié)閃爍可編程可檫除只讀存儲(chǔ)器〔FPEROM-FlashProgramableandErasableReadOnlyMemory〕的低電壓,高性能COMOS8的微處理器,使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改良,是的芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。具有以下標(biāo)準(zhǔn)功能:8K字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定時(shí)器,內(nèi)置4KBEEPROM,MAX810復(fù)位電路,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)7向量4級(jí)中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級(jí)中斷結(jié)構(gòu)),全雙工串行口。STC89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。STC89C52內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,引腳RXD和TXD分別是此放大器的輸入端和輸出端。時(shí)鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。電源模塊:由于整個(gè)系統(tǒng)采用的電源電壓只需+5V的電壓,所以采用不可調(diào)的3端穩(wěn)壓器件,用常用的7805就可以滿足系統(tǒng)電源的要求。其中1接整流器輸出的+電壓,2為公共地(也就是負(fù)極),3就是我們需要的正5V輸出電壓。7805三端集成穩(wěn)壓電源內(nèi)部由基準(zhǔn)電壓回路、恒流源、過(guò)流保護(hù)、過(guò)壓保護(hù)、和短路保護(hù)回路等8局部組成,具有低功耗,高效率,紋波系數(shù)小,輸出電壓穩(wěn)定等優(yōu)點(diǎn)。時(shí)間顯示模塊:液晶顯示器是一種功耗極低的被動(dòng)式顯示器件,引腳腳介紹:D0—D7數(shù)據(jù)傳送引腳,VSS為接地線,VDD為電源線,VEE為L(zhǎng)CD驅(qū)動(dòng)電壓調(diào)節(jié),由此可以調(diào)節(jié)顯示亮度。RS為存放器選擇信號(hào),高電平選擇數(shù)據(jù)存放器,RW高電平讀,低電平寫(xiě)。EN使能信號(hào),讀狀態(tài)下高電平有效,寫(xiě)狀態(tài)下下降沿有效。RS連接P2.0,存放器選擇信號(hào)RW連接P2.1,讀寫(xiě)控制信號(hào)線EN連接P2.2,〔4〕鍵盤(pán)控制模塊:五個(gè)按鍵分別是設(shè)置、增加、減少、鬧鐘開(kāi)關(guān)鍵、確認(rèn),通過(guò)與程序結(jié)合可以實(shí)現(xiàn)通行狀態(tài)的改變,通過(guò)手動(dòng)控制開(kāi)關(guān)實(shí)現(xiàn)時(shí)間設(shè)定及鬧鐘功能,即當(dāng)按鍵按下時(shí)有低電平輸入端口。如果想設(shè)置時(shí)間那么先按下設(shè)置鍵,再按加或減最后按下確認(rèn)鍵,如此便實(shí)現(xiàn)了可以手動(dòng)設(shè)置時(shí)間的功能,當(dāng)按下鬧鐘開(kāi)關(guān)時(shí)可實(shí)現(xiàn)鬧鐘的開(kāi)關(guān)。蜂鳴器模塊:蜂鳴器驅(qū)動(dòng)電路一般都包含以下幾個(gè)局部:一個(gè)三極管、一個(gè)蜂鳴器、一個(gè)電阻。1.蜂鳴器發(fā)聲元件,在其兩端施加直流電壓〔有源蜂鳴器〕或者方波〔無(wú)源蜂鳴器〕就可以發(fā)聲,其主要參數(shù)是外形尺寸、發(fā)聲方向、工作電壓、工作頻率、工作電流、驅(qū)動(dòng)方式等。2.三極管三極管Q1起開(kāi)關(guān)作用,其基極的高電平使三極管飽和導(dǎo)通,使蜂鳴器發(fā)聲;而基極低電平那么使三極管關(guān)閉,蜂鳴器停止發(fā)聲。2.3電路原理圖及電路介紹利用proteus畫(huà)好相應(yīng)的硬件電路圖,并把程序燒入軟件仿真,看是否能顯示功能。見(jiàn)附件完整電路圖。電路主要由單片機(jī)STC89C52,LCD1602,7805,時(shí)鐘芯片DS1302,蜂鳴器等組成一個(gè)簡(jiǎn)易的學(xué)校學(xué)生生活時(shí)間提示系統(tǒng)。該電路具有計(jì)時(shí)、顯示及定時(shí)功能,還可以通過(guò)按鍵手動(dòng)設(shè)置設(shè)定鬧鐘提示時(shí)間,音提示5秒、停2秒、再提示5秒。時(shí)間顯示LCD602輸出端分別和單片機(jī)的P0.0-0.7口連接,讀寫(xiě)及使能信號(hào)分別和單片機(jī)的P2.0,P2.1,P2.2口連接。排阻RESPACK-8接在51單片機(jī)的P0口,因?yàn)镻0口內(nèi)部沒(méi)有上拉電阻,不能輸出高電平,所以要接上拉電阻。是有一個(gè)實(shí)時(shí)時(shí)鐘/31字節(jié)靜態(tài)通過(guò)簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘/日歷電路提供年、月、日、時(shí)、分、秒的信息可自動(dòng)調(diào)整時(shí)鐘操作。接P2.5,實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳;DS1302_IO接P2.6,實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳;接P2.7,實(shí)時(shí)時(shí)鐘復(fù)位線引腳,VCC1接備用電源。蜂鳴器及其驅(qū)動(dòng)電路單片機(jī)的和單片機(jī)的P2.4口連接,單片機(jī)驅(qū)動(dòng)蜂鳴器時(shí),三極管工作在開(kāi)關(guān)狀態(tài),就像用單片機(jī)控制開(kāi)關(guān),再由開(kāi)關(guān)去控制蜂鳴器一樣,只是將開(kāi)關(guān)換成了三極管。電路中設(shè)有五個(gè)開(kāi)關(guān),分別是確認(rèn)、設(shè)置、加、減、鬧鐘開(kāi)關(guān),分別和單片機(jī)的P3.2、P3.3、P3.5、P3.6、P3.7端口連接,通過(guò)手動(dòng)控制開(kāi)關(guān)實(shí)現(xiàn)時(shí)間設(shè)定及鬧鐘功能,P3.2、P3.3分別是單片機(jī)外部中斷0和外部中斷1的端口,設(shè)置它低電平有效,即當(dāng)按鍵按下時(shí)有低電平輸入端口。如果想改變狀態(tài)那么先按下?tīng)顟B(tài)鍵,再按加或減最后按下確認(rèn)鍵。如果想改變時(shí)間那么先按下時(shí)間鍵然后按加或減最后按確認(rèn)鍵。設(shè)定鬧鐘時(shí)間,通過(guò)蜂鳴器發(fā)出提示音。3、系統(tǒng)軟件設(shè)計(jì)3.1、軟件總體流程圖開(kāi)始開(kāi)始Lcd初始化時(shí)間初始化1302初始化判斷是否有按鍵按下Yes修改修改時(shí)間修改鬧時(shí)修改日期調(diào)用時(shí)間修改時(shí)間函數(shù)NO調(diào)用時(shí)間修改函數(shù)調(diào)用日期修改函數(shù)調(diào)用功能函數(shù)鬧鐘,作息提示整點(diǎn)報(bào)時(shí)再按控制鍵結(jié)束4、結(jié)語(yǔ)4.1、電路調(diào)試及測(cè)試結(jié)果利用Proteus繪制出相應(yīng)硬件電路后進(jìn)行仿真,出現(xiàn)液晶顯示無(wú)法正常顯示的問(wèn)題。經(jīng)過(guò)思考和查閱的資料發(fā)現(xiàn)STC89C52的P0在進(jìn)高電平時(shí)沒(méi)有接上拉電阻導(dǎo)致LCD1602無(wú)法正常顯示時(shí)間。修改電路后〔P0口接上拉電阻〕燒入程序后,程序正常運(yùn)行,LCD1602準(zhǔn)確的顯示。用Proteus仿真能夠正確的現(xiàn)實(shí)時(shí)間,但燒入學(xué)習(xí)板出現(xiàn)亂碼現(xiàn)實(shí)不能正常工作。經(jīng)過(guò)反復(fù)檢查及思考發(fā)現(xiàn)仿真軟件上的硬件電路與學(xué)習(xí)板上的硬件電路不一致無(wú)法對(duì)應(yīng)起來(lái)。電路焊好后,將程序載入單片機(jī),然后在實(shí)驗(yàn)箱上調(diào)+9V的電源,由正負(fù)極分別引出一根線,正的與7805的輸入端相連,負(fù)的與電路板引出的地線連接。經(jīng)過(guò)屢次修改程序和調(diào)試電路,最終測(cè)試結(jié)果和預(yù)期的一致。最后根據(jù)學(xué)習(xí)板的硬件電路修改相應(yīng)程序及仿真軟件上的硬件電路,最終現(xiàn)實(shí)了功能。4.2、結(jié)論與心得通過(guò)這次電子設(shè)計(jì)大賽,在設(shè)計(jì)過(guò)程中我們先后利用keil軟件進(jìn)行編程、Proteus進(jìn)行仿真,最后再利用學(xué)習(xí)板進(jìn)行檢查看程序是否能顯示其功能。在過(guò)程中讓我進(jìn)一步深刻的學(xué)習(xí)各種軟件的利用以及各種軟件給我們帶來(lái)的便利。特別是proteus在沒(méi)有實(shí)物的情況下進(jìn)行仿真進(jìn)行程序的檢查看是否能現(xiàn)實(shí)功能。該設(shè)計(jì)通過(guò)單片機(jī)STC89C52做CPU進(jìn)行總的控制,基于時(shí)鐘芯片DS1302產(chǎn)生時(shí)間,利用LCD1602進(jìn)行液晶顯示的一個(gè)簡(jiǎn)易的數(shù)字鐘。LCD1602能夠?qū)δ?、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí)及顯示。通過(guò)設(shè)計(jì)后能夠熟練的掌握時(shí)鐘芯片DS1302、LCD1620、STC89C52的的各個(gè)引腳及功能,并能夠掌握和運(yùn)用這幾個(gè)芯片。在設(shè)計(jì)開(kāi)始,問(wèn)題就接踵而至,雖然做過(guò)些課程設(shè)計(jì),參加過(guò)實(shí)踐,這次電子設(shè)計(jì)大賽使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)效勞,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。許多電路不管簡(jiǎn)單還是復(fù)雜,第一次搭建,調(diào)試,單片機(jī)編程序的時(shí)候總是讓人頭疼,但是有過(guò)一次經(jīng)驗(yàn)就好了,以后再碰到類似的電路就熟練得多。多動(dòng)手也很重要,不要只對(duì)著圖紙或者資料看,好多電路都要親自調(diào)試才懂。正所謂時(shí)間出真知,怕麻煩是不可取的,多動(dòng)手多時(shí)間,理論與實(shí)踐相結(jié)合,做得多經(jīng)驗(yàn)就多了。5.參考文獻(xiàn)[1]樓然苗、李光飛:《單片機(jī)課程設(shè)計(jì)指導(dǎo)》,北京航空航天大學(xué)出版社[2]李珍、付植桐:《單片機(jī)原理與應(yīng)用技術(shù)》,清華大學(xué)出版社[3]李廣弟等.單片機(jī)根底[M].北京航空航天出版社,2001.[4]王東峰等.單片機(jī)C語(yǔ)言應(yīng)用100例[M].電子工業(yè)出版社,2023.[5]陳海宴.51單片機(jī)原理及應(yīng)用[M].北京航空航天大學(xué)出版社,2023.[6]許珉、毛小波:《單片機(jī)原理及應(yīng)用》,中國(guó)電力出版社附表:〔1〕完整電路圖:〔2〕元器件清單列表:名稱規(guī)格數(shù)量〔個(gè)〕萬(wàn)用板9*15cm17805〔穩(wěn)壓〕L78051芯片底座40腳1LCD1602黃綠屏〔5V〕1排阻(A09-103)10K1LED燈5mm3蜂鳴器1.5V無(wú)源1按鍵6DS1302帶電池CR2032(帶晶振32.768MHz〕1電池9V1三極管S8050NPN4STC89C521〔3〕源程序清單:#include<reg52.h>#include<stdio.h>#include<intrins.h>typedefunsignedcharBYTE;typedefbitBOOL;unsignedcharri_con=0,hour_con=1; // ri_con鬧鐘開(kāi)關(guān)開(kāi)啟1關(guān)閉0unsignedcharyear=13,month=6,day=15,hour=12,minute=30,second=30;unsignedcharri_hour=10,ri_minute=0,ri_second=0,state=0;//鬧鐘時(shí)間現(xiàn)在狀態(tài)unsignedchardate[]="date13-06-15";unsignedchartime[]="time12:30:30";/********************使用引腳定義**************************/sbitbeep=P1^0; //蜂鳴器引腳sbitwork_led=P1^1; //工作指示燈sbitring_led=P1^2; //鬧鐘開(kāi)關(guān)指示燈sbithour_led=P1^3; //整點(diǎn)報(bào)時(shí)開(kāi)關(guān)指示燈sbitbutton_CON=P3^0;sbitbutton_ADD=P3^1;sbitbutton_DEC=P3^2;sbitbutton_COLCK=P3^3;sbitok=P3^4;sbitSCLK=P2^6;//位定義1302芯片的接口,時(shí)鐘輸出端口定義在P2.6引腳sbitDATA=P2^7;//位定義1302芯片的接口,數(shù)據(jù)輸出端定義在P2.7引腳sbitRST=P2^5;//位定義1302芯片的接口,復(fù)位端口定義在P2.5引腳/****************************lcd引腳定義************************/sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EP=P2^2;voiddelay(intms){//延時(shí)子程序inti;while(ms--){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}/***************LCD************************//*****************測(cè)試LCD忙碌狀態(tài)************************/BOOLlcd_bz(){BOOLresult;LCD_RS=0;LCD_RW=1;LCD_EP=1;_nop_();_nop_();_nop_();_nop_();result=(BOOL)(P0&0x80);LCD_EP=0;returnresult;}/*********************寫(xiě)入指令數(shù)據(jù)到LCD*********************************/voidlcd_wcmd(BYTEcmd){while(lcd_bz());LCD_RS=0;LCD_RW=0;LCD_EP=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP=1;_nop_();_nop_();_nop_();_nop_();LCD_EP=0;}/********************設(shè)定顯示位置*******************************/voidlcd_pos(BYTEpos){lcd_wcmd(pos|0x80);}/***********************寫(xiě)入字符顯示數(shù)據(jù)到LCD********************************/voidlcd_wdat(BYTEdat){while(lcd_bz());LCD_RS=1;LCD_RW=0;LCD_EP=0;P0=dat;_nop_();_nop_();_nop_();_nop_();LCD_EP=1;_nop_();_nop_();_nop_();_nop_();LCD_EP=0;}/*************************LCD初始化設(shè)定**********************************/voidlcd_init(){lcd_wcmd(0x38);//16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)delay(1);lcd_wcmd(0x0c);//顯示開(kāi),關(guān)光標(biāo)delay(1);lcd_wcmd(0x06);//移動(dòng)光標(biāo)delay(1);lcd_wcmd(0x01);//去除LCD的顯示內(nèi)容delay(1);}/*******************顯示函數(shù)************************/voidstr_display(BYTEmeg[],BYTEpostion,BYTEdel){ BYTEi=0;lcd_pos(postion); while(meg[i]!='\0'){lcd_wdat(meg[i]);i++; if(del!=0)delay(del);}}/*****************lcd初始化結(jié)束**************************//*******************DS1302*****************************//**********************************延時(shí)假設(shè)干數(shù)據(jù)*********************************/voiddelaynus(unsignedcharn){unsignedchari;for(i=0;i<n;i++);}/***************************向1302寫(xiě)一個(gè)字節(jié)數(shù)據(jù)***************************************/voidWrite1302(unsignedchardat){unsignedchari;SCLK=0;//拉低SCLK,為脈沖上升沿寫(xiě)入數(shù)據(jù)做好準(zhǔn)備delaynus(2);//稍微等待,使硬件做好準(zhǔn)備for(i=0;i<8;i++)//連續(xù)寫(xiě)8個(gè)二進(jìn)制位數(shù)據(jù){ DATA=dat&0x01;//取出dat的第0位數(shù)據(jù)寫(xiě)入1302低位在前,高位在后 delaynus(2);//稍微等待,使硬件做好準(zhǔn)備 SCLK=1;//上升沿寫(xiě)入數(shù)據(jù) delaynus(2);//稍微等待,使硬件做好準(zhǔn)備 SCLK=0;//重新拉低SCLK,形成脈沖 dat>>=1;//將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫(xiě)入下一個(gè)數(shù)據(jù)位 }}/*******************根據(jù)命令字,向1302寫(xiě)一個(gè)字節(jié)數(shù)******************************/voidWriteSet1302(unsignedcharCmd,unsignedchardat){ RST=0;//禁止數(shù)據(jù)傳遞SCLK=0;//確保寫(xiě)數(shù)居前SCLK被拉低 RST=1;//啟動(dòng)數(shù)據(jù)傳輸 delaynus(2);//稍微等待,使硬件做好準(zhǔn)備 Write1302(Cmd);//寫(xiě)入命令字 Write1302(dat);//寫(xiě)數(shù)據(jù) SCLK=1;//將時(shí)鐘電平置于高電平狀態(tài) RST=0;//禁止數(shù)據(jù)傳遞}/*******************************從1302讀一個(gè)字節(jié)數(shù)據(jù)***********************************/unsignedcharRead1302(void){unsignedchari,dat; delaynus(2);//稍微等待,使硬件做好準(zhǔn)備 for(i=0;i<8;i++)//連續(xù)讀8個(gè)二進(jìn)制位數(shù)據(jù) { dat>>=1; if(DATA==1)//如果讀出的數(shù)據(jù)是1 dat|=0x80;//將1取出,寫(xiě)在dat的最高位 SCLK=1;//將SCLK置于高電平,為下降沿讀出 delaynus(2);//稍微等待 SCLK=0;//拉低SCLK,形成脈沖下降沿 delaynus(2);//稍微等待 } returndat;//將讀出的數(shù)據(jù)返回}/*********************根據(jù)命令字,從1302讀取一個(gè)字節(jié)數(shù)據(jù)*******************************/unsignedcharReadSet1302(unsignedcharCmd){unsignedchardat;RST=0;//拉低RSTSCLK=0;//確保寫(xiě)數(shù)居前SCLK被拉低RST=1;//啟動(dòng)數(shù)據(jù)傳輸Write1302(Cmd);//寫(xiě)入命令字dat=Read1302();//讀出數(shù)據(jù)SCLK=1;//將時(shí)鐘電平置于狀態(tài)RST=0;//禁止數(shù)據(jù)傳遞returndat;//將讀出的數(shù)據(jù)返回}/*********************1302進(jìn)行初始化設(shè)置*************************************/voidInit_DS1302(void){ unsignedcharflag;flag=ReadSet1302(0x81); if(flag&0x80) {//判斷時(shí)鐘芯片是否關(guān)閉WriteSet1302(0x8E,0x00);//根據(jù)寫(xiě)狀態(tài)存放器命令字,寫(xiě)入不保護(hù)指令 WriteSet1302(0x80,((55/10)<<4|(55%10)));//根據(jù)寫(xiě)秒存放器命令字,寫(xiě)入秒的初始值 WriteSet1302(0x82,((59/10)<<4|(59%10)));//根據(jù)寫(xiě)分存放器命令字,寫(xiě)入分的初始值 WriteSet1302(0x84,((23/10)<<4|(23%10)));//根據(jù)寫(xiě)小時(shí)存放器命令字,寫(xiě)入小時(shí)的初始值 WriteSet1302(0x86,((18/10)<<4|(18%10)));//根據(jù)寫(xiě)日存放器命令字,寫(xiě)入日的初始值 WriteSet1302(0x88,((6/10)<<4|(6%10)));//根據(jù)寫(xiě)月存放器命令字,寫(xiě)入月的初始值 WriteSet1302(0x8c,((9/10)<<4|(9%10)));//根據(jù)寫(xiě)年存放器命令字,寫(xiě)入年的初始值 WriteSet1302(0x90,0xa5);//翻開(kāi)充電功能選擇2K電阻充電方式 WriteSet1302(0x8E,0x80); //根據(jù)寫(xiě)狀態(tài)存放器命令字,寫(xiě)入保護(hù)指令}}/********************1302調(diào)用函數(shù)***************************************************/ voidget_date_time(void){ unsignedchartemp=0; unsignedcharReadValue=0;ReadValue=ReadSet1302(0x81);//從秒存放器讀數(shù)據(jù) temp=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//將讀出數(shù)據(jù)轉(zhuǎn)化 if(temp<60||temp>0)second=temp; ReadValue=ReadSet1302(0x83);//從分存放器讀temp=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//將讀出數(shù)據(jù)轉(zhuǎn)化 if(temp<60||temp>0)minute=temp;ReadValue=ReadSet1302(0x85);//從小時(shí)存放器讀temp=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//將讀出數(shù)據(jù)轉(zhuǎn)化 if(temp<=24||temp>0)hour=temp;ReadValue=ReadSet1302(0x87);//從天存放器讀temp=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//將讀出數(shù)據(jù)轉(zhuǎn)化 if(temp<31||temp>0)day=temp; ReadValue=ReadSet1302(0x89);//從月存放器讀temp=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//將讀出數(shù)據(jù)轉(zhuǎn)化 if(temp<31||temp>0)month=temp; ReadValue=ReadSet1302(0x8d);//從年存放器讀temp=((ReadValue&0xf0)>>4)*10+(ReadValue&0x0F);//將讀出數(shù)據(jù)轉(zhuǎn)化 if(temp<20||temp>12)year=temp; //將日期變成字符型并加到數(shù)組上去date[12]="date13-6-15";time[13]="time12:30:30"; date[5]=year/10+'0'; date[6]=year%10+'0'; date[8]=month/10+'0'; date[9]=month%10+'0'; date[11]=day/10+'0'; date[12]=day%10+'0'; time[5]=hour/10+'0'; time[6]=hour%10+'0'; time[8]=minute/10+'0'; time[9]=minute%10+'0'; time[11]=second/10+'0'; time[12]=second%10+'0'; }/************************DS1302END**********************************//****************按鍵處理程序*********************/BYTEpush_button(void){BYTEi=0;button_CON=1;button_ADD=1;button_DEC=1;button_COLCK=1;ok=1;if(button_CON==0||button_ADD==0||button_DEC==0||button_COLCK==0||ok==0){delay(10);if(button_CON==0){while(button_CON==0){button_CON=1;delay(10);i++;}//等待按鍵松開(kāi)if(i>=30)return6;elsereturn1; } //長(zhǎng)按鍵,進(jìn)入時(shí)鐘修改模式elseif(button_ADD==0){while(button_ADD==0){button_ADD=1;_nop_();}//等待按鍵松開(kāi)return2; }elseif(button_DEC==0){while(button_DEC==0){button_DEC=1;_nop_();}//等待按鍵松開(kāi)return3; }elseif(button_COLCK==0){while(button_COLCK==0){button_COLCK=1;delay(10);i++;}//等待按鍵松開(kāi)if(i>=30)return7;elsereturn4; } //長(zhǎng)按鍵,進(jìn)入鬧鐘修改模式elseif(ok==0){while(ok==0){ok=1;_nop_();}//等待按鍵松開(kāi)return5; }elsereturn0;}return0;}/*******************時(shí)間設(shè)置****************************/ /********************************************** 鍵值1修改時(shí)間2+3- 4鬧鐘開(kāi)關(guān)5ok6日期修改7鬧鐘時(shí)間修改 **********************************************/voidmodify(BYTEcon){ BYTEok=0,count=0,KEY=0; lcd_wcmd(0x01); //去除lcd的內(nèi)容 /************修改時(shí)間*****************/ if(con==1) {str_display("changetime",0,0); str_display(time,0x40,0);//顯示while(1){ KEY=push_button(); switch(KEY){case1:count++;break;//小時(shí)分鐘秒轉(zhuǎn)換 case2:if(count==0){hour++;if(hour>=24)hour=0;}elseif(count==1){minute++;if(minute>=60)minute=0;}elseif(count==2){second++;if(second>=60)second=0;}break; case3:if(count==0){hour--;if(hour>=24)hour=23;}elseif(count==1){minute--;if(minute>=60)minute=59;}elseif(count==2){second--;if(second>=60)second=59;}break; case4:break; case5: ok=1;default:if(count==3)count=0;break; }//寫(xiě)入時(shí)鐘芯片if(KEY==2||KEY==3){WriteSet1302(0x8E,0x00);//根據(jù)寫(xiě)狀態(tài)存放器命令字,寫(xiě)入不保護(hù)指令WriteSet1302(0x80,((second/10)<<4|(second%10)));//根據(jù)寫(xiě)秒存放器命令字,寫(xiě)入秒的初始值 WriteSet1302(0x82,((minute/10)<<4|(minute%10)));//根據(jù)寫(xiě)分存放器命令字,寫(xiě)入分的初始值 WriteSet1302(0x84,((hour/10)<<4|(hour%10)));//根據(jù)寫(xiě)小時(shí)存放器命令字,寫(xiě)入小時(shí)的初始值 WriteSet1302(0x8E,0x80); //根據(jù)寫(xiě)狀態(tài)存放器命令字,寫(xiě)入保護(hù)指令 get_date_time();str_display(time,0x40,10);//顯示 }if(ok==1)break; } } /************修改日期*******************/ elseif(con==6){ str_display("changedata",0,0); str_display(date,0x40,0);//顯示while(1){ KEY=push_button(); switch(KEY){case1:count++;break;//年月日 case2:if(count==0){year++;if(year>=100)year=0;}elseif(count==1){month++;if(month>12)month=0;}elseif(count==2){day++;if(day>31)day=0;}break; case3:if(count==0){year--;if(hour>=100)year=99;}elseif(count==1){month--;if(month>12)month=12;}elseif(count==2){day--;if(day>31)day=31;}break; case4:break; case5: ok=1;default:if(count==3)count=0;break; }//寫(xiě)入時(shí)鐘芯片if(KEY==2||KEY==3){ WriteSet1302(0x8E,0x00);//根據(jù)寫(xiě)狀態(tài)存放器命令字,寫(xiě)入不保護(hù)指令 WriteSet1302(0x86,((day/10)<<4|(day%10)));//根據(jù)寫(xiě)日存放器命令字,寫(xiě)入日的初始值 WriteSet1302(0x88,((month/10)<<4|(month%10)));//根據(jù)寫(xiě)月存放器命令字,寫(xiě)入月的初始值 WriteSet1302(0x8c,((year/10)<<4|(year%10)));//根據(jù)寫(xiě)年存放器命令字,寫(xiě)入年的初始值 WriteSet1302(0x8E,0x80); //根據(jù)寫(xiě)狀態(tài)存放器命令字,寫(xiě)入保護(hù)指令 get_date_time();str_display(date,0x40,10);//顯示 }if(ok==1)break; } } /************修改鬧鐘*******************/ elseif(con==7){ str_display("changeri_time",0,0); str_display("06:00",0x43,0);//顯示while(1){ KEY=push_button(); switch(KEY){case1:count++;break;//小時(shí)分鐘秒轉(zhuǎn)換 case2:if(count==0){ri_hour++;if(ri_hour>=24)ri_hour=0;}elseif(count==1){ri_minute++;if(ri_minute>=60)ri_minute=0;}break; case3:if(count==0){ri_hour--;if(ri_hour>=24)ri_hour=23;}elseif(count==1){ri_minute--;if(ri_minute>=60)ri_minute=59;}break; case4:break; case5: ok=1;default:if(count==2)count=0;break; }//顯示lcd_pos(0x43);lcd_wdat(ri_hour/10+'0'); lcd_pos(0x44);lcd_wdat(ri_hour%10+'0'); lcd_pos(0x46); lcd_wdat(ri_minute/10+'0'); lcd_pos(0x47);lcd_wdat(ri_minute%10+'0');if(ok==1)break; } }lcd_wcmd(0x01); //去除lcd的內(nèi)容}/**********************按鍵處理程序****************************/ // state0空閑 1在執(zhí)行鬧鈴2在執(zhí)行整點(diǎn)報(bào)時(shí)/*****************鬧鐘整點(diǎn)報(bào)時(shí)處理程序**************************/voidring(void){ if(ri_con==1){ //鬧鐘 if(ri_hour==hour&&ri_minute==minute&&state==0&&second==0){ ri_second=second; state=1; beep=1; }if(ri_hour==hour&&ri_minute==minute&&state==1){ if(second==ri_second+5)beep=0; elseif(second==ri_second+7)beep=1; elseif(second>=ri_second+12){beep=0;state=0;} } if(((22==hour&&30==minute)||(6==hour&&0==minute))&&state==0&&second==0){ //早晚提示 ri_second=second; state=4; beep=1; } if(state==4){ if(second==ri_second+5)bee
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶智能工程職業(yè)學(xué)院《高級(jí)視唱》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北中醫(yī)藥高等專科學(xué)?!督ㄖv史與文化》2023-2024學(xué)年第一學(xué)期期末試卷
- 福建對(duì)外經(jīng)濟(jì)貿(mào)易職業(yè)技術(shù)學(xué)院《英美文學(xué)及選讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江省三校2025屆學(xué)業(yè)水平考試化學(xué)試題模擬卷(九)含解析
- 南充科技職業(yè)學(xué)院《倫理學(xué)原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安航空職業(yè)技術(shù)學(xué)院《比較政府體制》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南石油化工職業(yè)技術(shù)學(xué)院《微波工程基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 臨沂職業(yè)學(xué)院《大地測(cè)量學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年貴州省黔西南興仁縣初三第三次畢業(yè)診斷及模擬測(cè)試英語(yǔ)試題含答案
- 4《 蒸蛋羹》(教學(xué)設(shè)計(jì))人教版勞動(dòng)三年級(jí)下冊(cè)
- 數(shù)字孿生機(jī)場(chǎng)數(shù)據(jù)融合-全面剖析
- (二模)咸陽(yáng)市2025年高考模擬檢測(cè)(二)語(yǔ)文試卷(含答案)
- 第四單元 第2課時(shí) 三位數(shù)加三位數(shù)2(連續(xù)進(jìn)位加法)(教學(xué)設(shè)計(jì))-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)人教版
- 融資部業(yè)績(jī)考核及獎(jiǎng)勵(lì)辦法
- 建筑工地值班制度
- 《中央八項(xiàng)規(guī)定精神學(xué)習(xí)教育》專項(xiàng)講座
- 2025年交管12123學(xué)法減分考試題庫(kù)及答案
- 環(huán)境政策協(xié)同效應(yīng)-第1篇-深度研究
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 湖南省對(duì)口招生考試醫(yī)衛(wèi)專業(yè)試題(2024-2025年)
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計(jì)-畢業(yè)論文
評(píng)論
0/150
提交評(píng)論