基于單片機(jī)89C52定時(shí)鬧鐘的課程設(shè)計(jì)_第1頁(yè)
基于單片機(jī)89C52定時(shí)鬧鐘的課程設(shè)計(jì)_第2頁(yè)
基于單片機(jī)89C52定時(shí)鬧鐘的課程設(shè)計(jì)_第3頁(yè)
基于單片機(jī)89C52定時(shí)鬧鐘的課程設(shè)計(jì)_第4頁(yè)
基于單片機(jī)89C52定時(shí)鬧鐘的課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)介

1、前前 言言20 世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展。在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高。同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。 時(shí)間對(duì)人們來(lái)說(shuō)總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無(wú)傷大雅。但是,一旦重要事情,一時(shí)的耽誤可能釀成大禍。例如,許多火災(zāi)都是由于人們一時(shí)忘記了關(guān)閉煤氣或是忘記充電時(shí)間。所以有必要制作一個(gè)定時(shí)系統(tǒng)。隨時(shí)提醒這些容易忘記時(shí)間的人。 而鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。

2、諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、定時(shí)啟閉電路、定時(shí)開(kāi)關(guān)烘箱、通斷動(dòng)力設(shè)備,甚至各種定時(shí)電氣的自動(dòng)啟用等等。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非常現(xiàn)實(shí)的意義。隨著生活水平的提高,人們?cè)絹?lái)越追求人性化的事物。傳統(tǒng)的時(shí)鐘已不能滿(mǎn)足人們的需求。而現(xiàn)代的時(shí)鐘不僅需要模擬電路技術(shù)和數(shù)字電路技術(shù)而且更需要單片機(jī)技術(shù),增加數(shù)字鐘的功能。利用軟件編程盡量做到硬件電路簡(jiǎn)單穩(wěn)定,減小電磁干擾和其他環(huán)境干擾,減小因元器件精度不夠引起的誤差,但是數(shù)字鐘還是可以改進(jìn)和提高如選用更精密的元器件。但與機(jī)械式時(shí)鐘相比已經(jīng)具有更高的準(zhǔn)確性和直觀性,且無(wú)機(jī)械裝置,具有

3、更長(zhǎng)的使用壽命,因此得到了廣泛的使用。數(shù)字鐘通過(guò)數(shù)字電路實(shí)現(xiàn)時(shí)、分、秒。數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭、車(chē)站、碼頭辦公室等公共場(chǎng)所成為人們?nèi)粘I钪胁豢缮俚谋匦杵?。由于?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度遠(yuǎn)遠(yuǎn)超過(guò)老式鐘表。多功能數(shù)字鐘的應(yīng)用非常普遍。由單片機(jī)作為數(shù)字鐘的核心控制器,通過(guò)它的時(shí)鐘信號(hào)進(jìn)行實(shí)現(xiàn)計(jì)時(shí)功能,將其時(shí)間數(shù)據(jù)經(jīng)單片機(jī)輸出,利用顯示器顯示出來(lái)。通過(guò)鍵盤(pán)可以進(jìn)行校時(shí)、定時(shí)等功能。輸出設(shè)備顯示器可以用液晶顯示技術(shù)和數(shù)碼管來(lái)顯示技術(shù)。 本系統(tǒng)利用單片機(jī)實(shí)現(xiàn)具有計(jì)時(shí)、校時(shí)等功能的數(shù)字時(shí)鐘,是以單片機(jī)STC89C52 為核心元件同時(shí)采用 LCD1602 顯

4、示“時(shí)” 、 “分” 、 “秒”的現(xiàn)代計(jì)時(shí)裝置。另外具有校時(shí)功能,秒表功能,定時(shí)器功能和繼電器控制外圍電路功能,利用單片機(jī)實(shí)現(xiàn)的數(shù)字時(shí)鐘具有編程靈活,便于功能的擴(kuò)充等優(yōu)點(diǎn)。目目 錄錄前前 言言 .1 1摘摘 要要 .I I第第 1 1 章章 課題的背景課題的背景 .1 11.1 課題的來(lái)源 .11.2 課題研究的目的和意義 .11.3 應(yīng)解決的主要問(wèn)題及達(dá)到的技術(shù)要求 .2第第 2 2 章章 方案的選擇和論證方案的選擇和論證 .3 32.1 單片機(jī)型號(hào)的選擇 .32.2 按鍵的選擇 .32.3 顯示器的選擇 .32.4 計(jì)時(shí)部分的選擇 .32.5 發(fā)音部分的設(shè)計(jì) .42.6 顯示器驅(qū)動(dòng)電路 .

