北京交通大學(xué)單片機(jī)原理及應(yīng)用課程設(shè)計(jì)報(bào)告_第1頁
北京交通大學(xué)單片機(jī)原理及應(yīng)用課程設(shè)計(jì)報(bào)告_第2頁
北京交通大學(xué)單片機(jī)原理及應(yīng)用課程設(shè)計(jì)報(bào)告_第3頁
北京交通大學(xué)單片機(jī)原理及應(yīng)用課程設(shè)計(jì)報(bào)告_第4頁
北京交通大學(xué)單片機(jī)原理及應(yīng)用課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)原理及應(yīng)用課程設(shè)計(jì)報(bào)告基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)摘要:?jiǎn)纹瑱C(jī)是集中央處理器CPU、數(shù)據(jù)存儲(chǔ)器RAM、程序存儲(chǔ)器ROM、定時(shí)器/計(jì)數(shù)器T0/T1和多種接口于一體的微控制器。它體積小、成本低、功能強(qiáng),特別適用于控制領(lǐng)域,已廣泛應(yīng)用于工業(yè)測(cè)控、計(jì)算機(jī)通信、各類儀器儀表和工業(yè)自動(dòng)化中。傳統(tǒng)的數(shù)字電子時(shí)鐘采用了較多的分立元器件,不僅占用了很大的空間而且利用率也比很低,隨著系統(tǒng)設(shè)計(jì)復(fù)雜度的不斷提高,用傳統(tǒng)時(shí)鐘系統(tǒng)設(shè)計(jì)方法很難滿足設(shè)計(jì)需求。利用單片機(jī)設(shè)計(jì)的電子時(shí)鐘則可以克服傳統(tǒng)電子時(shí)鐘的弊端。本設(shè)計(jì)擬實(shí)現(xiàn)的基本功能為時(shí)鐘顯示,加入定時(shí)及秒表拓展功能。關(guān)鍵詞:?jiǎn)纹瑱C(jī);電子時(shí)鐘;鬧鐘;秒表; C語言一背景:

2、1.1數(shù)字電子鐘的背景: 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é)奏也越來越快。 時(shí)間對(duì)人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無傷大雅。但是,一旦重要事情,一時(shí)的耽誤可能釀成大禍。目前,單片機(jī)正朝著高性能和多品種方向發(fā)展趨勢(shì)將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價(jià)格和外圍電路內(nèi)裝化等幾個(gè)方面發(fā)展。下面是單片機(jī)的主要發(fā)展趨勢(shì)。單片機(jī)應(yīng)用的重要意義還

3、在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功能,現(xiàn)在已能用單片機(jī)通過軟件方法來實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。單片機(jī)模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的裝置,與機(jī)械式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更更長(zhǎng)的使用壽命,因此得到了廣泛的使用。1.2數(shù)字電子鐘的意義:數(shù)字鐘是采用數(shù)字電路實(shí)現(xiàn)對(duì)時(shí),分?jǐn)?shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭,車站, 碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,

4、使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時(shí)鐘及擴(kuò)大其應(yīng)用有著非?,F(xiàn)實(shí)的意義。1.3數(shù)字電子鐘的應(yīng)用: 數(shù)字鐘已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵?,廣泛用于個(gè)人家庭以及車站、碼頭、劇場(chǎng)、辦公室等公共場(chǎng)所,給人們的生活、學(xué)習(xí)、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進(jìn)的石英技術(shù),使數(shù)字鐘具有走時(shí)準(zhǔn)確、性能穩(wěn)定、攜帶方便

