電子音樂(lè)鬧鐘的設(shè)計(jì)與仿真-本科畢業(yè)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩36頁(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)介

1、<p><b>  本科畢業(yè)設(shè)計(jì)</b></p><p>  題 目 電子音樂(lè)鬧鐘的設(shè)計(jì)與仿真 </p><p><b>  摘 要</b></p><p>  電子音樂(lè)鬧鐘在日常生活中具有很廣泛的應(yīng)用。 本課題設(shè)計(jì)了一個(gè)基于單片機(jī)控制的電子音樂(lè)鬧鐘,從硬件和軟件兩個(gè)方面對(duì)系統(tǒng)進(jìn)行

2、了詳細(xì)設(shè)計(jì)。硬件系統(tǒng)主要包括單片機(jī)主控模塊、顯示模塊、按鍵模塊和音樂(lè)播放模塊。其中單片機(jī)模塊采用AT89C51,顯示模塊采用簡(jiǎn)單實(shí)用的數(shù)碼管,音樂(lè)播放利用揚(yáng)聲器發(fā)聲控制。系統(tǒng)能夠準(zhǔn)確地顯示時(shí)、分、秒信息,通過(guò)獨(dú)立按鍵實(shí)現(xiàn)時(shí)間調(diào)整和鬧鐘時(shí)間的設(shè)置,能夠定時(shí)播放預(yù)先設(shè)置的電子音樂(lè)。軟件方面基于模塊化編程思想,開(kāi)發(fā)環(huán)境采用 Keil C51。最后利用硬件仿真軟件Proteus構(gòu)建硬件仿真平臺(tái),對(duì)系統(tǒng)進(jìn)行了功能驗(yàn)證。仿真結(jié)果充分說(shuō)明系統(tǒng)設(shè)計(jì)是完

3、全可行的。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī);電子音樂(lè)鬧鐘;LED數(shù)碼管;獨(dú)立按鍵</p><p><b>  ABSTRACT</b></p><p>  Electronic music alarm clock has a wide range of applications in our daily life. This topic h

4、as designed a based on single chip microcomputer control electronic music alarm clock, from two aspects of hardware and software of the system has carried on the detailed design. Hardware system mainly includes the SCM c

5、ontrol module, display module, key module and music playback module. The AT89C51 single chip microcomputer module, display module adopts the simple and practical digital tube, music playb</p><p>  Key words:

6、 Single chip microcomputer; Electronic music alarm clock; LED digital tube; Separate button</p><p><b>  目 錄 </b></p><p><b>  1 引言1</b></p><p>  1.1 研究目的和意義

7、1</p><p>  1.2 本系統(tǒng)主要研究的內(nèi)容1</p><p>  2 方案的選擇和論證1</p><p>  2.1 單片機(jī)型號(hào)的選擇1</p><p>  2.3 顯示器的選擇2</p><p>  2.4 計(jì)時(shí)部分的選擇2</p><p>  2.5 單片機(jī)播放音樂(lè)原理

8、3</p><p>  2.5.1 音調(diào)的確定3</p><p>  2.5.2 音樂(lè)節(jié)拍的產(chǎn)生3</p><p>  3 電子音樂(lè)鬧鐘系統(tǒng)詳細(xì)設(shè)計(jì)4</p><p>  3.1 系統(tǒng)功能方框圖4</p><p>  3.2 硬件詳細(xì)設(shè)計(jì)5</p><p>  3.2.1 AT89C

9、51 單片機(jī)簡(jiǎn)介5</p><p>  3.2.2 晶振電路6</p><p>  3.2.3 復(fù)位電路7</p><p>  3.2.4 鍵盤(pán)電路的設(shè)計(jì)7</p><p>  3.2.5 顯示電路8</p><p>  3.2.7 顯示驅(qū)動(dòng)模塊8</p><p>  3.2.8 發(fā)

10、音電路模塊9</p><p>  3.3 軟件詳細(xì)設(shè)計(jì)9</p><p>  3.3.1 主程序設(shè)計(jì)9</p><p>  3.3.2 定時(shí)器定時(shí)模塊10</p><p>  3.3.3 鬧鐘模塊11</p><p>  3.3.4 計(jì)時(shí)模塊11</p><p>  3.3.5 鍵盤(pán)

11、掃描模塊13</p><p>  3.3.6 播放音樂(lè)模塊14</p><p><b>  4 系統(tǒng)調(diào)試15</b></p><p>  4.1 軟件介紹15</p><p>  4.1.1 PROTEUS ISIS 軟件介紹15</p><p>  4.1.2 KEIL C51 軟件介

12、紹15</p><p>  4.2 利用Proteus和Keil進(jìn)行聯(lián)合調(diào)式15</p><p><b>  5 仿真結(jié)果17</b></p><p><b>  6 結(jié)論18</b></p><p><b>  參考文獻(xiàn)19</b></p><p

13、><b>  致 謝20</b></p><p><b>  附 錄21</b></p><p><b>  1 引言</b></p><p>  1.1 研究目的和意義</p><p>  目的:設(shè)計(jì)一個(gè)電子鬧鐘,該鬧鐘可由使用者自己校準(zhǔn)時(shí)間并根據(jù)需要在規(guī)定的時(shí)

14、間發(fā)出音樂(lè)提醒使用者,防止遺忘時(shí)間。</p><p>  意義:電子音樂(lè)鬧鐘在生活中很常見(jiàn),有了它,使得我們忙碌的生活不在枯燥,也不用擔(dān)心會(huì)錯(cuò)過(guò)什么重要的事。隨著現(xiàn)在生活壓力的增大,失眠現(xiàn)象已經(jīng)很普遍,特別是當(dāng)?shù)诙煊兄匾虑榈臅r(shí)候,老是怕睡過(guò)而導(dǎo)致人們睡不好,有了電子鬧鐘,我們?cè)僖膊挥脫?dān)心這種事會(huì)發(fā)生了,而是能好好地睡到鬧鐘鬧醒的那一刻,如果再加上那么一段美妙的音樂(lè),這樣,我們會(huì)伴隨柔和的音樂(lè)而起床。所以,電子