5、42.7 電源的選擇 .4第第 3 3 章章 數(shù)字電子鐘的設(shè)計(jì)原理和方法數(shù)字電子鐘的設(shè)計(jì)原理和方法 .5 53.1 設(shè)計(jì)原理 .53.2 硬件電路的設(shè)計(jì) .53.2.1 STC89C52 單片機(jī)簡(jiǎn)介 .53.2.2 鍵盤(pán)電路的設(shè)計(jì) .63.2.3 時(shí)鐘電路 .63.2.4 蜂鳴器驅(qū)動(dòng)電路 .63.2.5 繼電器電路 .73.2.6 LCD1602 電路 .73.2.7 復(fù)位電路 .83.3 軟件部分的設(shè)計(jì) .83.3.1 主程序部分的設(shè)計(jì) .8總總 結(jié)結(jié) .1111附附 錄錄 .1212摘摘 要要單片機(jī)自 20 世紀(jì) 70 年代問(wèn)世以來(lái),以其極高的性能價(jià)格比,受到人們的重視和關(guān)注,應(yīng)用很廣、發(fā)

6、展很快。而 51 單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。本設(shè)計(jì)以 STC89C52 芯片為核心,輔以必要的外圍電路,設(shè)計(jì)了一個(gè)結(jié)構(gòu)簡(jiǎn)單,功能齊全的電子時(shí)鐘,它由 5V 直流電源供電。在硬件方面,除了 CPU 外,使用LCD1602 來(lái)進(jìn)行顯示。軟件方面采用 C 語(yǔ)言編程。整個(gè)電子鐘系統(tǒng)能完成時(shí)間的顯示、調(diào)時(shí)、校時(shí)和三組定時(shí)鬧鐘的功能。選用單片機(jī)最小系統(tǒng)應(yīng)用程序,添加比較程序、時(shí)間調(diào)整程序及蜂鳴程序,通過(guò)時(shí)間比較程序觸發(fā)蜂鳴,實(shí)現(xiàn)鬧鐘功能,完成設(shè)計(jì)所需求的軟件環(huán)境。介紹并使用Keil 單片機(jī)模擬調(diào)試軟件,測(cè)試程序的可行性并用 Proteus 進(jìn)行仿真。關(guān)鍵詞:關(guān)鍵詞:?jiǎn)纹瑱C(jī),定時(shí)器,中斷

7、,鬧鐘,LCD1602 1第第 1 章章 課題的背景課題的背景1.1 課題的來(lái)源課題的來(lái)源隨著生活水平的提高,人們?cè)絹?lái)越追求人性化的事物,傳統(tǒng)的時(shí)鐘已不能滿(mǎn)足人們的需求。現(xiàn)代的時(shí)鐘不僅需要模擬電路技術(shù)而且需要數(shù)字電路技術(shù)和單片機(jī)技術(shù),增加時(shí)鐘的功能。數(shù)字電子鐘可利用軟件編程盡量做到硬件電路簡(jiǎn)單穩(wěn)定,減小電磁干擾和其他環(huán)境干擾,減小因元器件精度不夠引起的誤差;盡管如此數(shù)字鐘還是可以改進(jìn)和提高,比如選用更精密的元器件。但與機(jī)械式時(shí)鐘相比已經(jīng)具有更高的準(zhǔn)確性和直觀性,且無(wú)機(jī)械裝置,具有更長(zhǎng)的使用壽命,因此得到了廣泛的使用。1.2 課題研究的目的和意義課題研究的目的和意義20 世紀(jì)末,電子技術(shù)獲得了飛