5、等優(yōu)點(diǎn),它還用于計(jì)時(shí)、自動(dòng)報(bào)時(shí)及自動(dòng)控制等各個(gè)領(lǐng)域。 二,時(shí)鐘設(shè)計(jì)分析2.1總體設(shè)計(jì)構(gòu)思針對(duì)要實(shí)現(xiàn)的功能,采用SST89E58RDA單片機(jī)進(jìn)行設(shè)計(jì),SST89E58RDA 單片機(jī)是一款低功耗,高性能CMOS8位單片機(jī),器件采用高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS- 51指令系統(tǒng)及80C51引腳結(jié)構(gòu)。SST89E58RDA既能夠直接燒寫程序也能與與keil連接進(jìn)行在線實(shí)時(shí)連調(diào),這是其他同款的單片機(jī)無法做到的,這樣既減少了程序修改一次燒寫一次的麻煩,節(jié)約了時(shí)間效率較高,也大大延長(zhǎng)的單片機(jī)的使用壽命,做到了經(jīng)濟(jì)合理又能實(shí)現(xiàn)預(yù)期的功能。在程序方面,采用分塊設(shè)計(jì)的方法,這樣既減小了編程難度、使程

6、序易于理解,又能便于添加各項(xiàng)功能。程序可分為按鍵掃描程序、鬧鐘的聲音程序(鬧鐘程序)、時(shí)間顯示程序、秒表顯示程序,時(shí)間調(diào)整程序、鬧鐘調(diào)整程序、延時(shí)程序、時(shí)間比對(duì)程序、中斷子程序等。運(yùn)用這種方法,關(guān)鍵在于各模塊的兼容和配合,若各模塊不匹配會(huì)出現(xiàn)意想不到的錯(cuò)誤。首先,在編程之前必須了解硬件結(jié)構(gòu)尤其是各引腳的用法,以及內(nèi)部寄存器、存儲(chǔ)單元的用法以及單片I/O口的定義與用法,否則,編程無從下手,更無法理解DJ51的設(shè)計(jì)思想,這是前期準(zhǔn)備工作。第二部分是硬件部分:依據(jù)想要的功能分塊設(shè)計(jì)設(shè)計(jì),比如輸入需要開關(guān)電路,輸出需要顯示驅(qū)動(dòng)電路和數(shù)碼管電路等。第三部分是軟件部分:先學(xué)習(xí)理解匯編語言的編程方法再根據(jù)設(shè)

7、計(jì)的硬件電路進(jìn)行分塊的編程調(diào)試,最終完成程序設(shè)計(jì)。第四部分是軟件畫圖部分:設(shè)計(jì)好電路后進(jìn)行畫圖,包括電路圖和仿真圖的繪制。第五部分是軟件仿真部分:軟硬件設(shè)計(jì)好后將軟件載入芯片中進(jìn)行仿真,仿真無法完成時(shí)檢查軟件程序和硬件電路并進(jìn)行修改直到仿真成功。第六部分是硬件實(shí)現(xiàn)部分:連接電路并導(dǎo)入程序檢查電路,若與設(shè)計(jì)的完全一樣一般能實(shí)現(xiàn)想要的功能。最后進(jìn)行功能擴(kuò)展,在已經(jīng)正確的設(shè)計(jì)基礎(chǔ)上,添加額外的功能!22各部分模塊工作原理:2.2.1存儲(chǔ)空間:?jiǎn)纹瑱C(jī)的結(jié)構(gòu)有兩種類型,一種是程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開的形式,即哈佛(Harvard)結(jié)構(gòu),另一種是采用通用計(jì)算機(jī)廣泛使用的程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器合二為一的結(jié)

