帶自定制語音功能定時系統(tǒng)設(shè)計_第1頁
帶自定制語音功能定時系統(tǒng)設(shè)計_第2頁
帶自定制語音功能定時系統(tǒng)設(shè)計_第3頁
帶自定制語音功能定時系統(tǒng)設(shè)計_第4頁
帶自定制語音功能定時系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、-. z畢業(yè)設(shè)計論文中文摘要單片微型機算計俗稱單片機,是一種運用十分廣泛的微處理器。在各種稱為計算機控制的儀器和設(shè)備中的計算機控制都是用單片機來實現(xiàn)的。本系統(tǒng)以M16為核心器件,ISD1820、DS1302、DS1602顯示器為外圍,通過1602液晶顯示年月日、星期、時分秒,時間格式可以12或24進制,實現(xiàn)了計時與時間校正、整點報時、時鐘掉電保持、日歷、電子音樂鬧鐘、自定義錄取音樂鬧鈴、任意按鍵語音報時和鬧鐘。關(guān)鍵字: 鬧鈴;單片機;定時器畢業(yè)設(shè)計論文英文摘要Title Custom functions with the sound of the timing systemAbstactSin

2、gle piece of a single-chip microcontroller, calculate monly known as is the application of a wide range of microprocessors. In all kinds of puter control called instruments and equipment of the puter control is realized by using single chip processor. This system for the core device, with the M16 IS

3、D2560, DS1302, DS1602 displays for peripheral, through the 1602 LCD display date, week, meticulous, when time format can 12 or into the system, realize the 24 time and time correction, time, the clock on the hour power lost to keep, calendar, electronic music alarm clock, custom admitted music alarm

4、, any time and key voice alarm clock.Keywords: Alarm; SCM; timer-. z目 錄摘要TOC o 1-2 h u HYPERLINK l _Toc16576 1 概述 PAGEREF _Toc16576 1 HYPERLINK l _Toc25235 2 設(shè)計思路 PAGEREF _Toc25235 4 HYPERLINK l _Toc577 2.1 數(shù)字鐘的簡單功能說明 PAGEREF _Toc577 4 HYPERLINK l _Toc22581 2.2 思路說明 PAGEREF _Toc22581 4 HYPERLINK l _

5、Toc10768 3 硬件設(shè)計 PAGEREF _Toc10768 5 HYPERLINK l _Toc8516 3.1 mega16芯片的簡單介紹 PAGEREF _Toc8516 5 HYPERLINK l _Toc32140 3.2 LCD芯片 PAGEREF _Toc32140 10 HYPERLINK l _Toc19065 3.3 按鍵控制 PAGEREF _Toc19065 14 HYPERLINK l _Toc2062 3.4 ISD1820語音芯片 PAGEREF _Toc2062 15 HYPERLINK l _Toc17708 4 軟件設(shè)計 PAGEREF _Toc177

6、08 17 HYPERLINK l _Toc17263 4.1 中斷系統(tǒng) PAGEREF _Toc17263 17 HYPERLINK l _Toc8770 4.2 定時器/計數(shù)器 PAGEREF _Toc8770 18 HYPERLINK l _Toc188514.3 程序設(shè)計 PAGEREF _Toc18851 22 HYPERLINK l _Toc21985 結(jié) 論 PAGEREF _Toc21985 29 HYPERLINK l _Toc56 致 PAGEREF _Toc56 30 HYPERLINK l _Toc20850 參 考 文 獻 PAGEREF _Toc20850 31 H

7、YPERLINK l _Toc29881 附 錄 PAGEREF _Toc29881 321 概述今天,傳統(tǒng)的電子系統(tǒng)已經(jīng)全面轉(zhuǎn)變成以嵌入式系統(tǒng)為核心的現(xiàn)代電子系統(tǒng),在嵌入式系統(tǒng)底端應(yīng)用中,存在著大量的小型嵌入式應(yīng)用系統(tǒng);這些系統(tǒng)用于資源和控制要求的限制,采用計算機語言設(shè)計程序會成為系統(tǒng)程序設(shè)計的一種主要方法。在C語言為根底的系統(tǒng)程序設(shè)計中,規(guī)化設(shè)計至關(guān)重要。遵循C語言編寫格式,規(guī)和計算機軟件的工程方法。在系統(tǒng)程序設(shè)計中,也要從單純的功能性設(shè)計變到可能性、可靠性和產(chǎn)品應(yīng)用優(yōu)化等綜合性設(shè)計充分發(fā)揮軟件在提高系統(tǒng)綜合品質(zhì)上的效益,近幾十年來,單片機在生產(chǎn)過程控制、自動檢測、數(shù)據(jù)采集與處理、科學計算

8、、商業(yè)管理和辦公自動化等方面獲得了廣泛應(yīng)用。單片機具有體積小、重量輕、耗能省、價格低、可靠性高和通用靈活等優(yōu)點。而本次設(shè)計的帶自定制語音功能的定時系統(tǒng)也隨著單片機的開展被人們所認識與應(yīng)用并逐漸成為必不可少的必需品,被廣泛應(yīng)用于個人家庭以車站、碼頭、劇院、辦公室等公共場所,給人們的生活、學習、工作、娛樂帶來了極大的方便。雖然現(xiàn)在市場上已經(jīng)有這類產(chǎn)品的出現(xiàn),價格合理,使用方便,但是這里介紹的帶自定制語音功能的數(shù)字鐘可以滿足使用者的特殊要求,輸出方式靈活,如可以隨意設(shè)置時、分、秒的輸出等等。由于單片機技術(shù)的開展,特別是mega16芯片技術(shù)的開展,使LCD時鐘具有體積小,耗電省,計時準確,性能穩(wěn)定,維

