微機原理課程設計--基于單片機設計的音樂倒數(shù)計數(shù)器_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  交通與汽車工程學院</b></p><p><b>  課程設計說明書</b></p><p>  課 程 名 稱: 微機原理及應用課程設計 </p><p>  課 程 代 碼: 8234570 </p><p>

2、  題 目:基于單片機設計的音樂倒數(shù)計數(shù)器</p><p>  年級/專業(yè)/班: 2009級車輛工程汽電四班 </p><p>  學 生 姓 名: </p><p>  學   號: </p><p>  開 始 時 間:

3、2012 年 07 月 02 日</p><p>  完 成 時 間: 2012 年 07 月 06 日</p><p><b>  課程設計成績:</b></p><p>  指導教師簽名: 年 月 日</p><p><b>  目

4、 錄</b></p><p><b>  摘 要2</b></p><p>  1 項目概述和要求3</p><p>  1.1單片機基礎知識3</p><p>  1.2 單片機的發(fā)展趨勢3</p><p>  1.3設計概述和設計要求4</p>&l

5、t;p><b>  2 系統(tǒng)設計6</b></p><p>  2.1 框圖設計6</p><p>  2.2系統(tǒng)硬件電路設計6</p><p>  2.2.1 AT89C51介紹6</p><p>  2.2.2 1602LCD 介紹7</p><p>  2.2.3 鍵盤

6、介紹9</p><p>  2.2.4 蜂鳴器介紹9</p><p>  3、系統(tǒng)軟件設計11</p><p>  3.1 proteus軟件環(huán)境介紹11</p><p>  3.2 Protel軟件環(huán)境介紹12</p><p><b>  3.3流程圖13</b></p>

7、<p>  3.4蜂鳴器發(fā)聲電路原理16</p><p>  4 PROTEUS仿真結果19</p><p>  4.1 電路原理圖及仿真19</p><p>  4.2 倒計時設置仿真如下圖4-2(a)所示21</p><p>  4.3 蜂鳴器的仿真如下圖4-3所示22</p><p>&

8、lt;b>  5 總結23</b></p><p><b>  致 謝24</b></p><p><b>  參考文獻25</b></p><p>  附表(本設計所有程序)26</p><p><b>  摘 要</b></p>

9、<p>  單片機技術是一門不可或缺的技術,對我們將來的工作以及生活和學習都有很密切的聯(lián)系。近年來,隨著電子技術和微機計算機的迅速發(fā)展,單片機的檔次不斷提高,其應用領域也在不斷的擴大,已在工業(yè)控制、尖端科學、智能儀器儀表、日用家電、汽車電子系統(tǒng)、辦公自動化設備、個人信息終端及通信產品中得到了廣泛的應用,成為現(xiàn)代電子系統(tǒng)中最重要的智能化的核心部件。</p><p>  單片機由CPU、一定容量的RAM和R

10、OM構成,定時、計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產業(yè)和工業(yè)自動化上。而51系列單片機是各單片機中最為典型和最有代表性的一種。這次課程設計通過對它的學習、應用,從而達到學習、設計、開發(fā)軟、硬的能力。</p><p>  本設計利用AT89C51單片機結合字符型LCD顯示器設計一個簡易的倒數(shù)計數(shù)器。用4個按鍵操作來設置當前想要倒計數(shù)的時間。做一小段時間倒計數(shù),當?shù)褂嫈?shù)為0時,則

11、發(fā)出一段音樂聲響,通知倒計數(shù)終了,該做應當做的事。應用 Proteus的ISIS軟件和Keil uVision3來實現(xiàn)該計數(shù)器的設計與仿真。該方法仿真效果真實、準確,節(jié)省了硬件資源。</p><p>  該多功能計數(shù)器可以應用于一般的生活和工作中,也可以通過改裝,提高性能,增加新功能,從而給人們的生活和工作帶來更多的方便。</p><p>  關鍵詞: AT89C51,計數(shù)器,鍵盤控制,L

12、CD顯示,Proteus,Keil </p><p><b>  1 項目概述和要求</b></p><p>  1.1單片機基礎知識</p><p>  單片機又稱單片微控制器,它不是完成某一個樓及功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上。概括的講,一塊芯片就成了一臺計算機。</p><p>  單片機具有體積

13、小、功能強、應用面廣等優(yōu)點,目前正以前所未見的速度取代著傳統(tǒng)電子線路構成的經典系統(tǒng),蠶食著傳統(tǒng)數(shù)字電路與模擬電路固有的領地。它的體積小、質量輕、價格便宜、為學習、應用和開發(fā)提供了便利條件。同時,學習使用單片機了解計算機原理與結構的最佳選擇。</p><p>  現(xiàn)在,這種單片機的使用領域已經十分廣泛。彩電、冰箱、空調、錄像機、VCD、遙控器、游戲機、電飯煲等無處不見單片機的影子,單片機早已深深地融入我們每個人的生

14、活之中。</p><p>  單片機能大大地提高這些產品的智能性,易用性及節(jié)能性的呢過主要性能指標看,給我們的生活帶來舒適和方面的同時,在工農產業(yè)上也極大的提高了生產效率和產品質量。單片機按用途大體上可分為兩類,一種是通用型單片機,另一種是專用型單片機。</p><p>  MCS-51單片機是美國INTEL公司1980年推出的產品,與MCS-48單片機相比,它的結構更先進,功能更強,在原