15、音樂(lè)鬧鐘給人們的生活帶來(lái)了極大的方便。于是,研究這樣一個(gè)電子音樂(lè)鬧鐘有著非?,F(xiàn)實(shí)的意義。 </p><p>  1.2 本系統(tǒng)主要研究的內(nèi)容</p><p>  本設(shè)計(jì)主要研究用proteus和keil協(xié)同仿真一個(gè)電子音樂(lè)鬧鐘,主要包括硬件電路詳細(xì)設(shè)計(jì)和軟件詳細(xì)設(shè)計(jì)兩方面。其中硬件電路部分可分為四個(gè)模塊:鍵盤(pán)模塊;②顯示模塊;③計(jì)時(shí)模塊;④音樂(lè)播放模塊。軟件部分則應(yīng)做到程序的準(zhǔn)確、簡(jiǎn)單

16、、可讀性強(qiáng)。最后通過(guò)硬軟件的結(jié)合實(shí)現(xiàn)電子音樂(lè)鬧鐘的精確計(jì)時(shí)、鬧鐘設(shè)置和播放音樂(lè)功能。</p><p>  2 方案的選擇和論證</p><p><b>  2.1 單片機(jī)選擇</b></p><p>  通過(guò)分析多種單片機(jī),認(rèn)為AT89C51 是比較適合做電子音樂(lè)鬧鐘的芯片,器件采用ATMEL 高密度非易失存儲(chǔ)器制造技術(shù)制造,與MCS-51 指

17、令集和輸出管腳相兼容。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次以上,其壽命較長(zhǎng),使用更方便。再者他的數(shù)據(jù)保留時(shí)間可達(dá)10年。AT89C51 是一種高效微控制器,是最好的選擇。</p><p><b>  2.2 按鍵的選擇</b></p><p>  方案一:矩陣式鍵盤(pán)。為了節(jié)省I/O口,通常將按鍵排列成矩陣形式。雖然電路連接復(fù)雜,但是提高了I/O口的利用率,在

18、修改時(shí)鐘或設(shè)置鬧鈴時(shí)間時(shí)可以直接從鍵盤(pán)輸入,快捷、方便。如果選擇此方案,軟件編程較復(fù)雜,適用于需很多個(gè)按鍵的場(chǎng)合。 </p><p>  方案二:獨(dú)立式按鍵。獨(dú)立式按鍵是直接用I/O口線構(gòu)成單個(gè)按鍵電路,一個(gè)按鍵單獨(dú)占用1根I/O線。雖然會(huì)給布線帶來(lái)諸多不便,但程序設(shè)計(jì)簡(jiǎn)單,適合用于按鍵較少的場(chǎng)合。如果系統(tǒng)中的鍵較少,就可以使用獨(dú)立式按鍵,因此,此方案適用于按鍵較少的情況。如果使用該方案,無(wú)論從硬件還是軟件方

19、面實(shí)現(xiàn)起來(lái)都比較方便,所以我選擇方案二。</p><p>  2.3 顯示器的選擇</p><p>  方案一:液晶顯示器。此顯示器體積小,便于攜帶;并且液晶顯示器可視面積大。其缺點(diǎn)為此顯示器的亮度和對(duì)比度不是很好,并且壽命有限,驅(qū)動(dòng)電路復(fù)雜,使用起來(lái)更麻煩。</p><p>  方案二:數(shù)碼管顯示器。數(shù)碼管的驅(qū)動(dòng)電路簡(jiǎn)單,并且在亮度、可視角度和刷新速率等方面,都更

20、具優(yōu)勢(shì)。LED壽命長(zhǎng),背光功耗低、更環(huán)保,它不含有害金屬汞,免去了對(duì)人體對(duì)環(huán)境的損害; 第三、LED背光讓顯示器顯得更輕薄,LED采用發(fā)光二極管,不需要復(fù)雜的光路設(shè)計(jì),實(shí)現(xiàn)真正的光源平面化,所以顯示器也能節(jié)省很多空間。如果選擇了此方案,那么在夜間看時(shí)間的時(shí)候就非常方便。其缺點(diǎn)是耗電量較大。綜合考慮,數(shù)碼管使用起來(lái)較為方便,因此我選擇用數(shù)碼管做顯示器。</p><p>  2.4 計(jì)時(shí)部分的選擇</p>

21、<p>  DS1302時(shí)鐘芯片,大可以實(shí)現(xiàn)計(jì)時(shí)功能,而且系統(tǒng)不怕掉電且時(shí)間精確。它采用備份電池供電,在系統(tǒng)斷電時(shí)仍可以工作。實(shí)時(shí)時(shí)鐘芯片的這些優(yōu)點(diǎn),使得它廣泛應(yīng)用于需要顯示時(shí)間的場(chǎng)合,但這種芯片比較貴,況且,設(shè)計(jì)本系統(tǒng)目的是為了學(xué)習(xí)單片機(jī)程序的編寫(xiě)和調(diào)試,因此采用了軟件編程的方法來(lái)計(jì)時(shí)而沒(méi)有采用價(jià)格較高的時(shí)鐘芯片。</p><p>  2.5 單片機(jī)播放音樂(lè)原理</p><p&

22、gt;  一般情況下,用單片機(jī)蜂鳴器來(lái)演奏音樂(lè)基本都是單音頻率,不像專(zhuān)用樂(lè)器那樣能演奏多種音色的音樂(lè)。所以音調(diào)和節(jié)拍是該設(shè)計(jì)要了解的兩個(gè)概念。音調(diào)表示了一個(gè)音符的頻率有多高,節(jié)拍表示了一個(gè)音符能唱多久。</p><p>  2.5.1 音調(diào)的確定</p><p>  音調(diào)主要是通過(guò)頻率來(lái)確定的,我們可以根據(jù)音調(diào)表查出各個(gè)音符所對(duì)應(yīng)的相應(yīng)頻率,接下來(lái)就需要用51單片機(jī)發(fā)出相應(yīng)的頻率即可,主要