9、護方便等優(yōu)點。數(shù)字電子鐘的設(shè)計方法有多種,例如,利用FPGA+液晶顯示器+語音芯片;利用ARM+語音芯片;利用mega16+語音芯片+DS1602;利用凌陽單片機與時鐘芯片;利用中小規(guī)模集成電路組成電子鐘。其中利用mega16+語音芯片+DS1602的設(shè)計方案實現(xiàn)簡單,用到的計算機語言是我們學過的C語言,因而在程序設(shè)計上相對簡單些,其所需本錢也在我的承受圍之,mega16單片機的功能相對更加完善,可以滿足此次設(shè)計的所有要求,而且容易上手。為了做好這次畢業(yè)設(shè)計我從圖書館和互聯(lián)網(wǎng)上網(wǎng)查閱了大量的相關(guān)資料,深刻理解了畢業(yè)設(shè)計任務(wù),明確了畢業(yè)論文要求,安排了設(shè)計方案步驟,最后完成了畢業(yè)設(shè)計作品。本次畢

10、業(yè)設(shè)計所要求的是帶自定制語音功能的數(shù)字鐘,可以學習利用單片機的定時器設(shè)計時間計時處理,這在許多電子設(shè)備上是常用的功能。它的功能要求如下所述:1使用文字型LCD顯示器來顯示現(xiàn)在的時間2顯示格式為時時:分分:秒秒3具有四個按鍵操作來設(shè)置現(xiàn)在的時間4自定義錄取音樂鬧鈴程序執(zhí)行后,工作指示燈LED閃動,表示程序開場執(zhí)行,LCD顯示器顯示00:00:00,然后開場計時,操作鍵K1K4動作如下: 操作鍵K1:進入設(shè)置現(xiàn)在的時間。 操作鍵K2: 設(shè)置小時。 操作鍵K3:設(shè)置分鐘。 操作鍵K4:完成設(shè)置。為了實現(xiàn)上述功能,本次設(shè)計主要采用了單片機技術(shù)來實現(xiàn)對時鐘電路的控制,采用mega16芯片和LCD液晶顯示

11、芯片來控制整個電路,外加ISD1820語音芯片。本次設(shè)計的帶自定制語音功能定時系統(tǒng),主要有mega16單片機局部、LCD液晶顯示器局部、ISD1820語音局部和按鍵控制局部組成,文中詳細介紹了LCD時鐘的控制電路、程序以及其所用到的芯片,主要是mega16芯片、ISD1820語音芯片和1602LCD芯片,其中mega16芯片包括中斷系統(tǒng)及定時/計數(shù)器,ISD1820芯片主要功能是錄音報時,LCD芯片主要用于顯示時間而按鍵控制則用于調(diào)整時間。2 設(shè)計思路2.1 數(shù)字鐘的簡單功能說明數(shù)字鐘的根本功能說明如下:1使用文字型LCD顯示器來顯示現(xiàn)在的時間2顯示格式為時時:分分:秒秒3具有四個按鍵操作來設(shè)

12、置現(xiàn)在的時間LCD顯示器顯示00:00:00,然后開場計時,操作鍵K1K4動作如下: 操作鍵K1:進入設(shè)置現(xiàn)在的時間。 操作鍵K2: 設(shè)置小時。 操作鍵K3:設(shè)置分鐘。 操作鍵K4:完成設(shè)置。2.2 思路說明要實現(xiàn)上面所要求得功能單靠一個顯示器是不行的,所以就需要一些元器件或者芯片來共同實現(xiàn),這也就用到了單片機中最新功能豐富的mega16芯片,而芯片中所用到的無非是中斷系統(tǒng)及定時/計數(shù)器,它們是時鐘時間實現(xiàn)變化必不可少的東西。LCD顯示器從其名字上就能看出它主要是用來顯示時間數(shù)字的,由于它的本錢較高所以不像LED顯示器則普遍的應(yīng)用,但是我覺得本次設(shè)計中用LCD比LED更加直觀易懂一些,所以選用

13、了LCD顯示器。最后要實現(xiàn)數(shù)字的設(shè)置就要有按鍵的控制,要不此時鐘也就沒有用武之地了。為了實現(xiàn)語音功能就需要語音芯片了,這里我選擇了ISD1820語音芯片。當然,在實現(xiàn)過程中,電源是不可缺少的。3 硬件設(shè)計3.1 mega16芯片的簡單介紹單片機以其高可靠性、高性價比、低電壓、低功耗等一系列優(yōu)點,近幾年得到迅猛開展和大圍推廣,廣泛應(yīng)用于工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、通信設(shè)備、商業(yè)營銷設(shè)備、醫(yī)療電子設(shè)備、日常消費類產(chǎn)品、玩具及汽車電子產(chǎn)品等。并且已經(jīng)深入到工業(yè)生產(chǎn)以及人們生活的各個層次中。AVR單片機是1997年由ATMEL公司研發(fā)出的增強型置Flash的RISC精簡指令集高速8位單

14、片機。ATmega16是基于增強的AVR RISC構(gòu)造的低功耗8位CMOS微控制器,其引腳排列如圖3-1:圖3-1 引腳排列圖VCC:數(shù)字電路電源GND:地端口A(PA7PA0):端口A 為8 位雙向I/O 口,具有可編程的部上拉電阻。其輸出緩沖器具有對稱的驅(qū)動特性,可以輸出和吸收大電流。作為輸入使用時,假設(shè)部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復位過程中,即使系統(tǒng)時鐘還未起振,端口A 處于高阻狀態(tài)。RESET:復位輸出引腳。超出最小門限時間的低電平將引起系統(tǒng)復位。低于此時間的脈沖不能保證可靠復位。*TAL1:反向振蕩器放大器及片時鐘操作電路的輸出。*TAL2:反向振蕩器放大器的輸