15、來的基礎上增加了更多的電路單元和指令,指令數(shù)達到111條,MCS-51單片機可以算是相當成功的產品,一直到現(xiàn)在,MCS-51系列或其兼容的單片機認識應用的主流產品,各高校及專業(yè)學校的培訓教材依然與MCS-51單片機作為代表進行理論基礎學習。MCS-51系列單片機抓喲包括8031、8051、8951等通用產品。</p><p>  1.2 單片機的發(fā)展趨勢</p><p>  單片機現(xiàn)在可以

16、說是百花齊放,百家爭鳴的時期,世界上各大芯片制造公司都推出了自己的單片機,從8位、16位到32位,數(shù)不勝數(shù),應有盡有,有與主流C51系列兼容的,也有不兼容的,但它們各具特色,互成互補,為單片機的應用提供了廣闊的天地。</p><p>  縱觀單片機的發(fā)展過程,可以預示單片機的發(fā)展趨勢,大致有:</p><p><b>  一、微型單片化</b></p>

17、<p>  現(xiàn)在常規(guī)的單片機普遍都是將中央處理器(CPU)、隨機存取數(shù)據(jù)存儲(RAM)、只讀程序存儲器(ROM)、并行和串行通信接口,中斷系統(tǒng)、定時電路、時鐘電路集成在一塊單一的芯片上,增強型的單片機集成了如A/D轉換器、</p><p>  PMW(脈寬調制電路)、WDT(看門狗)、有些單片機將LCD(液晶)驅動電路都集成在單一的芯片上,這樣單片機包含的單元電路就更多,功能就越強大。甚至單片機廠商還可

18、以根據(jù)用戶的要求量身定做,制造出具有自己特色的單片機芯片。</p><p>  此外,現(xiàn)在的產品普遍要求體積小、重量輕,這就要求單片機除了功能強和功耗低外,還要求其體積要小?,F(xiàn)在的許多單片機都具有多種封裝形式,其中SMD(表面封裝)越來越受歡迎,使得由單片機構成的系統(tǒng)正朝微型化方向發(fā)展。</p><p>  二、低功耗CMOS化</p><p>  MCS-51系列

19、的8031推出時的功耗達630mW,而現(xiàn)在的單片機普遍都在100mW左右,隨著對單片機功耗要求越來越低,現(xiàn)在的各個單片機制造商基本都采用了CMOS(互補金屬氧化物半導體工藝)。像80C51就采用了HMOS(即高密度金屬氧化物半導體工藝)和CHMOS(互補高密度金屬氧化物半導體工藝)。CMOS雖然功耗低,但由于其物理特征決定其工作速度不夠高,而CHMOS則具備了高速和低功耗的特點,這些特征,更適合于要求低功耗像電池供電的應用場合。所以這種

20、工藝將是今后一段時期單片機發(fā)展的主要途徑。</p><p>  三、主流與多品種共存</p><p>  現(xiàn)在雖然單片機的品種繁多,各具特色,但仍以89C51為核心的單片機占主流,兼容其結構和指令系統(tǒng)的有PHILIPS公司的產品,ATMEL公司的產品和中國臺灣的Winbond系列單片機。所以89C51占據(jù)了半壁江山。而Microchip公司的PIC精簡指令集合(RISC)也有著強勁的發(fā)展勢

21、頭,中國臺灣的HOLTEX公司近年的單片機產量與日俱增,與其底價質優(yōu)的優(yōu)勢,占據(jù)一定的市場份額。此外還有MOTOROLA公司的產品,日本幾大公司的專用單片機。在一定的時期內,這種情形將得以延續(xù),將不存在某個單片機一統(tǒng)天下的壟斷局面,走的是依存互補、相輔相成、共同發(fā)展的道路。</p><p>  九十年代以后,單片機在結構上采用雙CPU或內部流水線,CPU位數(shù)有8位、16位、32位,時鐘頻率高達20MHZ,片內帶有

22、PWM輸出、監(jiān)視定時器WDT、可編程計數(shù)器陣列PCA、DMA傳輸、調制解調器等。芯片向高度集成化、低功耗方向的發(fā)展,使得單片機在大量數(shù)據(jù)的實時處理、高級通信系統(tǒng)、數(shù)字信號處理、復雜工業(yè)過程控制、高級機器人以及局域網等方面得到大量應用。這類單片機有NEC公司的MPD7800,MITSUBISHI公司的M337700,REVKWELL公司的R6500。</p><p>  1.3設計概述和設計要求</p>

23、<p>  本課程設計是利用AT89C51單片機結合字符型LCD顯示器設計一個簡易的倒數(shù)計數(shù)器,可用來煮方便面、煮開水或小睡片刻等。作品先接受用戶輸入的倒數(shù)計數(shù)時間,然后由用戶啟動作品工作(可用一個閃爍的LED燈指示),當?shù)褂嫈?shù)為0時,則發(fā)出一段音樂聲響,通知倒計數(shù)終了,該做應當做的事。定時鬧鐘的基本功能如下:</p><p>  1、字符型LCD(16  2)顯示器。</