8、速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。 時(shí)間對(duì)人們來(lái)說(shuō)總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無(wú)傷大雅。但是,一旦重要事情,一時(shí)的耽誤可能釀成大禍。例如,許多火災(zāi)都是由于人們一時(shí)忘記了關(guān)閉煤氣或是忘記充電時(shí)間等造成的。而鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便。數(shù)字鐘是通過(guò)數(shù)字電路實(shí)現(xiàn)時(shí),分,秒數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭、車(chē)站、碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I钪胁豢缮俚谋?/p>

9、需品。由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過(guò)老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能,諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開(kāi)關(guān)烤箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非常現(xiàn)實(shí)的意義。21.3 應(yīng)解決的主要問(wèn)題及達(dá)到的技術(shù)要求應(yīng)解決的主要問(wèn)題及達(dá)到的技術(shù)要求使用 STC89C52 單片機(jī)結(jié)合字符型 LCD 顯示器設(shè)計(jì)一個(gè)簡(jiǎn)易的定時(shí)鬧鐘 LCD 時(shí)鐘,若 LCD 選擇有背光顯示的模塊,在夜晚或

10、黑暗的場(chǎng)合中也可使用。定時(shí)鬧鐘的基本功能如下: (1) 同時(shí)設(shè)置一個(gè)夜晚的全芯片休眠功能,當(dāng)定時(shí)時(shí)間到后,激活單片機(jī)同時(shí)啟動(dòng)報(bào)警,以起到一個(gè)節(jié)能的作用。(2) 顯示格式為“時(shí)時(shí):分分” 。(3) 由 LED 閃動(dòng)來(lái)做秒計(jì)數(shù)表示。(4) 一旦時(shí)間到則發(fā)出聲響,同時(shí)繼電器啟動(dòng),可以擴(kuò)充控制家電開(kāi)啟和關(guān)閉。(5) 程序執(zhí)行后工作指示燈 LED 閃動(dòng),表示程序開(kāi)始執(zhí)行,LCD 顯示“00:00” ,按下操作鍵 K1K4 動(dòng)作如下: K1設(shè)置現(xiàn)在的時(shí)間。 K2顯示鬧鐘設(shè)置的時(shí)間。 K3設(shè)置鬧鈴的時(shí)間。K4鬧鈴 ON/OFF 的狀態(tài)設(shè)置,設(shè)置為 ON 時(shí)連續(xù)三次發(fā)出“嘩”的一聲,設(shè)置為 OFF發(fā)出“嘩”的

11、一聲。設(shè)置當(dāng)前時(shí)間或鬧鈴時(shí)間如下。K1時(shí)調(diào)整。K2分調(diào)整。K3設(shè)置完成。K4鬧鈴時(shí)間到時(shí),發(fā)出一陣聲響,按下本鍵可以停止聲響。3第第 2 章章 方案的選擇和方案的選擇和論證論證2.1 單片機(jī)型號(hào)的選擇單片機(jī)型號(hào)的選擇通過(guò)對(duì)多種單片機(jī)性能的分析,最終認(rèn)為 STC89C52 是最理想的電子時(shí)鐘開(kāi)發(fā)芯片。STC89C52 是 STC 公司生產(chǎn)的一種低功耗、高性能 CMOS8 位微控制器,具有 8K 在系統(tǒng)可編程 Flash 存儲(chǔ)器。STC89C52 使用經(jīng)典的 MCS-51 內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng) 51 單片機(jī)不具備的功能。在單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng)可編程 Fl