15、出。AVCC:AVCC為端口F以及ADC模數(shù)轉(zhuǎn)換的電源,需要與VCC相連接,即使沒有使用ADC也應(yīng)該如此。使用ADC時應(yīng)該通過一個低通濾波器與VCC連接。AREF:AREF為ADC的模擬基準輸出引腳。端口B、端口C、端口D作為普通I/O口與端口A的功能根本一樣,同時每個端口都有各自獨特的其他功能。 ATmega16的構(gòu)造框圖如圖3-2。AVR核具有豐富的指令集和32個通用工作存放器,所有的存放器直接算數(shù)邏輯單元ALU相連接,使得一條指令可以在一個時鐘周期同時兩個獨立的存放器。這種構(gòu)造大大提高了代碼效率,并且具有比普通的CISC微控制器最高至10倍的數(shù)據(jù)吐率。圖3-2 構(gòu)造框圖3.1.1 ATm

16、ega16的時鐘電路單片機部的各種功能電路幾乎全是由數(shù)字電路組成的,而數(shù)字電路的工作離不開時鐘信號,每一個工作指令的運行都是在時鐘信號的協(xié)調(diào)下完成的。單片機的時鐘電路為整個單片機的工作提供系統(tǒng)時鐘信號,也為單片機與其他外接設(shè)備之間的通信提供同步信號。1、外接晶體/瓷振蕩器*TAL1與*TAL2分別為用作片振蕩器的反向放大器的輸入和輸出,如圖3-3所示,這個振蕩器可以使用石英晶體,也可以使用瓷諧振器。熔絲位CKOPT用來選擇這兩種放大器模式的其中之一。當CKOPT被編程時振蕩器在輸出引腳產(chǎn)生滿幅度的振蕩。這種模式適合于噪聲環(huán)境,以及需要通過*TAL2驅(qū)動第二個時鐘緩沖器的情況。而且這種模式的頻率

17、圍比擬寬。當保持CKOPT為未編程狀態(tài)時,振蕩器的輸出信號幅度比擬小。其優(yōu)點是大大降低了功耗,但是頻率圍比擬窄,而且不能驅(qū)動其他時鐘緩沖器。對于諧振器,CKOPT未編程時的最大頻率為8 MHz,CKOPT編程時為16MHz。圖3-3 晶體振蕩器連接圖2、外接RC振蕩器對于時間不敏感的系統(tǒng)可以使用3-4所示的外部RC振蕩器。頻率可以通過方程f=1/(3RC)進展粗略的估計。圖3-4 外部RC配置3、使用部振蕩器標定的片RC振蕩器提供了固定的1.0、2.0、4.0或8.0MHz的時鐘。這些頻率都是5V、25下的標稱數(shù)值。選擇這個時鐘此時不能對CKOPT進展編程之后就無需外部器件了。復位時硬件將標定

18、字節(jié)加載到OSCCAL存放器,自動完成對RC振蕩器的標定。4、使用外部時鐘AVR單片機允許外部時鐘電路為其提供系統(tǒng)時鐘信號,為了從外部時鐘源驅(qū)動芯片,*TAL1必須按如圖3-5所示進展連接。同時,熔絲位CKSEL必須編程為0000。圖3-5 外部時鐘配置圖3.1.2 復位電路復位電路向單片機的RESET引腳輸入一個低電平,當?shù)碗娖匠掷m(xù)時間大于最小脈沖寬度時即觸發(fā)復位過程,此時沒有時鐘信號在運行。當外加信號到達復位門限電壓時,復位延時開場,延時完畢后單片機開場工作。常用的復位電路如圖3-6所示。圖3-6 ATmega16的復位電路3.2 LCD芯片3.2.1 1602LCD引腳功能LCD1602

19、圖3-7 引腳功能編號符號引腳說明編號符號引腳說明1GND電源地9D2Data I/O2VCC電源正極10D3Data I/O3VL液晶顯示偏壓信號11D4Data I/O4RS數(shù)據(jù)/命令選擇端H/L12D5Data I/O5R/W讀/寫選擇端H/L13D6Data I/O6E使能信號14D7Data I/O7D0Data I/O15BLA背光源正極8D1Data I/O16BLK背光源負極表3-1 引腳功能說明 3.2.2 控制方式通過CPU來控制LCD模塊,方式十分簡單,LCD模塊其部可以看成有兩組存放器,一個為指令存放器,一個為數(shù)據(jù)存放器,由RS引腳控制。所有對指令存放器或數(shù)據(jù)存放器的存

20、取均需檢查LCD部的忙碌標志(Busy Flag),此標志用來告知LCD部正在工作,并不允許接收任何的控制命令。而此位的檢查可以令RS=0,讀取位7來加以判斷,當此位為0時才可以寫入指令存放器或數(shù)據(jù)存放器。3.2.3 LCD控制指令1)去除顯示器指令碼為0*02,將LCD DD RAM 數(shù)據(jù)全部填入空白碼20H,執(zhí)行此指令將去除顯示器容,同時光標移到左上角。2光標歸位設(shè)置指令碼為0*02,地址計數(shù)器被除為0,DD RAM數(shù)據(jù)不變,光標移到左上腳。3設(shè)置字符進入模式此指令格式為:B7B6B5B4B3B2B1B0000001I/DS表3-2 字符進入模式指令格式其中的有關(guān)符號說明如下:1I/D :