24、p><p>  2、顯示格式為“TIME 分分:秒秒”。</p><p>  3、用5個按鍵操作來設置當前想要倒計數(shù)的時間。</p><p>  4、一旦按下鍵則開始倒計數(shù),當計數(shù)為0時,發(fā)出一陣音樂聲</p><p>  5、程序執(zhí)行后工作指示燈LCD閃動,表示程序開始執(zhí)行,按下操作鍵K1~K4動作如下:K1---可調整倒計數(shù)的時間1~60分鐘

25、。</p><p>  K2---設置倒計數(shù)的時間為5分鐘,顯示“0500”。</p><p>  K3---設置倒計數(shù)的時間為10分鐘,顯示“1000”。</p><p>  K4---設置倒計數(shù)的時間為20分鐘,顯示“2000”。</p><p>  6、復位后LCD的畫面應能顯示倒計時的分鐘和秒數(shù),此時按K1鍵,則在LCD上顯示出設置畫

26、面。此時,若:</p><p>  按K2鍵---增加倒計數(shù)的時間1分鐘。</p><p>  按K3鍵---減少倒計數(shù)的時間1分鐘。</p><p>  按K4鍵---設置完成。</p><p><b>  2 系統(tǒng)設計</b></p><p><b>  2.1 框圖設計</b

27、></p><p>  本項目的系統(tǒng)設計框圖如圖2-1所示:</p><p><b>  圖2-1 系統(tǒng)框圖</b></p><p>  由系統(tǒng)框圖可看出,本設計由單片機AT89C51、LCD液晶顯示器、控制鍵盤、蜂鳴器、復位單路和定時器電路幾大模塊構成。</p><p>  2.2系統(tǒng)硬件電路設計</p&g

28、t;<p>  主控單片機采用AT89C51芯片,時鐘模塊選用一12MHZ晶振,產生時鐘脈沖。顯示模塊采用LCD1602,設置部分選用鍵盤按鍵電路,發(fā)聲部分選用BUZZER蜂鳴器。還有一些電源、電阻、電容、接地等。</p><p>  2.2.1 AT89C51介紹</p><p>  AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash P

29、rogrammable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機。</p><p>  主要特性:與MCS-51 兼容 、4K字節(jié)可編程閃爍存儲器 、壽命:1000寫/擦循環(huán)、數(shù)據(jù)保留時間:10年 、全靜態(tài)工作:0Hz-24MHz 、三級程序存儲器鎖定 、128×8位內部RAM 、32可編程I/O線 、兩個16位定時器/計數(shù)器 、5個

30、中斷源 、可編程串行通道 、低功耗的閑置和掉電模式 、片內振蕩器和時鐘電路。</p><p>  2.2.2 1602LCD 介紹</p><p>  LCD1602顯示方式的方案比較。</p><p>  方案一:采用花樣顯示,花樣顯示是指LCD顯示某一屏字符時,采取從左到右或者是從右到左的整屏移動的顯示方式。在這種顯示方式下,給人的感覺就是程序是在執(zhí)行的,同時

31、如果控制好了移動一屏的時間間隔的話,在整體視覺上可以達到很好的效果。</p><p>  方案二:采用靜態(tài)顯示,靜態(tài)顯示是指LCD顯示某一屏字符時,時鐘保持當前字符的顯示,不使用移屏顯示。便于控制,同時能夠滿足正常的顯示效果。</p><p>  由于在顯示中存在播放時間的動態(tài)變化,這樣的話,即使是不產生整屏移動,也能給人動態(tài)感,也易于控制?;谝陨细鞣N特點,我選擇了方案二。</p&

32、gt;<p>  1602液晶模塊內部的控制器共有11條控制指令,如表2-1所示.</p><p>  表2-1 1602液晶模塊控制指令</p><p>  1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線。</p><p>  VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,各引腳

33、符號及其功能表如下表2-1所示。</p><p>  表2-2各引腳及其功能表</p><p>  2.2.3 鍵盤介紹</p><p>  按鍵用于控制數(shù)碼顯示、LCD顯示、揚聲器等模塊的工作。通過掃描按鍵是否按下,來設定各模塊的工作情況,使各模塊可以在按鍵的控制下,有序地進行工作。設計中使用單個按鍵實現(xiàn)單個功能,屬于較為簡單的控制方式。</p>&

34、lt;p>  按鍵采用5個button,分別控制倒計時開始、調分個位、調分十位、調秒個位、調秒十位;另外還加一個總開關用于控制所有電路的通電情況。</p><p>  2.2.4 蜂鳴器介紹</p><p>  蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發(fā)聲器件。 ;蜂鳴器主要分

35、為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”表示。</p><p>  單片機驅動他激蜂鳴器的方式有兩種:一種是PWM 輸出口直接驅動,另一種是利用I/O 定時翻轉電平產生驅動波形對蜂鳴器進行驅動。本設計選擇利用I/O 定時翻轉電平產生驅動波形對蜂鳴器進行驅動。</p><p>  利用I/O 定時翻轉電平來產生驅動波形的方式必須利用定時器來做定時,通過定時翻