12、ash,使得 STC89C52 為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。2.2 按鍵的選擇按鍵的選擇方案一:44 矩陣式鍵盤(pán)。如果選擇此方案,那么在修改時(shí)鐘或設(shè)置鬧鈴時(shí)間時(shí)就可以直接從鍵盤(pán)輸入,方便、快捷,但程序較為復(fù)雜。 方案二:獨(dú)立式按鍵。如果設(shè)置過(guò)多按鍵,將會(huì)占用較多 I/O 口,而且會(huì)給布線(xiàn)帶來(lái)不便,因此,此方案適用于按鍵較少的情況。如果選擇此方案,由于按鍵較少,在修改時(shí)間或設(shè)置鬧鈴時(shí)間時(shí)就不能直接輸入,只能通過(guò)加或減完成,稍為麻煩一些,但其程序簡(jiǎn)單。 由于并不需要經(jīng)常修改時(shí)間和設(shè)置鬧鈴時(shí)間,而且方案二的程序簡(jiǎn)單,按鍵少、成本低,因此,選擇方案二。2.3 顯示器的選擇顯示

13、器的選擇方案一:液晶顯示器。如果選擇此方案,將會(huì)降低系統(tǒng)的功耗,這樣就可以用電池供電,便于攜帶。但液晶顯示器的驅(qū)動(dòng)電路復(fù)雜,使用起來(lái)有一定的難度。 方案二:用數(shù)碼管作為顯示器。數(shù)碼管的驅(qū)動(dòng)電路簡(jiǎn)單,使用方便,其缺點(diǎn)是功耗較大。由于液晶顯示器功耗低,顯示的內(nèi)容靈活,因此選擇方案一。2.4 計(jì)時(shí)部分的計(jì)時(shí)部分的選擇選擇如果使用時(shí)鐘芯片,系統(tǒng)就不怕掉電且時(shí)間精確。但這種芯片比較貴,況且,設(shè)計(jì)本系統(tǒng)主要是為了學(xué)習(xí)單片機(jī)程序的編寫(xiě)和調(diào)試以及設(shè)計(jì)硬件電路的一些方法,因此采用軟件的方法來(lái)計(jì)時(shí)而沒(méi)有采用價(jià)格較高的時(shí)鐘芯片。42.5 發(fā)音部分的設(shè)計(jì)發(fā)音部分的設(shè)計(jì)通過(guò)三極管放大后驅(qū)動(dòng)蜂鳴器工作。2.6 顯示器驅(qū)動(dòng)

14、電路顯示器驅(qū)動(dòng)電路采用 LCD1602 顯示所需顯示的字符,需要用電位器調(diào)節(jié)背光。2.7 電源的選擇電源的選擇如果是用電池供電,就比較方便攜帶,但需要經(jīng)常更換電池。況且,本系統(tǒng)的體積較大,即使使用電池供電也不能隨身攜帶,因此,用電池供電不大合適,所以用 5V外部穩(wěn)壓電源來(lái)供電。5第第 3 章章 數(shù)字電子鐘的設(shè)計(jì)原理和方法數(shù)字電子鐘的設(shè)計(jì)原理和方法3.1 設(shè)計(jì)原理設(shè)計(jì)原理 系統(tǒng)原理圖圖 3-1 系統(tǒng)原理圖3.2 硬件電路的設(shè)計(jì)硬件電路的設(shè)計(jì)3.2.1 STC89C52 單片機(jī)簡(jiǎn)介單片機(jī)簡(jiǎn)介STC89C52 是 STC 公司生產(chǎn)的一種低功耗、高性能 CMOS8 位微控制器,具有 8K 在系統(tǒng)可編程

15、 Flash 存儲(chǔ)器。STC89C52 使用經(jīng)典的 MCS-51 內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng) 51 單片機(jī)不具備的功能。具有以下標(biāo)準(zhǔn)功能: 8k 字節(jié) Flash,512字節(jié) RAM, 32 位 I/O 口線(xiàn),看門(mén)狗定時(shí)器,內(nèi)置 4KB EEPROM,MAX810 復(fù)位電路,3個(gè) 16 位定時(shí)器/計(jì)數(shù)器,4 個(gè)外部中斷,一個(gè) 7 向量 4 級(jí)中斷結(jié)構(gòu)(兼容傳統(tǒng) 51 的5 向量 2 級(jí)中斷結(jié)構(gòu)) ,全雙工串行口。STC89C52晶振按鍵 晶振 LCD1602蜂鳴器繼電器63.2.2 鍵盤(pán)電路的設(shè)計(jì)鍵盤(pán)電路的設(shè)計(jì)鍵盤(pán)采用 4 個(gè)獨(dú)立按鍵實(shí)現(xiàn)對(duì)時(shí)鐘和鬧鐘的設(shè)定及修改。 3.2.3 時(shí)鐘