8、構(gòu),即普林斯頓(Princeton)結(jié)構(gòu)。(1) 程序存儲(chǔ)空間:在邏輯上,內(nèi)部程序存儲(chǔ)程序存儲(chǔ)空間可以分為內(nèi)部程序存儲(chǔ)器和外部程序存儲(chǔ)器。(2)數(shù)據(jù)存儲(chǔ)空間:1)片內(nèi)數(shù)據(jù)存儲(chǔ)器共有256B,它們被分為兩部分:高128字節(jié)和低128字節(jié)。低128字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)器是真正的RAM區(qū),可以被用來寫入或讀出數(shù)據(jù)。這一部分存儲(chǔ)容量不是很大,但有很大的作用。它可以進(jìn)一步被分為3部分,如圖所示:圖2.4 內(nèi)部數(shù)據(jù)存儲(chǔ)器低128字節(jié)在內(nèi)部數(shù)據(jù)存儲(chǔ)器低128字節(jié)中,地址從00H1FH的最低32個(gè)字節(jié)組成4組工作寄存器,每組有8個(gè)工作寄存器(R0,R1,R2R7)。在一個(gè)具體時(shí)刻,CPU只能使用其中的一組工作寄

9、存器。當(dāng)前正在使用的工作寄存器組由位于高128字節(jié)的程序狀態(tài)字寄存器(PSW)中第3位(RS0)和第4位(RS1)的數(shù)據(jù)決定。程序狀態(tài)字寄存器中的數(shù)據(jù)可以通過編程來改變,這種功能為保護(hù)工作寄存器的內(nèi)容提供了很大的方便。如果用戶程序中不需要全部使用4組工作寄存器,那么剩下的工作寄存器所對(duì)應(yīng)的內(nèi)部數(shù)據(jù)存儲(chǔ)器也可以作為通用數(shù)據(jù)存儲(chǔ)器使用。在工作寄存器區(qū)上面,內(nèi)部數(shù)據(jù)存儲(chǔ)器的地址從20H2FH的16個(gè)字節(jié)范圍內(nèi),既可以通過字節(jié)尋址的方式進(jìn)入,也可以通過位尋址的方式進(jìn)入,位地址范圍從00H到7FH。內(nèi)部數(shù)據(jù)存儲(chǔ)器地址從30H7FH部分僅可以用作通用數(shù)據(jù)存儲(chǔ)器。內(nèi)部數(shù)據(jù)存儲(chǔ)器的高128字節(jié)被稱為特殊功能寄

10、存器(SFR)區(qū)。特殊功能寄存器被用作CPU和在片外圍器件之間的接口,CPU通過向相應(yīng)的特殊功能存儲(chǔ)器寫入數(shù)據(jù)實(shí)現(xiàn)控制對(duì)應(yīng)的在片外圍器件的工作,從相應(yīng)的特殊功能存儲(chǔ)器讀出數(shù)據(jù)實(shí)現(xiàn)讀取對(duì)應(yīng)的在片外圍器件的工作結(jié)果。2)片外數(shù)據(jù)存儲(chǔ)空間可以被映射為數(shù)據(jù)存儲(chǔ)器、擴(kuò)展的輸入/輸出接口、模擬/數(shù)字轉(zhuǎn)換器和數(shù)字/模擬轉(zhuǎn)換器等。這些外圍器件統(tǒng)一編址,所有外圍器件的地址都占用數(shù)據(jù)存儲(chǔ)空間的地址資源,因此CPU與片外外圍器件進(jìn)行數(shù)據(jù)交換時(shí)可以使用與訪問外部數(shù)據(jù)存儲(chǔ)器相同的指令。CPU通過向相應(yīng)的外部數(shù)據(jù)存儲(chǔ)器地址單元寫入數(shù)據(jù)實(shí)現(xiàn)控制對(duì)應(yīng)的片外外圍器件的工作,從相應(yīng)的外部數(shù)據(jù)存儲(chǔ)器地址單元讀出數(shù)據(jù)實(shí)現(xiàn)讀取對(duì)應(yīng)的片