21、地址計數(shù)器遞增或遞減控制,I/D=1時為遞增,I/D0時為遞減。每次讀寫顯示RAM中的字符碼一次則地址計數(shù)器會加1或減1。光標所顯示的位置也會同時向右移到一個位置I/D1或向左移到一個位置I/D=0。2S :顯示屏移動或不移動控制,當S=1時,寫入一個字府到DD RAM時,顯示屏向左(I/D=1)或向右(I/D=0)移動一格,而光標的位置不變。當S=0時,則顯示屏不移動。4 顯示器開關(guān)此指令格式為:B7B6B5B4B3B2B1B000001DCB表3-3 顯示器開關(guān)指令格式其中有關(guān)符號說明如下: D :顯示屏開啟或開關(guān)控制位,D=1時,顯示屏開啟,D0時,顯示屏關(guān)閉。2 C :光標出現(xiàn)控制位,

22、C=1則光標會出現(xiàn)地址計數(shù)器所指的位置,C0則光標會不出現(xiàn)。3 B :光標閃爍控制位,B=1光標出現(xiàn)后會閃爍,B0,光標不會閃爍。5 顯示光標移位此指令格式為:D7D6D5D4D3D2D1D00001S/CR/L*表3-4 光標移動指令格式其中有關(guān)符號說明如下:*表示0或1皆可。S/C、R/L的設(shè)置及說明下表所示。S/CR/L動作00光標向左移動01光標向右移動10字符和光標向左移動11字符和光標向右移動表3-5 S/C、R/L設(shè)置及說明6 功能設(shè)置此指令格式為:B7B6B5B4B3B2B1B0001DLNF*表3-6 功能設(shè)置指令格式其中有關(guān)符號說明如下:1) DL :數(shù)據(jù)長度選擇。DL=1

23、時為8位數(shù)據(jù)轉(zhuǎn)移,DL0時則為4位數(shù)據(jù)轉(zhuǎn)移,使用D7D4 4個位,分2次送入一個完整的字符數(shù)據(jù)。2N :顯示屏為單列或雙列選擇。N=0為單列顯示,N1為雙列顯示。3F :大小字符顯示選擇。F=1時為510點陣字會大些,F(xiàn)=0則為57點陣字型。 3.3 按鍵控制微機所用到的鍵盤可分為編碼鍵盤非編碼鍵盤兩種。在本設(shè)計中用到的是非編碼鍵盤所以只介紹它與mega16單片機的接口連接。鍵盤與CPU的連接方式可以分為獨立式按鍵和矩陣式鍵盤。3.3.1 獨立式按鍵獨立式按鍵是各按鍵相互獨立,每個按鍵占用一根I/O端線,每根I/O端線上的按鍵工作狀態(tài)不會影響其他I/O端線上按鍵的工作狀態(tài)。如圖3-8所示:圖3

24、-8 獨立式按鍵3.3.2 矩陣式鍵盤矩陣式鍵盤又稱為行列式鍵盤,I/O端線分為行線和列線,按鍵跨接在行線和列線上。按鍵按下時,行線與列線連通。無論是獨立式按鍵還是矩陣式鍵盤,與mega16 I/O口的連接方式可分為與I/O口直接連接和與擴展I/O口連接,與擴展I/O口連接又可分為與并行擴展I/O口連接和與串行擴展I/O口連接,由于本設(shè)計中沒有用到此方式在此就不做具體的介紹。3.4 ISD1820語音芯片美國ISD公司于2001年最新推出一種單片820秒單段語音錄放電路ISD1810,采用CMOS技術(shù),含振蕩器,話筒前置放大,自動增益控制,防混淆濾波器,揚聲器驅(qū)動及FLASH陣列。一、主要特征

25、:使用方便的單片8至20秒語音錄放外接電阻調(diào)整錄音時間高質(zhì)量、自然的語音復原技術(shù)置喇叭驅(qū)動放大電路邊沿/電平觸發(fā)放音10,000次錄音周期典型自動節(jié)電、維持電流0.5uA35V單電源工作不耗電信息保存100年典型值借助專用設(shè)備可以批量拷貝表3-7 ISD1820語音芯片主要特性二、管腳排列圖:圖3-9 管腳排列圖三、應(yīng)用原理圖:圖3-10 應(yīng)用原理圖Rosc錄放時間采樣頻率典型帶寬80K8秒8.0KHz3.4KHz100K10秒6.4KHz2.6KHz120K12秒5.3KHz2.3KHz160K16秒4.0KHz1.7KHz200K20秒3.2KHz1.3KHz表3-8 振蕩電阻和取樣率表通

26、過震蕩電阻和取樣率表可以看出,將ROSC端所接的振蕩電阻改為電位器可以無級調(diào)節(jié)語音的快慢,錄入的時間越短音質(zhì)越好,錄入的時間越長音質(zhì)越差。4 軟件設(shè)計4.1 中斷系統(tǒng)當計算機系統(tǒng)正在執(zhí)行程序時出現(xiàn)了*種特殊情況,如定時時間到了、A/D轉(zhuǎn)換完畢或有外部信號輸入等。此時CPU需要暫停當前執(zhí)行的程序,轉(zhuǎn)去處理相應(yīng)的處理程序,當這段程序執(zhí)行完畢之后,再回來執(zhí)行先前被中止的程序,這個過程就是中斷。引起中斷的原因稱為中斷源。中斷源向CPU發(fā)出處理的請求稱為中斷請求。發(fā)生中斷時被中止的程序的暫停點稱為斷點。產(chǎn)生中斷之后CPU執(zhí)行的程序稱為中斷效勞程序。返回斷點的過程稱為終端返回。中斷裝置和中斷效勞程序稱為中