23、方法就是使用定時(shí)器定時(shí)中斷,將蜂鳴器對(duì)應(yīng)I/O口來(lái)回取反就行了。下面我舉個(gè)例子說(shuō)明一下怎么確定一個(gè)頻率對(duì)應(yīng)的定時(shí)器的定時(shí)值。</p><p>  例如標(biāo)準(zhǔn)音高A : 頻率f = 440 Hz, 其對(duì)應(yīng)的周期為:T = 1/ f = 1/440 =2272μs ,那么單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O 口來(lái)回取反的時(shí)間應(yīng)為: t = T/2 = 2272/2 = 1136 μs ,也就是清零、置位在一個(gè)周期內(nèi)完成. <

24、;/p><p>  音符與節(jié)拍數(shù)的關(guān)系如表1所示。</p><p>  表1 音符與節(jié)拍數(shù)的關(guān)系</p><p>  2.5.2 音樂(lè)節(jié)拍的產(chǎn)生</p><p>  一般情況下,如果一首樂(lè)曲沒(méi)有說(shuō)明,一拍的時(shí)長(zhǎng)大約400ms到500ms之間 ,我們可以通過(guò)軟件延時(shí)的方法來(lái)延時(shí)這么長(zhǎng)時(shí)間。</p><p>  for(t1

25、= 0; t1 < t; t1++) </p><p>  for(t2 = 0; t2 < 8000; t2++); </p><p>  通過(guò)改變t的值就可以唱出不同節(jié)拍的音樂(lè)。</p><p>  表2所示為不同曲調(diào)下的1/4和1/8節(jié)拍的時(shí)間設(shè)定。</p><p>  如果單片機(jī)要實(shí)現(xiàn)播放音樂(lè),那么必須在程序設(shè)計(jì)中要

26、考慮到節(jié)拍,節(jié)拍數(shù)和節(jié)拍碼的對(duì)照表如表3所示。</p><p>  表2 各調(diào)節(jié)拍的時(shí)間設(shè)定</p><p>  表3 節(jié)拍數(shù)與節(jié)拍碼的對(duì)照</p><p>  3 電子音樂(lè)鬧鐘系統(tǒng)詳細(xì)設(shè)計(jì)</p><p>  3.1 系統(tǒng)功能方框圖 </p><p>  根據(jù)設(shè)計(jì)需求分析,系統(tǒng)主要包括以下幾個(gè)模塊:微處理器模塊、單

27、片機(jī)最小系統(tǒng)、數(shù)碼管顯示模塊、按鍵模塊以及揚(yáng)聲器發(fā)聲模塊,具體方框圖如圖3.1所示。</p><p>  圖3.1 系統(tǒng)功能方框圖</p><p>  下面從硬件和軟件兩個(gè)方面對(duì)系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì)。</p><p>  3.2 硬件詳細(xì)設(shè)計(jì)</p><p>  3.2.1 AT89C51 單片機(jī)簡(jiǎn)介</p><p> 

28、 AT89C51是這幾年我國(guó)非常流行的單片機(jī), AT89C51是一種高性能、低電壓的CMOS單片機(jī),它的片內(nèi)包含4k bytes可重復(fù)擦寫(xiě)的FLASH只讀程序存儲(chǔ)器,同時(shí)還有128 bytes的隨機(jī)存取數(shù)據(jù)的存儲(chǔ)器。由ATMEL公司開(kāi)發(fā)生產(chǎn),在8051、8751的基礎(chǔ)上增強(qiáng)了許多特性。如時(shí)鐘頻率更高,運(yùn)行速度更快。是嵌入式微控制器,與嵌入式微處理器相比,微控制器的最大特點(diǎn)是單片化,體積大大減小,功耗和成本下降,可靠性提高。AT89C51

29、是一種高效的微控制器,為很多嵌入式控制系統(tǒng)提供了質(zhì)優(yōu)價(jià)廉的方案。它可以滿足多方面的性能需求。AT89C51 采用了高性能的處理器結(jié)構(gòu),指令執(zhí)行時(shí)間較短。</p><p>  P0口是開(kāi)路型漏極雙向輸入輸出口,也即數(shù)據(jù)、地址復(fù)用口。P1口可作輸入口,因其自帶有上拉電阻的雙向輸入輸出口。P2口也是帶有上拉電阻的雙向輸入輸出口。P3口也是一個(gè)雙功能口,當(dāng)作為通用I/O口外,P3口還可以工作于專(zhuān)用功</p>

30、<p>  圖3.2.1 AT89C51單片機(jī)</p><p>  能,P3口在輸入方面多了一個(gè)緩沖器,P3口無(wú)須再加上拉電阻。其電源正負(fù)極分別接在40和20引腳上。</p><p>  3.2.2 晶振電路</p><p>  晶振電路是構(gòu)成單片機(jī)的最小系統(tǒng),單片機(jī)必須在時(shí)鐘的驅(qū)動(dòng)下才能進(jìn)行工作。單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)里晶振的作用非常大,全稱(chēng)

31、晶體振蕩器。反相放大器的輸入端為XTAL1,即19引腳,輸出端為XTAL2,即18引腳。在XTAL1和XTAL2兩端跨接石英晶體及兩個(gè)電容就可以構(gòu)成穩(wěn)定的自激振蕩器。晶振電路如圖3.2.2所示。</p><p>  圖3.2.2 晶振電路</p><p>  3.2.3 復(fù)位電路</p><p>  一個(gè)單片機(jī)系統(tǒng)至少有單片機(jī)芯片、電源、晶體振蕩器,還需要有能使單片

32、機(jī)復(fù)位的電路。復(fù)位電路分上電復(fù)位和手動(dòng)按鍵復(fù)位兩種,電路如圖3.2.3所示。</p><p>  圖3.2.3 復(fù)位電路</p><p>  3.2.4 鍵盤(pán)電路的設(shè)計(jì)</p><p>  鍵盤(pán)電路采用4個(gè)獨(dú)立按鍵和上拉電阻實(shí)現(xiàn)對(duì)鬧鐘時(shí)間的設(shè)定。其分別接在單片機(jī)的P1^1、P1^2、P1^3、P1^4引腳上,如圖3.2.4所示。</p><p&g

33、t;  圖 3.2.4 鍵盤(pán)輸入電路</p><p>  3.2.5 顯示電路</p><p>  此為六個(gè)七段共陽(yáng)數(shù)碼管,1、2、3、4、5、6表示數(shù)碼管位控制管腳,分別接在74HC138的15、14、13、12、11、10引腳上,實(shí)現(xiàn)對(duì)6位數(shù)碼管位的選擇;a、b、c、d、e、f、g,就是數(shù)碼管的段碼輸入,分別接在單片機(jī)P0口的P0.0~P0.6引腳。顯示電路如圖3.2.5所示。<