16、電路時(shí)鐘電路單片機(jī)的時(shí)鐘產(chǎn)生方法有兩種:內(nèi)部時(shí)鐘方式和外部時(shí)鐘方式。本系統(tǒng)中STC89C52 單片機(jī)采用內(nèi)部時(shí)鐘方式。最常用的內(nèi)部時(shí)鐘方式是采用外接晶體和電容組成的并聯(lián)諧振回路。振蕩晶體可在 1.2MHz12MHz 之間。電容值無(wú)嚴(yán)格要求,但電容取值對(duì)振蕩頻率輸出的穩(wěn)定性、大小和振蕩電路起振速度有少許影響,一般可在20pF100pF 之間取值3.2.4 蜂鳴器驅(qū)動(dòng)電路蜂鳴器驅(qū)動(dòng)電路發(fā)音部分是通過(guò)三極管放大驅(qū)動(dòng)蜂鳴器工作,當(dāng)鬧鐘開(kāi)啟時(shí)響三聲,鬧鐘關(guān)閉時(shí)響一聲。7圖 3-6 蜂鳴器驅(qū)動(dòng)電路3.2.5 繼電器電路繼電器電路當(dāng)單片機(jī)的引腳輸出高電平時(shí),三極管截止,繼電器線(xiàn)圈兩端沒(méi)有電位差,繼電器銜鐵釋

17、放,同時(shí)狀態(tài)指示的發(fā)光二極管也熄滅,繼電器的常開(kāi)觸點(diǎn)釋放,相當(dāng)于開(kāi)關(guān)斷開(kāi)。在三極管截止的瞬間,由于線(xiàn)圈中的電流不能突變?yōu)榱?,繼電器線(xiàn)圈兩端會(huì)產(chǎn)生一個(gè)較高電壓的感應(yīng)電動(dòng)勢(shì),線(xiàn)圈產(chǎn)生的感應(yīng)電動(dòng)勢(shì)則可以通過(guò)二極管 IN4148 釋放,從而保護(hù)了三極管免被擊穿,也消除了感應(yīng)電動(dòng)勢(shì)對(duì)其他電路的干擾,這就是二極管的保護(hù)作用。3.2.6 LCD1602 電路電路83.2.7 復(fù)位電路復(fù)位電路復(fù)位電路工作原理如上圖所示,VCC 上電時(shí),電容充電,在電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位;幾個(gè)毫秒后,電容充滿(mǎn),電阻上電流降為 0,電壓也為 0,使得單片機(jī)進(jìn)入工作狀態(tài)。工作期間,按下按鍵,電容放電。松手,電容又充電,在電

18、阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位??傠娐穲D總電路圖3.3 軟件部分的設(shè)計(jì)軟件部分的設(shè)計(jì)3.3.1 主程序部分的設(shè)計(jì)主程序部分的設(shè)計(jì)主程序流程圖如下圖 3-7。9是圖 3-7 主程序流程圖4 個(gè)按鍵每個(gè)都具有兩個(gè)功能,以最終實(shí)現(xiàn)菜單化的輸入功能。采用通過(guò)逐層嵌套的循環(huán)掃描,實(shí)現(xiàn)嵌套式的鍵盤(pán)輸入。當(dāng)?shù)竭_(dá)所設(shè)定的時(shí)間之后,蜂鳴器發(fā)出聲音,并且繼電器啟動(dòng),以此控制連接的外圍器件。要達(dá)到按鍵具有多個(gè)功能,需在程序內(nèi)設(shè)置變量,當(dāng)按鍵按下與變量的值同時(shí)滿(mǎn)足實(shí)現(xiàn)一個(gè)功能,不同時(shí)滿(mǎn)足時(shí)實(shí)現(xiàn)另一個(gè)功能。開(kāi)始初始化設(shè)置與鬧鐘時(shí)間相同顯示時(shí)間蜂鳴器響,繼電器開(kāi)啟否10第第 4 章章 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果此電子鬧鐘設(shè)計(jì)是先利用