27、斷系統(tǒng)。中斷是計算機技術(shù)中一個很重要的功能,是為了使計算機能夠?qū)ο到y(tǒng)外隨機發(fā)生的事件進展及時處理而設(shè)置的,計算機進展實時控制、故障自動處理以及計算機外圍設(shè)備間的數(shù)據(jù)傳送往往采用中斷系統(tǒng)。ATmega16單片機共有21個中斷源,其中有1個復位中斷,8個定時器中斷源,3個外部中斷源,1個A/D轉(zhuǎn)換中斷源,1個SPI串行傳輸中斷源,1個EEP-ROM中斷源,1個模擬比擬器中斷源,1個兩線串行口中斷源,1個保存程序存儲器容就緒中斷源。每一個中斷源和復位在程序空間都有獨立的中斷向量,每個中斷向量,與所有中斷都相關(guān)的的存放器有兩個:狀態(tài)存放器和通用中斷控制存放器。狀態(tài)存放器用于控制所有中斷是否使能,通用中

28、斷控制存放器用于控制中斷向量位置。AVR中斷響應(yīng)時間最少為4個時鐘周期。4個時鐘周期后,程序跳轉(zhuǎn)到實際的中斷處理例程。在這4個時鐘期期間PC自動入棧。在通常情況下,中斷向量為一個跳轉(zhuǎn)指令,此跳轉(zhuǎn)需要3個時鐘周期。如果中斷在一個多時鐘周期指令執(zhí)行期間發(fā)生,則在此多周期指令執(zhí)行完畢后MCU才會執(zhí)行中斷程序。假設(shè)中斷發(fā)生時MCU處于休眠模式,中斷響應(yīng)時間還需增加4個時鐘周期。此外還要考慮到不同的休眠模式所需要的啟動時間。這個時間不包括在前面提到的時鐘周期里。4.2 定時器/計數(shù)器4.2.1 定時器/計數(shù)器1的部構(gòu)造16位T/C的簡化框圖示于4-1。I/O引腳的實際位置請參見圖3-1。CPU可的I/O

29、存放器,包括I/O位和I/O引腳以粗體表示。圖4-1 T/C框圖4.2.2 輸出比擬單元16位比擬器持續(xù)比擬TT1與OCR1*的容,一旦發(fā)現(xiàn)它們相等,比擬器立即產(chǎn)生一個匹配信號。然后OCF1*在下一個定時器時鐘置位。如果此時OCIE1* = 1,OCF1*置位將引發(fā)輸出比擬中斷。圖4-2 輸出比擬單元方框圖中斷執(zhí)行時OCF1*標志自動清零,或者通過軟件在其相應(yīng)的I/O位置寫入邏輯1也可以清零。根據(jù)WGM13:0與1*1:0的不同設(shè)置,波形發(fā)生器用匹配信號生成不同的波形。波形發(fā)生器利用TOP和BOTTOM信號處理在*些模式下對極值的操作。輸出比擬單元A的一個特質(zhì)是定義T/C的TOP值(即計數(shù)器的

30、分辨率)。此外,TOP值還用來定義通過波形發(fā)生器產(chǎn)生的波形的周期。圖4-2給出輸出比擬單元的方框圖。存放器與位上的小寫n表示器件編號(n = 1表示T/C1),*表示輸出比擬單元(A/B)。框圖中非輸出比擬單元局部用陰影表示。4.2.3 存放器定時器/ 計數(shù)器TT1、輸出比擬存放器OCR1A/B與輸入捕捉存放器ICR1均為16位存放器。T/C控制存放器TCCR1A/B為8位存放器,沒有CPU的限制。中斷請求(圖中簡寫為Int.Req.)信號在中斷標志存放器TIFR1都有反映。所有中斷都可以由中斷屏蔽存放器TIMSK1單獨控制。圖中未給出TIFR1與TIMSK1。T/C可由部時鐘通過預分頻器或通

31、過由T1引腳輸入的外部時鐘驅(qū)動。引發(fā)T/C數(shù)值增加(或減少)的時鐘源及其有效沿由時鐘選擇邏輯模塊控制。沒有選擇時鐘源時T/C處于停頓狀態(tài)。時鐘選擇邏輯模塊的輸出稱為clkT1。雙緩沖輸出比擬存放器OCR1A/B一直與T/C的值做比擬。波形發(fā)生器用比擬結(jié)果產(chǎn)生PWM或在輸出比擬引腳OC1A/B輸出可變頻率的信號。比擬匹配結(jié)果還可置位比擬匹配標志OCF1A/B,用來產(chǎn)生輸出比擬中斷請求。當輸入捕捉引腳ICP1 或模擬比擬器輸入引腳有輸入捕捉事件產(chǎn)生(邊沿觸發(fā))時,當時的T/C值被傳輸?shù)捷斎氩蹲酱娣牌鞅4嫫饋怼]斎氩蹲絾卧ㄒ粋€數(shù)字濾波單元(噪聲消除器)以降低噪聲干擾。在*些操作模式下,TOP值或

32、T/C的最大值可由OCR1A存放器、ICR1存放器,或一些固定數(shù)據(jù)來定義。在PWM模式下用OCR1A作為TOP值時,OCR1A存放器不能用作PWM輸出。但此時OCR1A是雙向緩沖的,TOP值可在運行過程中得到改變。當需要一個固定的TOP值時可以使用ICR1存放器,從而釋放OCR1A來用作PWM的輸出。1.T/C存放器TT1H/TT1LT/C存放器各位定義如表4-1所示。位76543210TT115:8TT17:0讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000表4-1 T/C存放器各位定義TT1H與TT1L組成了T/C1的數(shù)據(jù)存放器TT1。通過它們可以直接對定時器/

33、計數(shù)器的16位計數(shù)器進展讀寫。在計數(shù)器運行期間修改TT1的容有可能喪失一次TT1與OCR1*的比擬匹配操作。寫TT1存放器將在下一個定時周期阻塞比擬匹配。2.輸出比擬存放器OCR1BH/OCR1BLOCR1BH/OCR1BL各位定義如表4-2所示。位76543210OCR1BHOCR1B15:8OCR1BLOCR1B7:0讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000表4-2 OCR1BH/OCR1BL各位定義該存放器中的16位數(shù)據(jù)與TT1存放器中的計數(shù)值進展連續(xù)的比擬,一旦數(shù)據(jù)匹配,將產(chǎn)生一個輸出比擬中斷,或改變OC1*的輸出邏輯電平。4.3 程序設(shè)計本次設(shè)計,