36、轉電平產生符合蜂鳴器要求的頻率的波形,這個波形就可以用來驅動蜂鳴器了。比如為2500Hz 的蜂鳴器的驅動,可以知道周期為400μs,這樣只需要驅動蜂鳴器的I/O 口每200μs 翻轉一次電平就可以產生一個頻率為2500Hz,占空比為1/2duty 的方波,再通過三極管放大就可以驅動這個蜂鳴器了。</p><p>  由于蜂鳴器的工作電流一般比較大,以致于單片機的I/O 口是無法直接驅動的,所以要利用放大電路來驅動

37、,一般使用三極管來放大電流就可以了。</p><p><b>  3、系統(tǒng)軟件設計</b></p><p>  3.1 proteus軟件環(huán)境介紹</p><p>  本系統(tǒng)的硬件設計首先是在Proteus軟件環(huán)境中仿真實現(xiàn)的。Proteus軟件是來自英國Labcenter electronics公司的EDA工具軟件,Proteus軟件有十多年

38、的歷史,在全球廣泛使用,除了具有和其它EDA工具一樣的原理布圖、PCB自動或人工布線及電路仿真的功能外,其革命性的功能是,它的電路仿真是互動的。針對微處理器的應用,還可以直接在基于原理圖的虛擬原型上編程,并實現(xiàn)軟件源碼級的實時調試。如果有顯示及輸出,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等,還能看到運行后輸入輸出的效果。Proteus建立了完備的電子設計開發(fā)環(huán)境,尤其重要的是Proteus Lite可以完全免費,也可以花微不足道的費

39、用注冊達到更好的效果[2]。</p><p>  Proteus是目前最好的模擬單片機外圍器件的工具??梢苑抡?1系列、AVR、PIC等常用的MCU及其外圍電路(如LCD,RAM,ROM,鍵盤,馬達,LED,AD/DA,部分SPI器件,部分IIC器件...)。其實Proteus 與 multisim比較類似,只不過它可以仿真MCU,當然,軟件仿真精度有限,而且不可能所有的器件都找得到相應的仿真模型,用開發(fā)板和仿真

40、器當然是最好選擇,可是初學者擁有它們的可能性比較小。當然,硬件實踐還是必不可少的。在沒有硬件的情況下,Proteus能像pspice 仿真模擬/數(shù)字電路那樣仿真MCU及外圍電路。另外,即使有硬件,在程序編寫早期用軟件仿真一下也是很有必要的。Proteus軟件主要具有以下幾個方面的特點:</p><p>  1、設計和仿真軟件Proteus 是一個很有用的工具,它可以幫助學生和專業(yè)人士提高他們的模擬和數(shù)字電路的設計

41、能力。</p><p>  2、它允許對電路設計采用圖形環(huán)境,在這種環(huán)境中,可以使用一個特定符號來代替元器件,并完成不會對真實電路造成任何損害的電路仿真操作。</p><p>  3、它可以仿真儀表以及可描述在仿真過程中所獲得的信號的圖表。</p><p>  4、它可以仿真目前流行的單片機,如PICS, ATMEL-AVR, MOTOROLA, 8051 等。&l

42、t;/p><p>  5、在設計綜合性方案中,還可以利用ARES開發(fā)印制電路板。</p><p>  3.2 Protel軟件環(huán)境介紹</p><p>  Protel印制板設計軟件包是澳大利亞protel technology公司與1990年推出的電子CAD產品,具有方便、易學、實用、快速以及高速度、高步通率的特點。它采用了分層次下拉窗口菜單結構形式,用戶基本上不需

43、要記背太多的鍵盤命令,用鼠標點擊菜單命令就能操作,protel有著很高的自動布線布通率。布通率是電子產CAD產品的一項重要指標,它反映電子元件在電路圖中連接關系有多少能在印刷版圖中實現(xiàn)。在設計常用的單、雙面印制板時只要選擇適當?shù)脑季趾筒季€策略方法,protel就可以輕易的達到98%-100%的布通率。對于極少數(shù)不能布通的定方,protel可以用飛線指示出來,引導用戶用手工方法連通。另外,protel有強大的宏命令設置功能,利用宏命令

44、功能多定義的熱鍵可以大大提高操作速度[1]。</p><p>  Protel對微機的軟硬件配置要求很低:cpu在8088以上,dos2.0以上版本,內存640kb以上,雙軟件(或一個軟件一個硬盤),單色顯示器(多層板設計時最好用彩色),各種兼容打印機。也能在Windows9X平臺的模擬DOS下運行。</p><p>  Protel已成為印制板設計加工方面的工業(yè)標準。據(jù)初步統(tǒng)計prote

45、l在CAD的市場占有率達 95%,成為電子產品制造業(yè)界的首選CAD軟件。</p><p><b>  3.3流程圖</b></p><p>  3.3.1主程序流程圖</p><p>  主程序開始初始化,然后掃描鍵盤、復位電路和計數(shù)器。當鍵盤按鍵有按下時,調整計數(shù)器值,LCD顯示新值。當復位鍵有按下時,計數(shù)器復位為初值,重新倒計數(shù)。當計數(shù)器值