11、外外圍器件的工作結(jié)果。2.22數(shù)碼管:數(shù)碼管是一種把多個(gè)LED顯示段集成在一起的顯示設(shè)備。有兩種類型,一種是共陽型,一種是共陰型。共陽型就是把多個(gè)LED顯示段的陽極接在一起,又稱為公共端。共陰型就是把多個(gè)LED顯示段的陰極接在一起,即為公共商。陽極即為二極管的正極,又稱為正極,陰極即為二極管的負(fù)極,又稱為負(fù)極。通常的數(shù)碼管又分為8段,即8個(gè)LED顯示段,這是為工程應(yīng)用方便如設(shè)計(jì)的,分別為A、B、C、D、E、F、G、DP,其中DP 是小數(shù)點(diǎn)位段。而多位數(shù)碼管,除某一位的公共端會(huì)連接在一起,不同位的數(shù)碼管的相同端也會(huì)連接在一起。即,所有的A段都會(huì)連在一起,其它的段也是如此,這是實(shí)際最常用的用法。數(shù)

12、碼管顯示驅(qū)動(dòng)方法可分為靜態(tài)顯示驅(qū)動(dòng)和動(dòng)態(tài)顯示驅(qū)動(dòng)兩種:(1)靜態(tài)顯示驅(qū)動(dòng)靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,顯示亮度高,缺點(diǎn)是占用I/O端口多。(2)動(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ù)

13、碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為12ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。如下圖所示數(shù)碼管內(nèi)部結(jié)構(gòu)圖:2.2.3 :I/0口:(1)P0口:P0口為一個(gè)8位漏級(jí)開路雙向I

14、/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的低八位。 (2) P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作 輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。 (3) P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的

15、緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存 儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。 (4) P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL),。這是由于上拉的緣故。另外P3口還具有第二功能P3口的第二功能如下表所示:口管腳第二功能P3.0RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2INT0(外部中斷0)P3.

16、3INT1(外部中斷1)P3.4 T0(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部輸入)P3.6WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)2.2.4 其他引腳:(1)RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。(2)EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí), /EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。(3)VCC:電源。(4)GND:接地。三時(shí)鐘的硬件設(shè)

17、計(jì)3.1 整體設(shè)計(jì)此次設(shè)計(jì)主要是應(yīng)用單片機(jī)來設(shè)計(jì)電子時(shí)鐘,硬件部分主要分以下電路模塊:顯示電路用4個(gè)共陰數(shù)碼管分別顯示,小時(shí)、分鐘,和秒(LED流水燈顯示),通過動(dòng)態(tài)掃描進(jìn)行顯示,從而避免了譯碼器的使用,同時(shí)節(jié)約了I/0端口,使電路更加簡(jiǎn)單。單片機(jī)采用SST89E58系列,這種單片機(jī)應(yīng)用簡(jiǎn)單,使用方便,適合電子鐘設(shè)計(jì)。電路的總體設(shè)計(jì)框架如下:?jiǎn)纹瑱C(jī)輸入部分晶振和復(fù)位輸出部分3.2 分塊設(shè)計(jì)模塊電路主要分為:輸入部分、輸出部分、復(fù)位和晶振電路。 輸入部分輸入信號(hào)主要是各種模式選擇和調(diào)整信號(hào),由按鍵開關(guān)提供。以下為輸入部分樣例:在本實(shí)驗(yàn)中主要用用P3.2-P3.5口輸入按鍵信號(hào),分別實(shí)現(xiàn)時(shí)間/鬧時(shí)

18、的切換,時(shí)間/鬧時(shí)的小時(shí)調(diào)整,時(shí)間/鬧時(shí)的分鐘調(diào)整,秒表等功能 輸出部分本電路的輸出信號(hào)為7段數(shù)碼管的位選和段選信號(hào),鬧鈴脈沖信號(hào),秒提示燈信號(hào)。本實(shí)驗(yàn)的數(shù)碼管是共陽的,為了防止段選信號(hào)不能驅(qū)動(dòng)數(shù)碼管,故在P0口連接上拉電阻后,再送段選信號(hào),以提高驅(qū)動(dòng),位選信號(hào)直接從P2口接入數(shù)碼管用來顯示時(shí),分(秒表功能中實(shí)現(xiàn)秒的十位,個(gè)位,0.1位。0.01位),P1口接8個(gè)LED燈,用來顯示秒如下圖:鬧鈴由P2.4端輸出,模塊如下: 晶振與復(fù)位電路本實(shí)驗(yàn)單片機(jī)時(shí)鐘用內(nèi)部時(shí)鐘,模塊如下:XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時(shí),外部振蕩信號(hào)應(yīng)直接加到XTAL1,而X