19、 Proteus 仿真軟件進(jìn)行仿真,實(shí)現(xiàn)了課程設(shè)計(jì)要求實(shí)現(xiàn)的功能。然后在使用 AltiumDesigner 繪制原理圖和 PCB,圖 3-14 運(yùn)行仿真圖實(shí)際電路運(yùn)行圖11總總 結(jié)結(jié)通過(guò)自己的不懈努力,我完成了單片機(jī)課程設(shè)計(jì)上的任務(wù)要求。功能上達(dá)標(biāo):時(shí)鐘的顯示,調(diào)時(shí)功能、校時(shí)功能、鬧鈴功能、鬧鐘設(shè)功能。其精確度完全可以滿(mǎn)足日常生活顯示時(shí)間的需要;調(diào)時(shí)功能,方便快捷;校時(shí)功能保證了時(shí)鐘準(zhǔn)確和可靠性,通過(guò)繼電器可以擴(kuò)展多種外圍電路的可能。硬件設(shè)施合乎要求,軟件設(shè)計(jì)可以配合硬件實(shí)現(xiàn)要求的功能。可見(jiàn)技術(shù)在不斷進(jìn)步,機(jī)械式時(shí)鐘已經(jīng)被淘汰,取而代之的是具有高度準(zhǔn)確性和直觀性且無(wú)機(jī)械裝置,具有更長(zhǎng)的使用壽命

20、等優(yōu)點(diǎn)的數(shù)字時(shí)鐘。數(shù)字時(shí)鐘更具人性化,更能提高人們的生活質(zhì)量,更受人們歡迎。 無(wú)可否認(rèn)機(jī)械時(shí)代已經(jīng)過(guò)去,電子時(shí)代已經(jīng)到來(lái)。做為新時(shí)代的我們,更應(yīng)該提高自身能力,適應(yīng)新時(shí)代的發(fā)展。知識(shí)來(lái)自實(shí)踐,多去生活中探詢(xún)所需要的。對(duì)于上述所提到的研究課題,我們應(yīng)盡量考慮到人的因素,增強(qiáng)時(shí)鐘的實(shí)用性和操作性,為使用者提供切實(shí)的方便,營(yíng)造一種舒適的生活氛圍。所以,在設(shè)計(jì)的時(shí)候,應(yīng)該從多方面、多角度去考慮問(wèn)題,而且應(yīng)該進(jìn)一步提高時(shí)鐘的質(zhì)量。另外,在本次設(shè)計(jì)的過(guò)程中,我發(fā)現(xiàn)很多的問(wèn)題,雖然以前沒(méi)有做過(guò)這樣的設(shè)計(jì)但通過(guò)這次設(shè)計(jì)我學(xué)會(huì)了很多東西,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫(xiě)

21、過(guò)幾次程序,但我覺(jué)的寫(xiě)好一個(gè)程序并不是一件簡(jiǎn)單的事,比如寫(xiě)一個(gè)程序看其功能很少認(rèn)為編寫(xiě)程序簡(jiǎn)單,但到編程的時(shí)候才發(fā)現(xiàn)一些細(xì)微的知識(shí)或低級(jí)錯(cuò)誤經(jīng)常犯做不到最后常常失敗,所以有些東西只有學(xué)精弄懂并且要細(xì)心才行,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。從這次的課程設(shè)計(jì)中,我們真真正正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的練習(xí)的過(guò)程中才能提高,我想這就是我在這次課程設(shè)計(jì)中的最大收獲。12附 錄相關(guān)的程序代碼:相關(guān)的程序代碼:#include#include#define uint unsigned int#define

