0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MCU控制蜂鳴器演奏音樂小程序

算法&編程學(xué)院 ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師3 ? 2018-04-20 09:17 ? 次閱讀

程序功能:MCU控制蜂鳴器演奏歌曲《祝你平安》

----------------------------------------------

撥碼開關(guān)設(shè)置:將BUZZER位撥至ON,其余位撥至OFF

測試說明:聆聽蜂鳴器“唱出”的樂曲

既然是演奏樂曲對于一個音符應(yīng)該包括兩個部分

一是聲調(diào) 二是持續(xù)時間,在這個程序中聲調(diào)是用簡單的

延時-電平翻轉(zhuǎn)來實現(xiàn)的,改變了延時的時間就改變了

聲調(diào),而時間是通過計數(shù)比較來實現(xiàn)的,當(dāng)計數(shù)值相等時

就跳出循環(huán)演奏下一個音符。

*********************************************/

#include 《msp430x14x.h》

typedef unsigned char uchar;

#include “music.h”

#define Buzzer BIT7

#define Buzzer_Port P6OUT

#define Buzzer_DIR P6DIR

uchar counter;

void Play_Song(void);

/***************主函數(shù)****************/

void main(void)

{

uchar i;

/*下面六行程序關(guān)閉所有的IO口*/

P1DIR = 0XFF;P1OUT = 0XFF;

P2DIR = 0XFF;P2OUT = 0XFF;

P3DIR = 0XFF;P3OUT = 0XFF;

P4DIR = 0XFF;P4OUT = 0XFF;

P5DIR = 0XFF;P5OUT = 0XFF;

P6DIR = 0XFF;P6OUT = 0XFF;

P6DIR |= BIT2;P6OUT |= BIT2; //關(guān)閉電平轉(zhuǎn)換

WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗

/*------選擇系統(tǒng)主時鐘為8MHz-------*/

BCSCTL1 &= ~XT2OFF; // 打開XT2高頻晶體振蕩器

do

{

IFG1 &= ~OFIFG; //清除晶振失敗標(biāo)志

for (i = 0xFF; i 》 0; i--); // 等待8MHz晶體起振

}

while ((IFG1 & OFIFG)); // 晶振失效標(biāo)志仍然存在?

BCSCTL2 |= SELM_2 + SELS; //主時鐘和從時鐘都選擇高頻晶振

//設(shè)置定時器A每10ms中斷一次

CCTL0 = CCIE;

CCR0 = 10000;//改變這個值就改變了演奏的速度

TACTL |= TASSEL_2 + ID_3;

//設(shè)置控制蜂鳴器的IO方向為輸出

Buzzer_DIR |= Buzzer;

//打開全局中斷

_EINT();

//循環(huán)演奏歌曲

while(1)

{

Play_Song();

}

}

/*******************************************

函數(shù)名稱:TimerA_ISR

功 能:定時器A的中斷服務(wù)函數(shù)

參 數(shù):無

返回值 :無

********************************************/

#pragma vector = TIMERA0_VECTOR

__interrupt void TimerA_ISR(void)

{

counter++;

}

/*******************************************

函數(shù)名稱:Delay_Nms

功 能:延時N個ms的函數(shù) ps:不知道這個地方怎么算出來的是延時毫秒

參 數(shù):n--延時長度

返回值 :無

********************************************/

void Delay_Nms(uchar n)

{

uchar i,j;

for( i = 0;i 《 n; i++ )

{

for( j = 0;j 《 3;j++ )

_NOP();

}

}

/*******************************************

函數(shù)名稱:Play_Song

功 能:播放《祝你平安》的樂曲

參 數(shù):無

返回值 :無

********************************************/

void Play_Song(void)