34、;/p><p>  圖3.2.5 數(shù)碼管顯示電路</p><p>  3.2.6 顯示驅(qū)動(dòng)模塊 </p><p>  74HC138是一款高速CMOS器件,適合內(nèi)存地址解碼或數(shù)據(jù)路由應(yīng)用??山邮?位加權(quán)地址輸入(A,B,C),在高性能存貯器系統(tǒng)中,這種譯碼器可提高譯碼效率。所以采用74HC138來(lái)驅(qū)動(dòng)位碼,段碼由上拉電阻驅(qū)動(dòng)。其三位地址輸入1、2、3引腳分別接在單片機(jī)P

35、2口的21、22、23引腳上。具體電路如圖3.2.6所示。</p><p>  圖3.2.6 74HC138功能引腳圖 圖3.2.7 蜂鳴器發(fā)音電路</p><p>  3.2.7 發(fā)音電路模塊 </p><p>  蜂鳴器是一種常用的電子器件,在很多的場(chǎng)合都有廣泛的應(yīng)用,一般用來(lái)發(fā)出報(bào)警或者提示的聲音。在本系統(tǒng)中,利用蜂鳴器進(jìn)行鬧

36、鐘音樂(lè)的播放。其控制端一端接在P3口的P3.7引腳上,另一端接地。具體電路如圖3.2.7所示。</p><p>  3.3 軟件詳細(xì)設(shè)計(jì)</p><p>  3.3.1 主程序設(shè)計(jì)</p><p>  主程序部分采用程序設(shè)計(jì)的模塊化思想設(shè)計(jì),模塊化設(shè)計(jì)的優(yōu)點(diǎn)是效率高,其模塊相對(duì)獨(dú)立,便于修改。在執(zhí)行程序時(shí),主程序只需要調(diào)用子程序就可完成相應(yīng)的功能。主程序流程圖如圖3

37、.3.1所示。</p><p>  圖3.3.1 主程序流程圖</p><p>  3.3.2 定時(shí)器定時(shí)模塊</p><p>  電子音樂(lè)鬧鐘設(shè)計(jì)中主要使用定時(shí)器T0,利用中斷進(jìn)行時(shí)間的增加,進(jìn)而實(shí)現(xiàn)計(jì)時(shí)功能。</p><p>  其流程圖如圖3.3.2所示。</p><p>  圖3.3.2 定時(shí)程序流程圖<

38、/p><p>  3.3.3 鬧鐘模塊</p><p>  判定有沒(méi)有到達(dá)鬧鐘設(shè)定時(shí)間是通過(guò)將鬧鐘設(shè)定時(shí)間與當(dāng)前時(shí)間進(jìn)行對(duì)比來(lái)確定是否進(jìn)行鬧鈴。其程序流程圖如圖3.3.3所示。</p><p>  圖3.3.3 鬧鐘程序流程圖</p><p>  3.3.4 計(jì)時(shí)模塊</p><p>  計(jì)時(shí)函數(shù)部分,主要是通過(guò)單片機(jī)定時(shí)

39、器中斷進(jìn)行的,當(dāng)單片機(jī)產(chǎn)生一次中斷,counter=20時(shí),說(shuō)明1秒時(shí)間到,然后把counter清0 ,把秒sec加1。以此類(lèi)推,然后再依次判斷分鐘和小時(shí)。計(jì)時(shí)模塊流程圖如圖3.3.4所示。</p><p>  圖3.3.4計(jì)時(shí)流程圖</p><p>  3.3.5 鍵盤(pán)掃描模塊 </p><p>  圖3.3.5 鍵盤(pán)掃描流程圖</p><p

40、>  此部分主要是通過(guò)判斷counter 在不同值時(shí)通過(guò)調(diào)用加1、減1子函數(shù)對(duì)時(shí)間和鬧鐘的時(shí)、分、秒進(jìn)行設(shè)置。在鬧鐘設(shè)置時(shí),按下key1時(shí)鐘停止,進(jìn)入鬧鐘設(shè)置模式,key2用來(lái)選擇時(shí)、分、秒的設(shè)定,按一下設(shè)置秒、兩下設(shè)置分、三下設(shè)置時(shí),key3用來(lái)選擇加,key4用來(lái)選擇減,設(shè)定好了之后再次按下key1即可完成鬧鐘時(shí)間設(shè)定,時(shí)間正常走。</p><p>  3.3.6 播放音樂(lè)模塊</p>&

41、lt;p>  當(dāng)當(dāng)前時(shí)間與所設(shè)的鬧鐘時(shí)間相等時(shí),調(diào)用曲目,查找相應(yīng)的音符,音符的高四位(即音頻)裝入T0,音符的低四位(即節(jié)拍)裝入節(jié)拍單元。T0開(kāi)始計(jì)數(shù),從P3.7輸出脈沖信號(hào),播放音樂(lè)。音樂(lè)播放結(jié)束,返回主程序。</p><p>  播放音樂(lè)流程圖如圖3.3.7所示。</p><p><b>  Y</b></p><p>  圖3.

42、3.7 播放音樂(lè)流程圖</p><p><b>  4 系統(tǒng)調(diào)試</b></p><p><b>  4.1 軟件介紹</b></p><p>  4.1.1 PROTEUS ISIS 軟件介紹</p><p>  Proteus軟件是英國(guó)Labcenter 公司出版的EDA工具軟件。目前,Prot

43、eus仿真系統(tǒng)支持的主流單片機(jī)有ARM7(LPC21xx)、8051/52系列、AVR系列等,它支持第三方軟件開(kāi)發(fā)、編譯。Proteus主要由ISIS和ARES兩部分組成,ISIS主要用于原理圖設(shè)計(jì)及與電路原理圖的交互仿真。Proteus的ISIS是一款專(zhuān)業(yè)的單片機(jī)軟件仿真系統(tǒng),Proteus ISIS是 Proteus軟件的核心,具有高質(zhì)量的原理圖,良好的用戶界面,自動(dòng)走線,層次設(shè)計(jì),總線支持等特性。該軟件具有數(shù)字電路仿真、模擬電路仿