22、uchar unsigned char#define LCD1602_DB P0uchar code table=CurrentTime;uchar code table1=00:00:00;uchar key1Flag = 0;uchar key2Flag = 0;uchar key3Flag = 0;uchar key4Flag = 0;uchar temp = 0;uchar sec = 0;uchar min = 0;uchar hour = 0;uchar clkHour = 0;uchar clkMin = 0;uchar clkFlag = 0;uchar beepNum = 0

23、;uchar relayFlag = 1;sbit LCD1602_RS = P20;/數(shù)據(jù)/命令選擇端(電平 H/L)sbit LCD1602_RW = P21;/數(shù)據(jù)/命令選擇端(電平 H/L)sbit LCD1602_E = P22; /使能信號(hào)sbit Key1 = P10;sbit Key2 = P11;sbit Key3 = P12;sbit Key4 = P13;sbit Led = P24;13sbit Speaker = P25;sbit Relay = P23;void Delay1ms()/12.000MHzunsigned char i, j;i = 12;j = 16

24、9;dowhile (-j); while (-i);void Delay20ms()/12.000MHzunsigned char i, j, k;_nop_();_nop_();i = 1;j = 234;k = 113;dodowhile (-k); while (-j); while (-i);void Beep() Speaker = 0;14Delay20ms();Speaker = 1;void LcdWaitReady()unsigned char sta;LCD1602_DB = 0 xFF;LCD1602_RS = 0;LCD1602_RW = 1;do LCD1602_E

25、 = 1;sta = LCD1602_DB;LCD1602_E = 0;while(sta & 0 x80);void LcdWriteCmd(unsigned char cmd)LcdWaitReady();LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_DB = cmd;LCD1602_E = 1;LCD1602_E = 0;void LcdWriteDat(unsigned char dat) LcdWaitReady();LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DB = dat;15LCD1602_E = 1;LC

26、D1602_E = 0;void LcdSetCursor(unsigned char x, unsigned char y) unsigned char addr;if(y = 0)addr = 0 x00 + x;elseaddr = 0 x40 + x;LcdWriteCmd(addr | 0 x80);void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str) LcdSetCursor(x, y);while(*str != 0)LcdWriteDat(*str+); void InitLcd1602()

27、LcdWriteCmd(0 x38);LcdWriteCmd(0 x0C);LcdWriteCmd(0 x06);LcdWriteCmd(0 x01);void WriteAddress(uchar x) LcdWriteCmd(0 x80 + x);void DisplayMinTens() /顯示分十位WriteAddress(0 x49);16LcdWriteDat(min / 10) + 0);Delay1ms();void DisplayMinUnits() /顯示分個(gè)位WriteAddress(0 x4A);LcdWriteDat(min % 10) + 0);Delay1ms()

28、;void DisplayHourTens() /顯示時(shí)十位WriteAddress(0 x46);LcdWriteDat(hour / 10) + 0);Delay1ms();void DisplayHourUnits() /顯示時(shí)個(gè)位WriteAddress(0 x47);LcdWriteDat(hour % 10) + 0);Delay1ms();void DisplayClkMinTens() /顯示時(shí)鐘分十位WriteAddress(0 x49);LcdWriteDat(clkMin / 10) + 0);Delay1ms();void DisplayClkMinUnits() /顯

29、示時(shí)鐘分個(gè)位WriteAddress(0 x4A);LcdWriteDat(clkMin % 10) + 0);Delay1ms();void DisplayClkHourTens() /顯示時(shí)鐘時(shí)十位WriteAddress(0 x46);LcdWriteDat(clkHour / 10) + 0);Delay1ms();17void DisplayClkHourUnits() /顯示時(shí)鐘時(shí)個(gè)位WriteAddress(0 x47);LcdWriteDat(clkHour % 10) + 0);Delay1ms();void DisplayClkSecTens() /顯示秒十位WriteAd

30、dress(0 x4C);LcdWriteDat(sec / 10) + 0);Delay1ms();void DisplayClkSecUnits() /顯示秒個(gè)位WriteAddress(0 x4D);LcdWriteDat(sec % 10) + 0);Delay1ms();void ScanKey4() if(Key4 = 0)&(clkFlag =1) Delay20ms();if(Key4 = 0)&(clkFlag =1) clkFlag = 0;beepNum = 0;key4Flag = 0;void InitTimer0() /初始化定時(shí)器 0TMOD =