34、除了單片機外還有其它的外圍設(shè)備,其中主要有電源、鍵盤、DS1302時鐘芯片、1602液晶顯示器、蜂鳴器、ISD1802語音芯片,它們的關(guān)系如圖4-3。通過這些設(shè)備和原件,已經(jīng)可以實現(xiàn)所要求的功能,下面來介紹一下其中的幾個模塊。圖4-3 系統(tǒng)框圖4.3.1 獨立鍵盤模塊獨立鍵盤是為了調(diào)整時間設(shè)置而設(shè)計的,它所完成的工作是調(diào)整時鐘的時間、改變鬧鐘設(shè)置,是數(shù)字鐘更好的工作,為使用者提供準確的時間。工作方式是按下K1鍵數(shù)值加一,按下K3鍵數(shù)值減一,按下K2鍵是調(diào)整顯示模式。其流程圖如圖4-4。具體程序代碼見附錄一。圖4-4 按鍵模塊流程圖4.3.2 顯示模塊圖4-5 顯示模塊流程圖顯示模塊是為系統(tǒng)提供

35、顯示功能,是使用者能直觀的看到時間,它是數(shù)字鐘不可缺少的一局部??梢燥@示年、月、日、星期、時間等所需要的數(shù)據(jù)。其程序流程圖如圖4-5所示。具體程序代碼見附錄二。4.3.3 實時時鐘模塊圖4-6 實時時鐘模塊實時時鐘模塊使系統(tǒng)時間初始化,設(shè)置初始時間,獲取當前時間。其工作流程如圖4-6,具體程序代碼見附錄三。4.3.4 語音模塊圖4-7 語音模塊流程圖語音模塊,如其名是為系統(tǒng)提供語音功能,要實現(xiàn)自定制語音功能,就必須有語音芯片、麥克以及揚聲器,這樣才能為使用者提供鬧鐘和報時效勞。其工作流程如圖4-7所示。具體程序代碼見附錄四。4.3.5 主控程序圖4-8 主控程序流程圖主控程序是整個系統(tǒng)程序的核

36、心,它就像人的大腦一樣支配和統(tǒng)領(lǐng)著整個系統(tǒng),可以調(diào)用所有的下屬程序,完成計時與時間校正、整點報時、時鐘掉電保持、日歷、電子音樂鬧鐘、自定義錄取音樂鬧鈴、任意按鍵語音報時和鬧鐘等一系列的功能。工作流程如圖4-8。主要程序代碼見附錄五。結(jié) 論經(jīng)歷數(shù)月的努力,畢業(yè)設(shè)計完畢了,通過這次畢業(yè)設(shè)計使我對我的專業(yè)有了更深刻的了解,同樣使我有了理論與實踐相結(jié)合的時機。在這段時間里我明顯的發(fā)覺到自己知識的匱乏,為了給自己的大學生活也為了更深刻的了解自己的所學專業(yè)我們多方借閱資料,購置書籍,在互聯(lián)網(wǎng)上查找資料,以完成這次設(shè)計。本次設(shè)計的帶自定制語音功能的定時系統(tǒng)既能顯示時間又能自定義錄取音樂鬧鈴。本系統(tǒng)采用了單片

