版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、畢業(yè)設計(論文)中文摘要單片微型機算計俗稱單片機,是一種運用十分廣泛的微處理器。在各種稱為計算機控制的儀器和設備中的計算機控制都是用單片機來實現(xiàn)的。本系統(tǒng)以M16為核心器件,ISD1820、DS1302、DS1602顯示器為外圍,通過1602液晶顯示年月日、星期、時分秒,時間格式可以12或24進制,實現(xiàn)了計時與時間校正、整點報時、時鐘掉電保持、日歷、電子音樂鬧鐘、自定義錄取音樂鬧鈴、任意按鍵語音報時和鬧鐘。關鍵字: 鬧鈴;單片機;定時器畢業(yè)設計(論文)英文摘要Title Custom functions with the sound of the timing systemAbstactSin
2、gle piece of a single-chip microcontroller, calculate commonly known as is the application of a wide range of microprocessors. In all kinds of computer control called instruments and equipment of the computer control is realized by using single chip processor. This system for the core device, with t
3、he M16 ISD2560, 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 mu
4、sic alarm, any time and key voice alarm clock.Keywords: Alarm; SCM; timer目 錄摘要1 概述02 設計思路32.1 數(shù)字鐘的簡單功能說明32.2 思路說明33 硬件設計43.1 mega16芯片的簡單介紹43.2 LCD芯片83.3 按鍵控制113.4 ISD1820語音芯片124 軟件設計144.1 中斷系統(tǒng)144.2 定時器/計數(shù)器144.3 程序設計17結 論24致 謝25參 考 文 獻26附 錄271 概述今天,傳統(tǒng)的電子系統(tǒng)已經全面轉變成以嵌入式系統(tǒng)為核心的現(xiàn)代電子系統(tǒng),在嵌入式系統(tǒng)底端應用中,存在著大量的小型嵌
5、入式應用系統(tǒng);這些系統(tǒng)用于資源和控制要求的限制,采用計算機語言設計程序會成為系統(tǒng)程序設計的一種主要方法。在C語言為基礎的系統(tǒng)程序設計中,規(guī)范化設計至關重要。遵循C語言編寫格式,規(guī)范和計算機軟件的工程方法。在系統(tǒng)程序設計中,也要從單純的功能性設計變到可能性、可靠性和產品應用優(yōu)化等綜合性設計充分發(fā)揮軟件在提高系統(tǒng)綜合品質上的效益,近幾十年來,單片機在生產過程控制、自動檢測、數(shù)據(jù)采集與處理、科學計算、商業(yè)管理和辦公自動化等方面獲得了廣泛應用。單片機具有體積小、重量輕、耗能省、價格低、可靠性高和通用靈活等優(yōu)點。而本次設計的帶自定制語音功能的定時系統(tǒng)也隨著單片機的發(fā)展被人們所認識與應用并逐漸成為必不可少
6、的必需品,被廣泛應用于個人家庭以車站、碼頭、劇院、辦公室等公共場所,給人們的生活、學習、工作、娛樂帶來了極大的方便。雖然現(xiàn)在市場上已經有這類產品的出現(xiàn),價格合理,使用方便,但是這里介紹的帶自定制語音功能的數(shù)字鐘可以滿足使用者的特殊要求,輸出方式靈活,如可以隨意設置時、分、秒的輸出等等。由于單片機技術的發(fā)展,特別是mega16芯片技術的發(fā)展,使LCD時鐘具有體積小,耗電省,計時準確,性能穩(wěn)定,維護方便等優(yōu)點。數(shù)字電子鐘的設計方法有多種,例如,利用FPGA+液晶顯示器+語音芯片;利用ARM+語音芯片;利用mega16+語音芯片+DS1602;利用凌陽單片機與時鐘芯片;利用中小規(guī)模集成電路組成電子鐘
7、。其中利用mega16+語音芯片+DS1602的設計方案實現(xiàn)簡單,用到的計算機語言是我們學過的C語言,因而在程序設計上相對簡單些,其所需成本也在我的承受范圍之內,mega16單片機的功能相對更加完善,可以滿足此次設計的所有要求,而且容易上手。為了做好這次畢業(yè)設計我從圖書館和互聯(lián)網(wǎng)上網(wǎng)查閱了大量的相關資料,深刻理解了畢業(yè)設計任務,明確了畢業(yè)論文要求,安排了設計方案步驟,最后完成了畢業(yè)設計作品。本次畢業(yè)設計所要求的是帶自定制語音功能的數(shù)字鐘,可以學習利用單片機的定時器設計時間計時處理,這在許多電子設備上是常用的功能。它的功能要求如下所述:為了實現(xiàn)上述功能,本次設計主要采用了單片機技術來實現(xiàn)對時鐘電
8、路的控制,采用mega16芯片和LCD液晶顯示芯片來控制整個電路,外加ISD1820語音芯片。本次設計的帶自定制語音功能定時系統(tǒng),主要有mega16單片機部分、LCD液晶顯示器部分、ISD1820語音部分和按鍵控制部分組成,文中詳細介紹了LCD時鐘的控制電路、程序以及其所用到的芯片,主要是mega16芯片、ISD1820語音芯片和1602LCD芯片,其中mega16芯片包括中斷系統(tǒng)及定時/計數(shù)器,ISD1820芯片主要功能是錄音報時,LCD芯片主要用于顯示時間而按鍵控制則用于調整時間。2 設計思路的控制,要不此時鐘也就沒有用武之地了。為了實現(xiàn)語音功能就需要語音芯片了,這里我選擇了ISD1820
9、語音芯片。當然,在實現(xiàn)過程中,電源是不可缺少的。3 硬件設計單片機以其高可靠性、高性價比、低電壓、低功耗等一系列優(yōu)點,近幾年得到迅猛發(fā)展和大范圍推廣,廣泛應用于工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、通信設備、商業(yè)營銷設備、醫(yī)療電子設備、日常消費類產品、玩具及汽車電子產品等。并且已經深入到工業(yè)生產以及人們生活的各個層次中。AVR單片機是1997年由ATMEL公司研發(fā)出的增強型內置Flash的RISC精簡指令集高速8位單片機。ATmega16是基于增強的AVR RISC結構的低功耗8位CMOS微控制器,其引腳排列如圖3-1: 圖3-1 引腳排列圖1) VCC:數(shù)字電路電源2) GND:地3)
10、 端口A(PA7··PA0):端口A 為8 位雙向I/O 口,具有可編程的內部上拉電阻。其輸出緩沖器具有對稱的驅動特性,可以輸出和吸收大電流。作為輸入使用時,若內部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復位過程中,即使系統(tǒng)時鐘還未起振,端口A 處于高阻狀態(tài)。4) RESET:復位輸出引腳。超出最小門限時間的低電平將引起系統(tǒng)復位。低于此時間的脈沖不能保證可靠復位。圖3-2 結構框圖5) XTAL1:反向振蕩器放大器及片內時鐘操作電路的輸出。6) XTAL2:反向振蕩器放大器的輸出。7) AVCC:AVCC為端口F以及ADC模數(shù)轉換的電源,需要與VCC相連接,即使沒有
11、使用ADC也應該如此。使用ADC時應該通過一個低通濾波器與VCC連接。8) AREF:AREF為ADC的模擬基準輸出引腳。9) 端口B、端口C、端口D作為普通I/O口與端口A的功能基本相同,同時每個端口都有各自獨特的其他功能。 ATmega16的結構框圖如圖3-2。AVR內核具有豐富的指令集和32個通用工作寄存器,所有的寄存器直接算數(shù)邏輯單元(ALU)相連接,使得一條指令可以在一個時鐘周期內同時訪問兩個獨立的寄存器。這種結構大大提高了代碼效率,并且具有比普通的CISC微控制器最高至10倍的數(shù)據(jù)吐率。3.1.1 ATmega16的時鐘電路單片機內部的各種功能電路幾乎全是由數(shù)字電路組成的,而數(shù)字電
12、路的工作離不開時鐘信號,每一個工作指令的運行都是在時鐘信號的協(xié)調下完成的。單片機的時鐘電路為整個單片機的工作提供系統(tǒng)時鐘信號,也為單片機與其他外接設備之間的通信提供同步信號。1、外接晶體/陶瓷振蕩器XTAL1與XTAL2分別為用作片內振蕩器的反向放大器的輸入和輸出,如圖3-3所示,這個振蕩器可以使用石英晶體,也可以使用陶瓷諧振器。熔絲位CKOPT用來選擇這兩種放大器模式的其中之一。當CKOPT被編程時振蕩器在輸出引腳產生滿幅度的振蕩。這種模式適合于噪聲環(huán)境,以及需要通過XTAL2驅動第二個時鐘緩沖器的情況。而且這種模式的頻率范圍比較寬。當保持CKOPT為未編程狀態(tài)時,振蕩器的輸出信號幅度比較小
13、。其優(yōu)點是大大降低了功耗,但是頻率范圍比較窄,而且不能驅動其他時鐘緩沖器。對于諧振器,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進行編程)之后就無需外部器件了。復位時硬件將標定字節(jié)加載到OSCCAL寄存器,自動完成對RC振蕩器的標
14、定。4、使用外部時鐘AVR單片機允許外部時鐘電路為其提供系統(tǒng)時鐘信號,為了從外部時鐘源驅動芯片,XTAL1必須按如圖3-5所示進行連接。同時,熔絲位CKSEL必須編程為“0000”。 圖3-5 外部時鐘配置圖3.1.2 復位電路復位電路向單片機的RESET引腳輸入一個低電平,當?shù)碗娖匠掷m(xù)時間大于最小脈沖寬度時即觸發(fā)復位過程,此時沒有時鐘信號在運行。當外加信號達到復位門限電壓時,復位延時開始,延時結束后單片機開始工作。常用的復位電路如圖3-6所示。 圖3-6 ATmega16的復位電路3.2.1 1602LCD引腳功能 LCD1602圖3-7 引腳功能編號符號引腳說明編號符號引腳說明1GND電源
15、地9D2Data I/O2VCC電源正極10D3Data I/O3VL液晶顯示偏壓信號11D4Data I/O4RS數(shù)據(jù)/命令選擇端(H/L)12D5Data I/O5R/W讀/寫選擇端(H/L)13D6Data I/O6E使能信號14D7Data I/O7D0Data I/O15BLA背光源正極8D1Data I/O16BLK背光源負極表3-1 引腳功能說明 3.2.2 控制方式通過CPU來控制LCD模塊,方式十分簡單,LCD模塊其內部可以看成有兩組寄存器,一個為指令寄存器,一個為數(shù)據(jù)寄存器,由RS引腳控制。所有對指令寄存器或數(shù)據(jù)寄存器的存取均需檢查LCD內部的忙碌標志(Busy Flag)
16、,此標志用來告知LCD內部正在工作,并不允許接收任何的控制命令。而此位的檢查可以令RS=0,讀取位7來加以判斷,當此位為0時才可以寫入指令寄存器或數(shù)據(jù)寄存器。3.2.3 LCD控制指令 (1)清除顯示器指令碼為0X02,將LCD DD RAM 數(shù)據(jù)全部填入空白碼20H,執(zhí)行此指令將清除顯示器內容,同時光標移到左上角。(2)光標歸位設置指令碼為0X02,地址計數(shù)器被除為0,DD RAM數(shù)據(jù)不變,光標移到左上腳。(3)設置字符進入模式此指令格式為:B7B6B5B4B3B2B1B0000001I/DS表3-2 字符進入模式指令格式其中的有關符號說明如下:1)I/D :地址計數(shù)器遞增或遞減控制,I/D
17、=1時為遞增,I/D0時為遞減。每次讀寫顯示RAM中的字符碼一次則地址計數(shù)器會加1或減1。光標所顯示的位置也會同時向右移到一個位置(I/D1)或向左移到一個位置(I/D=0)。2)S :顯示屏移動或不移動控制,當S=1時,寫入一個字府到DD RAM時,顯示屏向左(I/D=1)或向右(I/D=0)移動一格,而光標的位置不變。當S=0時,則顯示屏不移動。(4) 顯示器開關此指令格式為:B7B6B5B4B3B2B1B000001DCB表3-3 顯示器開關指令格式其中有關符號說明如下:1) D :顯示屏開啟或開關控制位,D=1時,顯示屏開啟,D0時,顯示屏關閉。2) C :光標出現(xiàn)控制位,C=1則光標
18、會出現(xiàn)地址計數(shù)器所指的位置,C0則光標會不出現(xiàn)。3) B :光標閃爍控制位,B=1光標出現(xiàn)后會閃爍,B0,光標不會閃爍。(5) 顯示光標移位此指令格式為:D7D6D5D4D3D2D1D00001S/CR/LXX表3-4 光標移動指令格式其中有關符號說明如下:1) X表示0或1皆可。2) S/C、R/L的設置及說明下表所示。S/CR/L動作00光標向左移動01光標向右移動10字符和光標向左移動11字符和光標向右移動表3-5 S/C、R/L設置及說明(6) 功能設置此指令格式為:B7B6B5B4B3B2B1B0001DLNFXX表3-6 功能設置指令格式其中有關符號說明如下:1) DL :數(shù)據(jù)長度
19、選擇。DL=1時為8位數(shù)據(jù)轉移,DL0時則為4位數(shù)據(jù)轉移,使用D7D4 4個位,分2次送入一個完整的字符數(shù)據(jù)。2)N :顯示屏為單列或雙列選擇。N=0為單列顯示,N1為雙列顯示。3)F :大小字符顯示選擇。F=1時為5×10點陣字會大些,F(xiàn)=0則為5×7點陣字型。 3.3.1 獨立式按鍵圖3-8 獨立式按鍵3.3.2 矩陣式鍵盤鍵盤美國公司于年最新推出一種單片秒單段語音錄放電路,采用技術,內含振蕩器,話筒前置放大,自動增益控制,防混淆濾波器,揚聲器驅動及振蕩電阻和取樣率表通過震蕩電阻和取樣率表可以看出,將ROSC端所接的振蕩電阻改為電位器可以無級調節(jié)語音的快慢,錄入的時間越
20、短音質越好,錄入的時間越長音質越差。AVR中斷響應時間最少為4個時鐘周期。4個時鐘周期后,程序跳轉到實際的中斷處理例程。在這4個時鐘期期間PC自動入棧。在通常情況下,中斷向量為一個跳轉指令,此跳轉需要3個時鐘周期。如果中斷在一個多時鐘周期指令執(zhí)行期間發(fā)生,則在此多周期指令執(zhí)行完畢后MCU才會執(zhí)行中斷程序。若中斷發(fā)生時MCU處于休眠模式,中斷響應時間還需增加4個時鐘周期。此外還要考慮到不同的休眠模式所需要的啟動時間。這個時間不包括在前面提到的時鐘周期里。4.2.1 定時器/計數(shù)器1的內部結構16位T/C的簡化框圖示于4-1。I/O引腳的實際位置請參見圖3-1。CPU可訪問的I/O寄存器,包括I/
21、O位和I/O引腳以粗體表示。圖4-1 T/C框圖4.2.2 輸出比較單元16位比較器持續(xù)比較TCNT1與OCR1x的內容,一旦發(fā)現(xiàn)它們相等,比較器立即產生一個匹配信號。然后OCF1x在下一個定時器時鐘置位。如果此時OCIE1x = 1,OCF1x置位將引發(fā)輸出比較中斷。中斷執(zhí)行時OCF1x標志自動清零,或者通過軟件在其相應的I/O位置寫入邏輯“1”也可以清零。根據(jù)WGM13:0與COM1x1:0的不同設置,波形發(fā)生器用匹配信號生成不同的波形。波形發(fā)生器利用TOP和BOTTOM信號處理在某些模式下對極值的操作。輸出比較單元A的一個特質是定義T/C的TOP值(即計數(shù)器的分辨率)。此外,TOP值還用
22、來定義通過波形發(fā)生器產生的波形的周期。圖4-2給出輸出比較單元的方框圖。寄存器與位上的小寫“n”表示器件編號(n = 1表示T/C1),“x”表示輸出比較單元(A/B)??驁D中非輸出比較單元部分用陰影表示。圖4-2 輸出比較單元方框圖4.2.3 寄存器定時器/ 計數(shù)器TCNT1、輸出比較寄存器OCR1A/B與輸入捕捉寄存器ICR1均為16位寄存器。T/C控制寄存器TCCR1A/B為8位寄存器,沒有CPU訪問的限制。中斷請求(圖中簡寫為Int.Req.)信號在中斷標志寄存器TIFR1都有反映。所有中斷都可以由中斷屏蔽寄存器TIMSK1單獨控制。圖中未給出TIFR1與TIMSK1。T/C可由內部時
23、鐘通過預分頻器或通過由T1引腳輸入的外部時鐘驅動。引發(fā)T/C數(shù)值增加(或減少)的時鐘源及其有效沿由時鐘選擇邏輯模塊控制。沒有選擇時鐘源時T/C處于停止狀態(tài)。時鐘選擇邏輯模塊的輸出稱為clkT1。雙緩沖輸出比較寄存器OCR1A/B一直與T/C的值做比較。波形發(fā)生器用比較結果產生PWM或在輸出比較引腳OC1A/B輸出可變頻率的信號。比較匹配結果還可置位比較匹配標志OCF1A/B,用來產生輸出比較中斷請求。當輸入捕捉引腳ICP1 或模擬比較器輸入引腳有輸入捕捉事件產生(邊沿觸發(fā))時,當時的T/C值被傳輸?shù)捷斎氩蹲郊拇嫫鞅4嫫饋怼]斎氩蹲絾卧ㄒ粋€數(shù)字濾波單元(噪聲消除器)以降低噪聲干擾。在某些操作
24、模式下,TOP值或T/C的最大值可由OCR1A寄存器、ICR1寄存器,或一些固定數(shù)據(jù)來定義。在PWM模式下用OCR1A作為TOP值時,OCR1A寄存器不能用作PWM輸出。但此時OCR1A是雙向緩沖的,TOP值可在運行過程中得到改變。當需要一個固定的TOP值時可以使用ICR1寄存器,從而釋放OCR1A來用作PWM的輸出。1.T/C寄存器TCNT1H/TCNT1LT/C寄存器各位定義如表4-1所示。位76543210TCNT115:8TCNT17:0讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000表4-1 T/C寄存器各位定義TCNT1H與TCNT1L組成了T/C1的數(shù)
25、據(jù)寄存器TCNT1。通過它們可以直接對定時器/計數(shù)器的16位計數(shù)器進行讀寫訪問。在計數(shù)器運行期間修改TCNT1的內容有可能丟失一次TCNT1與OCR1x的比較匹配操作。寫TCNT1寄存器將在下一個定時周期阻塞比較匹配。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ù)與TCNT1寄存器中的計數(shù)值進行連續(xù)的比較,一旦數(shù)據(jù)匹配,將產生一個
26、輸出比較中斷,或改變OC1x的輸出邏輯電平。4.3.1 獨立鍵盤模塊獨立鍵盤是為了調整時間設置而設計的,它所完成的工作是調整時鐘的時間、改變鬧鐘設置,是數(shù)字鐘更好的工作,為使用者提供準確的時間。工作方式是按下K1鍵數(shù)值加一,按下K3鍵數(shù)值減一,按下K2鍵是調整顯示模式。其流程圖如圖4-4。具體程序代碼見附錄一。4.3.2 顯示模塊4.3.3 實時時鐘模塊實時時鐘模塊使系統(tǒng)時間初始化,設置初始時間,獲取當前時間。其工作流程如圖4-6,具體程序代碼見附錄三。4.3.4 語音模塊,如其名是為系統(tǒng)提供語音功能,要實現(xiàn)自定制語音功能,就必須有語音芯片、麥克以及揚聲器,這樣才能為使用者提供鬧鐘和報時服務。
27、其工作流程如圖4-7所示。具體程序代碼見附錄四。圖4-4 按鍵模塊流程圖圖4-6 實時時鐘模塊圖4-7 鬧鐘模塊流程圖4.3.5 主控程序計時與時間校正、整點報時、時鐘掉電保持、日歷、電子音樂鬧鐘、自定義錄取音樂鬧鈴、任意按鍵語音報時和鬧鐘等一系列的功能。工作流程如圖4-8。主要程序代碼見附錄五。結 論經歷數(shù)月的努力,畢業(yè)設計結束了,通過這次畢業(yè)設計使我對我的專業(yè)有了更深刻的了解,同樣使我有了理論與實踐相結合的機會。在這段時間里我明顯的察覺到自己知識的匱乏,為了給自己的大學生活也為了更深刻的了解自己的所學專業(yè)我們多方借閱資料,購買書籍,在互聯(lián)網(wǎng)上查找資料,以完成這次設計。本次設計的帶自定制語音
28、功能的定時系統(tǒng)既能顯示時間又能自定義錄取音樂鬧鈴。本系統(tǒng)采用了單片機mega16芯片、LCD芯片及1820語音芯片,具有耗電省,計時準確,性能穩(wěn)定,維護方便等優(yōu)點。畢業(yè)設計的順利完成,使我獲得很多平時沒有學到的知識。畢業(yè)設計是大學四年知識的綜合運用,也是理論走向實踐的的第一步,為以后走向工作崗位奠定了基礎,經過這次畢業(yè)設計,使我對帶自定制語音功能定時系統(tǒng)有了清楚的認識,對單片機的重要性以及其作用有了更深一層的了解,數(shù)字鐘的設計過程與步驟及應注意的細節(jié)問題有了更為深刻的理解,為我以后的學習做了鋪墊。通過這次畢業(yè)設計增長了我的專業(yè)知識技能和實際工作經驗,更增強了我向困難挑戰(zhàn)的信心。在設計中我對單片
29、機有了更詳盡的了解,學會了使用一些工具軟件,這次經歷是我人生路上的寶貴財富。致 謝設計中得到了*教員的指導,她淵博的知識及嚴格的要求和嚴謹?shù)淖黠L都給我留下了深刻的印象,將使我終身受益。在此,對*教員表示感謝。另外還要感謝我的朋友們對我的幫助。鑒于作者水平有限,難免存在一些錯誤和漏洞,望各位老師不吝賜教,在此向大家表示衷心的感謝。(1) 馬潮·AVR單片機嵌入式系統(tǒng)原理與應用實踐·1版·北京:北京航空航天大學出版社,2007(2) 徐益民,范紅剛,蘇鳳武·零基礎學AVR單片機·1版·北京:機械工業(yè)出版社,2001.1(3) 譚浩強
30、83;C程序設計·3版·北京:清華大學出版社,2005.7(4) 張迎新·單片機初級教程·1版·北京:北京航空航天大學出版社,2000附 錄附錄一 獨立鍵盤模塊#include<ioM16v.h>#include <macros.h>void key_int(void)DDRD&=0x13;/把鍵盤端置為輸入端/PORTD|=0x13;/鍵盤端初始化為輸入1/* 名稱:read_key()* 說明: 先置鍵盤端口全為1* 功能: 讀鍵值*/unsigned char read_key(void)char data
31、;delay_nus(10);data=PIND&0x13;if(data!=0x13)switch (data) /*將按鍵碼轉換成鍵值*/ case 0x12: return 1; /加 case 0x11: return 2; /模式轉換 case 0x03: return 3; /減 default : return 0x00; return 0x00;/* 名稱:get_key)* 說明: 要消抖,延時10ms* 功能: 讀鍵值* 調用: read_key( );* 輸入: 無* 返回值: 鍵值*/unsigned char get_key(void) unsigned ch
32、ar i; unsigned char j;/*按鍵記錄*/ i = read_key( ); if (i = 0x00) /*無有效按鍵按下*/ return 0x00;/*程序退出*/ j = i;/*保存本次采樣結果*/ delay_nms(10);/*去按鍵顫抖*/ i = read_key( ); if(i = j) delay_nms(10); return i; return 0x00; 附錄二 顯示模塊附錄三 實時時鐘模塊#include<ioM16v.h>#define ucharunsigned char#define uintunsigned int#defi
33、neT_CLK 7#defineT_IO 6#defineT_RST 5#define T_PORT PORTB#define T_DDR DDRB#define T_PIN PINB/* */#defineSETBIT(x,y) (x|=(1<<y) /set bit y in byte x#defineCLRBIT(x,y) (x&=(1<<y) /clear bit y in byte x#defineCHKBIT(x,y) (x&(1<<y) /check bit y in byte x/* */#define DS1302_SEC_
34、Reg 0x81#define DS1302_MIN_Reg 0x83#define DS1302_HR_Reg 0x85#define DS1302_DATE_Reg 0x87#define DS1302_MONTH_Reg 0x89#define DS1302_DAY_Reg 0x8b#define DS1302_YEAR_Reg 0x8d/* */void nop(void) char i; for (i=0;i<1;i+) ;/* 名稱: ds1302_write_a_byte* 說明:* 功能: 往DS1302寫入1Byte數(shù)據(jù)* 調用:* 輸入: ucDa 寫入的數(shù)據(jù)* 返回
35、值: 無*/void ds1302_write_a_byte(unsigned char ucDa) unsigned char i; for(i=8; i>0; 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ù)* 調用:* 輸入:* 返回值: t*/unsig
36、ned char ds1302_read_a_byte(void) unsigned char i,t;CLRBIT(T_DDR ,T_IO);CLRBIT(T_PORT,T_IO); for(i=8; i>0; i-) t>>=1;SETBIT(T_PORT,T_CLK);CLRBIT(T_PORT,T_CLK);nop();if(CHKBIT(T_PIN,T_IO)t|=0x80; SETBIT(T_DDR,T_IO);return(t);/* 名稱: write_1302* 說明: 先寫地址,后寫命令/數(shù)據(jù)* 功能: 往DS1302寫入數(shù)據(jù)* 調用: ds1302_wr
37、ite_a_byte()* 輸入: ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)* 返回值: 無*/void write_1302(unsigned char ucAddr, unsigned char ucDa) /DDRC=0xff; 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); ds1
38、302_write_a_byte(ucDa); /* 寫1Byte數(shù)據(jù)*/CLRBIT(T_PORT,T_CLK); /T_CLK=0/;nop();CLRBIT(T_PORT,T_RST); /T_RST=0/* 名稱: read_1302* 說明: 先寫地址,后讀命令/數(shù)據(jù)* 功能: 讀取DS1302某地址的數(shù)據(jù)* 調用: ds1302_write_a_byte() , ds1302_read_a_byte()* 輸入: ucAddr: DS1302地址* 返回值: ucDa :讀取的數(shù)據(jù)*/unsigned char read_1302(unsigned char ucAddr) uns
39、igned char ucDa;CLRBIT(T_PORT,T_RST);/;nop();CLRBIT(T_PORT,T_CLK);/;nop();SETBIT(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* 說明:* 功能: 設置初始時間* 調用: write_130
40、2()* 輸入: pSecDa: 初始時間地址。初始時間格式為: 秒 分 時 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值: 無*/void v_Set1302(unsigned char *pSecDa) unsigned char i; unsigned char ucAddr = 0x80; write_1302(0x8e,0x00); /控制命令,WP=0,寫操作 for(i =7;i>0;i-) write_1302(ucAddr,*pSecDa); / 秒 分 時 日 月 星期 年 pSecDa+; ucAddr +=2;
41、write_1302(0x8e,0x80);/ 控制命令,WP=1,寫保護/* 名稱: v_Get1302* 說明:* 功能: 讀取DS1302當前時間* 調用: read_1302()* 輸入: ucCurtime: 保存當前時間地址。當前時間格式為: 秒 分 時 日 月 星期 年* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B* 返回值: 無*/void v_Get1302(unsigned char ucCurtime) unsigned char i; unsigned char ucAddr = 0x81; for (i=0;i<7;i+) ucCurti
42、mei = read_1302(ucAddr);/*格式為: 秒 分 時 日 月 星期 年 */ ucAddr += 2; CLRBIT(T_PORT,T_CLK);/DS1302初始化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(0x8e,0x00);/寫命令 write_1302(0x
43、90,0xA9);/ data=read_1302(DS1302_SEC_Reg);/讀秒寄存器的值 write_1302(0x80,0x7f&data);/寫秒寄存器附錄四 語音模塊#include <iom16v.h> #include <macros.h> #include"1602.h"#include"display.h"#include"DS1302.h"extern uchar change_value;extern uchar table17;/存放時間、日期、星期extern uint
44、 record_time;/錄音時間uint play_time=0;/播放時間uchar play_flag=0;/播放標志#define ad_8 3#define ad_9 2#define ad_07_PORT PORTA#define ad_07_DDR DDRA#define ad_89_PORT PORTC#define ad_89_DDR DDRC#define P_R 7#define EOM 3#define PD 0#define CE 1#define P_R_PORT PORTD#define P_R_DDR DDRD#define EOM_PORT PORTD#de
45、fine EOM_DDR DDRD#define EOM_PIN PIND#define PD_PORT PORTC#define PD_DDR DDRC#define CE_PORT PORTC#define CE_DDR DDRCconst unsigned char sound_table192=/0 1 2 3 4 5 62,6,8,5,14,6,21,6,29,7,37,6,44,6,/7 8 9 10 20 30 4051,5,57,6,64,6,71,7,78,8,88,9,100,9,/50 點 分 整 北京時間110,8,120,7,128,6,135,7,144,12;vo
46、id ISD_init(void) /初始化CE_DDR|=(1<<CE);CE_PORT|=(1<<CE);ad_07_DDR=0xff;ad_89_DDR|=(1<<ad_8)|(1<<ad_9);ISD_SET_ADDRESS(0);P_R_DDR|=(1<<P_R);P_R_PORT|=(1<<P_R);/播放模式EOM_DDR&=(1<<EOM);/設為輸入口EOM_PORT|=(1<<EOM);/高電平PD_DDR|=(1<<PD);PD_PORT|=(1<&l
47、t;PD);/省電模式delay_nms(30);PD_PORT&=(1<<PD);/非省電模式delay_nms(30);void ISD_play(uchar add,uchar time) /播放錄音play_time=time;play_flag=1;PD_PORT|=(1<<PD);/省電模式delay_nms(30);PD_PORT&=(1<<PD);/復位delay_nms(1);ISD_SET_ADDRESS(add);P_R_PORT|=(1<<P_R);/播放模式delay_nus(2);CE_PORT&
48、;=(1<<CE);delay_nus(1);CE_PORT|=(1<<CE);TCCR2 = 0x07;/啟動定時器void ISD_play_hm(uchar hour,uchar minute) /非整點報時uchar hour1,hour0,minute1,minute0;minute1=(minute&0x70)>>4;minute0=minute&0x0f;if(hour&0x80)hour1=(hour&0x10)>>4;elsehour1=(hour&0x30)>>4;hour0
49、=hour&0x0f;if(play_flag=0 && hour1!=0)ISD_play(sound_tablehour1+90,sound_tablehour1+91);/小時十位while(play_flag!=0)if(change_value>=1 && change_value<=8 )/顯示第一頁時,修改時間Timechange();if(hour1=0 |(hour1>0 && hour0!=0)/避免讀十零點ISD_play(sound_tablehour00,sound_tablehour01);/
50、小時個位while(play_flag!=0)if(change_value>=1 && change_value<=8 )/顯示第一頁時,修改時間Timechange();ISD_play(sound_table150,sound_table151);/點while(play_flag!=0)if(change_value>=1 && change_value<=8 )/顯示第一頁時,修改時間Timechange();if(play_flag=0)if(minute1!=0 )ISD_play(sound_tableminute1+90,sound_tableminute1+91);/分十位else ISD_play(sound_tableminute10,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年湖北交通職業(yè)技術學院高職單招職業(yè)適應性測試備考試題及答案詳細解析
- 2026年保定幼兒師范高等??茖W校單招職業(yè)技能考試備考題庫含詳細答案解析
- 2026年南昌影視傳播職業(yè)學院高職單招職業(yè)適應性測試模擬試題及答案詳細解析
- 2026年廣東工貿職業(yè)技術學院單招職業(yè)技能考試備考試題含詳細答案解析
- 2026年武漢理工大學專業(yè)技術人員招聘25人參考考試試題及答案解析
- 2026年廣西建設職業(yè)技術學院單招職業(yè)技能考試備考試題含詳細答案解析
- 2026年上海健康醫(yī)學院單招綜合素質筆試備考試題含詳細答案解析
- 2026年河南應用技術職業(yè)學院單招綜合素質考試備考題庫含詳細答案解析
- 2026年湖北交通職業(yè)技術學院單招職業(yè)技能考試備考試題含詳細答案解析
- 2026年江西科技職業(yè)學院單招綜合素質考試模擬試題含詳細答案解析
- 醫(yī)院醫(yī)療糾紛案例匯報
- 紅外線桑拿毯行業(yè)跨境出海項目商業(yè)計劃書
- 2025安徽職高單招試題及答案
- 《文獻檢索與科技論文寫作入門》課件(共八章)
- 2025至2030鑄鐵產業(yè)行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 機電設備安裝工程中電梯系統(tǒng)全生命周期質量管控體系
- 碎石樁施工技術
- 2025年政府采購和招標法考試試題及答案
- 2025中考九年級語文《標點符號》復習練習題
- 智能化建筑機器人施工方案和技術措施
- 征兵體檢外科標準
評論
0/150
提交評論