電子時(shí)鐘計(jì)時(shí)器的設(shè)計(jì)(c語(yǔ)言版-調(diào)試完美通過(guò)-可直接使用)(附原理圖源程序以與完整的文檔)_第1頁(yè)
電子時(shí)鐘計(jì)時(shí)器的設(shè)計(jì)(c語(yǔ)言版-調(diào)試完美通過(guò)-可直接使用)(附原理圖源程序以與完整的文檔)_第2頁(yè)
電子時(shí)鐘計(jì)時(shí)器的設(shè)計(jì)(c語(yǔ)言版-調(diào)試完美通過(guò)-可直接使用)(附原理圖源程序以與完整的文檔)_第3頁(yè)
電子時(shí)鐘計(jì)時(shí)器的設(shè)計(jì)(c語(yǔ)言版-調(diào)試完美通過(guò)-可直接使用)(附原理圖源程序以與完整的文檔)_第4頁(yè)
電子時(shí)鐘計(jì)時(shí)器的設(shè)計(jì)(c語(yǔ)言版-調(diào)試完美通過(guò)-可直接使用)(附原理圖源程序以與完整的文檔)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

.PAGE.....XX人文科技學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:?jiǎn)纹瑱C(jī)原理及應(yīng)用課程設(shè)計(jì)設(shè)計(jì)題目:電子時(shí)鐘的設(shè)計(jì)系別:通信與控制工程系專業(yè):通信工程班級(jí):09級(jí)通信二班學(xué)生姓名:袁琦黃文付學(xué)號(hào):0941623009416227起止日期:20XX12月20日~20XX12月30日指導(dǎo)教師:王善偉姚毅謝四蓮教研室主任:劉建閩..指導(dǎo)教師評(píng)語(yǔ):指導(dǎo)教師簽名:年月日成績(jī)?cè)u(píng)定項(xiàng)目權(quán)重成績(jī)?cè)S文付1、設(shè)計(jì)過(guò)程中出勤、學(xué)習(xí)態(tài)度等方面0.22、課程設(shè)計(jì)質(zhì)量與答辯0.53、設(shè)計(jì)報(bào)告書(shū)寫(xiě)及圖紙規(guī)范程度0.3總成績(jī)教研室審核意見(jiàn):教研室主任簽字:年月日教學(xué)系審核意見(jiàn):主任簽字:年月日摘要時(shí)鐘是人類日常生活必不可少的工具,本設(shè)計(jì)從日常生活中常見(jiàn)的事物入手,通過(guò)對(duì)電子時(shí)鐘的設(shè)計(jì),讓我們認(rèn)識(shí)到單片機(jī)已經(jīng)深入到我們生活的每個(gè)領(lǐng)域,該設(shè)計(jì)不僅可以鍛煉我們的動(dòng)手能力,而且可以加深我們對(duì)單片機(jī)的認(rèn)識(shí)和激發(fā)我們對(duì)未知科學(xué)領(lǐng)域的探索。本文利用單片機(jī)實(shí)現(xiàn)數(shù)字時(shí)鐘計(jì)時(shí)功能的主要內(nèi)容。它體積小,成本低、功能強(qiáng)、使用方便、可靠性高等一系列優(yōu)點(diǎn),廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動(dòng)化上。本次設(shè)計(jì)采用獨(dú)立式按鍵進(jìn)行時(shí)間調(diào)整,其中STC89C52是核心元件,同時(shí)采用數(shù)碼管LED動(dòng)態(tài)顯示"時(shí)","分","秒"的現(xiàn)代計(jì)時(shí)裝置。與傳統(tǒng)機(jī)械表相比,它具有走時(shí)精確,顯示直觀等特點(diǎn)。它的計(jì)時(shí)周期為24小時(shí),顯滿刻度為"23時(shí)59分59秒",另外利用DS1302具有校時(shí)功能,斷電后有記憶功能,恢復(fù)供電時(shí)可實(shí)現(xiàn)計(jì)時(shí)同步等特點(diǎn)。該系統(tǒng)同時(shí)具有硬件設(shè)計(jì)簡(jiǎn)單、工作穩(wěn)定性高、價(jià)格低廉等優(yōu)點(diǎn)。關(guān)鍵詞:STC89C52;LED數(shù)碼管;8255芯片;DS1302芯片;..目錄TOC\o"1-3"\h\u7797設(shè)計(jì)要求1228291.方案論證與對(duì)比1276581.1方案一1153161.2方案二2325201.3方案對(duì)比2313962.系統(tǒng)硬件電路的設(shè)計(jì)3249172.1單片機(jī)的選擇及引腳功能介紹3258882.28255A芯片的結(jié)構(gòu)及引腳功能介紹494322.3DS1302芯片的結(jié)構(gòu)及引腳功能介紹6277332.4顯示電路設(shè)計(jì)725942.5電源電路設(shè)計(jì)8315852.6鍵盤動(dòng)態(tài)掃描電路設(shè)計(jì)844483.控制系統(tǒng)的軟件設(shè)計(jì)10299823.1主程序流程圖10286403.2顯示子程序1120723.3鬧鐘時(shí)間設(shè)定功能程序11303773.4鍵盤掃描程序12213034.系統(tǒng)功能調(diào)試與整體指標(biāo)1369094.1硬件調(diào)試與分析13268244.2軟件調(diào)試與分析1460774.3性能分析14273415.詳細(xì)儀器清單1458876.總結(jié)與思考及致謝154789參考文獻(xiàn)163423附錄一:程序〔方案一1718413附錄二:程序〔方案二25..電子時(shí)鐘的設(shè)計(jì)設(shè)計(jì)要求利用單片機(jī)作為控制核心,完成一個(gè)時(shí)鐘計(jì)時(shí)器。具體要求如下:<1>采用6位LED數(shù)碼顯示時(shí)、分、秒。<2>時(shí)制式為24小時(shí)制。<3>使用按鍵開(kāi)關(guān)可實(shí)現(xiàn)時(shí)、分調(diào)整。<4>秒表/時(shí)鐘功能轉(zhuǎn)換。<5>定時(shí)設(shè)定提醒的功能。<6>整點(diǎn)提醒〔蜂鳴。<7>DS1302設(shè)時(shí),對(duì)時(shí),掉電記憶時(shí)間的功能。1.方案論證與對(duì)比1.1方案一此方案采用單片機(jī)內(nèi)部定時(shí)器T0進(jìn)行計(jì)時(shí),STC89S52實(shí)時(shí)控制。如圖1所示:圖1方案一系統(tǒng)方框圖1.2方案二此方案采用專用時(shí)鐘芯片DS1302精確計(jì)時(shí),單片機(jī)STC89C52實(shí)時(shí)讀取時(shí)鐘顯示至6位數(shù)碼管。如圖2所示:圖2方案二系統(tǒng)方框圖1.3方案對(duì)比以上方案中,方案一設(shè)計(jì)簡(jiǎn)潔,編程比較簡(jiǎn)單,計(jì)時(shí)精度不高,準(zhǔn)確性不能完全保證。雖硬件簡(jiǎn)潔、成本更低廉、便于實(shí)現(xiàn),綠色環(huán)保,編程簡(jiǎn)單易寫(xiě),不能達(dá)到提高同學(xué)們編程的能力和對(duì)單片機(jī)及其擴(kuò)展芯片的學(xué)習(xí)和深程度的去了解單片機(jī)及其更廣泛的應(yīng)用,故在此我們選擇挑戰(zhàn),放棄對(duì)其選擇。雖然我們對(duì)其進(jìn)行了放棄,但我們也把此方法的程序?qū)懞靡员氵M(jìn)行對(duì)比。方案二與方案一相比,編程比較復(fù)雜,計(jì)時(shí)精度較高,而且可以靈活運(yùn)用,可擴(kuò)展性好,并能充分的利用單片機(jī)的有效資源。還可讓我們培養(yǎng)我們的自學(xué)能力,自己去發(fā)掘單片機(jī)內(nèi)部結(jié)構(gòu)及其擴(kuò)展功能,自己去學(xué)會(huì)怎樣對(duì)其他芯片控制的學(xué)習(xí)方法,使得課程設(shè)計(jì)具有一定的挑戰(zhàn)性,正因如此,故我們選擇方案二。2.系統(tǒng)硬件電路的設(shè)計(jì)2.1單片機(jī)的選擇及引腳功能介紹STC89C52具有如下特點(diǎn):40個(gè)引腳〔引腳圖如圖四所示,4kBytesFlash片內(nèi)程序存儲(chǔ)器,128bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器〔RAM,32個(gè)外部雙向輸入/輸出〔I/O口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗〔WDT電路,片內(nèi)時(shí)鐘振蕩器。此外,STC89C52RC設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過(guò)軟件設(shè)置省電模式??臻e模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。圖4STC89C52芯片引腳圖引腳功能介紹:VCC〔40:+5V;GND〔20:接地;P0口〔39-32:P0口為8位漏極開(kāi)路雙向I/O口,每引腳可吸收8個(gè)TTL門電流;P1口〔1-8:P1口是從內(nèi)部提供上拉電阻器的8位雙向I/O口,P1口緩沖器能接收和輸出4個(gè)TTL門電流;P2口〔21-28:P2口為內(nèi)部上拉電阻器的8位雙向I/O口,P2口緩沖器可接收和輸出4個(gè)TTL門電流;P3口〔10-17:P3口是8個(gè)帶內(nèi)部上拉電阻器的雙向I/O口,可接收和輸出4個(gè)TTL門電流,P3口也可作為AT89C51的特殊功能口;RST〔9:復(fù)位輸入。當(dāng)振蕩器復(fù)位時(shí),要保持RST引腳2個(gè)機(jī)器周期的高電平時(shí)間;ALE/PROG〔30:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié),在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6,它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的,要注意的是,每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)1個(gè)ALE脈沖;PSEN〔29:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期2次PSEN有效,但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這2次有效的PSEN信號(hào)將不出現(xiàn);EA/VPP〔31:當(dāng)EA保持低電平時(shí),外部程序存儲(chǔ)器地址為〔0000H-FFFFH不管是否有內(nèi)部程序存儲(chǔ)器。FLASH編程期間,此引腳也用于施加12V編程電源〔VPP;XTAL1〔19:反向振蕩器放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入;XTAL2〔18:來(lái)自反向振蕩器的輸出。2.28255A芯片的結(jié)構(gòu)及引腳功能介紹8255A芯片是Intel公司生產(chǎn)的通用可編程并行接口電路,廣泛應(yīng)用于單片機(jī)擴(kuò)展并行I/O口。它具有8個(gè)位并行口PA、PB和PC。8255A芯片的內(nèi)部結(jié)構(gòu)及引腳如圖5所示?!?.8255A的內(nèi)部結(jié)構(gòu)8255A的內(nèi)部結(jié)構(gòu)有以下幾部分組成:a.并行I/O端口A、B、C8255A的內(nèi)部有3個(gè)8位并行I/O口:A口、B口、C口。3個(gè)I/O口都可以通過(guò)編程選擇為輸入口或輸出口,但在結(jié)構(gòu)和功能上有所不同。A口:含有一個(gè)8位數(shù)據(jù)輸出鎖存/緩沖器和一個(gè)8位輸入鎖存器。B口:含有一個(gè)8位數(shù)據(jù)輸出鎖存/緩沖器和一個(gè)8位輸入鎖存器〔不鎖存。C口:含有一個(gè)8位數(shù)據(jù)輸出鎖存/緩沖器和一個(gè)8位輸入鎖存器〔不鎖存。當(dāng)數(shù)據(jù)傳送不需要聯(lián)絡(luò)信號(hào)時(shí),這3個(gè)端口都可以用作輸入口或輸出口。當(dāng)A口B口需要有聯(lián)絡(luò)信號(hào)時(shí),C口可以作為A口和B口的聯(lián)絡(luò)信號(hào)線。b.工作方式控制電路:8255A的三個(gè)端口在使用使可分為A、B兩組。A組包括A口8位和C口高4位:B組包括B口8位和C口低4位。兩組的控制電路中分別有控制寄存器,根據(jù)寫(xiě)入的控制字決定兩組的工作方式,也可對(duì)C口每一位置"1"或清"0"。c.數(shù)據(jù)總線緩沖器:數(shù)據(jù)總線緩沖器是三態(tài)雙向的8位緩沖器,是8255A與單片機(jī)數(shù)據(jù)總線的接口,8255A的D0~D7可以和AT89C51單片機(jī)的P0.0~P0.7直接相連。數(shù)據(jù)的輸入輸出、控制字和狀態(tài)信息的傳遞,均可通過(guò)數(shù)據(jù)總線緩沖器進(jìn)行。d.讀/寫(xiě)控制邏輯:8255A讀/寫(xiě)控制邏輯的作用是從CPU的地址和控制總線上接受有關(guān)信號(hào),轉(zhuǎn)變成各種控制命令送到數(shù)據(jù)緩沖器及A組和B組的控制電路,控制A、B、C3個(gè)端口的操作。其引腳圖如圖5所示:圖58255引腳圖引腳功能介紹:8255A共有40個(gè)引腳,一般為雙列直插DIP封裝,40個(gè)引腳可分為與CPU連接的數(shù)據(jù)線、地址和控制信號(hào)以及與外圍設(shè)備連接的三個(gè)端口線。D0~D7:雙向三態(tài)數(shù)據(jù)總線。RESET:復(fù)位信號(hào),輸入,高電平有效。復(fù)位后,控制寄存器清0,A口、B口、C口被置為輸入方式。CS:片選信號(hào),輸入,低電平有效。RD.:讀信號(hào),輸入,低電平有效。有效時(shí),允許CPU通過(guò)8255AD0~D7讀取數(shù)據(jù)或狀態(tài)信息。WR.:寫(xiě)信號(hào),輸入,低電平有效。有效時(shí),允許A1A0:端口控制信號(hào),輸入。2位可構(gòu)成四種狀態(tài),分別尋址A口、B口、C口和控制寄存器PA0~PA7:A口數(shù)據(jù)線,雙向。PB0~PB7:B口數(shù)據(jù)線,雙向。PC0~PC7:C口數(shù)據(jù)/信號(hào)線,雙向。當(dāng)8255A工作于方式0時(shí),PC0~PC7分為兩組〔每組4位并行I/O數(shù)據(jù)線;當(dāng)8255A工作于方式1或方式2時(shí),PC0~PC7為A口、B口提供聯(lián)絡(luò)信號(hào)。2.3DS1302芯片的結(jié)構(gòu)及引腳功能介紹DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(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ì)電流充電的能力?!?.DS1302的引腳功能及結(jié)構(gòu)DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端<雙向>,后面有詳細(xì)說(shuō)明。SCLK始終是輸入端。DS1302的引腳功能以及單片機(jī)的連接圖如圖6圖6DS1302引腳及其與單片機(jī)連接的原理圖2.4顯示電路設(shè)計(jì)單片機(jī)中通常用七段LED構(gòu)成字型"8",另外,還有一個(gè)小數(shù)點(diǎn)發(fā)光二極管以顯示小數(shù)位!這種顯示器有共陰和共陽(yáng)兩種!發(fā)光二極管的陽(yáng)極連在一起的〔公共端稱為共陽(yáng)極顯示器,陰極連在一起的稱為共陰極顯示器。一位顯示器由8個(gè)發(fā)光二極管組成,其中,7個(gè)發(fā)光二極管構(gòu)成字型"8"的各個(gè)筆劃〔段,a_g,另一個(gè)小數(shù)點(diǎn)為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管上施加一定的正向電壓時(shí),該段筆畫(huà)即亮;不加電壓則暗。為了保護(hù)各段LED不被損壞,需外加限流電阻。由于共陰極連接需加驅(qū)動(dòng),故在這里我采用的是共陽(yáng)陽(yáng)極連接。以共陽(yáng)極LED為例,各LED公共陽(yáng)極K0接高電平,若向各控制端a,b,┄,g,dp順次送入00011110信號(hào),則該顯示器顯示"⒎"字型。共陰極7段LED顯示數(shù)字0~F、文字、符號(hào)及小數(shù)點(diǎn)的編碼〔a段為最地位,dp點(diǎn)為最高位,如圖7。圖7數(shù)碼管的驅(qū)動(dòng)顯示電路設(shè)計(jì)2.5電源電路設(shè)計(jì)在各種電子設(shè)備中,直流穩(wěn)壓電源是必不可少的組成部分,它是電子設(shè)備唯一能量來(lái)源,它的設(shè)計(jì)思路是根據(jù)我們以前學(xué)過(guò)的模電電子技術(shù),要想得到我們所要的+6V輸出電壓,就需將交流220V的電壓經(jīng)過(guò)變壓器、整流電路、濾波電路和穩(wěn)壓電路四個(gè)部分。2.6鍵盤動(dòng)態(tài)掃描電路設(shè)計(jì)在單片機(jī)系統(tǒng)中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,常常將按鈕排列成矩陣式鍵盤中,每條水平線和直線在交叉處不直接連通,而是通過(guò)一個(gè)按鈕加以連接。這樣,一個(gè)端口〔如P1口就能組成4*4=16個(gè)按鈕,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條就能組成20鍵的鍵盤,而直接用端口線則只能多出一鍵〔9鍵。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤是最合理的。矩陣式鍵盤的按鈕識(shí)別辦法確定矩陣式鍵盤上何鍵被按下簡(jiǎn)紹一種"行掃描法"。行掃描法又稱為逐行〔或列掃描查詢法,是一種最常用的,按鈕識(shí)別辦法,如下圖示鍵盤,介紹過(guò)程如下。判斷鍵盤中有無(wú)鍵盤按下將全部行線置低電平,然后檢測(cè)列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位位于低電平線與4根行線相交叉的4個(gè)按鈕之中。若所有列線均為高電平,則鍵盤中無(wú)鍵按下。判斷閉合鍵所在的位置:在確認(rèn)有鍵按下后,即可置某根行線為低電平時(shí),其他線為高電平。在確定某根位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列與置為低電平的行線交叉處的按鈕就是閉合的按鈕。將程序通過(guò)串口下載到單片機(jī)中,在鍵盤上按任意鍵時(shí),將會(huì)在數(shù)碼管上顯示對(duì)應(yīng)的字符。為了驅(qū)動(dòng)鍵盤,同上以8255_PC第四位作為輸入,8255PC高四位作為列掃描輸出,以此來(lái)實(shí)現(xiàn)動(dòng)態(tài)掃描顯示法。如圖8所示:圖8鍵盤動(dòng)態(tài)掃描電路設(shè)計(jì)3.控制系統(tǒng)的軟件設(shè)計(jì)3.1主程序流程圖本設(shè)計(jì)中主程序主要實(shí)現(xiàn)顯示的初始化和調(diào)用各子程序工作的功能,讀取時(shí)間的子程序主要實(shí)現(xiàn)初始化,時(shí)間信息的采集和顯示段碼的碼的存取。分別對(duì)各個(gè)器件的功能進(jìn)行編程設(shè)計(jì),根據(jù)主程序流程圖〔如下進(jìn)行全面的分析。設(shè)計(jì)中計(jì)時(shí)主要以定時(shí)器T0中斷完成,定點(diǎn)鬧鈴使用峰鳴器來(lái)完成。當(dāng)端口有開(kāi)關(guān)按下時(shí),轉(zhuǎn)入相應(yīng)的功能程序。其主程序執(zhí)行流程圖如下圖9:圖9主程序流程圖3.2顯示子程序時(shí)間顯示子程序顯示時(shí)鐘芯片3個(gè)內(nèi)存單元〔小時(shí)、分鐘、秒鐘的BCD碼數(shù)據(jù),8255的PA口送數(shù)碼管的位選編碼。8255的PB口送段選編碼,位選段選編碼存放在ROM表中。顯示時(shí),先取出位選編碼數(shù)據(jù),然后送至PA口輸出,接著取出段選編碼數(shù)據(jù)送至PB口輸出,剩下的數(shù)碼管以同樣地方法送數(shù)據(jù)直到將3個(gè)內(nèi)存單元的數(shù)據(jù)分成6個(gè)位全部送去數(shù)碼管顯示。數(shù)碼管顯示子程序流程圖如圖9所示:圖10數(shù)碼管顯示子程序流程圖3.3鬧鐘時(shí)間設(shè)定功能程序在時(shí)鐘狀態(tài)下,觸發(fā)外中斷1時(shí),進(jìn)入鬧鐘時(shí)間設(shè)定模式,且不影響T0計(jì)時(shí)器的功能狀態(tài),在鍵盤上輸入對(duì)應(yīng)的數(shù)字進(jìn)行時(shí)間設(shè)定。當(dāng)分別按下調(diào)節(jié)時(shí)鐘、分鐘和秒鐘的個(gè)位時(shí),時(shí)間自動(dòng)確定,鬧鐘時(shí)間只精確到分鐘。鬧鐘時(shí)間設(shè)定流程圖如圖11所示:圖11鬧鐘時(shí)間設(shè)定流程圖3.4鍵盤掃描程序本設(shè)計(jì)采用動(dòng)態(tài)掃描法,動(dòng)態(tài)掃描法不僅掃描鍵陣,也可以實(shí)現(xiàn)顯示,是目前應(yīng)用十分廣泛的一種方法。動(dòng)態(tài)掃描法是采用輸出"移動(dòng)"信號(hào),輪流對(duì)各行按鍵進(jìn)行檢測(cè)來(lái)實(shí)現(xiàn)的。設(shè)置行線為輸出,列線為輸入,當(dāng)無(wú)按鍵按下時(shí),列輸入全為"1".設(shè)計(jì)時(shí),將某一行輸出為"0",讀取列線值,若其中某一位為"0",則表明行、列交叉處的按鍵按下,否則,無(wú)按鍵按下;繼續(xù)掃描下一行〔將下一行輸出為"0",直至全掃描完為止。鍵盤掃描程序流程圖如12圖所示:圖12鍵盤掃描程序流程圖4.系統(tǒng)功能調(diào)試與整體指標(biāo)4.1硬件調(diào)試與分析〔1時(shí)間準(zhǔn)確性調(diào)試硬件調(diào)試時(shí)可先檢查印制版及焊接的質(zhì)量情況,將電子時(shí)鐘通電后,顯示00:00:00。觸發(fā)INT0中斷開(kāi)始計(jì)時(shí),每過(guò)一秒時(shí)間就顯示變化一次。計(jì)時(shí)準(zhǔn)確,顯示穩(wěn)定。〔2鬧鈴功能調(diào)試將時(shí)鐘調(diào)到11點(diǎn)59分58秒,2秒后,時(shí)鐘開(kāi)始定點(diǎn)鬧鈴,鈴聲為"嘀-嘀-嘀-嘀"聲,持續(xù)1分鐘報(bào)時(shí)聲自動(dòng)停止也可以觸發(fā)功能鍵來(lái)中止鬧鈴。設(shè)計(jì)的電子時(shí)鐘計(jì)時(shí)精確度較高,并可應(yīng)用于日常生活中。能夠通過(guò)鍵盤對(duì)電子時(shí)鐘進(jìn)行調(diào)整,且調(diào)整過(guò)程簡(jiǎn)單方便,易于操作,有較強(qiáng)的人性化設(shè)計(jì)。并且可通過(guò)鍵盤實(shí)現(xiàn)鬧鈴與時(shí)間模式的切換,使電子時(shí)鐘的功能更加強(qiáng)大。能夠進(jìn)行定時(shí)鬧鈴,計(jì)時(shí)較準(zhǔn)確,基本能實(shí)現(xiàn)測(cè)試目標(biāo)。4.2軟件調(diào)試與分析軟件調(diào)時(shí)在KEILC51編譯器下進(jìn)行,源程序編譯及仿真調(diào)試應(yīng)分段或以子程序?yàn)閱挝恢饌€(gè)進(jìn)行,最后可結(jié)合硬件實(shí)時(shí)調(diào)試。4.3性能分析按照設(shè)計(jì)程序分析,LED顯示器動(dòng)態(tài)掃描的頻率為167HZ,實(shí)際使用觀察時(shí)完全沒(méi)有閃爍。由于計(jì)時(shí)中斷程序中加了中斷延時(shí)誤差處理,所以實(shí)際計(jì)時(shí)精度非常高,可滿足多種場(chǎng)合的應(yīng)用需要。5.詳細(xì)儀器清單表格1儀器清單儀器名稱儀器名稱STC89C52STC89C528255A8255A3位數(shù)碼管3位數(shù)碼管2個(gè)DS1302DS130211.0592k晶振11.0592k晶振32.768k晶振32.768k晶振矩陣鍵盤4×4矩陣30PF電容30PF電容100PF電容100PF電容1K電阻1K電阻蜂鳴器蜂鳴器6.總結(jié)與思考及致謝在老師的指導(dǎo)和同學(xué)的幫助之下,我完成了此次單片機(jī)課程設(shè)計(jì)。從開(kāi)始接到課題要求到時(shí)鐘的實(shí)現(xiàn),再到論文的完成,每走一步對(duì)我來(lái)說(shuō)都是新的嘗試與挑戰(zhàn)。在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計(jì)過(guò)程中,與同學(xué)分工設(shè)計(jì),和同學(xué)們相互探討,相互學(xué)習(xí),相互監(jiān)督。課程設(shè)計(jì)是我們專業(yè)課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,著是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不少的過(guò)程。這次時(shí)鐘計(jì)時(shí)器設(shè)計(jì)的經(jīng)歷也會(huì)使我終身受益,我感受到做設(shè)計(jì)是要用心去做的一件事情,是真正的自己學(xué)習(xí)的過(guò)程和研究的過(guò)程,沒(méi)有學(xué)習(xí)就不可能有研究的能力,沒(méi)有自己的研究,就不會(huì)有所突破。通過(guò)設(shè)計(jì),我在老師的精心指導(dǎo)和嚴(yán)格要求下,獲得了豐富的理論知識(shí),極大地提高了實(shí)踐能力。最后,再一次感謝我的老師.,老師嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我學(xué)習(xí)的榜樣;老師循循善誘的教導(dǎo)和不拘一格的思路給予我無(wú)盡的啟迪;這次時(shí)鐘計(jì)時(shí)器設(shè)計(jì)的每個(gè)環(huán)節(jié),都離不開(kāi)老師您的細(xì)心指導(dǎo)。我懂得了學(xué)習(xí)的重要性,了解到理論知識(shí)與實(shí)踐相結(jié)合的重要意義,學(xué)會(huì)了堅(jiān)持、耐心和努力,這將為自己今后的學(xué)習(xí)和工作做出了最好的榜樣。參考文獻(xiàn)[1]余錫存.單片機(jī)原理及接口技術(shù)[M].XX:XX電子科技大學(xué)出版社,2000[2]賈好來(lái).MCS-51單片機(jī)原理及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2006[3]樓然苗,李光飛.單片機(jī)課程設(shè)計(jì)指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2007[4]夏路易,石宗義.《電路原理圖與電路板設(shè)計(jì)教程》北京希望電子工業(yè)出版2002[5]朱定華,戴汝平.單片微機(jī)原理與應(yīng)用.<M>北京:清華大學(xué)出版社,2003附錄一:程序〔方案一#include<reg52.h>#include<absacc.h>#defineuintunsignedint#defineucharunsignedchar#definePAXBYTE[0xD1FF]#definePBXBYTE[0xD2FF]#definePCXBYTE[0xD5FF]#definePCONXBYTE[0xD7FF]sbitbuzzer=P3^3;//蜂鳴器端口//數(shù)碼管0-9的段選編碼ucharcodetabledu[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28};//數(shù)碼管各位選編碼ucharcodetablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//全局變量定義unsignedlongnum1,num2;ucharshi0,shi1,fen0,fen1,m0,m1,num,num3,aa,bb,cc,count,temp,count,S,flag,flag1;charhour,min,second,h0,h1,mi0,mi1,s0,s1;voidinit<>;//初始化函數(shù)聲明voiddisplay<uchar,uchar,uchar,uchar,uchar,uchar>;//顯示函數(shù)聲明voiddelay<uint>;//帶參數(shù)延時(shí)函數(shù)聲明1毫秒voidkeyscan<>;//鍵盤掃描函數(shù)voidmain<>{ PCON=0x80; init<>; while<1>//主體循環(huán) { keyscan<>; //時(shí)鐘分離部分 m1=aa%10; m0=aa/10; fen1=bb%10; fen0=bb/10; shi1=cc%10; shi0=cc/10; //clock分離部分 s1=second%10; s0=second/10; mi1=min%10; mi0=min/10; h1=hour%10; h0=hour/10; //時(shí)鐘顯示和clock顯示部分 if<num3>=1&&num3<=4||count==0> display<shi0,shi1,fen0,fen1,m0,m1>; else display<h0,h1,mi0,mi1,s0,s1>;//************整點(diǎn)報(bào)時(shí)***********// if<aa==0&&bb==0>//報(bào)時(shí)10秒 { TR1=1; //開(kāi)啟定時(shí)器1 flag=1; //控制整點(diǎn)報(bào)時(shí)計(jì)數(shù)num1++ } //********鬧鐘報(bào)時(shí)*********// if<aa==second&&bb==min&&cc==hour>//鬧時(shí)一分鐘 { TR1=1; //開(kāi)啟定時(shí)器1 flag1=1; //控制鬧鐘計(jì)數(shù)num2++ } }}//************初始化函數(shù)**************//voidinit<>{ //********定時(shí)器0,1初始化********// TMOD=0x11; EA=1; ET0=1; ET1=1; TH0=<65536-50000>/256; TL0=<65536-50000>%256; TH1=<65536-1000>/256; TL1=<65536-1000>%256; TR0=1; }voidtime0<>interrupt1//定時(shí)0時(shí)鐘函數(shù)〔控制數(shù)碼時(shí)鐘{ TH0=<65536-50000>/256; TL0=<65536-50000>%256; num++; if<num==20> { num=0; aa++; if<aa==60> { aa=0; bb++; if<bb==60> { bb=0; cc++; if<cc==24> cc=0; } } }}voidtime1<>interrupt3 //定時(shí)1時(shí)鐘函數(shù)〔控制整點(diǎn)報(bào)時(shí)時(shí)間{ TH1=<65536-1000>/256; TL1=<65536-1000>%256; if<flag==1> num1++; if<flag1==1> num2++; buzzer=~buzzer; if<num1==10000||num2==60000> { num1=0; num2=0; buzzer=1; TR1=0; flag=0; flag1=0; }}//************數(shù)碼管顯示函數(shù)******************//voiddisplay<ucharshi0,ucharshi1,ucharfen0,ucharfen1,ucharm0,ucharm1>{ PA=tablewe[0]; PB=tabledu[shi0]; delay<1>; PA=0XFF; PB=0XFF; PA=tablewe[1]; PB=tabledu[shi1]; delay<1>; PA=0XFF; PB=0XFF; PA=tablewe[2]; PB=tabledu[fen0]; delay<1>; PA=0XFF; PB=0XFF; PA=tablewe[3]; PB=tabledu[fen1]; delay<1>; PA=0XFF; PB=0XFF; PA=tablewe[4]; PB=tabledu[m0]; delay<1>; PA=0XFF; PB=0XFF; PA=tablewe[5]; PB=tabledu[m1]; delay<1>; PA=0XFF; PB=0XFF; }//************毫秒函數(shù)******************//voiddelay<uintz>{ uintx,y; for<x=z;x>0;x--> for<y=124;y>0;y--> ;}//************鍵盤函數(shù)函數(shù)******************//voidkeyscan<>{ PC=0xfe; temp=PC; temp=temp&0xf0; if<temp!=0xf0> { delay<5>; temp=PC; temp=temp&0xf0; if<temp!=0xf0> { temp=PC; switch<temp> { case0xee:num3=1; //秒鐘加一按鍵 break; case0xde:num3=2; //分鐘加一按鍵 break; case0xbe:num3=3; //時(shí)鐘加一按鍵 break; case0x7e:num3=4; //清零按鍵 break; } while<temp!=0xf0> //松手檢測(cè) { temp=PC; temp=temp&0xf0; display<shi0,shi1,fen0,fen1,m0,m1>; } switch<num3> { case1: aa++; if<aa>59> aa=0; break; case2: bb++; if<bb>59> bb=0; break; case3: cc++; if<cc>23> cc=0; break; case4: aa=0,bb=0,cc=0; break; } } } PC=0xfd; temp=PC; temp=temp&0xf0; if<temp!=0xf0> { delay<5>; temp=PC; temp=temp&0xf0; if<temp!=0xfe> { temp=PC; switch<temp> { case0xed:num3=5;//定時(shí)器暫停,并進(jìn)入設(shè)置clock狀態(tài)按鍵 break; case0xdd:num3=6;//設(shè)置clock的秒,分,時(shí)加時(shí)按鍵 break; case0xbd:num3=7;//設(shè)置clock的秒,分,時(shí)減時(shí)按鍵 break; case0x7d:num3=8;//定時(shí)器暫停,開(kāi)啟按鍵 break; } while<temp!=0xf0> { temp=PC; temp=temp&0xf0; display<h0,h1,mi0,mi1,s0,s1>; } switch<num3> { case5: { TR0=0; count++; if<count==4> { count=0; TR0=1; } break; } case6: { if<count==1> { second++; if<second==60> second=0; } else if<count==2> { min++; if<min==60> min=0; } else if<count==3> { hour++; if<hour==24> hour=0; } break; } case7: { if<count==1> { second--; if<second==-1> second=59; } else if<count==2> { min--; if<min==-1> min=59; } else if<count==3> { hour--; if<hour==-1> hour=23; } break; } case8: { S++; if<S%2==1> TR0=0; else TR0=1; if<S==2> S=0; break; } } } }}附錄二:程序〔方案二#include<reg52.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedint#defineucharunsignedchar#definePAXBYTE[0xD1FF]#definePBXBYTE[0xD2FF]#definePCXBYTE[0xD5FF]#definePCONXBYTE[0xD7FF]ucharnum,temp,hour,minute,second,hour1,hour2,minute1,minute2,second1,second2;ucharaa,aa1,aa2,bb,bb1,bb2,cc,cc1,cc2;sbitbuzzer=P3^3;//蜂鳴器sbitD0=P1^0;//用來(lái)指示鬧鐘開(kāi)啟關(guān)閉的LEDbitflag;//鬧鐘開(kāi)啟關(guān)閉的標(biāo)志位uinta0;ucharcodetabledu[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28};//數(shù)碼管0123456789的段選編碼ucharcodetablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//數(shù)碼管的位選編碼sbitSCLK=P3^2;sbitRST=P2^6;sbitIO=P3^5;/***毫秒延時(shí)程序*****/voiddelay<uintz>{ uintx,y; for<x=z;x>0;x--> for<y=110;y>0;y--> ;}/***微秒延時(shí)程序*****/voiddelay_us<ucharn>{ uchari; for<i=0;i<n;i++>;}/***1302做好準(zhǔn)備*****/voidready_init1302<>{ RST=0; SCLK=0; RST=1;}/***1302單字節(jié)數(shù)據(jù)寫(xiě)入*****/voidwrite1302<uchardat>{ uchari; SCLK=0; delay_us<2>; for<i=0;i<8;i++> { IO=dat&0x01; delay_us<2>; SCLK=1; delay_us<2>; SCLK=0; dat>>=1; }}/***1302雙字節(jié)數(shù)據(jù)寫(xiě)入〔寄存器地址和數(shù)據(jù)*****/voidwrite_set1302<ucharcmd,uchardat>{ ready_init1302<>; delay_us<2>; write1302<cmd>; write1302<dat>; SCLK=1; RST=0;}/***1302單字節(jié)數(shù)據(jù)讀出*****/ucharread1302<>{ uchari,dat; dat=0; delay_us<2>; for<i=0;i<8;i++> { dat>>=1; if<1==IO> { dat=dat|0x80; } SCLK=1; delay_us<2>; SCLK=0; delay_us<2>; } returndat;}/***1302單字節(jié)數(shù)據(jù)讀出〔讀指定寄存器值*****/ucharread_set1302<ucharcmd>{ uchardat; ready_init1302<>; write1302<cmd>; dat=read1302<>; SCLK=1; RST=0; returndat;}/***1302初始化〔設(shè)置初始時(shí)間*****/voidinit1302<>{ write_set1302<0x8e,0x00>; write_set1302<0x80,<<0/10><<4|<0%10>>>; write_set1302<0x82,<<27/10><<4|<27%10>>>; write_set1302<0x84,<<10/10><<4|<10%10>>>; write_set1302<0x90,0xa5>;//以2K電阻方式給備用電源充電 write_set1302<0x8e,0x80>;}/***1302數(shù)據(jù)讀出〔讀已經(jīng)設(shè)置好的時(shí)間*****/voidreadtime<>{ uchartemp; temp=read_set1302<0x81>; second=<<temp&0x70>>>4>*10+<temp&0x0F>; temp=read_set1302<0x83>; minute=<<temp&0x70>>>4>*10+<temp&0x0F>; temp=read_set1302<0x85>; hour=<<temp&0x70>>>4>*10+<temp&0x0F>;}/***數(shù)碼管顯示函數(shù)〔入口參數(shù)為每個(gè)數(shù)碼管的段選序號(hào)*****/voiddispaly<uchardu0,uchardu1,uchardu2,uchardu3,uchardu4,uchardu5>{ PA=tablewe[0]; PB=tabledu[du0]; delay<2>; PA=0xff; PB=0xff; delay<2>; PA=tablewe[1]; PB=tabledu[du1]; delay<2>; PA=0xff; PB=0xff; delay<2>; PA=tablewe[2]; PB=tabledu[du2]; delay<2>; PA=0xff; PB=0xff; delay<2>; PA=tablewe[3]; PB=tabledu[du3]; delay<2>; PA=0xff; PB=0xff; delay<2>; PA=tablewe[4]; PB=tabledu[du4]; delay<2>; PA=0xff; PB=0xff; delay<2>; PA=tablewe[5]; PB=tabledu[du5]; delay<2>; PA=0xff; PB=0xff; delay<2>;}/***秒鐘加一調(diào)整〔供鍵盤設(shè)置秒鐘*****/voidsecond_inc<>{ second++; if<second>=60> second=0; write_set1302<0x8e,0x00>; write_set1302<0x80,<<<second>/10><<4|<<second>%10>>>; write_set1302<0x8e,0x80>;}/***分鐘加一調(diào)整〔供鍵盤設(shè)置分鐘*****/voidminute_inc<>{ minute++; if<minute>=60> minute=0; write_set1302<0x8e,0x00>; write_set1302<0x82,<<<minute>/10><<4|<<minute>%10>>>; write_set1302<0x8e,0x80>;}/***小時(shí)加一調(diào)整〔供鍵盤設(shè)置小時(shí)*****/voidhour_inc<>{ hour++; if<hour>=24> hour=0; write_set1302<0x8e,0x00>; write_set1302<0x84,<<<hour>/10><<4|<<hour>%10>>>; write_set1302<0x8e,0x80>;}/***矩陣鍵盤檢測(cè)*****/voidkeyboard<>{ PCON=0x80; PA=0xff; PB=0xff; PC=0xfe;//掃描倒數(shù)第一列 temp=PC; temp=temp&0xf0; if<temp!=0xf0> { delay<10>; temp=PC; temp=temp&0xf0; if<temp!=0xf0> { switch<temp> { case0xe0:num=0; break; case0xd0:num=1; break; case0xb0:num=2; break; case0x70:num=3; break; } while<temp!=0xf0> { temp=PC; temp=temp&0xf0; dispaly<hour1,hour2,minute1,minute2,second1,second2>; } switch<num> { case0: { second_inc<>;//調(diào)節(jié)秒鐘 break; } case1: { minute_inc<>;//調(diào)節(jié)分鐘 break; } case2: { hour_inc<>;//調(diào)節(jié)時(shí)鐘 break; } case3:

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論