46、倒計為0時,蜂鳴器發(fā)出聲音,計數(shù)器停止倒計,程序結束。主程序流程圖如圖3-1所示:</p><p><b>  N</b></p><p><b>  N</b></p><p><b>  NYY</b></p><p><b>  Y</b>&l

47、t;/p><p>  圖3-1 主程序流程圖</p><p>  3.3.2 LCD顯示流程圖</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p>&

48、lt;b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p>  圖3-2

49、 LCD顯示流程圖</p><p>  3.3.3按鍵流程圖 </p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b><

50、;/p><p>  圖3-3 按鍵流程圖</p><p>  3.3.4蜂鳴器發(fā)聲程序流程圖 </p><p>  蜂鳴器發(fā)聲程序流程圖如圖3-2所示:</p><p><b>  N</b></p><p><b>  Y</b></p><p>

51、<b>  N</b></p><p><b>  Y</b></p><p><b>  NN</b></p><p><b>  YY</b></p><p>  圖3-4 蜂鳴器發(fā)聲程序流程圖</p><p>  3.4

52、蜂鳴器發(fā)聲電路原理</p><p>  對于單片機產生音樂,關鍵是控制頻率的輸出.我們知道,不同的聲音對應不同的頻率,產生有規(guī)律的頻率輸出就可以得到相應規(guī)律的聲音.有8個基本音符:do﹑re﹑mi﹑fa﹑so﹑la﹑xi﹑do,八個不同的音符對應著不同的頻率.只要我們對照音符輸出相對應的頻率,就可以產生美妙的音樂.本文中采用了T0中斷方式產生不同頻率, 并用按鍵控制音樂的播放和停止。用三極管、電阻和BUZZER組

53、成蜂鳴器電路。蜂鳴器最重要的特點是只要按照極性要求加上合適的直流電壓就可以發(fā)出固有頻率的聲音。</p><p>  3.4.1音調、節(jié)拍以及編碼的確定方法</p><p>  一般說來,單片機演奏音樂基本都是單音頻率,它不包含相應幅度的諧波頻率,也就是說不能像電子琴那樣能奏出多種音色的聲音。因此單片機奏樂只需弄清楚兩個概念即可,也就是“音調”和節(jié)拍表示一個音符唱多長的時間。</p&g

54、t;<p>  3.4.2音調的確定</p><p>  不同音高的樂音是用C、D、E、F、G、A、B來表示,這7個字母就是音樂的音</p><p>  它們一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成簡譜的1、2、3、4、5、6、7,相當于漢字“多來米發(fā)梭拉西”的讀音,這是唱曲時樂音的發(fā)音,所以叫“音調”,即Tone。把C、D、E、F、G、A、B這一組音的距

55、離分成12個等份,每一個等份叫一個“半音”。兩個音之間的距離有兩個“半音”,就叫“全音”。在鋼琴等鍵盤樂器上,C–D、D–E、F–G、G–A、A–B兩音之間隔著一個黑鍵,他們之間的距離就是全音;E–F、B–C兩音之間沒有黑鍵相隔,它們之間的距離就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它們的左上角加上﹟號或者b號的叫變化音。﹟叫升記號,表示把音在原來的基礎上升高半音,b叫降記音,表示在原來的基礎上降低半音。例如高音

56、DO的頻率(1046Hz)剛好是中音DO的頻率(523Hz)的一倍,中音DO的頻率(523Hz)剛好是低音DO頻率(266 Hz)的一倍;同樣的,高音RE的頻率(1175Hz)剛好是中音RE的頻率(587Hz)的一倍,中音RE的頻率(587Hz)剛好是低音RE頻率(294 Hz)的一倍。</p><p>  1)要產生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時間。利用定時器計

57、時這半個周期時間,每當計時到后就將輸出脈沖的I/O反相,然后重復計時此半周期時間再對I/O反相,就可在I/O腳上得到此頻率的脈沖。</p><p>  2)利用AT89C51的內部定時器使其工作在計數(shù)器模式1下,改變計數(shù)值TH1及TL1以產生不同頻率的方法。</p><p>  此外結束符和休止符可以分別用代碼00H和FFH來表示,若查表結果為00H,則表示曲子終了;若查表結果為FFH,則

58、產生相應的停頓效果。</p><p>  3)例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計數(shù)器計時956us/1us=956,在每次技術956次時將I/O反相,就可得到中音DO(523Hz)。</p><p>  計數(shù)脈沖值與頻率的關系公式如下:</p><p><b>  N=Fi2Fr</b></p>

59、<p>  N:計算值;Fi:內部計時一次為1us,故其頻率為1MHz;</p><p>  其計數(shù)值的求法如下:</p><p>  T=65536-N=65536-Fi2Fr</p><p>  例如:設K=65536,F(xiàn)=1000000=Fi=1MHz,球低音DO(261Hz)。中音DO(523Hz)。高音的DO(1046Hz)的計算值<

60、/p><p>  T=65536-N=65536-Fi2Fr=65536-10000002Fr=65536-500000/Fr</p><p>  低音DO的T=65536-500000/262=63627</p><p>  低音DO的T=65536-500000/523=64580</p><p>  低音DO的T=65536-500000/