19、TAL2懸空。內(nèi)部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF左右。系統(tǒng)的時(shí)鐘電路設(shè)計(jì)是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。SST89單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個(gè)自激振蕩器。外接晶體諧振器以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對(duì)外接電容的值雖然沒有嚴(yán)格的要求,但電容的大小會(huì)影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此

20、系統(tǒng)電路的晶體振蕩器的值為12MHz,電容應(yīng)盡可能的選擇陶瓷電容,電容值約為22F。在焊接刷電路板時(shí),晶體振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。復(fù)位電路為手動(dòng)復(fù)位構(gòu)成,模塊如下:在振蕩器運(yùn)行時(shí),有兩個(gè)機(jī)器周期(24個(gè)振蕩周期)以上的高電平出現(xiàn)在此引腿時(shí),將使單片機(jī)復(fù)位,只要這個(gè)腳保持高電平,51芯片便循環(huán)復(fù)位。復(fù)位后P0P3口均置1引腳表現(xiàn)為高電平,程序計(jì)數(shù)器和特殊功能寄存器SFR全部清零。當(dāng)復(fù)位腳由高電平變?yōu)榈碗娖綍r(shí),芯片為ROM的00H處開始運(yùn)行程序。復(fù)位是由外部的復(fù)位電路來實(shí)現(xiàn)的。片內(nèi)復(fù)位電路是復(fù)位引腳RST通過一個(gè)斯密特觸發(fā)器與復(fù)

21、位電路相連,斯密特觸發(fā)器用來抑制噪聲,它的輸出在每個(gè)機(jī)器周期的S5P2,由復(fù)位電路采樣一次。復(fù)位電路通常采用上電自動(dòng)復(fù)位和按鈕復(fù)位兩種方式,此電路系統(tǒng)采用的是上電與按鈕復(fù)位電路。各模塊拼接組合,電路總體設(shè)計(jì)圖如下四電子時(shí)鐘的程序設(shè)計(jì):41基本原理:利用C語言編程,設(shè)置單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器T0為定時(shí)器功能,并設(shè)定其工作在方式1。設(shè)定時(shí)器 T0 賦初值,使得定時(shí)器T0每隔 5ms 中斷一次。設(shè)置變量mstcnt,使得每中斷一次變量mstcnt加 1,當(dāng)變量mstcnt值為 200 時(shí),則表明計(jì)時(shí)時(shí)間為 1s ,給秒變量加1。正常時(shí)間運(yùn)行過程中,秒位滿60后給分位加1,分位滿60給時(shí)位加1,時(shí)位

22、滿24時(shí)位清零。而在調(diào)節(jié)時(shí)間設(shè)定程序中,時(shí)位24計(jì)滿后由0開始;分位60計(jì)滿后由0開始,但計(jì)滿后不向時(shí)位進(jìn)1,這樣可以避免在錯(cuò)誤多按分按鍵的情況下,需要循環(huán)多次按時(shí)位調(diào)節(jié)鍵才能調(diào)節(jié)到所需數(shù)字。正常時(shí)間運(yùn)行原理如圖:4.2基本功能及操作:(由程序設(shè)定初值,使得開發(fā)板打開電源后的初始鬧鐘時(shí)間是8:40,時(shí)鐘時(shí)間是8:30。)(1)鬧鐘時(shí)間調(diào)節(jié):打開單片機(jī)開發(fā)板電源,數(shù)碼管顯示“8:40”,此時(shí)顯示的是鬧鐘設(shè)定的時(shí)間值,如需改變鬧鐘時(shí)間,則可按S2鍵以調(diào)節(jié)時(shí)加1,按S3鍵以調(diào)節(jié)分加1。(2)時(shí)鐘時(shí)間調(diào)節(jié):按S1(P3.2)鍵可以由鬧鐘時(shí)間顯示切換到時(shí)鐘時(shí)間顯示,同樣操作,按S2使時(shí)位加1,按S3使分