44、真等,ISIS提供的Proteus VSM實(shí)現(xiàn)了混合式的SPICE電路仿真,他將高級(jí)圖表應(yīng)用,單片機(jī)仿真,第三方程序與調(diào)試環(huán)境有機(jī)結(jié)合,可以完成原理圖設(shè)計(jì)、電路分析與仿真及單片機(jī)程序仿真、測(cè)試及驗(yàn)證。并且有各種虛擬儀器。</p><p>  4.1.2 KEIL C51 軟件介紹</p><p>  Keil C51是德國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)

45、系統(tǒng),KEIL C51標(biāo)準(zhǔn)C編譯器為8051微控制器的軟件開(kāi)發(fā)提供了C語(yǔ)言環(huán)境,同時(shí)保留了匯編代碼高效快速的特點(diǎn)。KEILC51軟件提供了豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全windows界面。</p><p>  4.2 利用Proteus和Keil進(jìn)行聯(lián)合調(diào)式</p><p>  根據(jù)前面的硬件詳細(xì)設(shè)計(jì),利用Proteus構(gòu)建硬件平臺(tái),具體原理圖如4.2.1所示。在Keil開(kāi)發(fā)

46、環(huán)境中完成軟件代碼的編寫(xiě)。首先新建立工程,選擇目標(biāo)器件,再新建文件編寫(xiě)軟件代碼,對(duì)工程文件進(jìn)行編譯,得到二進(jìn)制文件(*.hex)。最后將該二進(jìn)制文件燒到單片機(jī)芯片內(nèi)部。具體程序加載過(guò)程如圖4.2.2所示。然后運(yùn)行系統(tǒng),進(jìn)行功能仿真。仿真調(diào)試的過(guò)程比較慢,一般要經(jīng)過(guò)調(diào)試、修改代碼、再調(diào)試,直到達(dá)到預(yù)期目標(biāo)為止。一般調(diào)試可采用分模塊進(jìn)行。</p><p>  圖4.2.1 硬件原理圖</p><

47、p>  圖4.2.2 程序加載窗口</p><p><b>  5 仿真結(jié)果</b></p><p>  本設(shè)計(jì)為簡(jiǎn)易電子音樂(lè)鬧鐘,主要完成如下功能。</p><p>  1.系統(tǒng)上電即開(kāi)始計(jì)時(shí),顯示時(shí)間12:23:45,如果需要顯示不同時(shí)間只用修改sec、min、hour即可,具體見(jiàn)程序。</p><p>  2

48、.四個(gè)獨(dú)立按鍵用來(lái)控制鬧鐘,按下key1時(shí)鐘停止,進(jìn)入鬧鐘設(shè)置模式,key2用來(lái)選擇時(shí)、分、秒的設(shè)定,按一下設(shè)置秒、兩下設(shè)置分、三下設(shè)置時(shí),key3用來(lái)選擇加,key4用來(lái)選擇減,設(shè)定好了之后再次按下key1即可完成鬧鐘時(shí)間設(shè)定,時(shí)間正常走。</p><p>  3.當(dāng)當(dāng)前時(shí)間和設(shè)定時(shí)間一樣時(shí),鬧鐘開(kāi)始播放歌曲“世上只有媽媽好”,播放完畢后繼續(xù)運(yùn)行,如果需要在此設(shè)定只用重復(fù)步驟2即可。

49、 </p><p>  運(yùn)行系統(tǒng)后,時(shí)間顯示效果圖如圖5.2所示。</p><p>  圖5.2 硬件仿真圖</p><p>  調(diào)整鬧鐘時(shí)間仿真效果圖如圖5.3所示。</p><p>  圖5.3 調(diào)整后的時(shí)間</p><p><b>  6 結(jié)論</b></

50、p><p>  本課題設(shè)計(jì)了一個(gè)基于單片機(jī)控制的電子音樂(lè)鬧鐘。從硬件和軟件2個(gè)方面分別對(duì)系統(tǒng)進(jìn)行了詳細(xì)設(shè)計(jì)。利用Proteus仿真軟件搭建硬件平臺(tái)對(duì)設(shè)計(jì)的系統(tǒng)進(jìn)行了功能仿真。通過(guò)仿真效果,充分驗(yàn)證了系統(tǒng)設(shè)計(jì)的可行性,達(dá)到了系統(tǒng)設(shè)計(jì)的預(yù)期目標(biāo)。仿真系統(tǒng)操作簡(jiǎn)單,運(yùn)行較穩(wěn)定。但系統(tǒng)功能還不夠完善,需要改進(jìn)的地方主要包括以下幾點(diǎn):</p><p>  1、系統(tǒng)只能顯示時(shí)間信息的時(shí)、分、秒,而且運(yùn)行一

51、段時(shí)間后,存在一定的誤差,需要經(jīng)常進(jìn)行時(shí)間的校正。改進(jìn)方法是采用專(zhuān)用的時(shí)鐘芯片,如DS1302,不僅可以顯示時(shí)、分、秒信息,還可以顯示年、月、日、星期幾等信息,而且時(shí)間誤差較小,無(wú)需經(jīng)常校正。</p><p>  2、系統(tǒng)存儲(chǔ)器內(nèi)只存儲(chǔ)了一手歌曲的相關(guān)數(shù)據(jù),未能實(shí)現(xiàn)鬧鐘音樂(lè)的選擇設(shè)置。改進(jìn)方法是增加音樂(lè)歌曲的數(shù)目,如果數(shù)據(jù)較多,可考慮外擴(kuò)存儲(chǔ)器實(shí)現(xiàn)。</p><p>  3、系統(tǒng)顯示信息較

52、少,因此采用的是數(shù)碼管顯示。如果增加更多的顯示信息,可考慮采用液晶顯示器。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 潘永雄.新編單片機(jī)原理與應(yīng)用. 西安電子科技大學(xué)出版社,2002</p><p>  [2] 張友德,趙志英,涂時(shí)亮.單片機(jī)微型機(jī)原理應(yīng)用與實(shí)驗(yàn). 復(fù)旦大學(xué)出版社,2000</p>