61、1047=65059</p><p>  3.4.3節(jié)拍的確定</p><p>  若要構成音樂,光有音調是不夠的,還需要節(jié)拍,讓音樂具有旋律(固定的律動),而且可以調節(jié)各個音的快滿度?!肮?jié)拍”,即Beat,簡單說就是打拍子,就像我們聽音樂不自主的隨之拍手或跺腳。若1拍實0.5s,則1/4 拍為0.125s。至于1拍多少s,并沒有嚴格規(guī)定,就像人的心跳一樣,大部分人的心跳是每分鐘72下,有

62、些人快一點,有些人慢一點,只要聽的悅耳就好。音持續(xù)時間的長短即時值,一般用拍數(shù)表示。休止符表示暫停發(fā)音。</p><p>  一首音樂是由許多不同的音符組成的,而每個音符對應著不同頻率,這樣就可以利用不同的頻率的組合,加以與拍數(shù)對應的延時,構成音樂。了解音樂的一些基礎知識,我們可知產生不同頻率的音頻脈沖即能產生音樂。對于單片機來說,產生不同頻率的脈沖是非常方便的,利用單片機的定時/計數(shù)器來產生這樣的方波頻率信號。

63、因此,需要弄清楚音樂中的音符和對應的頻率,以及單片機定時計數(shù)的關系。</p><p><b>  3.4.4 編碼</b></p><p>  do re mi fa so la si分別編碼為1~7,重音do編為8,重音re編為9,停頓編為0。播放長度以十六分音符為單位(在本程序中為165ms),一拍即四分音符等于4個十六分音符,編為4,其它的播放時間以此類推。音調

64、作為編碼的高4位,而播放時間作為低4位,如此音調和節(jié)拍就構成了一個編碼。以0xff作為曲譜的結束標志。</p><p>  舉例1:音調do,發(fā)音長度為兩拍,即二分音符,將其編碼為0x18。</p><p>  舉例2:音調re,發(fā)音長度為半拍,即八分音符,將其編碼為0x22</p><p>  歌曲播放的設計。先將歌曲的簡譜進行編碼,儲存在一個數(shù)據(jù)類型為unsig

65、ned char 的數(shù)組中。程序從數(shù)組中取出一個數(shù),然后分離出高4位得到音調,接著找出相應的值賦給定時器0,使之定時操作蜂鳴器,得出相應的音調;接著分離出該數(shù)的低4位,得到延時時間,接著調用軟件延時。</p><p>  表3-1簡譜對應的簡譜碼、T值、節(jié)拍數(shù)</p><p>  4 PROTEUS仿真結果</p><p>  4.1 電路原理圖及仿真</p

66、><p>  系統(tǒng)protel99se電路原理圖如圖4-1(a)所示</p><p>  圖4-1(a) 總體電路電路原理圖</p><p>  系統(tǒng)protel99se PCB如圖4-1(b)所示 </p><p>  圖4-1(b)PCB</p><p>  proteus電路仿真分別

67、如圖4-1(c)所示</p><p>  圖4-1(c)電路仿真</p><p>  4.2 倒計時設置仿真如下圖4-2(a)所示</p><p>  圖4-2(a)倒計時設置仿真</p><p>  倒計數(shù)設置為5秒時的仿真如下圖4-2(b)所示</p><p>  圖4-2(b)倒計數(shù)5秒的仿真</p>

68、<p>  4.3 蜂鳴器的仿真如下圖4-3所示</p><p>  圖4-3蜂鳴器的仿真</p><p><b>  5 總結</b></p><p>  通過此次多功能數(shù)字計數(shù)器的設計制作,我們將從書本上學到的知識應用于實踐,再次鞏固了我的單片機知識,提高了我的電路仿真設計能力。雖然設計過程中遇到了很多困難,但是在解決這些問題

69、的過程無疑是對自身專業(yè)素質的提高。當最終調試成功的時候也是對自己的一種肯定。此次的設計不僅增強了自己在專業(yè)設計方面的信息,鼓舞了自己,更是一次興趣的培養(yǎng),為以后的學習方向明確了重點。</p><p>  另外在這次設計中我們遇到了不少的問題,針對不同的問題我們采取不同的解決方法,最終一一解決了。在我們遇到不懂得問題時,利用課本上、參考書上的知識,以及網上的資料最終解決問題。和隊友之間相互討論,明白了團隊合作的重要

70、性。</p><p>  本次項目設計還存在很多不足,比如,LCD的日期顯示還不夠完美,計數(shù)功能也不夠詳細等。以后爭取完善這個設計,以提高我們的單片機設計能力。</p><p>  這里很感謝藍會立老師給我們的指導和教育,感謝他給我們提供了良好的學習設計環(huán)境,也很感謝可愛的伙伴們,讓我覺得團隊的力量很偉大。</p><p><b>  致 謝</b

71、></p><p>  在陳飛老師的指導下,我完成了本次設計。本設計從選題到完成,都得到了陳老師細心的指導。另外,本設計的完成也離不開其他老師和各位同學給我的建議和幫助,是他們讓我明白了團隊合作的精神。當然,這之中也有我自己的努力。這次課程設計最令我高興的是:遇到困難,翻閱書本解決困難的同時鞏固了已學知識,也學到了新知識。在此,我謹向陳飛老師和幫助過我的老師和同學們,表示崇高的敬意和衷心的感謝!</p