23、位加1。當(dāng)鬧鐘時(shí)間與時(shí)鐘時(shí)間相重合的時(shí)候蜂鳴器會(huì)響。(3)秒表操作:在鬧鐘顯示界面或時(shí)鐘顯示界面,可以通過按S4鍵切換到秒表狀態(tài),按S1鍵來調(diào)節(jié)秒表的開始和暫停。按S4鍵可以調(diào)回到時(shí)鐘或鬧鐘界面(取決于你在打開秒表之前的時(shí)間顯示狀態(tài))。4.3程序子模塊4.3.1 延時(shí)模塊數(shù)碼管顯示動(dòng)態(tài)掃描時(shí),用到延時(shí)程序,這里使用延遲1ms的程序,此程序需反復(fù)調(diào),除數(shù)碼管動(dòng)態(tài)掃描外,數(shù)碼管的閃爍提示,以及音樂模塊也用到了延時(shí),只是延時(shí)的長(zhǎng)短不同罷了,在此不再贅述。4.3.2中斷服務(wù)程序本實(shí)驗(yàn)中,計(jì)數(shù)器運(yùn)用T0中斷,T0中斷為時(shí)鐘定時(shí)所用,T1中斷用于音樂播放。T0的定時(shí)長(zhǎng)度為0.05s,工作于方式1,計(jì)數(shù)1次

24、,時(shí)長(zhǎng)1us,故計(jì)數(shù)器計(jì)數(shù)5000次,進(jìn)入中斷,計(jì)數(shù)初值為65536-5000=60536=#0EC77,裝滿定時(shí)器需要0.01s的時(shí)間,從而200次中斷為一秒,一秒之后,判斷是否到60秒,若不到則秒加一,然后返回,若到,則秒賦值為0,分加一,依次類推。包括日期顯示的功能也是如此。另外,由于要實(shí)現(xiàn)倒計(jì)時(shí)功能,因此在中斷程序中還要加入減一的寄存器,需要時(shí)將其進(jìn)行顯示。4.4 系統(tǒng)時(shí)鐘誤差分析時(shí)間是一個(gè)基本物理量,具有連續(xù)、自動(dòng)流逝、不重復(fù)等特性。我國(guó)時(shí)間基準(zhǔn)來自國(guó)家授時(shí)中心,人們?nèi)粘J褂玫臅r(shí)鐘就是以一定的精度與該基準(zhǔn)保持同步的。結(jié)合時(shí)間概念和誤差理論,可以定義電子鐘的走時(shí)誤差S=S1-S2,S1

25、表示程序?qū)嶋H運(yùn)行計(jì)算所得的秒;S2表示客觀時(shí)間的標(biāo)準(zhǔn)秒。S>0時(shí)表示電子鐘秒單元數(shù)值刷新滯后,即走時(shí)誤差為“慢”;反之,S<0表示秒單元數(shù)值的刷新超前,即走時(shí)誤差為“快”。本次設(shè)計(jì)的單片機(jī)電子鐘系統(tǒng)中,其誤差主要來源包括晶體頻率誤差,定時(shí)器溢出誤差,延遲誤差。晶體頻率產(chǎn)生震蕩,容易產(chǎn)生走時(shí)誤差;定時(shí)器溢出的時(shí)間誤差,本應(yīng)這一秒溢出,但卻在下一秒溢出,造成走時(shí)誤差;延遲時(shí)間過長(zhǎng)或過短,都會(huì)造成與基準(zhǔn)時(shí)間產(chǎn)生偏差,造成走時(shí)誤差。4.5 軟件調(diào)試問題及解決軟件程序的調(diào)試一般可以將重點(diǎn)放在分模塊調(diào)試上,統(tǒng)調(diào)是最后一環(huán)。軟件調(diào)試可以采取離線調(diào)試和在線調(diào)試兩種方式。前者不需要硬件仿真器,可借助