53、<p>  [3] 周航慈、朱兆優(yōu)、李躍忠.智能儀器原理與設(shè)計(jì). 北京航空航天大學(xué)出版社,2005</p><p>  [4] 江秀漢.可編程序控制器原理及應(yīng)用(第二版).西安電子科技大學(xué)出版社,2003</p><p>  [5] 沈慶陽(yáng)、郭庭吉.單片機(jī)實(shí)踐與應(yīng)用.清華大學(xué)出版社,2002年</p><p>  [6] 竇振中.單片機(jī)外圍器件

54、實(shí)用手冊(cè)存儲(chǔ)器分冊(cè).北京航空航天大學(xué)出版社,1998</p><p>  [7] 單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例,彭偉 編著</p><p>  [8] 高衛(wèi)東 ,51單片機(jī)原理與實(shí)踐 (C語(yǔ)言版)</p><p>  [9] 李建忠.單片機(jī)原理及運(yùn)用. 西安電子科技大學(xué)出版社, 2001

55、 [10] 吳金戎、沈慶陽(yáng).8051單片機(jī)實(shí)踐與應(yīng)用.清華大學(xué)出版社 ,2001 [11] 何立民.MCS51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京航空航天大學(xué)出版社, 1999

56、 </p><p>  [12] 李榮正、陳學(xué)軍.PIC單片機(jī)實(shí)驗(yàn)教程. 北京航空

57、航天大學(xué)出版社,2006</p><p>  [13] 張義和、陳敵北.例說(shuō)8051.人民郵電出版社,2006</p><p>  [14] AT89S51,8-bit Microcontroller with 4KB In-System Programmable Flash </p><p>  [15] Intel. Microcontroller Hand

58、book.1988</p><p>  [16] C程序設(shè)計(jì)(第三版),譚浩強(qiáng) 著,清華大學(xué)出版社</p><p><b>  致 謝</b></p><p>  畢業(yè)設(shè)計(jì)終于接近尾聲了,首先要感謝我的導(dǎo)師陳老師,他指導(dǎo)我各個(gè)模塊的設(shè)計(jì)和論文寫(xiě)作的框架。</p><p>  這次畢業(yè)設(shè)計(jì)及論文寫(xiě)作的時(shí)間不算很長(zhǎng),畢業(yè)設(shè)

59、計(jì)是自己獨(dú)立完成的,設(shè)計(jì)開(kāi)始時(shí)就對(duì)任務(wù)進(jìn)行了按時(shí)分工,每天都要按時(shí)完成任務(wù),這樣才能為順利完成好畢業(yè)設(shè)計(jì)提供時(shí)間基準(zhǔn)。由于畢業(yè)設(shè)計(jì)是我獨(dú)立進(jìn)行的設(shè)計(jì),剛開(kāi)始時(shí),心里十分茫然,不知從何入手,通過(guò)陳老師的指導(dǎo),在論文的寫(xiě)作過(guò)程中,我不僅對(duì)所學(xué)過(guò)的理論知識(shí)有了更深入的理解,而且我的操作能力也有了可喜的進(jìn)步。</p><p>  我認(rèn)為理論知識(shí)無(wú)論學(xué)得再好再透,畢竟是抽象的,在沒(méi)用于實(shí)踐前是毫無(wú)意義可言的,而四年的學(xué)習(xí)中

60、我所缺少的就是理論和實(shí)踐的密切結(jié)合。畢業(yè)設(shè)計(jì)則恰恰像一場(chǎng)及時(shí)雨,讓我通過(guò)親身學(xué)習(xí)學(xué)會(huì)如何把理論知識(shí)應(yīng)用于實(shí)踐。給了我充分的鍛煉機(jī)會(huì)。受益匪淺!</p><p><b>  謝謝老師!</b></p><p><b>  附 錄</b></p><p>  // 名稱(chēng): 簡(jiǎn)易電子音樂(lè)鬧鐘</p><p&

61、gt;  // 版本: V1.0</p><p>  #include <reg52.h></p><p>  #include<intrins.h></p><p>  #define FOSC 11059200</p><p>  #define N 50//N為定時(shí)時(shí)間,Nms</p>

62、<p>  #define TH1_RES (65536 - N*FOSC/12/1000)/256</p><p>  #define TL1_RES (65536 - N*FOSC/12/1000)%256</p><p>  sbit speaker = P3^7; //蜂鳴器接口定義</p><p>  sb

63、it BIT0 = P2^0; //數(shù)碼管位選接口</p><p>  sbit BIT1 = P2^1;</p><p>  sbit BIT2 = P2^2;</p><p><b>  //</b></p><p>  unsigned char Timer0_H, Timer0

64、_L, time;</p><p>  unsigned char sec = 45,min = 23,hour = 12; //用來(lái)初始化系統(tǒng)時(shí)間</p><p>  unsigned char temp_sec = 45,temp_min = 23,temp_hour = 12;//用來(lái)保存設(shè)定鬧鐘之前的時(shí)間</p><p>  unsigned

65、char targetsec = 0,targetmin = 0,targethour = 0;//鬧鐘目標(biāo)時(shí)間</p><p>  unsigned int counter = 0;//定時(shí)器計(jì)數(shù)變量</p><p>  /****鬧鐘時(shí)間設(shè)定標(biāo)志*** </p><p><b>  1: 設(shè)定秒</b></p><p&

66、gt;<b>  2:設(shè)定分</b></p><p><b>  3:設(shè)定時(shí)</b></p><p>  ***********************/</p><p>  unsigned char adjust_select = 0; </p><p><b>  //共陰數(shù)碼管碼表

67、</b></p><p>  unsigned char code dseg_code[]={0xc0,0xf9,0xa4,0xb0,</p><p>  0x99,0x92,0x82,0xf8,</p><p>  0x80,0x90,0x88,0x83,</p><p>  0xa7,0xa2,0x86,0x8e};<

68、/p><p>  unsigned char a[6]={0,0,0,0,0,0};//用來(lái)保存每一位分解的值</p><p>  unsigned char dis_aa = 0;</p><p>  unsigned char key_flag = 0;</p><p>  unsigned char clock_flag =