72、><p><b>  參考文獻</b></p><p>  [1]張毅剛,彭喜元. 單片機原理與應用設計. 北京:電子工業(yè)出版社,2008.4</p><p>  [2]徐錚穎,孫海維.Protel 99 se EDA技術及應用.北京:機械工業(yè)出版社,2012.2 </p><p>  [3]譚浩強.C程序設計(第三版).北

73、京:清華大學出版社,2005</p><p>  [4]劉文濤.單片機應用開發(fā)實例.北京:清華大學出版社,2005.9</p><p>  [5]高衛(wèi)東,辛友順,韓彥征.51單片機原理與實踐.北京:北京航空航天大學出版社.2008.1</p><p>  附表(本設計所有程序)</p><p>  #include <reg51.h&g

74、t;</p><p>  #include <intrins.h></p><p>  sbit rs= P2^4;</p><p>  sbit rw = P2^5;</p><p>  sbit ep = P2^6;</p><p>  sbit k1=P1^4;</p><p>

75、;  sbit k2=P1^5;</p><p>  sbit k3=P1^6;</p><p>  sbit k4=P1^7;</p><p>  sbit k5=P1^3;</p><p>  sbit speaker=P3^0;</p><p>  unsigned char code dis1[] = {&qu

76、ot;605 "};</p><p>  unsigned char code dis2[] = {"TIME 00:00"};</p><p>  unsigned char code dis3[] = {"0123456789"};</p><p>  unsigned int num=0;</p>

77、;<p>  unsigned int miaogw=0;</p><p>  unsigned int miaosw=0;</p><p>  unsigned int fengw=0;</p><p>  unsigned int fensw=0;</p><p>  unsigned char flag=1;</p&

78、gt;<p>  unsigned char timer0h,timer0l,time;</p><p>  //世上只有媽媽好數(shù)據(jù)表</p><p>  code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,</p><

79、;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,</p><p>  5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3

80、, 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><b>  };</b></p><p>  // 音階頻率表 高八位</p><p>  code unsigned char FREQH[]={</p&g

81、t;<p>  0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, </p><p>  0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i</p><p>  0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,</p><p>  0xFE,0xFE,

82、0xFE,0xFE,0xFE,0xFE,0xFF,</p><p><b>  } ;</b></p><p>  // 音階頻率表 低八位</p><p>  code unsigned char FREQL[]={</p><p>  0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,</p

83、><p>  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i</p><p>  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, </p><p>  0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,</p><p><b>

84、  };</b></p><p>  void delayyy(unsigned char t)</p><p><b>  {</b></p><p>  unsigned char t1;</p><p>  unsigned long t2;</p><p>  for(t1=0

85、;t1<t;t1++)</p><p><b>  {</b></p><p>  for(t2=0;t2<8000;t2++)</p><p><b>  {</b></p><p><b>  ;</b></p><p><b>

86、;  }</b></p><p><b>  }</b></p><p><b>  TR0=0;</b></p><p><b>  }</b></p><p>  void t0int() interrupt 1</p><p><

