MSP430G2553单片机——利用蜂鸣器播放一首歌

Posted Wang_rush

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MSP430G2553单片机——利用蜂鸣器播放一首歌相关的知识,希望对你有一定的参考价值。

利用MSP430G2553单片机和无源蜂鸣器播放一首歌,下面给出两种方案。
方案一:
播放《两只老虎》

#include<MSP430G2553.h>
//音乐播放
//     by   wys
void P_Onclick(int n,int j);
//7个基本音的子函数
void jby_1(int s);
void jby_2(int s);
void jby_3(int s);
void jby_4(int s);
void jby_5(int s);
void jby_6(int s);
void jby_7(int s);
void main(void)

     WDTCTL = WDTPW + WDTHOLD;
     if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF)
     
         while(1);
     
     BCSCTL1=CALBC1_1MHZ;
     
     DCOCTL=CALDCO_1MHZ;   //校准时钟频率1MHZ
     
     //按照《两只老虎》的简谱对7个基本音进行调用
     
     jby_1(400);
     jby_2(400);
     jby_3(400);
     jby_1(400);
     _delay_cycles(3000); //每个完整的拍后接一个延时
     
     jby_1(400);
     jby_2(400);
     jby_3(400);
     jby_1(400);
    _delay_cycles(3000);
    
     jby_3(400);
     jby_4(400);
     jby_5(800);
    _delay_cycles(3000);
    
     jby_3(400);
     jby_4(400);
     jby_5(800);
     _delay_cycles(3000);
     
     jby_5(200);
     jby_6(200);
     jby_5(200);
     jby_4(200);
     jby_3(400);
     jby_1(400);
     _delay_cycles(3000);
     
     jby_5(300);
     jby_6(100);
     jby_5(300);
     jby_4(100);
     jby_3(400);
     jby_1(400);
     _delay_cycles(3000);
     
     jby_2(400);
     jby_5(400);
     jby_1(800);
     _delay_cycles(3000);
     
     jby_2(400);
     jby_5(400);
     jby_1(800);






//输入每个音调的频率对应的n和持续时间j

void P_Onclick(int n,int j)

    P1DIR |= BIT6;
                        ///延时每个音调的时长
                      for ( ;j>0;j--)                                  
                      
                        volatile unsigned int i;                
                        P1OUT ^= BIT6;                          
                        i = n;                             
                        do
                        
                            i--;                                // 自减操作
                            _NOP();                             // 空操作
                        while (i != 0);                        // 标准的do……while语句,注意别漏掉了括号后面的分号
                      

// do
void jby_1(int s)   

    P_Onclick(95,s);

//re
void jby_2(int s)  

    P_Onclick(85,s);


//mi
void jby_3(int s)   

    P_Onclick(75,s);


//fa
void jby_4(int s)  

    P_Onclick(71,s);


//sol
void jby_5(int s)   

    P_Onclick(63,s);


//la
void jby_6(int s)  

    P_Onclick(56,s);


//si
void jby_7(int s)    

    P_Onclick(50,s);


方案二:
循环播放7个基本音

///by:wys
#include "MSP430G2553.h"
//------------在main函数前提前声明函数-------------
void TA0_init(int n);                        //定时器A0的初始化函数                      //定时器A1的初始化函数
void main(void)

    WDTCTL = WDTPW + WDTHOLD;   // 关狗
    BCSCTL1 = CALBC1_1MHZ;              //设置DCO频率为1MHz,将作为MCLK和SMCLK使用
    DCOCTL = CALDCO_1MHZ;
    while(1)
        TA0_init(950);
        __delay_cycles(1000000);
        TA0_init(850);
        __delay_cycles(1000000);
        TA0_init(750);
        __delay_cycles(1000000);
        TA0_init(710);
        __delay_cycles(1000000);
        TA0_init(630);
        __delay_cycles(1000000);
        TA0_init(560);
        __delay_cycles(1000000);
        TA0_init(500);
        __delay_cycles(1000000);
    

//*****************************************************************************************************
void TA0_init(int n)

    P1DIR |= BIT2;                                  //设置P1.2为音频输出
    P1SEL |= BIT2;
    TA0CCR0 = n;                            //设置PWM周期
    TA0CCTL1 = OUTMOD_7;                //CCR1工作在resett模式
    TA0CCR1 = n/2;                              //设置PWM占空比512/1024=0.5
    TA0CTL = TASSEL_2 + MC_1;           //Timer_ A的时钟源为SMCLK,工作模式为Up模式

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

以上是关于MSP430G2553单片机——利用蜂鸣器播放一首歌的主要内容,如果未能解决你的问题,请参考以下文章

MSP430G2553 模拟交通灯

MSP430G2553 4x4矩阵键盘

基于msp430G2553的低频方波频率占空比峰峰值测量函数

怎么在烧录的时候在msp430g2553的information memory中烧录参数

有没有办法在 msp430 中进行多精度算术(整数大于 64 位)?

51单片机——利用蜂鸣器播放《孤勇者》(附成果展示)