69、 0;</p><p>  unsigned char first_flag = 0;</p><p>  unsigned char music_flag = 0;//鬧鐘時(shí)間到播放音樂(lè)標(biāo)志變量</p><p>  unsigned char code FREQH[] = {</p><p>  0xF2, 0xF3, 0xF5,

70、 0xF5, 0xF6, 0xF7, 0xF8, //低音</p><p>  0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//中音</p><p>  0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 </p><p>  0xFE, 0xFE, 0xFE

71、, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 </p><p>  unsigned char code FREQL[] = {</p><p>  0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音</p><p>  0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9,

72、0x5B, 0x8F, // </p><p>  0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 </p><p>  0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 //--------------------------------------</p>

73、;<p>  //世上只有媽媽好 ,表中數(shù)據(jù)根據(jù)世上只有媽媽好樂(lè)譜簡(jiǎn)譜編寫(xiě)而等 </p><p>  unsigned char code sszymmh[] = {</p><p>  6, 2, 2, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, </p><p

74、>  //一個(gè)音符有三個(gè)數(shù)字。第一個(gè)為第幾個(gè)音、中為第幾個(gè)八度、最后一個(gè)為時(shí)長(zhǎng)(以半拍為單位)。</p><p>  6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,</p><p>  6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2

75、,</p><p>  5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,</p><p>  2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0};</p><p>  //--------------------------------

76、------</p><p>  //-----半拍延時(shí)函數(shù)---------------------------------</p><p>  void delay(unsigned char t) </p><p><b>  {</b></p><p>  unsigned char t1;</p&

77、gt;<p>  unsigned long t2;</p><p>  for(t1 = 0; t1 < t; t1++) //雙重循環(huán), 共延時(shí)t個(gè)半拍</p><p>  for(t2 = 0; t2 < 8000; t2++); //延時(shí)期間, 可進(jìn)入T0中斷去發(fā)音 300-500ms</p><p>  TR0 = 0;

78、 //關(guān)閉T0, 停止發(fā)音</p><p><b>  } </b></p><p>  //-------單音演奏函數(shù)-------------------------------</p><p>  void song() </p><p

79、><b>  {</b></p><p>  TH0 = Timer0_H; </p><p>  TR0 = 1; </p><p>  delay(time); } </p><p><b>

80、  }</b></p><p>  //定時(shí)器初始化函數(shù)</p><p>  void Timer1_inital()</p><p><b>  {</b></p><p>  TMOD = 0x11; //定時(shí)器0和定時(shí)器1都工作在模式1:16位</p><p>  TH1 =

81、 TH1_RES;</p><p>  TL1 = TL1_RES;</p><p><b>  TR1 = 1;</b></p><p><b>  EA = 1;</b></p><p><b>  ET1 = 1;</b></p><p>

82、;  ET0 = 1; //開(kāi)T0中斷</p><p><b>  }</b></p><p>  //數(shù)碼管顯示延時(shí)函數(shù) </p><p>  void DelayXus(unsigned int n)</p><p><b>  {</b></p&g

83、t;<p>  unsigned int m,j;</p><p>  for(m=0;m<n;m++)</p><p>  for(j=0;j<120;j++);</p><p><b>  } </b></p><p><b>  //數(shù)碼管顯示函數(shù)</b><

84、/p><p>  void refresh()</p><p><b>  {</b></p><p>  for(dis_aa=0;dis_aa<6;dis_aa++)</p><p><b>  { </b></p><p>  P0 = ~dseg_code[a

85、[dis_aa]];</p><p>  switch(dis_aa)</p><p><b>  {</b></p><p>  case 5: BIT2=0;BIT1=0;BIT0=0;break;</p><p>  case 4: BIT2=0;BIT1=0;BIT0=1;break;</p>&l

86、t;p>  case 3: BIT2=0;BIT1=1;BIT0=0;break;</p><p>  case 2: BIT2=0;BIT1=1;BIT0=1;break;</p><p>  case 1: BIT2=1;BIT1=0;BIT0=0;break;</p><p>  case 0: BIT2=1;BIT1=0;BIT0=1;break;

87、</p><p>  default:break;</p><p><b>  }</b></p><p>  DelayXus(5);</p><p>  BIT2=1;BIT1=1;BIT0=1;//必須加上用來(lái)消影,如果不加則掃描亂的一塌糊涂</p><p><b>  } &

88、lt;/b></p><p><b>  }</b></p><p>  //時(shí)間計(jì)算函數(shù),用來(lái)求解時(shí)、分、秒每一位的值</p><p>  void calcuate_time()</p><p><b>  {</b></p><p>  a[0] = sec%1

89、0;</p><p>  a[1] = sec/10;</p><p>  a[2] = min%10;</p><p>  a[3] = min/10;</p><p>  a[4] = hour%10;</p><p>  a[5] = hour/10;</p><p><b> 

90、 }</b></p><p>  //按鍵掃描函數(shù),返回掃描結(jié)果</p><p>  unsigned char key_scan()</p><p><b>  {</b></p><p>  unsigned char key;</p><p>  if(P1 != 0xff)&

91、lt;/p><p><b>  {</b></p><p>  DelayXus(5);</p><p>  if(P1 != 0xff)</p><p><b>  {</b></p><p>  key = P1;</p><p>  return

92、 key;</p><p><b>  }</b></p><p>  return 0xff; //沒(méi)有實(shí)際意義,只是為了消除not every exit path returns a value警告</p><p><b>  } </b></p><p><b>  e

93、lse</b></p><p>  return 0xff;</p><p><b>  }</b></p><p>  //按鍵處理函數(shù),調(diào)用按鍵掃描函數(shù)</p><p>  void key_handle()</p><p><b>  {</b></

94、p><p>  unsigned char temp2 = 0; //temp1不要初始化成一個(gè)static靜態(tài)變量</p><p>  P1 = 0xff;</p><p>  _nop_();_nop_();</p><p>  temp2 = key_scan();</p><p>  if((temp2|