{

uchar Temp1,Temp2;

uchar addr = 0;

counter = 0; //中斷計數(shù)器清0

while(1)

{

Temp1 = SONG[addr++];

if ( Temp1 == 0xFF ) //休止符

{

TACTL &=~MC_1; //停止計數(shù)

Delay_Nms(100);

}

else if ( Temp1 == 0x00 ) //歌曲結(jié)束符

{

return;

}

else

{

Temp2 = SONG[addr++];

TACTL |=MC_1; //開始計數(shù)

while(1)

{

Buzzer_Port ^= Buzzer;//電平取反

Delay_Nms(Temp1);//Temp1的值決定了延時的長短,也決定了聲音的頻率

if ( Temp2 == counter )//決定了音調(diào)持續(xù)的時間,計數(shù)時間到時就跳出循環(huán)演奏下一個。

{

counter = 0;

break;

}

}

}

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16665

    瀏覽量

    347751
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113668
  • 蜂鳴器
    +關(guān)注

    關(guān)注

    12

    文章

    887

    瀏覽量

    45681
收藏 人收藏

    評論

    相關(guān)推薦

    利用蜂鳴器和單片機演奏簡單的音樂電路設(shè)計

    利用蜂鳴器和單片機演奏簡單的音樂,包含源程序代碼。
    發(fā)表于 04-03 12:59 ?1.1w次閱讀
    利用<b class='flag-5'>蜂鳴器</b>和單片機<b class='flag-5'>演奏</b>簡單的<b class='flag-5'>音樂</b>電路設(shè)計

    各位,問一個問題,用蜂鳴器演奏流行音樂曲子,做成產(chǎn)品賣的話,算侵權(quán)嗎?

    各位,問一個問題,用蜂鳴器演奏流行音樂曲子,做成產(chǎn)品賣的話,算侵權(quán)嗎?
    發(fā)表于 01-22 11:09

    簡易電子琴演奏音樂

    用51單片機寫的一個小程序,可以演奏音樂,通過矩陣按鍵控制,并通過1602顯示時間信息,有興趣可以看看
    發(fā)表于 09-15 16:55

    按鍵控制無源蜂鳴器發(fā)出不同聲音來演奏音樂

    cortex-A8用不同按鍵控制無源蜂鳴器發(fā)出不同聲音來演奏音樂程序
    發(fā)表于 06-05 21:36

    通過單片機演奏音樂

    /************************************************************************[文件名]C51音樂程序(八月桂花)[功能] 通過單片機演奏音樂 接線說明:參考
    發(fā)表于 11-30 07:08

    如何利用Arduino與蜂鳴器實現(xiàn)音樂演奏

    如何利用Arduino與蜂鳴器實現(xiàn)音樂演奏呢?其程序代碼該怎樣去實現(xiàn)呢?
    發(fā)表于 02-14 07:22

    單片機音樂程序教程

    單片機音樂程序教程:聲音基礎(chǔ),單一程序音樂演奏,模塊化音樂程序演奏等內(nèi)容。
    發(fā)表于 06-03 12:17 ?173次下載
    單片機<b class='flag-5'>音樂程序</b>教程

    音樂演奏器設(shè)計

    音樂演奏器設(shè)計 一、任務(wù)設(shè)計并制作一個可以演奏樂曲的遠(yuǎn)程音樂演奏器,基本電路框圖如圖。
    發(fā)表于 08-02 08:35 ?1714次閱讀
    <b class='flag-5'>音樂演奏</b>器設(shè)計

    蜂鳴器播放音樂程序

    蜂鳴器播放音樂程序,有興趣的同學(xué)可以下載學(xué)習(xí)
    發(fā)表于 04-27 16:18 ?34次下載

    eda音樂演奏程序

    EDA音樂演奏程序例程,可根據(jù)需要改編
    發(fā)表于 12-09 23:19 ?6次下載

    使用C51單片機進(jìn)行演奏生日快樂音樂程序的詳細(xì)資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用C51單片機進(jìn)行演奏生日快樂音樂程序的詳細(xì)資料免費下載,利用中級定時器以及蜂鳴器設(shè)計。
    發(fā)表于 12-17 08:00 ?20次下載
    使用C51單片機進(jìn)行<b class='flag-5'>演奏</b>生日快樂<b class='flag-5'>音樂程序</b>的詳細(xì)資料免費下載

    如何使用單片機進(jìn)行蜂鳴器演奏音樂程序資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用單片機進(jìn)行蜂鳴器演奏音樂程序資料免費下載。
    發(fā)表于 05-05 08:00 ?9次下載
    如何使用單片機進(jìn)行<b class='flag-5'>蜂鳴器</b><b class='flag-5'>演奏</b><b class='flag-5'>音樂</b>的<b class='flag-5'>程序</b>資料免費下載

    單片機中級項目12丨蜂鳴器音樂之八月桂花

    ] C51音樂程序(八月桂花) [功能] 通過單片機演奏音樂 /********************************************************...
    發(fā)表于 11-22 09:36 ?9次下載
    單片機中級項目12丨<b class='flag-5'>蜂鳴器</b><b class='flag-5'>音樂</b>之八月桂花

    利用蜂鳴器演奏簡單的樂譜

    那么,今天分享的是利用蜂鳴器演奏一些簡單的樂譜。
    的頭像 發(fā)表于 05-26 16:04 ?2171次閱讀
    利用<b class='flag-5'>蜂鳴器</b><b class='flag-5'>演奏</b>簡單的樂譜

    單片機控制蜂鳴器音樂資料分享

    單片機控制蜂鳴器音樂
    發(fā)表于 06-05 09:31 ?61次下載