37、機mega16芯片、LCD芯片及1820語音芯片,具有耗電省,計時準確,性能穩(wěn)定,維護方便等優(yōu)點。畢業(yè)設(shè)計的順利完成,使我獲得很多平時沒有學到的知識。畢業(yè)設(shè)計是大學四年知識的綜合運用,也是理論走向?qū)嵺`的的第一步,為以后走向工作崗位奠定了根底,經(jīng)過這次畢業(yè)設(shè)計,使我對帶自定制語音功能定時系統(tǒng)有了清楚的認識,對單片機的重要性以及其作用有了更深一層的了解,數(shù)字鐘的設(shè)計過程與步驟及應(yīng)注意的細節(jié)問題有了更為深刻的理解,為我以后的學習做了鋪墊。通過這次畢業(yè)設(shè)計增長了我的專業(yè)知識技能和實際工作經(jīng)歷,更增強了我向困難挑戰(zhàn)的信心。在設(shè)計中我對單片機有了更詳盡的了解,學會了使用一些工具軟件,這次經(jīng)歷是我人生路上的

38、珍貴財富。致 設(shè)計中得到了*教員的指導,她淵博的知識及嚴格的要求和嚴謹?shù)淖黠L都給我留下了深刻的印象,將使我終身受益。在此,對*教員表示感。另外還要感我的戰(zhàn)友們對我的幫助。鑒于作者水平有限,難免存在一些錯誤和漏洞,望各位教師不吝賜教,在此向大家表示衷心的感。參 考 文 獻馬潮AVR單片機嵌入式系統(tǒng)原理與應(yīng)用實踐1版:航空航天大學,2007*益民,紅剛,鳳武零根底學AVR單片機1版:機械工業(yè),2001.1譚浩強C程序設(shè)計3版:清華大學,2005.7迎新單片機初級教程1版:航空航天大學,2000附 錄附錄一 獨立鍵盤模塊*include*include void key_int(void)DDRD&

39、=0*13;/把鍵盤端置為輸入端/PORTD|=0*13;/鍵盤端初始化為輸入1/* 名稱:read_key()* 說明: 先置鍵盤端口全為1* 功能: 讀鍵值*/unsigned char read_key(void)char data;delay_nus(10);data=PIND&0*13;if(data!=0*13)switch (data) /*將按鍵碼轉(zhuǎn)換成鍵值*/ case 0*12: return 1; /加 case 0*11: return 2; /模式轉(zhuǎn)換 case 0*03: return 3; /減 default : return 0*00; return 0*00

40、;/* 名稱:get_key)* 說明: 要消抖,延時10ms* 功能: 讀鍵值* 調(diào)用: read_key( );* 輸入: 無* 返回值: 鍵值*/unsigned char get_key(void) unsigned char i; unsigned char j;/*按鍵記錄*/ i = read_key( ); if (i = 0*00) /*無有效按鍵按下*/ return 0*00;/*程序退出*/ j = i;/*保存本次采樣結(jié)果*/ delay_nms(10);/*去按鍵顫抖*/ i = read_key( ); if(i = j) delay_nms(10); retur

41、n i; return 0*00; 附錄二 顯示模塊*include*include *include DS1302.h*include 1602.he*tern unsigned char table17;e*tern unsigned char AP;/0為上午,1為下午e*tern uchar baoshi_flag;/任意按鍵觸摸報時標志,具體到分鐘,一分鐘只能操作一次/* 名稱: displaysecond* 說明: 分個位、十位顯示函數(shù)* 功能: 顯示秒鐘*/void displaysecond(void)char i; /定義變量i=table10&0*0f; /求秒的個位Wri

42、teChar(i+0,7,1); /顯示秒個位 i=table10&0*70; /求秒的十位i=i4; /右移4位WriteChar(i+0,6,1); /顯示秒十位 /* 名稱: displaymin()* 說明: 分個位、十位顯示函數(shù)* 功能: 顯示分鐘* 調(diào)用: display09(char a,char *,char y);* 輸入: 無* 返回值: 無*/void displaymin(void)char i;i=table11&0*0f; /求分的個位WriteChar(i+0,4,1); /顯示分個位 i=table11&0*70; /求分的十位i=i4; /右移4位WriteC

43、har(i+0,3,1); /顯示分十位 /* 名稱: displayhour()* 說明: 分個位、十位顯示函數(shù)、分12/24進制* 功能: 顯示小時* 調(diào)用: display09(char a,char *,char y);*/void displayhour(void)char i;i=table12&0*0f; /小時的個位WriteChar(i+0,1,1); if(table12&0*80)/12進制時i=table12&0*10;/小時的十位i=i4; WriteChar(i+0,0,1); if(table12&0*20)AP=1;WriteString(pm,8,1);els

44、eAP=0;WriteString(am,8,1);else /24進制時i=table12&0*30;/小時的十位i=i4; WriteChar(i+0,0,1); /* 名稱: displaydate()* 說明: 分個位、十位顯示函數(shù)* 功能: 顯示日*/void displaydate(void)char i;i=table13&0*0f; /求日的個位WriteChar(i+0,9,0); /顯示日個位 i=table13&0*30; /求日的十位i=i4; /右移4位WriteChar(i+0,8,0); /顯示日十位/* 名稱: displaymonth()* 說明: 分個位、十

45、位顯示函數(shù)* 功能: 顯示月*/void displaymonth(void)uchar i;i=table14&0*0f; /求月的個位WriteChar(i+0,6,0); /顯示月個位 i=table14&0*10; /求月的十位i=i4; /右移4位WriteChar(i+0,5,0); /顯示月十位 /* 名稱: displayyear()* 說明: 分個位、十位顯示函數(shù)* 功能: 顯示年*/void displayyear(void)uchar i;i=table16&0*0f; /求年的個位WriteChar(i+0,3,0); /顯示年時個位 i=table16&0*f0; /

46、求年的十位i=i4; /右移4位WriteChar(i+0,2,0); /顯示年十位 /* 名稱:displayweek()* 說明: 分個位、十位(顯示函數(shù))* 功能: 顯示星期*/void displayweek(void)char i;i=table15&0*07; /求星期的個位 switch(i) case 0:WriteString(MON,13,0);break; case 1:WriteString(TUE,13,0);break; case 2:WriteString(WED,13,0);break; case 3:WriteString(THU,13,0);break; c

47、ase 4:WriteString(FRI,13,0);break; case 5:WriteString(STA,13,0);break; case 6:WriteString(SUN,13,0);break; default:break; /* 名稱:display()* 說明: 分個位、十位顯示函數(shù)* 功能: 顯示秒、分、小時、日、月、年、星期*/void display(void)displaysecond( ); /顯示秒WriteChar(:,5,1); displaymin( ); /顯示分WriteChar(:,2,1); displayhour( ); /顯示小時 displ

48、aydate( ); /顯示日WriteChar(/,7,0); displaymonth( ); /顯示月WriteChar(/,4,0); displayyear( ); /顯示年WriteString(20,0,0); /顯示年百千位displayweek( ); /顯示星期 /* 名稱:Timechange(void)* 說明: 隨著時間的變化,把新的時間顯示出來* 功能: 顯示時間的變化*/void Timechange(void)uchar data;data=read_1302(DS1302_SEC_Reg);/讀秒存放器的值if(data!=table10)/比擬 table1

49、0=data; displaysecond(); if(table10=0)/秒為0時data=read_1302(DS1302_MIN_Reg );/讀分存放器的值if(data!=table11)/比擬 table11=data; displaymin(); baoshi_flag=0;/去除制止任意按鍵報時if( table11=0)/分為0時data=read_1302(DS1302_HR_Reg);/讀小時存放器的值if(data!=table12)/比擬 table12=data; displayhour(); if(table12=0*92 & table11=0) |( tab

50、le12=0 & table11=0)/小時為0/12時data=read_1302(DS1302_DATE_Reg );/讀日存放器的值if(data!=table13)/比擬 table13=data; displaydate(); table15=read_1302(DS1302_DAY_Reg );/讀星期存放器的值 displayweek();if(table13=1)/日為1時data=read_1302(DS1302_MONTH_Reg);if(data!=table14) table14=data; displaymonth(); if(table14=1 )/月為1時data

51、=read_1302(DS1302_YEAR_Reg );if(data!=table16) table16=data; displayyear(); 附錄三 實時時鐘模塊*include*define ucharunsigned char*define uintunsigned int*defineT_CLK 7*defineT_IO 6*defineT_RST 5*define T_PORT PORTB*define T_DDR DDRB*define T_PIN PINB/* */*defineSETBIT(*,y) (*|=(1y) /set bit y in byte *define

52、CLRBIT(*,y) (*&=(1y) /clear bit y in byte *defineCHKBIT(*,y) (*&(1y) /check bit y in byte */* */*define DS1302_SEC_Reg 0*81*define DS1302_MIN_Reg 0*83*define DS1302_HR_Reg 0*85*define DS1302_DATE_Reg 0*87*define DS1302_MONTH_Reg 0*89*define DS1302_DAY_Reg 0*8b*define DS1302_YEAR_Reg 0*8d/* */void no

53、p(void) char i; for (i=0;i0; i-) CLRBIT(T_PORT,T_CLK);if (ucDa&1) SETBIT(T_PORT,T_IO); else CLRBIT(T_PORT,T_IO);SETBIT(T_PORT,T_CLK);ucDa=1; /* 名稱: unsigned char ds1302_read_a_byte* 說明:* 功能: 從DS1302讀取1Byte數(shù)據(jù)* 調(diào)用:* 輸入:* 返回值: t*/unsigned char ds1302_read_a_byte(void) unsigned char i,t;CLRBIT(T_DDR ,T_

54、IO);CLRBIT(T_PORT,T_IO); for(i=8; i0; i-) t=1;SETBIT(T_PORT,T_CLK);CLRBIT(T_PORT,T_CLK);nop();if(CHKBIT(T_PIN,T_IO)t|=0*80; SETBIT(T_DDR,T_IO);return(t);/* 名稱: write_1302* 說明: 先寫地址,后寫命令/數(shù)據(jù)* 功能: 往DS1302寫入數(shù)據(jù)* 調(diào)用: ds1302_write_a_byte()* 輸入: ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)* 返回值: 無*/void write_1302(unsigne

55、d char ucAddr, unsigned char ucDa) /DDRC=0*ff; CLRBIT(T_PORT,T_RST); /T_RST=0/;nop();CLRBIT(T_PORT,T_CLK); /T_CLK=0;/;nop();SETBIT(T_PORT,T_RST); /T_RST=1 ds1302_write_a_byte(ucAddr); /* 地址,命令 */CLRBIT(T_PORT,T_CLK); ds1302_write_a_byte(ucDa); /* 寫1Byte數(shù)據(jù)*/CLRBIT(T_PORT,T_CLK); /T_CLK=0/;nop();CLRBI

56、T(T_PORT,T_RST); /T_RST=0/* 名稱: read_1302* 說明: 先寫地址,后讀命令/數(shù)據(jù)* 功能: 讀取DS1302*地址的數(shù)據(jù)* 調(diào)用: ds1302_write_a_byte() , ds1302_read_a_byte()* 輸入: ucAddr: DS1302地址* 返回值: ucDa :讀取的數(shù)據(jù)*/unsigned char read_1302(unsigned char ucAddr) unsigned char ucDa;CLRBIT(T_PORT,T_RST);/;nop();CLRBIT(T_PORT,T_CLK);/;nop();SETBIT

57、(T_PORT,T_RST); ds1302_write_a_byte(ucAddr); /* 地址,命令 */ ucDa = ds1302_read_a_byte(); /* 讀1Byte數(shù)據(jù) */CLRBIT(T_PORT,T_CLK);/;nop();CLRBIT(T_PORT,T_RST);/;nop(); return(ucDa);/* 名稱: v_Set1302* 說明:* 功能: 設(shè)置初始時間* 調(diào)用: write_1302()* 輸入: pSecDa: 初始時間地址。初始時間格式為: 秒 分 時 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B

58、1B* 返回值: 無*/void v_Set1302(unsigned char *pSecDa) unsigned char i; unsigned char ucAddr = 0*80; write_1302(0*8e,0*00); /控制命令,WP=0,寫操作 for(i =7;i0;i-) write_1302(ucAddr,*pSecDa); / 秒 分 時 日 月 星期 年 pSecDa+; ucAddr +=2; write_1302(0*8e,0*80);/ 控制命令,WP=1,寫保護/* 名稱: v_Get1302* 說明:* 功能: 讀取DS1302當前時間* 調(diào)用: re

59、ad_1302()* 輸入: ucCurtime: 保存當前時間地址。當前時間格式為: 秒 分 時 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值: 無*/void v_Get1302(unsigned char ucCurtime) unsigned char i; unsigned char ucAddr = 0*81; for (i=0;i7;i+) ucCurtimei = read_1302(ucAddr);/*格式為: 秒 分 時 日 月 星期 年 */ ucAddr += 2; CLRBIT(T_PORT,T_CLK);/DS13

60、02初始化void initialize_1302(void) char data; SETBIT(T_DDR,T_CLK ); SETBIT(T_DDR,T_IO); SETBIT(T_DDR,T_RST); SETBIT(T_PORT,T_CLK ); SETBIT(T_PORT,T_IO); SETBIT(T_PORT,T_RST); write_1302(0*8e,0*00);/寫命令 write_1302(0*90,0*A9);/ data=read_1302(DS1302_SEC_Reg);/讀秒存放器的值 write_1302(0*80,0*7f&data);/寫秒存放器附錄四

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論