87、b>  {</b></p><p><b>  TR0=0;</b></p><p>  speaker=!speaker;</p><p>  TH0=timer0h;</p><p>  TL0=timer0l;</p><p><b>  TR0=1;</b

88、></p><p><b>  }</b></p><p>  void song()</p><p><b>  {</b></p><p>  TH0=timer0h;</p><p>  TL0=timer0l;</p><p><b

89、>  TR0=1;</b></p><p>  delayyy(time); </p><p><b>  }</b></p><p>  void delay(unsigned char ms)</p><p><b>  {</b>&

90、lt;/p><p>  unsigned char i;</p><p>  while(ms--)</p><p><b>  {</b></p><p>  for(i = 0; i< 250; i++)</p><p><b>  {</b></p>&

91、lt;p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  }

92、</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  bit lcd_bz()</p><p><b>  {</b></p><p>  bit result;</p>

93、<p><b>  rs = 0;</b></p><p><b>  rw = 1;</b></p><p><b>  ep = 1;</b></p><p><b>  _nop_();</b></p><p><b>  _no

94、p_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  result = (bit)(P0 & 0x80);</p><p><b>  ep = 0;</b><

95、;/p><p>  return result;</p><p><b>  }</b></p><p>  void lcd_wcmd(unsigned char cmd)</p><p><b>  {</b></p><p>  while(lcd_bz());//判斷LC

96、D是否忙碌</p><p><b>  rs = 0;</b></p><p><b>  rw = 0;</b></p><p><b>  ep = 0;</b></p><p><b>  _nop_();</b></p><p&

97、gt;<b>  _nop_();</b></p><p><b>  P0 = cmd;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep =

98、1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep = 0;</b></p><p><b>  }</b></p><

99、p>  void lcd_pos(unsigned char pos)</p><p><b>  {</b></p><p>  lcd_wcmd(pos | 0x80);</p><p><b>  }</b></p><p>  void lcd_wdat(unsigned char d

100、at)</p><p><b>  {</b></p><p>  while(lcd_bz());//判斷LCD是否忙碌</p><p><b>  rs = 1;</b></p><p><b>  rw = 0;</b></p><p><b

101、>  ep = 0;</b></p><p><b>  P0 = dat;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep = 1;</b&

102、gt;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  ep = 0;</b></p><p><b>  }</b></p><p>  vo

103、id lcd_wshuzi(void)</p><p><b>  {</b></p><p>  lcd_pos(0x47);</p><p>  lcd_wdat(dis3[fensw]);</p><p>  lcd_pos(0x48);</p><p>  lcd_wdat(dis3[fe

104、ngw]);</p><p>  lcd_pos(0x4A);</p><p>  lcd_wdat(dis3[miaosw]);</p><p>  lcd_pos(0x4B);</p><p>  lcd_wdat(dis3[miaogw]);</p><p><b>  }</b></

105、p><p>  void lcd_init() //LCD初始化</p><p><b>  {</b></p><p>  lcd_wcmd(0x38);</p><p><b>  delay(1);</b></p><p>  lcd_wcmd(0x0c);</p

106、><p><b>  delay(1);</b></p><p>  lcd_wcmd(0x06);</p><p><b>  delay(1);</b></p><p>  lcd_wcmd(0x01);</p><p><b>  delay(1);</b&

107、gt;</p><p><b>  }</b></p><p>  void keyscan(void)</p><p><b>  {</b></p><p>  while(flag)</p><p><b>  {</b></p>&

108、lt;p><b>  if(k1==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p><b>  if(k1==0)</b></p><p><b>  {</b></p>

109、<p><b>  fensw++;</b></p><p>  while(!k1);</p><p>  if(fensw==10)</p><p><b>  fensw=0;</b></p><p><b>  }</b></p><p&g

110、t;<b>  }</b></p><p><b>  if(k2==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p><b>  if(k2==0)</b></p><p&

111、gt;<b>  {</b></p><p><b>  fengw++;</b></p><p>  while(!k2);</p><p>  if(fengw==10)</p><p><b>  fengw=0;</b></p><p><

112、b>  }</b></p><p><b>  }</b></p><p><b>  if(k3==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p><b>  

113、if(k3==0)</b></p><p><b>  {</b></p><p><b>  miaosw++;</b></p><p>  while(!k3);</p><p>  if(miaosw==10)</p><p><b>  miao

114、sw=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(k4==0)</b></p><p><b>  {</b></p><p>  de

115、lay(10);</p><p><b>  if(k4==0)</b></p><p>  {miaogw++;</p><p>  while(!k4);</p><p>  if(miaogw==10)</p><p><b>  miaogw=0;</b></p

116、><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(k5==0)</b></p><p><b>  flag=0;</b></p><p>  lcd_wshuzi();<

117、/p><p><b>  }</b></p><p><b>  }</b></p><p>  void delay1s(void)</p><p><b>  {</b></p><p>  unsigned char h,i,j,k;</p>

118、;<p>  for(h=5;h>0;h--)</p><p>  for(i=4;i>0;i--)</p><p>  for(j=116;j>0;j--)</p><p>  for(k=214;k>0;k--);</p><p><b>  }</b></p>&

119、lt;p>  void main(void)</p><p><b>  {</b></p><p>  unsigned char j; unsigned char k,i;</p><p>  speaker=0;</p><p>  lcd_init();// 初始化LCD</p><p

120、>  delay(10);</p><p>  lcd_pos(0x02);//設置顯示位置</p><p><b>  j = 0;</b></p><p>  while(dis1[j] != '\0')</p><p><b>  {</b></p><

121、;p>  lcd_wdat(dis1[j]);//顯示字符</p><p><b>  j++;</b></p><p><b>  }</b></p><p><b>  while(1)</b></p><p><b>  { </b></

122、p><p>  lcd_pos(0x42);// 設置顯示位置</p><p><b>  i = 0;</b></p><p>  while(dis2[i] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(dis

123、2[i]);// 顯示字符</p><p><b>  i++; }</b></p><p>  keyscan();</p><p>  num=fensw*600+fengw*60+miaosw*10+miaogw;</p><p>  while(num)</p><p><b>

124、;  {</b></p><p><b>  num--;</b></p><p>  fensw=num/60/10;</p><p>  fengw=num/60%10;</p><p>  miaosw=num%60/10;</p><p>  miaogw=num%60%10;

125、</p><p>  delay1s();</p><p>  lcd_wshuzi();</p><p><b>  }</b></p><p>  TMOD=1; //置CT0定時工作方式1</p><p><b>  EA=1;</b></p><p

126、>  ET0=1;//IE=0x82 //CPU開中斷,CT0開中斷 </p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  i=0; </b></p><p>  while(i<100)<

127、;/p><p>  { //音樂數(shù)組長度 ,唱完從頭再來 </p><p>  k=sszymmh[i]+7*sszymmh[i+1]-1;</p><p>  timer0h=FREQH[k];</p><p>  timer0l=FREQL[k];</p><p>  time=sszym

128、mh[i+2];</p><p><b>  i=i+3;</b></p><p><b>  song();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

溫馨提示

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

評論

0/150

提交評論