95、0xfd) == 0xfd)</p><p><b>  {</b></p><p>  adjust_select++;</p><p>  if(adjust_select == 4)</p><p>  adjust_select = 0;</p><p>  while((P1|0xfd)

96、 == 0xfd);</p><p><b>  }</b></p><p>  if((temp2|0xfb) == 0xfb)</p><p><b>  {</b></p><p>  switch(adjust_select)</p><p><b>  {

97、</b></p><p>  case 1: sec++; break;</p><p>  case 2: min++; break;</p><p>  case 3: hour++;break;</p><p>  default: break;</p><p><b>  }<

98、;/b></p><p>  while((P1|0xfb) == 0xfb);</p><p><b>  }</b></p><p>  if((temp2|0xf7) == 0xf7)</p><p><b>  {</b></p><p>  switch(ad

99、just_select)</p><p><b>  {</b></p><p>  case 1: sec--; break;</p><p>  case 2: min--; break;</p><p>  case 3: hour--;break;</p><p>  default:

100、 break;</p><p><b>  }</b></p><p>  while((P1|0xf7) == 0xf7);</p><p><b>  }</b></p><p>  targetsec = sec; // 保留目標(biāo)時(shí)間值</p><p>  

101、targetmin = min;</p><p>  targethour = hour;</p><p><b>  } </b></p><p>  /******* 暫時(shí)用處不大 ******/</p><p>  void refresh1()</p><p><b>  

102、{</b></p><p>  for(dis_aa=0;dis_aa<6;dis_aa++)</p><p><b>  { </b></p><p>  P0 = ~dseg_code[a[dis_aa]];</p><p>  switch(dis_aa)</p><p&g

103、t;<b>  {</b></p><p>  case 5: BIT2=0;BIT1=0;BIT0=0;break;</p><p>  case 4: BIT2=0;BIT1=0;BIT0=1;break;</p><p>  case 3: BIT2=0;BIT1=1;BIT0=0;break;</p><p> 

104、 case 2: BIT2=0;BIT1=1;BIT0=1;break;</p><p>  case 1: BIT2=1;BIT1=0;BIT0=0;break;</p><p>  case 0: BIT2=1;BIT1=0;BIT0=1;break; </p><p>  default:break;</p><p><b>

105、;  }</b></p><p>  DelayXus(1);</p><p>  BIT2=1;BIT1=1;BIT0=1;//必須加上用來(lái)消影,如果不加則掃描亂的一塌糊涂</p><p><b>  } </b></p><p><b>  }</b></p>&l

106、t;p>  //-----------主函數(shù)---------------------------</p><p>  void main(void)</p><p><b>  {</b></p><p>  unsigned char k, i = 0; </p><p>  time = 1; </p&

107、gt;<p><b>  PT0 = 1;</b></p><p><b>  PT1 = 0;</b></p><p>  Timer1_inital();</p><p><b>  while(1) </b></p><p><b>  {<

108、/b></p><p>  if(P1 != 0xff)</p><p><b>  {</b></p><p>  DelayXus(5);</p><p>  if(P1 != 0xff)</p><p><b>  { </b></p><p&

109、gt;  if(P1 == 0xfe)</p><p><b>  {</b></p><p>  clock_flag ++;</p><p>  if(clock_flag >=3) clock_flag = 0;</p><p>  while(P1 == 0xfe);</p><p&g

110、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  calcuate_time();</p><p>  if (clock_flag == 1)</p><p><b&g

111、t;  {</b></p><p>  if(first_flag == 0)</p><p><b>  {</b></p><p>  temp_sec = sec;</p><p>  temp_min = min;</p><p>  temp_hour = hour;<

112、/p><p>  first_flag = 1;</p><p><b>  }</b></p><p>  key_handle();</p><p><b>  }</b></p><p>  else if(clock_flag == 2)</p><p

113、><b>  {</b></p><p>  sec = temp_sec;</p><p>  min = temp_min;</p><p>  hour = temp_hour;</p><p>  clock_flag = 0;</p><p>  first_flag =

114、 0;</p><p><b>  TR1 = 1;</b></p><p><b>  } </b></p><p>  if(clock_flag == 0) //判斷鬧鐘時(shí)間有沒(méi)有到</p><p><b>  {</b>&

115、lt;/p><p>  if((sec == targetsec) && (min == targetmin) && (hour == targethour))</p><p><b>  {</b></p><p>  music_flag = 1;//準(zhǔn)備播放音樂(lè)</p><p>  T

116、R1 = 0;//暫時(shí)關(guān)閉時(shí)鐘顯示</p><p><b>  }</b></p><p><b>  } </b></p><p>  if(music_flag == 1)</p><p><b>  {</b></p><p>  while(t

117、ime) </p><p><b>  {</b></p><p>  k = sszymmh[i] + 7 * sszymmh[i + 1] - 1;</p><p>  Timer0_H = FREQH[k]; </p><p>  Timer0_L = FREQL[k]; t

118、ime = sszymmh[i + 2]; i += 3;</p><p>  song(); //發(fā)出一個(gè)音符</p><p>  refresh1(); </p><p><b>  } </b></p><p><b>  TR1 =

119、 1;</b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void timer0_int() interrupt 1 //T0中斷程序,控制發(fā)音的音調(diào)

120、</p><p><b>  {</b></p><p>  TR0 = 0; //先關(guān)閉T0</p><p>  speaker = !speaker; //輸出方波, 發(fā)音</p><p>  TH0 = Timer0_H; //下

121、次的中斷時(shí)間</p><p>  TL0 = Timer0_L; //啟動(dòng)T0</p><p>  TR0 = 1; </p><p><b>  }</b></p><p>  void timer1_int() interrupt 3</p><p&

122、gt;<b>  {</b></p><p>  TH1 = TH1_RES;</p><p>  TL1 = TL1_RES;</p><p>  counter++;</p><p>  if((clock_flag == 0) || (clock_flag == 2))</p><p>

123、<b>  {</b></p><p>  if(counter == 20)</p><p><b>  {</b></p><p>  counter = 0;</p><p><b>  sec++;</b></p><p>  if(sec ==

124、 60)</p><p><b>  {</b></p><p><b>  sec = 0;</b></p><p><b>  min++;</b></p><p>  if(min == 60)</p><p><b>  {</b

125、></p><p><b>  min = 0;</b></p><p><b>  hour++;</b></p><p>  if(hour == 24)</p><p><b>  {</b></p><p><b>  sec

溫馨提示

  • 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ù)僅提供信息存儲(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)論