基于51單片機(jī)的激光豎琴設(shè)計
《基于51單片機(jī)的激光豎琴設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《基于51單片機(jī)的激光豎琴設(shè)計(39頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、基于51單片機(jī)的激光豎琴設(shè)計組長:趙唐橙組員:杜晨 楊霄 周凱龍2018年 07月 05 日目錄基于51單片機(jī)的激光豎琴設(shè)計1背景與意義2設(shè)計要求3硬件電路設(shè)計與實現(xiàn)43.1 硬件設(shè)計方案43.2 相對應(yīng)得模塊電路的規(guī)劃思路與實現(xiàn)方法53.2.1 單片機(jī)最小系統(tǒng)53.2.2 激光發(fā)射模塊93.2.3 激光接收模塊103.2.4 發(fā)聲模塊113.2.5 LED指示燈133.2.6 電源供電143.2.7 模式切換15軟件設(shè)計與實現(xiàn)154.1 軟件設(shè)計方案154.2 各模塊程序設(shè)計與實現(xiàn)174.2.1 硬件資源配置174.2.2 端口信號檢測2042.3 數(shù)據(jù)處理204.2.4音符輸出214.2.
2、5 LED音符與音區(qū)指示214.2.6 播放音樂部分224.2.7模式切換234.3 軟件開發(fā)工具介紹24測試與分析25程序部分25硬件部分26實物圖27總結(jié)與展望29附錄29附錄A 主程序29附錄B 整體電路圖38背景與意義在這個時代,科學(xué)技術(shù)的飛速前進(jìn)帶動了人們的生活水平的提升,使人類生活更加精彩。電子琴可以稱得上是這兩者融合的體現(xiàn)。MCU(Micro Unit Unit),我們用漢語來說,可以稱之為微控制單元,亦叫做單片機(jī)(單片微型計算機(jī))或單片機(jī)。它運用的時期并不長,但發(fā)展的速度確是非常的快。 在1971年這個時間點,美國英特爾公司有史以來第一個推出了4位微處理器,在接下來的過程中,演
3、變通過了了以下五個進(jìn)程:單片機(jī)開發(fā)的開端、低性能的單片機(jī) 、高性能的單片機(jī),然后16位的面世。進(jìn)而就是正在向更高的層次發(fā)展。單片機(jī)可構(gòu)成單應(yīng)用系統(tǒng)和多機(jī)應(yīng)用系統(tǒng)。在現(xiàn)在的這個時期,它已廣泛應(yīng)用于測控系統(tǒng)、智能儀表、機(jī)電一體化產(chǎn)品、智能接口、智能化民用產(chǎn)品、功能分布式系統(tǒng)、并行多機(jī)控制系統(tǒng)、局域網(wǎng)絡(luò)系統(tǒng)等方方面面。對于未來,我們始終相信隨著MCU性能的不斷提高,其應(yīng)用將超出我們的想象?;趩纹瑱C(jī)的簡易激光琴的設(shè)計與實現(xiàn)是可以幫助我們把我們所學(xué)的相關(guān)技術(shù)得意嘗試和發(fā)揮。在整體設(shè)計規(guī)劃中包括電路分析、數(shù)字電路、模擬電路、傳感器原理及應(yīng)用、C編程等。由此可以看出,大體上囊括了在現(xiàn)在學(xué)習(xí)水平上學(xué)到的主流
4、課程。該系統(tǒng)設(shè)計原理簡明,但樣式多彩。通過這樣一個流程,可以幫助我們把理論與實際相結(jié)合,除了我們上面所說的,也能提高我們的動手能力,使我們勇于創(chuàng)新,知識面也得到了大幅提升, 第一步我們可以在過程中找到問題所在、第二步對這個問題進(jìn)行思考,這樣使我們在以后的學(xué)習(xí)過程中碰到問題能更得心應(yīng)手的應(yīng)對。該系統(tǒng)可以對于MCU的相關(guān)功能進(jìn)行進(jìn)一步的擴(kuò)大,在我們現(xiàn)在所了解的情況基下,可以具體的地讀出中間和八個音符。可以逐步將其設(shè)計為電子琴,兒童玩具,并慢慢滲透進(jìn)我們的生活。設(shè)計要求虛擬琴弦選擇激光來完成,當(dāng)手觸碰到琴弦的時候,這個音節(jié)就會出現(xiàn),這樣就能夠完成對于豎琴演奏簡易的曲子的模仿在硬件電路上要各個模塊清晰
5、明確,對各模塊進(jìn)行具體分析,以及功能的說明。如激光發(fā)射以及接收,最小系統(tǒng),還有發(fā)聲模塊,從而設(shè)計出整體的電路布局。在軟件設(shè)計過程,要結(jié)合硬件電路具體分析,實現(xiàn)硬件資源的合理配置,端口信號的檢測和數(shù)據(jù)的處理。實現(xiàn)手指撥動光束,就會發(fā)出對應(yīng)音符,需要做到得心應(yīng)手。這個過程要確保無誤,有錯誤要及時發(fā)現(xiàn)改正,保證系統(tǒng)能夠穩(wěn)定地運行。程序的編寫過程要注意細(xì)節(jié),防止出現(xiàn)錯誤,影響系統(tǒng)的運行。硬件電路設(shè)計與實現(xiàn)3.1 硬件設(shè)計方案在實現(xiàn)設(shè)計的時候,我們必須得將外觀的結(jié)構(gòu)的尺寸標(biāo)準(zhǔn)融合來完成設(shè)計硬件電路,我們設(shè)計硬件系統(tǒng)的規(guī)劃就是需要真實,有效、簡易。對于運行整個系統(tǒng)的通過的關(guān)鍵一點就是可靠性,因此,在電路硬
6、件方面的設(shè)計的時候的各個環(huán)節(jié)都對于系統(tǒng)的平穩(wěn)以及抗干擾性深入的考慮,系統(tǒng)的簡易以及有效其實說的就是硬件系統(tǒng)于很大可靠性的前提下,對于這個硬件的電路進(jìn)行簡易,將這個硬件的性能給提升起來,這樣可以完成簡易有效的規(guī)劃。在真實,簡易以及有效的原則條件下,不但在選擇元器件是便利的,對設(shè)計硬件電路也是有益的,還能夠降低有些不需要的電路,確保系統(tǒng)穩(wěn)定。由五個部分所組成的電路的硬件系統(tǒng),詳細(xì)查看圖3.1.單片機(jī)最小系統(tǒng)激光發(fā)射部分激光接收部分音頻驅(qū)動部分電源部分圖3-1 結(jié)構(gòu)圖(關(guān)于這個硬件系統(tǒng)的組成)3.2 相對應(yīng)得模塊電路的規(guī)劃思路與實現(xiàn)方法對于上一部份全部硬件電路系統(tǒng)的構(gòu)架已經(jīng)初步的進(jìn)行概述,在這個章節(jié)
7、之中我們主要是對于構(gòu)成硬件電路的各個子模塊還有其性能以及PCB電路板設(shè)計進(jìn)行詳細(xì)的概述。接下來是對于整個系統(tǒng)的4部分來進(jìn)行具體概述。3.2.1 單片機(jī)最小系統(tǒng)單片微型計算機(jī)其實又可以被簡單的叫做單片機(jī)。是一個整體的微型計算機(jī)。創(chuàng)建一個單片機(jī)最小系統(tǒng),在這個系統(tǒng)之中具有包括這四個層面:分別為STC89C51RC以及是復(fù)位電路,還有就是振蕩電路I/O接口。圖3-1 單片機(jī)最小系統(tǒng)構(gòu)成圖復(fù)位電路即讓寄存器的值變回原始值,復(fù)位電路詳細(xì)可以經(jīng)有兩個渠道,一個是上電復(fù)位,一個是外部復(fù)位。上電復(fù)位于單片機(jī)在將電源連接好的時候,復(fù)位單片機(jī)的功能可以自身達(dá)到,外部復(fù)位在這里說明,通俗來講便是由外部手動來達(dá)成復(fù)位
8、的功能??偟膩碚f此電路其實就是能夠自身上電復(fù)位(在這地位時),還能夠選擇運用外部手動的方式來達(dá)到復(fù)位的目的。實際手動復(fù)位很少用到,所以我們把手動復(fù)位按鍵去掉,讓電路更簡潔。圖3-2 復(fù)位電路振蕩電路眾所周知片內(nèi)的時鐘電路還有定時電路可以幫助我們實現(xiàn)所要的定時控制作用,在片內(nèi),我們有兩種渠道可以達(dá)到時鐘產(chǎn)生,便是我們大家所說的內(nèi)部時鐘方法以及外部時鐘方法這兩種,當(dāng)然我們也可以稱為內(nèi)部振蕩器以及外部振蕩器這兩種。在我們需要選擇內(nèi)部時鐘方法的時候,反饋元件的片外晶體振蕩器其實是片內(nèi)的高增益反相放大器經(jīng)過XTAL1、XTAL2外接來完成的,具體是配合并聯(lián)諧振回路(這里指過我們的電容所構(gòu)成的回路)由此來
9、幫助我們一起形成自激振蕩器,從而為我們的內(nèi)部時鐘電路輸送了一個重要條件。這個條件便是震蕩時鐘,我們知道震蕩器的頻率在極大程度上被我們的晶體振蕩頻率所決定,在通常的情況下,晶體能夠在一點二到十二兆赫中選擇,電容能夠在五到三十pF間選取的,電容的大小其實是可以在一點的程度上小小的影響到振蕩頻率的,能夠發(fā)揮頻率微微調(diào)節(jié)的作用運用外部時鐘方式時鐘的時候,連接到內(nèi)部時鐘電路是經(jīng)過XTAL2來完成外部振蕩信號,這個時候關(guān)于我們的內(nèi)部反相放大器中它的輸入端,也就是所說的XTAL1端,它此刻的狀態(tài)為接地。一般情況下外接振蕩信號它的大小,也就是小于十二赫茲,而且信號是方波信號。此時,關(guān)于如何制定這個振蕩電路,我
10、們應(yīng)該通過內(nèi)部時鐘,此外對于外部晶體振蕩器選擇使用十二赫茲,電泳選擇的是三十pF。圖3-3 振蕩電路單片機(jī)和I/O接口我們運用的單片機(jī)型號是STC89C51RC型的,這個設(shè)計的企業(yè)是宏晶,它是一個在8051內(nèi)核的前提下設(shè)計的,運用了CMOS生產(chǎn)方式,這個單片機(jī)存在低功耗的特征,它存在四個八位的并行輸入輸出I/O接口:一個是P0,一個是P1,一個是P2,一個是P3(線是三十二個),專門運用對數(shù)據(jù)進(jìn)行輸入以及輸出,另外,它的串行I/O接口數(shù)量是一個,這個定時器/計數(shù)器是兩個十六位,中斷系統(tǒng)是五級等。對此,我們需要的片機(jī)條件是:首先它得帶有一個定時器/計數(shù)器,位數(shù)為十六。其次便是一個輸入輸出I/O口
11、,位數(shù)為八。在談到定時器/計數(shù)器的時候,無論它是我們單個存在的定時器芯片,亦或是包括在單片機(jī)內(nèi)部的那個所謂的定時器,一般都是存在這些突出點:關(guān)于我們的定時器/計數(shù)器,如果想要它的運行起來,是可以有多種渠道的,一方面可以是定時方法,另一方面可以是計數(shù)的方法。再者就是定時器/計數(shù)器的計算數(shù)值,毫無疑問它并不是死板的而是可變通,此外關(guān)于技術(shù)它的max值,自然而然是有限制的,這很大程度上是依靠級數(shù)器它的尾數(shù)的前提下明確的,計數(shù)的最高值將定時的最大值給限定了。能夠根據(jù)要求的定時以及要求的計數(shù)值,在兩種情況下,一是定時時間到,再者就是終止計數(shù)的這樣一個時刻,給予中斷這樣一個申請指令,來達(dá)成我們的主要目的,
12、也就是定時控制。在我們利用到的STC89C51RC單片機(jī)中,大家都知道它的定時器是能夠編程的,即運作渠道亦或是開啟以及終止等等都是能夠用于編程來進(jìn)行控制的,需要經(jīng)過對于寄存器TMOD、TCON、TH0、TL0、TH1進(jìn)行設(shè)立,并且設(shè)立TL1就能過實現(xiàn)的,在對于定時器的工作方法進(jìn)行設(shè)立之后,并且將這個定時器工作開啟直呼,定時器是能夠?qū)τ谶@個工作方式的獨立進(jìn)行設(shè)置的,不會對于CPU進(jìn)行占用,若是計數(shù)器記載滿之后,就能過主動的朝著CPU中斷系統(tǒng)進(jìn)行一個操作,也就是請求終止,中斷這樣一個指令一旦傳達(dá)下去毫無疑問會那把我們的CPU資源給占用了。圖3-4 定時器/計數(shù)器結(jié)構(gòu)圖3.2.2 激光發(fā)射模塊關(guān)于光
13、敏電阻電路部分,當(dāng)光線照到光敏電阻的光越強(qiáng),電阻值就越小。通過給光敏電阻接一個10k的上拉電阻,兩個引腳分別接到單片機(jī)io口與地。由于激光光束集中,激光照到光敏時,電阻值變小,流過的電流變大,超過上拉電阻,此時io口被拉低。信號為低電平0。圖3-5圖3-5 激光發(fā)射管 圖3-6 激光發(fā)射電路電路原理圖3.2.3 激光接收模塊激光接收電路的效果是對我們的激光接收管來進(jìn)行一個檢查,看它是不是能夠?qū)τ谙鄳?yīng)的激光束完成我們的接收這樣一個操作,實質(zhì)是經(jīng)由這樣的一個電路把高、低電平信號給我們的單片機(jī)P2口運送,這樣就可以更好的對于這個蜂鳴器或小型的音響進(jìn)行控制,完成對于相應(yīng)頻率音頻信號這樣的一個要求。因為
14、在運用點對點的方法的時候,確切的來說就是一個激光接收管僅僅只可以對于一個激光發(fā)射器射出的激光束進(jìn)行接收,所以若是人體對于一個激光發(fā)射器射出的激光束進(jìn)行阻斷的時候,和其對應(yīng)的極光由于無法接收這個激光束而讓電平處于很低的狀態(tài),排除這樣的狀況一般都是屬于高電平,這樣就形成所要的控制信號,同叫低電平信號。圖3-7為激光接收電路原理圖,效果其實就是表示這個激光接收電路是不是對于這個激光束可以接收,若是能夠接收,那么對應(yīng)這個發(fā)光二極管就不會亮,反之就會發(fā)亮。簡單說,就是手指遮擋某一個激光束,那個相應(yīng)的LED就會亮起同時發(fā)出相應(yīng)的音符。圖3-7激光接收電路原理圖3.2.4 發(fā)聲模塊我們選擇了16無源蜂鳴器,
15、音頻信號通過IO,經(jīng)三極管放大后傳到蜂鳴器,使蜂鳴器發(fā)出相對應(yīng)的音符。同時在信號輸出io口并接了一個3.5MM的音頻座,可以由此連接到音箱,效果更佳。無源蜂鳴器圖3-8 音頻驅(qū)動及接口電路原理圖如圖3-8,J1代表3.5毫米音頻接口。單片機(jī)P00按程序指令發(fā)出特定頻率的方波信號,Q1三極管會按此頻率導(dǎo)通或截止,將該方波信號傳遞到蜂鳴器或外接小型音箱帶動小的音箱奏出音樂。 關(guān)于音區(qū)的切換,切換按鍵由輕觸按鍵與上拉電阻組成。在沒按下按鍵時由上拉電阻輸入高電平信號,當(dāng)按下按鍵時,電平信號被拉低,變?yōu)檩斎氲碗娖叫盘枴H鐖D3-11所示:圖3-113.2.5 LED指示燈 LED音符指示燈,我們在用于彈奏
16、音符的7個激光的對應(yīng)位置加入了LED作提示燈,當(dāng)某一個“琴弦”被彈奏時,與之相對應(yīng)的LED就會亮起。第8個激光作為音區(qū)切換功能,可以切換高、中、低三個音區(qū),所以用三個LED分別顯示當(dāng)前處于的音區(qū)。”彈“一下就切換一個音區(qū),哪一個LED亮起就說明當(dāng)前處于哪一個音區(qū)。3.2.6 電源供電單片機(jī)電壓為5V,激光也為5V,為方便供電,我們選擇最常用的5V USB供電,使得整體電路更為簡明。一個LED作為電源工作指示燈,為保護(hù)LED,需要給LED串連一個限流電阻。作為提示用,不用太大亮度,一般選用1K電阻。3.2.7 模式切換在通過模式切換按鍵,可以在彈奏模式、音樂播放模式自由切換,上電默認(rèn)為彈奏模式,
17、按動按鍵切換到音樂播放模式,可以播放內(nèi)置的音樂。再按一次回到彈奏模式軟件設(shè)計與實現(xiàn)4.1 軟件設(shè)計方案按照上面概述的系統(tǒng)硬件的概述,我們這一章節(jié)按照系統(tǒng)的軟件設(shè)計部門來進(jìn)行概述。音符是怎樣出現(xiàn)的呢?人耳朵可以聽見的聲音頻率是處于二十赫茲和二十千赫茲,我們都知道51單片機(jī)本身的十六個我們所說的定時器,所以在設(shè)計中,為了實現(xiàn)不一樣的頻率的方波信號,我們運用了定時器中斷這樣一個渠道。程序包括三部分,并且對應(yīng)相應(yīng)的功能,首先是主函數(shù),為的是檢查到p2端口值,經(jīng)由if語句,可以知道哪一位低電平觸發(fā),其次是初始化函數(shù),毫無疑問是對我們的定時器進(jìn)行初始化的一個操作,再者就是開中斷,最后是定時器中斷函數(shù),意義
18、是達(dá)到對對象的輸出,這個對象指的是我們所說的不同頻率方波。具體看表5.1,下為音符相應(yīng)的頻率和簡譜碼進(jìn)行了羅列。在圖5-1能看到,軟件的設(shè)計可以歸為3塊,首先是硬件資源配置,再一個是端口信號檢測,接著是數(shù)據(jù)處理,實施環(huán)節(jié)中,最開始為配置,對象就是我們的硬件資源,緊接著是對于它所對著的端口信號有沒有轉(zhuǎn)變進(jìn)行我們的一個操作,也就是檢測,要是這個單片機(jī)端口信號出現(xiàn)改變,就能按照端口的信號表來展開對應(yīng)的處理數(shù)據(jù),完成處理數(shù)據(jù)之后,又去到端口信號檢測,最終等到端口信號出現(xiàn)轉(zhuǎn)變。圖5-1 程序結(jié)構(gòu)圖4.2 各模塊程序設(shè)計與實現(xiàn)在上面的整體說明之后,我們會對這三塊進(jìn)行詳細(xì)的介紹。4.2.1 硬件資源配置配置
19、硬件資源實質(zhì)意義上來講,便是為配置單片機(jī)定時器各個寄存器的參數(shù)。對于STC89C52RC型單片機(jī),我們大家都知道它是由有有兩種十六位位定時器/計數(shù)器,也就是T0和T1,兩個都是能夠當(dāng)成是定時器或計數(shù)器來運用的。關(guān)于我們的定時器工作方式寄存器TMOD,它作用便是選擇定時器的工作方式,高4位用來控制我們的T1,同樣低4位用來控制我們的T0。下面具體為我們TMOD各位的定義:門控到位,專門對于這個定時器的啟動進(jìn)行控制,是不是會被外部中斷所影響到,當(dāng)GATE時等于零的時候,這個和外部中斷是沒有任何的關(guān)聯(lián)的,因為TCON寄存器中的TRx位對于啟動進(jìn)行控制,當(dāng)GATE時等于一的時候,控制位TRx以及腳一起
20、來對于啟動進(jìn)行控制,所以僅僅只有在外部中斷請求信號的狀況下,確切的來說就是外部中斷引腳等于一的時候,才能夠開啟了這個定時器。TMOD寄存器(復(fù)位清零) TCON(定時器控制寄存器)TCON各個位的如下面所定義:在此:TF0/TF1:這便是我們所說的T0/T1定時器溢出中斷標(biāo)志位。在一種情況下,也就是T0/T1計數(shù)溢出時,讓我們的硬件置位,而且在同意中斷的條件下,此時發(fā)出中斷請求信號。在另一種情況下,也就是CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時,讓我們的硬件自動將該位清零。TR0/TR1:為T0/T1運行控制位。當(dāng)TR0/TR1=1時啟動T0/T1;TR0/TR1=0時關(guān)閉T0/T1。這個位是被我們的
21、軟件所設(shè)定的。正如我們所知TCON的低4位跟外部中斷息息相關(guān),TCON寄存器會清零。,在我們將它復(fù)位的時候在上文中講過STC89C51RC單片機(jī),關(guān)于它的的定時器/計數(shù)器,我們知道是可編程的,啟用之前進(jìn)行初始化的設(shè)置。當(dāng)我們開始在編寫的時候:一方面要求我們能正確寫入控制字;在另一方面要求我們能進(jìn)行計數(shù)初值的計算。具體而言,分為以下順序渠道:把我們的工作方式定下來,這便是對開始賦值于我們的TMOD寄存器。在我們計算計數(shù)初值之后,我們需要做到同時寫入寄存器,也就是我們所說的TH0、TL0或TH1、TL1中。這時候通過對我們ETx置位進(jìn)而允許T/C中斷(必要條件下)。接下來通過對我們EA的置位進(jìn)而讓
22、我們的CPU開中斷(必要條件下)。最后通過對我們TRx置位進(jìn)而啟動計數(shù)器?,F(xiàn)在講關(guān)于計算方式(計數(shù)初值):定時器/計數(shù)器是以通過加1的方法來進(jìn)行計數(shù),代表與減1計數(shù)器我們之前用過的這種有異。當(dāng)我們處于定時方式的時候:當(dāng)認(rèn)定時間常數(shù)為T(這里不做說明),然后同樣認(rèn)為定時時間T,這時候T= TT,于是我們可以知道也就是時間常數(shù)是 : T= (5-1)(在這里說明)T為機(jī)器周期(12/晶振頻率)。應(yīng)裝入定時器/計數(shù)器的開始值為:X=2- T (n為計數(shù)器的位數(shù))(5-2)在計數(shù)方式下:假設(shè)計數(shù)值為N,則應(yīng)裝入的計數(shù)開始值為: X=2-N(n為計數(shù)器的位數(shù))(5-3)T0初始化程序 :/初始化函數(shù)/v
23、oid init()TMOD=0 x01;/定時器0工作在方式1EA=1;/開總中斷ETA=1;/ 代表了我們的開定時器0狀態(tài)是中斷fmq=1;/關(guān)音箱 可以看出沒有把定時器T0也設(shè)成最開始的數(shù)值,也為于設(shè)計處于初始化的時候,定時器就能過運行,之所以這樣,是確保定時器T0才得以運行,是在我們需要的條件下,此外還需要做到定時器T0在運用查表的情況下,對于不同的狀況,可以設(shè)定不同的初始值。4.2.2 端口信號檢測當(dāng)我們的8個特定值都被定下來的條件下,如果單片機(jī)這個時候P2端口,它的值是特定值的話,便告訴我們它的某一位電平是低電平,剩余的便是高電平。同時意味著端口信號檢測程序的確切為發(fā)現(xiàn)某一時刻P2
24、端口中單獨哪一位是低電平。所謂的端口信號檢測,目的是確定8位P2并行輸入/輸出I / O端口的端口值。 在主函數(shù)中,我們可以借助if 語句,從而知道事先設(shè)定的值是否與p2端口一致,最終對變量music_note實現(xiàn)賦值。我們建立8個具體的價值。 當(dāng)微控制器P2的端口值為特定值時,表示單片機(jī)P2的微計算機(jī)端口的一位為低電平,剩下的是高電平。42.3 數(shù)據(jù)處理在端口信號的檢測完成之后,我們需要完成數(shù)據(jù)的處理,也就是根據(jù)執(zhí)行數(shù)據(jù)處理操作后,我們所的得到的檢測結(jié)果,關(guān)于處理后內(nèi)容絕大一部分是基于檢測端口信號的結(jié)果,并且它被計算并加載到微控制器的定時器,也就是我們所說的T0的初始值。 下面為詳細(xì)說明:t
25、emp_THO=music_tabmusic_note/256; /為T0為高八位預(yù)裝入初始值temp_TLO=music_tabmusic_note/256; /為T0為低八位預(yù)裝入初始值當(dāng)我們得到初始值后,不會把它裝入定時器,而是暫時放到一個地方,這個地方指的是1個臨時變量,也就是temp_TH0以及temp_TL0,取決于整體程序設(shè)計。借助查表這樣一個步驟,經(jīng)由我們的變量music_note,利用她它的的值來幫助我們找到數(shù)組music_tab的對應(yīng)元素 與此同時讓它分離后各自進(jìn)入臨時變量temp_TH0以及temp_TL0,這樣做的意義是為了供定時器T0做初始值使用。4.2.4音符輸出用
26、位定義,定義一個io口,來作為音符頻率信號輸出sbit fmq=P00; /蜂鳴器用定時器來控制fmq產(chǎn)生不同周期的方波通過IO口輸出到蜂鳴器或音箱彈奏不同激光,給定時器放入不同的音符頻率周期。DSQ_T1=(65536*12*1000000/JINGZHEN-1000000/pl/2);4.2.5 LED音符與音區(qū)指示彈奏某一個音符時,相對應(yīng)的LED就會亮起。在激光檢測程序中,加入LED亮燈的程序,當(dāng)某音符被彈奏,運行產(chǎn)生音符頻率的程序的同時運行LED亮燈程序。用整個P1口驅(qū)動LED。音區(qū)切換的三個LED用了三個io口P01、P02、P03來驅(qū)動。用if判斷語句來檢測音區(qū)切換信號。音區(qū)在高、
27、中、低順序切換。如當(dāng)前在中音區(qū),當(dāng)檢測到一次信號后,音區(qū)變?yōu)榈?,對?yīng)LED也變?yōu)榈鸵舻闹甘緹?。if(pSZ*2=0 x416)P1=keymode0;else if(pSZ*2=0 x496)P1=keymode1;else if(pSZ*2=0 x526)P1=keymode2;else if(pSZ*2=0 x574)P1=keymode3;else if(pSZ*2=0 x61f)P1=keymode4;else if(pSZ*2=0 x6e0)P1=keymode5;else if(pSZ*2=0 x7b7)P1=keymode6;/*中*/ else if(pSZ*2=0 x20b)
28、P1=keymode0;else if(pSZ*2=0 x24b)P1=keymode1;else if(pSZ*2=0 x293)P1=keymode2;else if(pSZ*2=0 x2ba)P1=keymode3;else if(pSZ*2=0 x310)P1=keymode4;else if(pSZ*2=0 x370)P1=keymode5;else if(pSZ*2=0 x3db)P1=keymode6;/*低*/else if(pSZ*2=0 x106)P1=keymode0;else if(pSZ*2=0 x11e)P1=keymode1;else if(pSZ*2=0 x13
29、7)P1=keymode2;else if(pSZ*2=0 x15d)P1=keymode3;else if(pSZ*2=0 x188)P1=keymode4;else if(pSZ*2=0 x1b8)P1=keymode5;else if(pSZ*2=0 x1ee)P1=keymode6;4.2.6 播放音樂部分下圖為程序中樂曲各音符所對應(yīng)的定時器值與音符播放的時間具體組成如下:4.2.7模式切換整個程序由彈奏與播放音樂兩大部分,由此加入了一個按鍵來切換模式。 if(k0=0)/【彈奏/播放】切換delay1ms(15);if(k0=0) zd=!zd;SZ=0;P1=0 x00;while
30、(k0=0);P1=0 xff;當(dāng)zd等于0時,為彈奏模式,當(dāng)zd等于1時,為音樂播放模式,首次上電時為彈奏模式。if(zd=0)anjian();if(zd=1)yinyue();4.3 軟件開發(fā)工具介紹利用的是Keil Software公司研發(fā)的uVision3,它的結(jié)構(gòu)組成如圖5-4所示。圖5-4 結(jié)構(gòu)組成(uVision)測試與分析在完成硬件系統(tǒng)設(shè)計和軟件系統(tǒng)設(shè)計后,需要在具體實現(xiàn)之前進(jìn)行相關(guān)測試,以檢驗硬件系統(tǒng)和軟件系統(tǒng)的相關(guān)設(shè)計是否合理可行。確保最小風(fēng)險能達(dá)到正常穩(wěn)定運行的目標(biāo)。程序部分硬件部分實物圖總結(jié)與展望在系統(tǒng)調(diào)試的過程中,我們總結(jié)出影響系統(tǒng)正常穩(wěn)定工作的兩大因素是半導(dǎo)體激光
31、發(fā)射器相互間的干擾和系統(tǒng)結(jié)構(gòu)設(shè)計的穩(wěn)定性。我們在如何增強(qiáng)系統(tǒng)抗干擾能力的問題上,指出傳統(tǒng)設(shè)計采用模擬型器件光敏電阻作為激光光束接收單元傳感器極易受到外部環(huán)境光線強(qiáng)度變化的影響而引發(fā)較大干擾的缺陷。由此展開探討,決定使用受外部環(huán)境光線強(qiáng)度變化影響極小的數(shù)字型激光接收管替代光敏電阻,并采用半導(dǎo)體激光發(fā)射器與激光接收管點對點式發(fā)射與接收。以上所做設(shè)計及改進(jìn)極大程度地增強(qiáng)了系統(tǒng)的抗干擾能力,確保了系統(tǒng)能夠在任何光線強(qiáng)度的環(huán)境下正常穩(wěn)定工作。這也是我們該設(shè)計的最大優(yōu)點之處。此外,我們在發(fā)聲部分也一改傳統(tǒng)設(shè)計,用成品音響取代傳統(tǒng)設(shè)計上的揚聲器,使得系統(tǒng)可以獲得極佳的、可調(diào)音量的音質(zhì)。這也是我們該設(shè)計的又一
32、具有創(chuàng)新性的亮點之處。反觀我們整個設(shè)計,鑒于它設(shè)計原理的通用性、生產(chǎn)成本的逐步降低和產(chǎn)品穩(wěn)定性的日益增強(qiáng),相信它將會在新形電子樂器設(shè)計中得到進(jìn)一步完善和發(fā)展。附錄附錄A 主程序#include/STC89c52單片機(jī)頭文件#define JINGZHEN 12000000 /宏定義晶振的頻率為12M#define uchar unsigned char#define uint unsigned int sbit k0=P32; /【手彈/播放】模式切換按鍵sbit k1=P20;/ 【 】 下一首的按鍵為P2.1,檢測io口1為有效sbit k4=P33;/定義低/中/高音切換按鍵sbit f
33、mq=P00; /蜂鳴器sbit LEDa=P10;/ 【 】 下一首 按鍵指示燈uchar i=0;uchar q=1;uchar XY=0,YINFU,YINCHANG,SZ,XQ=0;uint DSQ_T1;uint pl; /音符頻率,延時計數(shù)變量/*/*音符*/uint code tone0=0 x106,0 x11e,0 x137,0 x15d,0 x188,0 x1b8,0 x1ee, /低音 0 x20b,0 x24b,0 x293,0 x2ba,0 x310,0 x370,0 x3db, /中音 0 x416,0 x496,0 x526,0 x574,0 x61f,0 x6e
34、0,0 x7b7;/高音/*鍵值*/uchar code keymode=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/按鍵值,對應(yīng)io:0,1,2,3,4,5,6,7uchar YANSHI=0,1,2,4,8,12,16;/*延時1ms函數(shù)*/void delay1ms(uchar a)/延時1msuchar x;while(a-) for(x=0;x=1)/【】下一首TR1=0;delay1ms(10);if(k3=1)SZ=0;XQ+;P1=0 xff;/清除其它顯示的燈LEDc=0;/按鍵指示燈while(k3=1);LEDc=1;
35、/*/if(kaishi=0) if(XY=0)XY=1;YINFU=YANSHIpSZ*2+1/16; YINCHANG=YANSHIpSZ*2+1%16;DSQ_T1=(65536*12*1000000/JINGZHEN-1000000/pSZ*2/2);/把頻率裝到定時器T1 /*LED燈*if(d=7) d=0;P1=keymoded;d+;/LED */*高*/if(pSZ*2=0 x416)P1=keymode0;else if(pSZ*2=0 x496)P1=keymode1;else if(pSZ*2=0 x526)P1=keymode2;else if(pSZ*2=0 x57
36、4)P1=keymode3;else if(pSZ*2=0 x61f)P1=keymode4;else if(pSZ*2=0 x6e0)P1=keymode5;else if(pSZ*2=0 x7b7)P1=keymode6;/*中*/ else if(pSZ*2=0 x20b)P1=keymode0;else if(pSZ*2=0 x24b)P1=keymode1;else if(pSZ*2=0 x293)P1=keymode2;else if(pSZ*2=0 x2ba)P1=keymode3;else if(pSZ*2=0 x310)P1=keymode4;else if(pSZ*2=0
37、x370)P1=keymode5;else if(pSZ*2=0 x3db)P1=keymode6;/*低*/else if(pSZ*2=0 x106)P1=keymode0;else if(pSZ*2=0 x11e)P1=keymode1;else if(pSZ*2=0 x137)P1=keymode2;else if(pSZ*2=0 x15d)P1=keymode3;else if(pSZ*2=0 x188)P1=keymode4;else if(pSZ*2=0 x1b8)P1=keymode5;else if(pSZ*2=0 x1ee)P1=keymode6;/ if(YINFU!=0)
38、 /音符響的時間 TR1=1;/開啟蜂鳴器定時器T1 if(i=130) i=0;YINFU-; / if(YINFU=0) /停頓的時間 TR1=0;/關(guān)閉蜂鳴器定時器T1 if(YINCHANG!=0) if(i=130) i=0;YINCHANG-; / else if(YINCHANG=0) if(pSZ*2=0) SZ=0;XQ+;/音樂曲目選擇標(biāo)志 else SZ+; XY=0; / /*/*定時器初始化*/void Timer0Init(void)/10毫秒12.000MHzEA=1;/開啟總中斷/EX0=1;/允許使用外中斷/IT0=1;/負(fù)跳變觸發(fā)外中斷ET0=1;/定時器T
39、0中斷允許TMOD|=0 x01;/使用定時器T0模式1TL0 = 0 xF0;/設(shè)置定時初值TH0 = 0 xD8;/設(shè)置定時初值TR0=1;/啟動定時器T0TF0=0;/溢出標(biāo)志位,清零/*T1設(shè)置*/PT1=1; /*定時器T1高優(yōu)先級(把T1設(shè)為最優(yōu)先級后雜音消失)TMOD|=0 x10; /使用定時器T1的模式1ET1=1;/定時器T1中斷允許TR1=0;/不啟動定時器T1TF1=0;/溢出標(biāo)志位清零 /*/*定時器T0的中斷服務(wù)程序*/void Time0() interrupt 1 TR0=0;i+;/音樂延時變量TL0 = 0 x18;/設(shè)置定時初值1msTH0 = 0 xFC;/設(shè)置定時初值1msTR0=1;/*/*定時器T1的中斷服務(wù)程序*/void Time1(void) interrupt 3 fmq=fmq; /每進(jìn)入一次中斷就取反一次TH1=DSQ_T1/256;/定時器T1的高8位重新賦初值TL1=DSQ_T1%256;/定時器T1的低8位重新賦初值附錄B 整體電路圖基于51單片機(jī)的激光豎琴設(shè)計2
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案