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的information memory中烧录参数