萬年歷單片機_第1頁
萬年歷單片機_第2頁
萬年歷單片機_第3頁
萬年歷單片機_第4頁
萬年歷單片機_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.z單片機萬年歷設(shè)計報告題目:基于51單片機萬年歷設(shè)計院〔系〕:機械與電子工程學(xué)院班級:09應(yīng)用電子技術(shù)2班學(xué)生名:指導(dǎo)教師:時間:2011--.z目錄摘要1第一章緒論3第二章設(shè)計要求與方案論證42.1設(shè)計要求42.1.1根本要求4發(fā)揮局部42.2系統(tǒng)根本方案選擇和論證52.2.1芯片的選擇52.2.2顯示模塊選擇方案和論證52.2.3時鐘信號的選擇方案和論證62.3電路設(shè)計最終方案決定6第三章系統(tǒng)的硬件設(shè)計與實現(xiàn)73.1萬年歷電路設(shè)計框圖73.2系統(tǒng)硬件概述73.3硬件電路構(gòu)造的設(shè)計83.3.1單片機主控制模塊的設(shè)計83.3.2顯示模塊的設(shè)計8時間調(diào)整電路的設(shè)計103.3.4主控芯片原理及其說明103.3.5復(fù)位電路的選擇13第四章系統(tǒng)的軟件設(shè)計14第五章系統(tǒng)調(diào)試165.1軟件調(diào)試165.2硬件調(diào)試165.3實物調(diào)試16結(jié)論17設(shè)備選擇18參考文獻18附錄19-.z摘要萬年歷是對年、月、日、周、時、分、秒,數(shù)字顯示及到時提醒的計時裝置,廣泛用于個人家庭,車站,碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的開展和石英晶體振蕩器的廣泛應(yīng)用,使得萬年歷的精度,遠遠超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便。最常見的數(shù)字鐘通常使用單片機模塊控制,一種用單片機原理實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。本次設(shè)計就是通過用單片機為主控制,通過電路仿真而實現(xiàn)。首先使用Proteus7Professional軟件進展繪制硬件電路圖,用keil軟件進展編程與調(diào)試,最終生成he*文件,傳入單片機內(nèi)部,從而實現(xiàn)仿真效果。此次設(shè)計的萬年歷具有顯示年、月、日、周、時、分、秒及對各日期與時間的調(diào)整、校正功能。整個時鐘通過簡易的鍵盤來實現(xiàn)各個功能,界面簡潔、直觀、易于操作。關(guān)鍵詞:萬年歷、仿真、單片機、Proteus7Professional、keilAbstractCalendaristheyear,month,day,week,hours,minutes,seconds,digitaldisplayandtoremindthetimingdevice,widelyusedforpersonalfamily,stations,terminalsandotherpublicplaces,theofficehasbeeessentialdailynecessitiesoflife

,becausethedevelopmentofdigitalintegratedcircuitsandthee*tensiveapplicationofquartzcrystaloscillators,makingPrecisionofcalendar,farmorethanold-fashionedclocks,digitalwatchesandlivingtothepeoplehasbroughtgreatconvenience.

Themostmonsinglechipmodulestypicallyusedigitalclockcontrol,atheorywithasinglechiptoachievethehours,minutes,seconds,timingdevices,paredwiththemechanicalclockhasahigheraccuracyandintuitive,andnomechanicaldevices,withmoremore

longlife,ithasbeenwidelyused.

Thedesignisbyusingamicrocontroller-basedcontrol,achievedthroughcircuitsimulation.

Proteus7Professionalsoftwareisthefirsttousethehardwarecircuitdiagramdrawnusingkeilsoftwareprogramminganddebuggingtheresultinghe*file,theininginternalmicrocontroller,inordertoachievesimulationresults.

Thedesignofthecalendarwithshowsyear,month,day,week,hours,minutes,secondsanddateandtimeofeachadjustment,calibration.