26、于軟件仿真器即可;后者一般需要仿真系統(tǒng)的支持。本次課題,Keil軟件來調(diào)試程序,通過各個(gè)模塊程序的單步或跟蹤調(diào)試,使程序逐漸趨于正確,最后統(tǒng)調(diào)程序。仿真部分采用protus 7.5 professional軟件,此軟件功能強(qiáng)大且操作較為簡(jiǎn)單,可以很容易的實(shí)現(xiàn)各種系統(tǒng)的仿真。首先打開protus 7.5 professional軟件,在元件庫中找到要選用的所有元件,然后進(jìn)行原理圖的繪制;繪制好后再選擇keil4已經(jīng)編譯好的*.hex文件,選擇運(yùn)行,觀察顯示結(jié)果,根據(jù)顯示的結(jié)果和課題的要求再修改程序,再運(yùn)行查,直到滿足要求。五.軟件仿真:(1)原理:(2)實(shí)時(shí):(3)鬧鐘:(4)秒表:Keil聯(lián)調(diào)

27、六源程序代碼:C語言是計(jì)算機(jī)提供給用戶的最快最有效的語言,也是能夠利用計(jì)算機(jī)的所有硬件特性并能夠直接控制硬件的唯一語言。對(duì)于對(duì)電子時(shí)鐘的設(shè)計(jì)這樣的程序來說,用c語言是最快最有效的語言,下面是用c語言進(jìn)行編寫的基于單片機(jī)的電子時(shí)鐘的設(shè)計(jì)的部分主要流程程序。#include"reg52.h"#include"intrins.h"#define uchar unsigned char#define uint unsigned int/*七段共陽管顯示定義,段選和位選都是低電平有效*/ code unsigned char digseg=0xC0,0xF9,0x

28、A4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E; /數(shù)碼管顯示定義 / 0 1 2 3 4 5 6 7 8 9 A b C d E Fcode unsigned char digseg1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0E;/ 數(shù)碼管顯示定義 / 0 1 2 3 4 5 6 7 8 9 A b C d E Fcode unsigned char segsel=0xfe,0xfd,0xf

29、b,0xf7; /數(shù)碼管位選定義 /*uchar code SONG_TONE= 212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0; uchar code SONG_LONG= 9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0; */ /音樂 /*定義并初始化變量*/uchar fen=40;uchar shi=8;uchar mstcnt=0;ucha

30、r seconde=0;uchar minite=30;uchar hour=8;uchar n=0,a=0;uchar x=0,y=0,z=0,w=0,i,change; /x,y,z,w分別表示秒表的十位,個(gè)位,0.1位,0.01位,初值均為0uchar temp=0xfe;sbit P3_2=P32; /按鍵定義 sbit P3_3=P33; sbit P3_4=P34; sbit P3_5=P35;sbit BUZZER=P24;/蜂鳴器定義 void delay(uchar k ); /延時(shí)子程序 void time_pro( ); /時(shí)間定義子函數(shù) void display( );