31、0 x01; TH0 = (65536 - 50000) / 256;TL0 = (65536 - 50000) % 256;EA = 1;18ET0 = 1;TR0 = 1;void main() InitLcd1602();LcdShowStr(0,0,table);LcdShowStr(6,1,table1);InitTimer0();while(1) if(sec = 60) sec = 0;min+;if(min = 60) min = 0;hour+;if(hour = 24) hour = 0;LcdShowStr(0,0,table);DisplayHourTens();Dis

32、playHourUnits();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinUnits();LcdShowStr(11,1,:);DisplayClkSecUnits();DisplayClkSecTens();/=if(Key1 = 0)&(key1Flag = 0) /設(shè)置當(dāng)前時(shí)間Delay20ms();19if(Key1 = 0)&(key1Flag = 0) TR0 = 0;InitLcd1602();LcdShowStr(0,0,SetCurrentTime);DisplayHourTens();DisplayHourUn

33、its();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinUnits();key1Flag = 1; while(key1Flag = 1) if(Key1 = 0) Delay20ms();if(Key1 = 0) hour+;if(hour = 24) hour = 0;DisplayHourTens();DisplayHourUnits();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinUnits();if(Key2 = 0) Delay20ms();if(Key2 = 0) min+;if(min

34、= 60) 20min = 0;hour+;DisplayHourTens();DisplayHourUnits();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinUnits();if(Key3 = 0)&(key1Flag = 1) /退出設(shè)置當(dāng)前時(shí)間Delay20ms();if(Key3 = 0)&(key1Flag = 1) InitLcd1602();LcdShowStr(0,0,table);DisplayHourTens();DisplayHourUnits();LcdShowStr(8,1,:);DisplayMinTe

35、ns();DisplayMinUnits();LcdShowStr(11,1,:);DisplayClkSecUnits();DisplayClkSecTens();key1Flag = 0;TR0 = 1;/=if(Key2 = 0)&(key2Flag = 0)&(relayFlag = 1) /顯示鬧鐘時(shí)間Delay20ms();if(Key2 = 0)&(key2Flag = 0)&(relayFlag = 1) 21key2Flag = 1;InitLcd1602();while(key2Flag = 1) LcdShowStr(0,0,Clock T

36、ime);DisplayClkHourTens();DisplayClkHourUnits();LcdShowStr(8,1,:);DisplayClkMinTens();DisplayClkMinUnits();if(Key2 = 0) Delay20ms();if(Key2 = 0) key2Flag = 0;InitLcd1602();DisplayHourTens();DisplayHourUnits();LcdShowStr(8,1,:);DisplayMinTens();DisplayMinUnits();LcdShowStr(11,1,:);DisplayClkSecUnits(

37、);DisplayClkSecTens(); /=if(Key3 = 0)&(key3Flag = 0) /設(shè)置鬧鐘時(shí)間Delay20ms();if(Key3 = 0)&(key3Flag = 0) TR0 = 0;22InitLcd1602();LcdShowStr(0,0,SetClockTime);DisplayClkHourTens();DisplayClkHourUnits();LcdShowStr(8,1,:);DisplayClkMinTens();DisplayClkMinUnits();key3Flag = 1;while(key3Flag = 1) if(K

38、ey1 = 0) Delay20ms();if(Key1 = 0) clkHour+; if(clkHour = 24) clkHour = 0; DisplayClkHourTens(); DisplayClkHourUnits(); LcdShowStr(8,1,:); DisplayClkMinTens(); DisplayClkMinUnits();if(Key2 = 0) Delay20ms();if(Key2 = 0) clkMin+;if(clkMin = 60) clkHour+;clkMin = 0;23 DisplayClkHourTens(); DisplayClkHourUnits(); LcdShowStr(8,1,:); DisplayClkMinTens(); Displa

溫馨提示

  • 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)論