【正文】
*/ uchar High,Low。其次感謝這篇論文所涉及到的各位學(xué)者,本文引用了各位學(xué)者的研究文獻(xiàn),如果沒有各位學(xué)者的研究成果的幫助和啟發(fā),我將很難完成本篇論文。 不足之處有: ( 1)可彈奏的音符數(shù)較少,只能在一定范圍內(nèi)滿足用戶需要。 18 仿真步驟 首先用 Protel99se 軟件繪制電路原理圖,如圖 51 1 2 3 4 5 6ABCD654321DCBAT i t l eN um b e r R e vi s i o nS i z eBD a t e : 19 M a y 20 13 S h e e t o f F i l e : C : \ D oc um e n t s a nd S e t t i ng s \ A dm i ni s t r a t or \桌面 \電子琴資料 \電子琴 出售資料 \電子琴 .d d bD r a w n B y:123456789R P 110 3V C Cabcdefghb c d e f g hY112 M H ZC322C222X T A L 1 X T A L 2V C CR110 kV C CR S T1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16L C D16 02k1 k2 k3 k4k1k2k3k4V C CP 1. 01P 1. 12P 1. 23P 1. 34P 1. 45P 1. 56P 1. 67P 1. 78R S T9P 3. 0( R X D )10P 3. 1( T X D )11P 3. 2( I N T 0)12P 3. 3( I N T 1)13P 3. 4( T 0)14P 3. 5( T 1)15P 3. 6( W R )16P 3. 7( R D )17X T A L 218X T A L 119GND20P 2. 0( A 8)21P 2. 1( A 9)22P 2. 2( A 10 )23P 2. 3( A 11 )24P 2. 4( A 12 )25P 2. 5( A 13 )26P 2. 6( A 14 )27P 2. 7( A 15 )28P S E N29A L E / P R O G30E A / V P P31P 0. 732P 0. 633P 0. 534P 0. 435P 0. 336P 0. 237P 0. 138P 0. 039V C C40U1S T C 89 C 52112233445566S1S W I T C H32 1p1P O W E R123R T 110 Ka1 23 4K1K E Y1 23 4K2K E Y1 23 4K3K E Y1 23 4K4K E Y+C110 U FV C CR S TX T A L 1X T A L 2k5k6k7k8k5 k6 k7 k81 23 4K5K E Y1 23 4K6K E Y1 23 4K7K E Y1 23 4K8K E Y1234K9K E YR2Q1C 94 5V C C12L A B AC O N 2接喇叭 圖 51 電路原理圖 電路原理圖繪制完成之后就可 以進(jìn)行電路功能的仿真。掌握這一軟件的使用對(duì)于使用 51 系列單片機(jī)的愛好者來(lái)說(shuō)是十分必要的,如果使用 C 語(yǔ)言編程,那么 Keil幾乎就是不二之選 , 即使不使用 C 語(yǔ)言而僅用匯編語(yǔ)言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì) 使工作 事半功倍。為課程設(shè)計(jì)與畢業(yè)設(shè)計(jì)提供綜合系統(tǒng)仿真。2247。下為歌曲處理函數(shù)部分 void Song() { TH0=High。 if(P1!=0xff)//長(zhǎng)按任意 8 音鍵退出播放 { 15 delayms(10)。 TR0=1。break。break。 //在未按鍵時(shí),喇叭低電平,防止長(zhǎng)期高電平損壞喇叭 lcd_string(0x40+0,5,NOTE:)。 ( 2) 鍵盤處理程序的 目的 是:確定有 沒有 鍵按下, 再 判斷 是 哪一個(gè)鍵按下 的 , 這個(gè)鍵所展示的功能是什么 ; 而且 還要消除按鍵在閉合或斷開 的狀態(tài) 時(shí)的抖動(dòng)。程序框圖如 11 圖 41 所示。 所以 一個(gè)端口就可以構(gòu)成 4*4=16 個(gè)按鍵, 與 直接將端口線用于 鍵盤 相比之下 多出了一倍,而且 在 線數(shù) 更 多 的情況下 ,區(qū)別 就會(huì) 越明顯, 或者 再多加一條線就 能夠 構(gòu)成 20 鍵的 鍵盤 ,而直接用端口線 就 只能多出一鍵( 9 鍵)。 即使 人的動(dòng)作再快也會(huì) 讓 按鈕保持接通 的狀態(tài) 達(dá)數(shù)十毫秒, 因此 , 它能夠 完全滿足復(fù)位的時(shí)間要求。 構(gòu)成振蕩器的是單片機(jī)背部的一個(gè)高增益反相放大器。 ( 2)電源電路單片機(jī)是一種超大規(guī)模集成電路,在該集成電路內(nèi)有成千上萬(wàn)個(gè)晶體管或場(chǎng)效應(yīng)骨。如時(shí)鐘頻率為 6MHz,即 fosc=6MHz,則時(shí)鐘周期為 1/6181。液 晶是在 1888 年由 奧地利 植物學(xué)家 萊尼茨爾 ( Reinitzer)發(fā)現(xiàn)的,是一種介于固體與液體之間 且 具有規(guī)則性分子排列的有機(jī)化合物。 ① 按下音符鍵可以發(fā)出相應(yīng) 的音符 ② 按下音樂播放鍵可以自動(dòng)播放預(yù)先存在內(nèi)存中的曲子 AT89C52 作為本設(shè)計(jì)的主控芯片,作為大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,它擁有高性能、高速度、簡(jiǎn)單、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn),也具有編程實(shí)現(xiàn)靈活的特性,由于本設(shè)計(jì)主要用于教學(xué)娛樂方面,因此在設(shè)計(jì)上盡量使其簡(jiǎn)單易懂。通過(guò)分析各種軟件環(huán)境,硬件仿真環(huán)境等均已經(jīng)具備。首先要編寫一個(gè)精確的基本時(shí)長(zhǎng)的延時(shí)程序,比如說(shuō)以八分音符的時(shí)長(zhǎng)為基本延時(shí)時(shí)間,那么對(duì)于一個(gè)音符,如果它是四分音符,只需調(diào)用四次延時(shí)程序,如果它是二分音符,則只需調(diào)用八次延時(shí)程序,以此類推。對(duì)于音符的節(jié)拍,以 43 為例。常采用的方法是通過(guò)單片機(jī)的定時(shí)器進(jìn)行定時(shí)中斷,在中斷服務(wù)子程序中將單片機(jī)上外界揚(yáng)聲器的 I/O 口來(lái)回置高電平或置低電平,從而讓揚(yáng)聲器發(fā)出聲音。 f1和 f2為兩個(gè)不同的音符,如果其中一個(gè)音符的頻率是另外一個(gè)音符的 兩倍時(shí),即 212 ?? ff時(shí),則稱 f2比 f1要高出一個(gè)倍頻程。 一般來(lái)說(shuō),單片機(jī)不像其他專業(yè)樂器那樣能奏出多種音色的聲音,即不包含相應(yīng)幅度的諧波頻率。電子琴按下不同的琴鍵就會(huì)發(fā)出不同音調(diào)的聲音,其實(shí)就是產(chǎn)生不同頻率的震動(dòng)。單片機(jī) 技術(shù)的發(fā)展速度非常之快 ,目前 的產(chǎn)品都致力于在 各個(gè)功能 方面進(jìn)行 更加全面的設(shè)計(jì)研究 ; 在社會(huì)消費(fèi)的需求競(jìng)爭(zhēng)之下 ,盡可能地利用單片機(jī) 的最新 技術(shù)來(lái)研制其應(yīng)用系統(tǒng),再利用單片機(jī)靈便、性價(jià)比高 等特點(diǎn), 來(lái)確保所設(shè)計(jì)出來(lái)的產(chǎn)品能夠具有強(qiáng)大的競(jìng)爭(zhēng)力和存活力 。 其他同志對(duì)本研究所做的貢獻(xiàn)均已在論文中作了聲明并表示了謝意。 本論文中除引文和致謝的內(nèi)容外,沒有抄襲其他人或其他機(jī)構(gòu)已經(jīng)發(fā)表或撰寫過(guò)的研究成果。 隨著單片機(jī)性能的不斷提高,它的應(yīng)用變得更加廣泛, 目前 它 已用于工業(yè)控制、機(jī)電一體化設(shè)備、儀器儀表、信號(hào)處理、現(xiàn)代兵器、交通能源、商用設(shè)備、醫(yī)療設(shè)備及家用電器等 多 個(gè)領(lǐng)域。 2 2. 工作原理 聲音是周圍空氣的震動(dòng),音調(diào)取決于震動(dòng)的頻率,頻率越高音調(diào)越高。 目前,市場(chǎng)上有很多種音樂模塊和音樂芯片,可以直接產(chǎn)生各種曲子,但是,這種模塊價(jià)格 比較昂貴,電路結(jié)構(gòu)比較復(fù)雜,如果系統(tǒng)中僅需要產(chǎn)生簡(jiǎn)單的音符或者簡(jiǎn)單的曲子,可以使用單片機(jī)配合揚(yáng)聲器產(chǎn)生需要的音樂效果。在音樂中標(biāo)準(zhǔn)音高為中音 C 上方的 A 音,它的頻率是 f = 440Hz,把其它的音和它進(jìn)行比較。 在知道了一個(gè)音符的頻率后,就可以讓單片機(jī)發(fā)出相應(yīng)的頻率所對(duì)應(yīng)的的振蕩信號(hào),從而產(chǎn)生相應(yīng)的音符聲音。這里 1=C, 1=G 標(biāo)識(shí)樂譜的曲調(diào),簡(jiǎn)單的說(shuō)就是跟音調(diào)有關(guān)系;這里的 44 、 43 用來(lái)表示節(jié)拍。 從而,在單片機(jī)上可采用循環(huán)延時(shí)的辦法來(lái)實(shí)現(xiàn)控制一個(gè)音符唱多長(zhǎng)時(shí)間。其次,在這次設(shè)計(jì)可行性上進(jìn)行分析如下: ① 技術(shù)可行性 技術(shù)可行性主要是分析技術(shù)條件上是否能夠順 利開展并完成課程設(shè)計(jì)的主要問(wèn)題,硬件、軟件能否滿足設(shè)計(jì)者的需要等。 用 PROTEUS 實(shí)現(xiàn)的電子琴仿真設(shè)計(jì)。 生活中的電視、手機(jī)絕大多數(shù)產(chǎn)品都屬于液晶產(chǎn)品,因此,液晶對(duì)于人們的生活來(lái)說(shuō)并不陌生 。時(shí)鐘信號(hào)頻率的倒數(shù)是零大小,通常用 fosc 表示。 ( 1) 但單片機(jī)的應(yīng)用系統(tǒng)中 ,單片機(jī)是核心部件, 它 能夠自動(dòng)完成 用戶的需求所賦予的任務(wù) 。 ② 任何工作都按時(shí)間順序。手動(dòng)按鈕復(fù)位的電路如所示。 在 矩陣 式 鍵盤 里 , 各個(gè) 水平線和垂直線在交叉處 是 不直接連通 的 ,而是通過(guò)一個(gè)按鍵 將它們 加以連接的 。 圖 35 鍵盤 軟件主要由初始化程序、鍵盤掃描程序、音調(diào)發(fā)生程序、延時(shí)程序和曲調(diào)播放程序組成。每個(gè)按鍵的狀態(tài) 都需要 變成數(shù)字量 “0” 和 “1” ,開關(guān)的一端(列線)通過(guò)電阻接 VCC,而接地 就 是通過(guò)程序輸出數(shù)字 “0” 所 實(shí)現(xiàn)的。 //初始化定時(shí)器 0,主要用于數(shù)碼管動(dòng)態(tài)掃描 SPK=0。 case 0xf7:num= 4。 case 0x7f:num= 8。 Low =freq[num1][0]。 //節(jié)拍時(shí)長(zhǎng) i=i+3。利用 AT89C52 單片機(jī) 的內(nèi)部定時(shí)器 讓它的 工作計(jì)數(shù)器模式( MODE1)下,改變計(jì)數(shù)值 TH0 及 TL0 以產(chǎn)生不同頻率的方法產(chǎn)生不同 的 音階, 比如 ,頻率為 523Hz,其周期 T= 1/523=1912μs , 所以 只要 讓 計(jì)數(shù)器計(jì)時(shí) 956μs/1μs = 956,每計(jì)數(shù) 956次時(shí)將 I/O反相,就可得到中音 DO( 523Hz)。 其計(jì)數(shù)初值 T 的求法如下: T= 65536- N= 65536- fi247。 Proteus 的電路原理圖設(shè)計(jì)系統(tǒng)的仿真實(shí)驗(yàn) 功能:電路不僅能做電路基礎(chǔ)實(shí)驗(yàn)、模擬電路實(shí)驗(yàn)與數(shù)字電路實(shí)驗(yàn),而且能做單片機(jī)與接口實(shí)驗(yàn)。運(yùn)行 Keil 軟件需要 Pentium 或以上的CPU, 16MB 或更多 RAM、 20M 以上空閑的硬盤空間、 WIN9 NT、 WIN20xx、 WINXP 等操作系統(tǒng)。 ( 3) 仿真芯片的 31 腳( /EA)已接至高電平,所以仿真時(shí)只能使用片內(nèi) ROM,不能使用片外 ROM;但 仿真器 外引插針中的 31 腳并不與仿真芯片的 31 腳相連,故該仿真器仍可插入到擴(kuò)展有外部 ROM(其CPU 的 /EA 引腳接至低電平)的目標(biāo)系統(tǒng)中使用。 將程序燒入芯片 ,調(diào)試成功后 ,可任意彈奏自己想要的旋律。在這里我首先要強(qiáng)烈謝謝我的論文指導(dǎo)老師 —— 吳大中老師,他對(duì)我進(jìn)行了無(wú)數(shù)次的指導(dǎo),不厭其煩的幫助我進(jìn)行論文的修改和改進(jìn)。 final buzzer. Keywords: AT89C52 。 uchar Time。339。739。 /* 函數(shù)聲明 */ void Init_Timer0(void)。 EN=1。 delayms(2)。it。 lcd_init()。 case 0xfd:num= 2。 case 0xdf:num= 6。 29 } lcd_string(0x40+7,1,YINFU[num])。 while(i100) { k=MUSIC[i]+7*MUSIC[i+1]1。 } T