31、 /時(shí)鐘顯示子程序 void dishow( ); /鬧鐘顯示子程序void keyscan( ); /按鍵掃描子程序 void compare( ); /時(shí)間比對(duì)子程序void PlayMusic(); /音樂播放子程序void mb(); /秒表子程序void delay (uchar k) /延時(shí)子程序 uchar j;while(k-)!=0) for(j=0;j<125;j+) ; /* void PlayMusic() /音樂播放子程序 uint i=0,j,k; while(SONG_LONGi!=0|SONG_TONEi!=0) for(j=0;j<SONG_LON

32、Gi*20;j+) BUZZER=BUZZER; for(k=0;k<SONG_TONEi/3;k+); delay(30); i+; */void time_pro( void) /時(shí)間定義子函數(shù) if(seconde=60) seconde=0; minite+; / 秒初值為零,計(jì)滿60,清零,分加1 if( minite=60) minite=0; hour+; / 分初值為零,計(jì)滿60,清零,時(shí)加1 if(hour=24) hour=0; / 小時(shí)初值為零,計(jì)滿24,清零 /*/ /*鍵盤掃描子程序*/*/void keyscan (void)if(P3_5=0) delay(

33、90); if(P3_5=0) /按鍵秒表啟動(dòng) while(!P3_5); n=n+1;if(n>=2) n=0;/n>=2時(shí),置零 if(n=0) if(P3_2=0) delay(90); if(P3_2=0) / while(!P3_2); a=a+1;if(a>=2) a=0;/a>=2時(shí),置零 if(n=0) if(a=0) dishow(); /數(shù)碼管時(shí)間顯示 if(a=1) display( ); /數(shù)碼管鬧鐘顯示 compare( ); /比較函數(shù) if(n=0) if(a=1) if(P3_3=0) delay(90); if(P3_3=0) /按鍵當(dāng)

34、前時(shí)間小時(shí)加1 hour+; if(hour=24) hour=0; if(P3_4=0) delay(90); if(P3_4=0) /按鍵當(dāng)前時(shí)間分鐘加1 minite+; if(minite=60) minite=0; if(a=0) if(P3_4=0) delay(90); if(P3_4=0) /按鍵鬧鐘時(shí)間分鐘加1 fen+; if(fen=60) fen=0; if(P3_3=0) delay(90); if(P3_3=0)/按鍵鬧鐘時(shí)間小時(shí)加1 shi+; if(shi=24) shi=0; /*/ /*秒表子程序*/ /*/if(n=1) mb(); if(w>=10

35、) /秒的0.01位滿10,0.1位進(jìn)1,同時(shí)0.01位清零,下同 w=0; z+; if(z>=10) z=0; y+;if(y>=10) y=0; x+;if(x>=6) /60秒秒表,秒十位為6,全部清零 x=0;y=0;z=0;w=0; /*/ /*秒表顯示子程序*/ /*/void mb() P2=segsel0; /位選顯示 數(shù)碼管第一位 P0=digsegx; / 段選顯示 數(shù)碼管第一位 ,秒十位 delay(4); P2=segsel1; /位選顯示 數(shù)碼管第二位 P0=digseg1y; / 段選顯示 數(shù)碼管第二位 秒個(gè)位 delay(4); P2=segs

36、el2; /位選顯示 數(shù)碼管第三位 P0=digsegz; / 段選顯示 數(shù)碼管第三位 秒0.1位 delay(4); P2=segsel3; /位選顯示 數(shù)碼管第四位 P0=digsegw; / 段選顯示 數(shù)碼管第四位 秒0.01位 delay(4); /*/ /*當(dāng)前時(shí)鐘顯示子程序*/ /*/void display(void) P2=segsel0; P0=digseghour/10; /顯示小時(shí)的十位 delay(4); P2=segsel1; P0=(digseg1(hour%10); /顯示小時(shí)的個(gè)位 delay(4); P2=segsel2; P0=digsegminite/10; /顯示分的十位 delay(4); P2=segsel3; P0=digsegminite%10; /顯示分的個(gè)位 delay(4); /*/ /*鬧鐘顯示子程序*/ /*/void dishow(void) P2=segsel0; P0=digsegshi/10; /顯示小時(shí)的十位 delay(4); P2=segsel1; P0=(digseg1(shi%10); /顯示小時(shí)的個(gè)位 delay(4); P2=segsel2; P0=digsegfen/10; /顯示分的十位 delay(4); P2=segsel3; P0=digseg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論