Theclockthroughasimplekeyboardtorealizevariousfunctions,theinterfacesimple,intuitive,easytooperate.Keywords:calendar,simulation,singlechip,Proteus7Professional,keil第一章緒論20世紀末,單片機技術(shù)獲得了飛速的開展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的開展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。時間對人們來說總是則珍貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時間。忘記了要做的事情,當(dāng)事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。目前,單片機正朝著高性能和多品種方向開展趨勢將是進一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面開展。下面是單片機的主要開展趨勢。單片機應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計思想和設(shè)計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大局部功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。單片機模塊中最常見的是萬年歷,萬年歷是一種用單片機原理實現(xiàn)年、月、日、周、時、分、秒,計時的裝置,與機械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。萬年歷是采用單片機原理實現(xiàn)對年、月、日、周、時、分、秒,數(shù)字顯示及到時提醒的計時裝置,廣泛用于個人家庭,車站,碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的開展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠遠超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時播送、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為根底的。因此,研究數(shù)字時鐘及擴大其應(yīng)用,有著非?,F(xiàn)實的意義。第二章設(shè)計要求與方案論證2.1設(shè)計要求根本要求〔1〕在不采用專用時鐘模塊的前提下,設(shè)計并制作萬年歷。〔2〕準(zhǔn)確顯示:時、分、秒〔24小時制〕〔3〕顯示星期〔4〕顯示公歷〔5〕時間、日期、星期可調(diào)節(jié)〔6〕斷電記憶功能發(fā)揮局部〔1〕鬧鐘功能〔2〕顯示陰歷〔3〕顯示24節(jié)氣〔4〕其他2.2系統(tǒng)根本方案選擇和論證本時鐘的設(shè)計具體有兩種方法。一是通過單純的數(shù)字電路來實現(xiàn);二是使用單片機來控制實現(xiàn)。本次設(shè)計選取了較為簡單的單片機控制;而選擇這一方法后還要進展各個芯片的選擇。以下是我在這次設(shè)計中所用的方案。芯片的選擇方案一:采用AT89C51芯片,其為高性能CMOS8位單片機,該芯片內(nèi)含有4kbytes的可反復(fù)擦寫的只讀程序存儲器〔PEROM〕、128bytes的隨機存取數(shù)據(jù)存儲器〔RAM〕、32位可編程I/O口線、2個16位定時/計數(shù)器、6個中斷源、可編程串行UART通道及低功耗空閑和掉電模式,但是由于AT89C51芯片可擦寫的空間不夠大,且中斷源提供的較小,為防止運行過程中出現(xiàn)不必要的問題,我們不選用AT89C51。方案二:采用AT89C52芯片,它除了具備AT89C51的所有功能與部件外,其最大的優(yōu)勢就是AT89C52提供了8K字節(jié)可擦寫Flash閃速存儲器空間、8個中斷源、及256*8字節(jié)內(nèi)部存儲器〔RAM〕,解決了我們對可反復(fù)擦寫的Flash閃速存儲器空間大小與中斷源的不夠問題的擔(dān)憂。顯示模塊選擇方案和論證方案一:采用LED數(shù)碼管顯示,顯示較為清楚,且經(jīng)濟實惠,直觀易懂,且在軟件實現(xiàn)上也較容易,為實現(xiàn)其功能也比擬容易。方案二:采用LCD,電路比擬簡單,雖然在軟件設(shè)計上也相對簡單,具有低功耗功能,但程序比擬繁瑣,難以設(shè)計。因此,在設(shè)計中我采用的顯示模塊是LED數(shù)碼管顯示。時鐘信號的選擇方案和論證方案一:直接采用單片機定時計數(shù)器提供的秒信號,使用程序?qū)崿F(xiàn)年、月、日、周、時、分、秒計數(shù)。采用此種方案可減少芯片的使用,節(jié)約本錢,實現(xiàn)的時間誤差較小,在軟件中比擬容易仿真,但程序設(shè)計較為復(fù)雜。方案二:采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M展計數(shù),而且精度高,256位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V*圍內(nèi),2.5V時耗電小于300nA。且硬件電路連接較為簡單,程序設(shè)計容易實現(xiàn)。2.3電路設(shè)計最終方案決定綜上各方案所述,并且經(jīng)過我們隊友的多番討論,對此次萬年歷的方案選定為:采用AT89C52作為主控制系統(tǒng);并由單片機定時計數(shù)器直接提供時鐘的秒信號;LED數(shù)碼管作為顯示電路,來實現(xiàn)本次設(shè)計的所有功能。第三章系統(tǒng)的硬件設(shè)計與實現(xiàn)3.1萬年歷電路設(shè)計框圖晶振電路開關(guān)調(diào)整時間局部單片機晶振電路開關(guān)調(diào)整時間局部單片機AT89C51四位數(shù)碼管顯示局部數(shù)碼管段選局部四位數(shù)碼管顯示局部數(shù)碼管段選局部復(fù)位電路復(fù)位電路三八譯碼器,擴展位選局部三八譯碼器,擴展位選局部圖〔3-1〕電路設(shè)計框圖3.2系統(tǒng)硬件概述本設(shè)計用AT89C51作為核心控制局部,具有在線編程功能,低功耗,能在3V超低壓工作;時鐘電路也由AT89C52單片機提供,減少芯片的使用,節(jié)約本錢,它可以對年、月、日、周、日、時、分、秒進展計時,具有閏年補償功能。外接晶振電路與復(fù)位電路,74LS138作為位選擴展電路,P0口接七個開關(guān)作為時間調(diào)整局部,以兩個四位數(shù)碼管作為顯示局部,開關(guān)控制顯示時間與日期,P2口作為段選,P1口作為位選局部。具體框圖如圖〔3-1〕所示。3.3硬件電路構(gòu)造的設(shè)計單片機主控制模塊的設(shè)計此次單片機數(shù)字時鐘的設(shè)計采用AT89C52為主控制芯片,并由其定時器提供時鐘,利用LED數(shù)碼管進展時間按顯示。下列圖為用Proteus軟件畫的總原理圖:圖〔3-3-1〕仿真總電路圖顯示模塊的設(shè)計LED數(shù)碼管分為共陰和共陽兩種,以利用AT89C51的P2口作為LED顯示的段選局部,以P1口的P1.0、P1.1、P1.2、三個口作為顯示局部的位選,通過三八譯碼器擴展為八位的位選分別接在兩個四位數(shù)碼管的位選局部。詳細電路圖如〔3-3-2〕兩圖所示:圖〔3-3-2〕時間顯示圖〔3-3-2〕月份顯示時間調(diào)整電路的設(shè)計采用按鍵設(shè)計,獨立式按鍵直接與單片機I/O口相連構(gòu)成鍵盤,每個按鍵不會相互影響,按下時間/星期鍵兩個四位數(shù)碼管顯示時間和星期,按下年/月/日鍵兩個數(shù)碼管顯示日期,按下調(diào)整鍵可以對時間和日期進展調(diào)節(jié),值加鍵表示加,值減鍵表示減,換位表示選擇所要調(diào)節(jié)的位置,確認按鍵按下,時間調(diào)節(jié)完畢。所連線路和單片機接口仿真圖如圖3所示:圖〔3-3-3〕按鍵電路主控芯片原理及其說明1主控制芯片AT89C52的原理及說明AT89C52是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位單片機,片內(nèi)含8kbytes的可反復(fù)擦寫的只讀程序存儲器〔PEROM〕和藹可親256bytes的隨機存取數(shù)據(jù)存儲器〔RAM〕,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),與標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及8052產(chǎn)品引腳兼容,片內(nèi)置通用8位中央處理器〔CPU〕和Flash存儲單元,功能強大AT89C52單片機適合于許多較為復(fù)雜控制應(yīng)用場合。圖(3-3-4)AT89C52引腳2主要性能參數(shù):與MCS-51產(chǎn)品指令和引腳完全兼容8k字節(jié)可重擦寫Flash閃速存儲器1000次擦寫周期全靜態(tài)操作:0Hz—24MHz三級加密程序存儲器256×8字節(jié)內(nèi)部RAM32個可編程I/O口線3個16位定時/計數(shù)器8個中斷源可編程串行UART通道低功耗空閑和掉電模式3引腳功能Vcc(40):電源電壓GND(20):接地P0口(32-39):P0口是一個8位雙向I/O接口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口P0寫“1”P1口(1-8):P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動〔吸收或輸出電流〕4個TTL邏輯門電路,對端口寫“1”通過內(nèi)部的上拉電阻把端口拉到高電平時,此時可作輸入口。作為輸入品使用時,因為內(nèi)部存在上拉電阻,*個引腳被外部信號拉低時會輸出一個電流。與AT89C51不同之處是,P1.0和P1.1還可以分別作為定時/計數(shù)器2的外部計數(shù)輸入(P1.0/T2〕P2口(21-28):P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動〔吸收或輸出電流〕4個TTL邏輯門電路,對端口P2寫“1”P3口(10-17):P3是一組帶有內(nèi)部上拉電阻的8位雙向I/O口,P3口輸出緩沖級可驅(qū)動〔吸收或輸出電流〕4個TTL邏輯門電路,對端口P3寫“1”端口引腳第二功能P3.0R*D〔串行輸入口〕P3.1T*D〔串行輸出口〕P3.2INT0〔外中斷0〕P3.3INT1〔外中斷1〕P3.4T0〔定時/計數(shù)器0〕P3.5T1〔定時/計數(shù)器1〕P3.6WR〔外部數(shù)據(jù)存儲器寫通道〕P3.7RD〔外部數(shù)據(jù)存儲器讀通道〕表3-3-4P3口的第二功能RST(9):復(fù)位信號輸入端。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。ALE/PROG(30):地址鎖存有效信號輸出端。當(dāng)片外程序存儲器或數(shù)據(jù)存儲器時,ALE〔地址鎖存允許〕輸出脈沖用于鎖存地址的低8位字節(jié),一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的,要注意的是:每當(dāng)外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。PSEN(29):程序存儲允許輸出端。是片外程序存儲器的讀選通信號,當(dāng)AT89C52由外部程序存儲器取指令〔或數(shù)據(jù)〕時,每個周期兩次PSEN有效,即輸出兩個脈沖。在此期間,當(dāng)外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。EA/VPP(31):外部允許。欲使CPU僅外部程序存儲器〔地址為0000H—FFFFH〕,EA端必須保持低電平〔接地〕,需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖EA端狀態(tài)。如EA端為高電平〔接Vcc端〕,CPU則執(zhí)行內(nèi)部程序存儲器中的指令。Flash存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。*TAL1(19):振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。*TAL1(18):振蕩器反相放大器的輸出端。通過*TAL1、*TAL2外接晶振后,即可構(gòu)成自激振蕩器,驅(qū)動內(nèi)部時鐘發(fā)生器向主機提供時鐘信號。4特殊功能存放器在AT89C52片內(nèi)存儲器中,80H-FFH共128個單元為特殊功能存放器〔SFR〕,其中包括B存放器、累加器、程序狀態(tài)存放器〔PSW〕、定時/計數(shù)器控制、中斷優(yōu)級控制存放器〔IP〕、P3口鎖存存放器、中斷允許控制存放器〔IE〕、串行口控制存放器等。它們可運用來設(shè)置片內(nèi)電路的運行方式,記錄電路的運行狀態(tài),MCS-51單片機對特殊功能存放器采取與片內(nèi)RAM統(tǒng)一編址的方法,可按字節(jié)地址直接尋址。在已有的根底上AT89C52與AT89C51相比還提供了兩個定時/計數(shù)器。定時/計數(shù)器2的控制和狀態(tài)位位于T2CON與T2MOD,該功能的數(shù)在自動裝載的情況下可裝入到存放器中,提高了效率。復(fù)位電路的選擇目前為止,單片機復(fù)位電路主要有四種類型:〔1〕微分型復(fù)位電路;〔2〕積分型復(fù)位電路;〔3〕比擬器型復(fù)位電路:〔4〕看門狗型復(fù)位電路。方案一:采用手動復(fù)位,該方法線路簡單。在系統(tǒng)運行過程中,有時可能需要對系統(tǒng)進展復(fù)位,以防止對硬件經(jīng)常加電或斷電而造成的傷害,我們可以采用手動復(fù)位的方式。如圖3-3-5-1所示:圖3-3-5-1手動上電復(fù)位電路方案二:阻容上電自動復(fù)位電路,這種電路線路也簡單,它利用電容上電壓不能突變而是按指數(shù)規(guī)律上升或下降的特性,產(chǎn)生所需要的復(fù)位脈沖。優(yōu)點:使用最為普遍且本錢低廉的復(fù)位電路。如圖3-3-5-2所示:圖3-3-5-2自動復(fù)位電路總結(jié):這兩種方案對設(shè)計的影響其實差異不大,根據(jù)實驗需要選擇方案一可手動復(fù)位電路。第四章系統(tǒng)的軟件設(shè)計定時中斷恢復(fù)初值,保存定時中斷恢復(fù)初值,保存N開場N開場清顯示緩沖區(qū)中斷50ms加1清顯示緩沖區(qū)中斷50ms加1初始化定時計數(shù)器Y秒單元清零,60秒到N秒加1初始化定時計數(shù)器Y秒單元清零,60秒到N秒加1NY賦時鐘初值NY賦時鐘初值秒單元清零,60分到分加1開定時器秒單元清零,60分到分加1開定時器NY調(diào)整時間NY調(diào)整時間分單元清零,24小時到時加1分單元清零,24小時到時加1Y數(shù)碼管顯示當(dāng)前時鐘值勤Y數(shù)碼管顯示當(dāng)前時鐘值勤時單元清零時單元清零堆棧返回堆棧返回圖4-1程序框圖系統(tǒng)程序采用C語言按模塊化方式進展設(shè)計,然后通過KeilC51L軟件開發(fā)平臺將程序轉(zhuǎn)變成十六進制程序語言,得到HE*文件,接著使用Proteous進展仿真,得出仿真結(jié)果。系統(tǒng)程序主要包括主程序,讀出時鐘子程序、計算時間子程序、鍵盤掃描子程序和顯示數(shù)據(jù)刷新子程序。主程序流程圖如圖4-1所示。第五章系統(tǒng)調(diào)試5.1軟件調(diào)試翻開程序調(diào)試軟件keiluVision4,在里面新建一個工程,命名為:萬年歷.Uv2。接著新建文件,編寫相應(yīng)程序。編寫好的各個程序進展編譯與連接。但假設(shè)是在該過程中,看見我們編好的程序有錯誤,則就根據(jù)他相應(yīng)的提示來修改錯誤,直到該程序能夠正確編譯為止。能夠正常編譯的程序說明沒有什么問題了,此時我們在點擊相關(guān)欄目,讓它生成我們在硬件仿真時所需要的.HE*文件。到此步,我們的軟件調(diào)試就完成了。5.2硬件調(diào)試翻開Proteus7Professional軟件,按照方案所選的電路元件來設(shè)計整體電路,線把個芯片按一定的位置放好,然后對相應(yīng)的對象進展連接,連接時需仔細,以免調(diào)試時發(fā)生錯誤。做好之后把編程所生成的。HE*文件加載到AT89C52中,運行仿真軟件,查看運行效果。如果運行出錯則就根據(jù)他相應(yīng)的提示來修改錯誤,直到仿真成功為止。5.3實物調(diào)試〔1〕按照電路圖在萬能板上焊好電路〔2〕給電路通上電源,翻開總電源開關(guān),LED顯示是否通電;〔3〕電路板上分別有復(fù)位、日期、時間、調(diào)整、加、減、選位和確定按鍵,可以對時間和日期進展任意的調(diào)整;其中日期或時間按鍵按下,數(shù)碼管分別顯示日期和時間;調(diào)整按鍵按下表示對時間開場進展調(diào)整,通過選位來確定所要調(diào)整的位置,分別可以加和減,最后確定按鍵按下表示時間調(diào)整完成?!?〕用兩個四位數(shù)碼管通過時間和日期按鍵來切換,可顯示時間和日期。結(jié)論通過本次設(shè)計的制作,我較為全面地回憶了所學(xué)的硬件知識與軟件知識。同時,單片機原理與應(yīng)用及電子技術(shù)方面的相關(guān)知識,在這次設(shè)計中得到了較好地實踐。在本次設(shè)計中我也學(xué)到了很多東西,比方說:我們更好地掌握了Proteus7Professional軟件進展硬件原理圖的繪制、利用KILE軟件對我設(shè)計的程序的檢查與生成.HE*文件及遇到問題怎么解決等。首先,在這次設(shè)計中,在我們遇到過很多我們自己不理解的問題及書本上或是我以前沒有看見過的知識點。在面對這些問題時,我們首先采用的是上網(wǎng)搜尋的方法來查看別人是否和我們一樣遇到過相類似的問題,并且查看一下別人是怎樣解決這個問題的。當(dāng)別人有了解決它問題的方法時,我們在根據(jù)別人的提示,想想自己的問題出在哪里,該怎么解決。當(dāng)我們還是無法想到解決的方法是,我們就帶著自己的問題到圖書館查閱資料,如果我們的問題還是沒有解決,我們就帶著問題去問我們的指導(dǎo)教師,讓他幫我解決。采用這樣的方法,我的很多問題都迎刃而解了!其次,就是在本次設(shè)計過程中,我不但努力解決自己遇到的問題,還積極幫助同學(xué)解決他們遇到的問題。這樣一來,我的知識得到了進一步的穩(wěn)固,同學(xué)的問題也得到了相應(yīng)的解決,我到達的一舉雙收的效果,我為此而感到快樂。最后,讓我們覺得這次設(shè)計的最大成果是:我們知道了將理論用到實際中時,會遇到很多的問題。因此,在此時我們一定要先沉著的找出問題出現(xiàn)的原因,在對癥下藥,來解決問題。我相信只要我們面對問題沉著、冷靜,我們的問題都會被解決。設(shè)備選擇本次實驗所用設(shè)備如下表1所示:序號名稱型號、規(guī)格數(shù)量1四位十進制數(shù)碼管*DSM420361K22上拉電阻A103J13電阻1K9個、10K1個、100歐2個124電容20PF、100UF、10UF45按鍵電源按鍵1個、其它按鍵9個106晶振12M17三八譯碼器74LS13818單片機座19單片機89C52RC110蜂鳴器111NPN112發(fā)光二極管113帶公共端的8電阻排RESPACK-82表1實驗所用材料參考文獻王靜霞主編?單片機應(yīng)用技術(shù)〔C語言版〕?電子工業(yè)楊欣、王玉鳳?電子設(shè)計從零開場?清華大學(xué)邊春遠、王志強?MCS-51單片機應(yīng)用開發(fā)實用子程序?人民郵電廖先蕓?電子技術(shù)實踐與實訓(xùn)?高等教育附錄主程序:*include<reg52.h>*include<intrins.h>unsignedcharcodeduanma[]={0*3F,0*6,0*5B,0*4F,0*66,0*6D,0*7D,0*7,0*7F,0*6F,0*40};//共陰的數(shù)碼管段選unsignedchardatatianshu[]={31,28,31,30,31,30,31,31,30,31,30,31};//每月的天數(shù)unsignedcharcodeweima[]={0*f8,0*f9,0*fa,0*fb,0*fc,0*fd,0*fe,0*ff};//位碼,控制74hc138unsignedintbdatanian=2011;//初始化時間unsignedchardatajianzhi=16,yue=05,ri=05,zhou=00,shi=21,fen=59,miao=56;unsignedchartshi=21,tfen=00,tmiao=05,t,t1,t2,t3,nri,nyue; //初始化鬧鐘unsignedchardatahuanwei=0;unsignedcharbdatacishu=0,cishu1=0,cishu2=0,cishu3=0,temp[8]={0}; bitt_or_d=0;//控制顯示時間還是日期標(biāo)志,只有8個數(shù)碼管所以只有分開顯示了bittiaozheng=0;//記錄調(diào)整按鈕的狀態(tài)bitkey_up=0;//按鍵抬起標(biāo)志sbitP00=P0^0; //按鍵分配sbitP01=P0^1;sbitP02=P0^2;sbitP03=P0^3;sbitS=P1^3;sbitS1=P1^4;voiddelay();////////////////////主函數(shù)////////////////////////voidmain(){ P3=0*00; while(1) { voiddisplayt(); voidtdatet(); voiddisplayn(); void displayd(); voidnz(); //顯示鬧鐘 voiddisplay();//顯示temp的內(nèi)容;voiddelay();//軟件延時voiddis_time();//顯示時間voidcount_week();//計算*年月日是星期幾voiddis_date();//顯示日期bitrunian(unsignedint);//判斷閏年voidreadkey16();//16鍵盤掃描,鍵值保存在jianzhi中voidmanage_key();//給相應(yīng)按鍵賦予動作 IE=0*82;//翻開定時器0中斷 TMOD=1;//讓定時器0工作在1方式 TH0=0*3C; TL0=0*1F;//時間常數(shù)50ms TR0=1; loop: count_week(); manage_key(); if(!t1) if(!t2) { if(t_or_d) dis_date();//顯示日期 else dis_time();//顯示星期和時間 } if(S==0) { t1=1; nz(); //顯示鬧鐘 } else S=0; if(cishu1==50) t1=0;////////////////////////////////////////////////////////// if(S1==0) { t1=1; tdatet(); } //調(diào)試區(qū) else t2=0;////////////////////////////////////////////////////////// gotoloop; }}///////////////////按鍵管理///////////////////////////////voidmanage_key(){readkey16();//讀取鍵值 if(jianzhi==0) t_or_d=0;if(jianzhi==1) t_or_d=1; if(jianzhi==2) { if(t_or_d==0)//調(diào)整時間時才關(guān)閉定時器 TR0=0; tiaozheng=1; huanwei=0;} if(key_up)//按鍵抬起后才做一次動作{ delay(); if(key_up)///////////////////調(diào)整時間/鬧鐘/星期////////////////////////if(t_or_d==0&&tiaozheng==1)//在顯示時間狀態(tài)下調(diào)整時間{ if(jianzhi==15) { huanwei++;//在時、分、秒之間切換 if(huanwei==4) huanwei=0; }if(S==1&&tiaozheng==1) //在顯示鬧鐘狀態(tài)下調(diào)整鬧鐘 { t3=1; }if(huanwei==0&&S==1&&jianzhi==7) //響應(yīng)鬧鐘時加調(diào)整 { tshi++; if(tshi>=24) tshi=0; }if(huanwei==0&&S==1&&jianzhi==11) //響應(yīng)鬧鐘時減調(diào)整{ tshi--; if(tshi==0) tshi=24; } if(huanwei==1&&S==1&&jianzhi==7) //響應(yīng)鬧鐘分加調(diào)整 { tfen++; if(tfen>=60) tfen=0; }if(huanwei==1&&S==1&&jianzhi==11) //響應(yīng)鬧鐘分減調(diào)整 { tfen--; if(tfen==0) tfen=60; }if(huanwei==2&&S==1&&jianzhi==7) //響應(yīng)鬧鐘秒加調(diào)整 { tmiao++; if(tmiao>=60) tmiao=0;} if(huanwei==2&&S==1&&jianzhi==11) //響應(yīng)鬧鐘秒減調(diào)整 { tmiao--; if(tmiao==0) tmiao=60; }///////////////////調(diào)整時間////////////////////////////// if(!t3){ if(huanwei==0&&jianzhi==7)//響應(yīng)時加調(diào)整 { shi++; if(shi>=24)shi=0; } if(huanwei==0&&jianzhi==11)//響應(yīng)時減調(diào)整 { shi--; if(shi==0)shi=24; } if(huanwei==1&&jianzhi==7)//響應(yīng)分加調(diào)整 { fen++; if(fen>=60)fen=0; }if(huanwei==1&&jianzhi==11)//響應(yīng)分減調(diào)整 { fen--; if(fen==0)fen=60; } if(huanwei==2&&jianzhi==7)//響應(yīng)秒加調(diào)整 { miao++; if(miao>=60)miao=0; } if(huanwei==2&&jianzhi==11)//響應(yīng)秒減調(diào)整 { miao--; if(miao==0)miao=60; } if(huanwei==3&&jianzhi==7)//響應(yīng)星期加調(diào)整 { zhou++; if(zhou>=7)zhou=1; } if(huanwei==3&&jianzhi==11)//響應(yīng)星期減調(diào)整 { zhou--; if(zhou==0)zhou=7; } }}////////////////////////調(diào)整日期///////////////////////////// if(t_or_d==1&&tiaozheng==1) //在顯示日期狀態(tài)下調(diào)整日期 { if(jianzhi==15) { huanwei++; if(huanwei==3) huanwei=0; } if(huanwei==0&&jianzhi==7) //響應(yīng)年加調(diào)整 nian++;if(huanwei==0&&jianzhi==11) //響應(yīng)年減調(diào)整 nian--; if(huanwei==1&&jianzhi==7)//響應(yīng)月加調(diào)整 { yue++; if(yue==13) yue=1; } if(huanwei==1&&jianzhi==11) //響應(yīng)月減調(diào)整 { yue--; if(yue==0) yue=12; } if(huanwei==2&&jianzhi==7)//響應(yīng)日加調(diào)整 { ri++; if(ri>tianshu[yue-1]) ri=1; } if(huanwei==2&&jianzhi==11) //響應(yīng)日減調(diào)整 { ri--; if(ri>tianshu[yue-1]) ri=1; }} if(jianzhi==3) { TR0=1; tiaozheng=0; } jianzhi=16; }}/////////////////////計算*年月日是星期幾///////////////////////voidcount_week(){ unsignedintweek=0; unsignedchari;if(runian(nian)) tianshu[1]=29; //閏年二月天數(shù)是29天 else tianshu[1]=28; //平年二月天數(shù)是28天if(nian==2011) { for(i=1;i<yue;i++) week=tianshu[i-1]%7+week; week=(week+5+ri)%7; } if(nian>2011) { for(i=0;i<nian-2011;i++) { if(runian(2011+i)) week=week+2; //閏年余兩天 else week=week+1; //平年余一天 } for(i=1;i<yue;i++) week=tianshu[i-1]%7+week; week=(week+5+ri)%7; } if(nian<2011) { for(i=1;i<=2011-nian;i++) { if(runian(2011-i)) week=week+2;//閏年余兩天 else week=week+1;//平年余一天 } week=6-(week+2)%7; for(i=1;i<yue;i++) week=tianshu[i-1]%7+week; week=(week+1+ri)%7; } if(week==0) week=7; zhou=week;/////////////////計算2011年的陰歷////////////////////////////if(nian==2011){if(yue==1){if(ri<=3) //調(diào)試區(qū) {nri=ri+26; nyue=yue+10; } else nri=ri-3; nyue=yue+11; } //調(diào)試區(qū)if(yue==2){if(ri<=2) {nri=ri+28; nyue=yue+10; } else nri=ri-2; //調(diào)試區(qū) nyue=yue-1; }if(yue==3){if(ri<=4) {nri=ri+26; nyue=yue-2; } else //調(diào)試區(qū) nri=ri-4; nyue=yue-1;}if(yue==4){if(ri<=2) {nri=ri+27; nyue=yue-2; } else nri=ri-2; //調(diào)試區(qū) nyue=yue-1; }if(yue==5){if(ri<=2) {nri=ri+28; nyue=yue-2; } else nri=ri-2; nyue=yue-1; } //調(diào)試區(qū)if(yue==6){if(ri<=1) {nri=ri+29; nyue=yue-2; } else nri=ri-1; nyue=yue-1; } //調(diào)試區(qū)if(yue==7){if(ri<=30) {nri=ri; nyue=yue-1; } else nri=ri-30; nyue=yue; }if(yue==8){if(ri<=28) {nri=ri+1; nyue=yue-1; //調(diào)試區(qū) } else nri=ri-28; nyue=yue; }if(yue==9){if(ri<=26) {nri=ri+3; nyue=yue-1; } else nri=ri-26; //調(diào)試區(qū) nyue=yue; }if(yue==10){if(ri<=26) {nri=ri+4; nyue=yue-1; } else nri=ri-26; nyue=yue; }if(yue==11){if(ri<=24) {nri=ri+5; nyue=yue-1; //調(diào)試區(qū) } else nri=ri-24; nyue=yue; }if(yue==12){if(ri<=24) {nri=ri+6; nyue=yue-1; } else nri=ri-24; nyue=yue; }}/////////////////////////////////////////////////////////}/////////////////////鍵盤掃描///////////////////voidreadkey16(){ unsignedchara,RL,i;P0=0*0f; delay();if(P0!=0*0f){ i=0;RL=0*ef;ZERO:P0=RL;if(!P00) { a=0;gotokeyval; }if(!P01) { a=4;gotokeyval; }if(!P02) { a=8;gotokeyval; }if(!P03) { a=12;gotokeyval; }i++;RL=_crol_(RL,1);gotoZERO;keyval: jianzhi=a+i; key_up=0; }else key_up=1;}///////////////////////顯示///////////////////////////voiddis_date()//存儲日期數(shù)據(jù){temp[0]=nian/1000;temp[1]=nian%1000/100;temp[2]=nian%1000%100/10;temp[3]=nian%1000%100%10;temp[4]=yue/10;temp[5]=yue%10;temp[6]=ri/10; temp[7]=ri%10;displayd();} voiddis_time()//存儲時間數(shù)據(jù){temp[0]=shi/10;temp[1]=shi%10;temp[2]=fen/10;temp[3]=fen%10;temp[4]=miao/10;temp[5]=miao%10; temp[7]=zhou;temp[6]=10;display();}voidnz() //存儲鬧鐘數(shù)據(jù){temp[0]=tshi/10;temp[1]=tshi%10;temp[2]=tfen/10;temp[3]=tfen%10;temp[4]=tmiao/10;temp[5]=tmiao%10;displayn();} voiddisplayd()//顯示日期程序{ unsignedchari; for(i=0;i<=7;i++) {

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論