共2条
1/1 1 跳转至页
IO 单片机IO口输出音乐的程序(可改写)
问
//文件名:two_tigers.c
//本程序使用MSP430f412单片机的P65口驱动一个扬声器来循环播放歌曲《两只老虎》
//本程序原型出自南航魏小龙《MSP430系列单片机接口技术与系统设计实例》351页
//作者:erlking
//email:sentout163.com
//2004/11
//读者根据自己的情况需要修改的地方有如下几点:
//1、如果mcu不是41x则需要修改include文件名以及在编译设置里面选择相应的xcl文件和ddf文件
//2、按照作者要求的格式修改music[]中的内容来播放您自己的音乐
//3、修改输出音乐的IO口
#include "MSP430x41x.h"
#define UCHAR unsigned char
#define UINT unsigned int
#define PxDIR P6DIR //指定输出音乐的IO口
#define PxOUT P6OUT
#define P_BIT BIT5
const UINT low[8]={60000,0xeef,0xd4e,0xbda,0xb30,0x9f8,0x8e1,0x7e9}; //高音的7个音调
const UINT mid[8]={60000,0x778,0x6a7,0x5ed,0x598,0x4fc,0x471,0x3f5}; //中音的7个音调
const UINT high[8]={60000,0x3bc,0x354,0x2f7,0x2cc,0x27e,0x239,0x1f8}; //高音的7个音调
//以下为曲子的简谱,格式说明如下:
//一个三位十进制数表示一个节拍
//百位表示节拍速度,0表示慢速,1表示快速
//十位表示高、中、低音--0表示中音,1表示低音,2表示高音
//个位是1~7的简谱代码,如果为0,表示休止符不发声
//曲子以255结束
//两只老虎的音乐程序
const UCHAR music[]={
001,002,003,001,0, //歌词:两只老虎
001,002,003,001,0, //两只老虎
003,004,005,0, //跑得快
003,004,005,0, //跑得快
105,106,105,104,003,001,0, //一只没有耳朵
105,106,105,104,003,001,0, //一只没有尾巴
003,015,001,001,0,0,255 //真奇怪-
};
UCHAR beat=0; //节拍数
UINT tone=0; //音调
UINT beat_time; //一个节拍时间
void delay(UINT i)
{
for(;i>0;i--);
}
void main(void)
{
WDTCTL = WDTPW+WDTHOLD;
TACTL = TASSEL1+TACLR+MC1; //SMCLK, Clear TAR,continuous mode
CCTL0 = CCIE;
CCR0 = 1000;
PxDIR = P_BIT;
_EINT();
for(;;)
{
/***************************************************************************/
tone=music[beat]; //读简谱
if(tone==255) //曲子是否结束
{
beat=0;
tone=music[beat];
beat_time=50000;
}
else if(tone>100)
{
tone-=100;
beat_time=25000;
}
else
{
beat_time=50000;
}
/***************************************************************************/
if(tone<10) //翻译简谱
{
tone=mid[tone];
}
else if(tone<20)
{
tone-=10;
tone=low[tone];
}
else if(tone<30)
{
tone-=20;
tone=high[tone];
}
if(tone==60000)
{
beat_time=10000;
}
delay(beat_time);
beat++;
}
}
interrupt [TIMERA0_VECTOR] void TA_0( void )
{
PxOUT^=P_BIT; //输出方波
TAR=0;
CCR0=tone; //音调对应的时间累加到CCR0上
} 答 1: 哈哈!兄弟好久不见啊
//本程序使用MSP430f412单片机的P65口驱动一个扬声器来循环播放歌曲《两只老虎》
//本程序原型出自南航魏小龙《MSP430系列单片机接口技术与系统设计实例》351页
//作者:erlking
//email:sentout163.com
//2004/11
//读者根据自己的情况需要修改的地方有如下几点:
//1、如果mcu不是41x则需要修改include文件名以及在编译设置里面选择相应的xcl文件和ddf文件
//2、按照作者要求的格式修改music[]中的内容来播放您自己的音乐
//3、修改输出音乐的IO口
#include "MSP430x41x.h"
#define UCHAR unsigned char
#define UINT unsigned int
#define PxDIR P6DIR //指定输出音乐的IO口
#define PxOUT P6OUT
#define P_BIT BIT5
const UINT low[8]={60000,0xeef,0xd4e,0xbda,0xb30,0x9f8,0x8e1,0x7e9}; //高音的7个音调
const UINT mid[8]={60000,0x778,0x6a7,0x5ed,0x598,0x4fc,0x471,0x3f5}; //中音的7个音调
const UINT high[8]={60000,0x3bc,0x354,0x2f7,0x2cc,0x27e,0x239,0x1f8}; //高音的7个音调
//以下为曲子的简谱,格式说明如下:
//一个三位十进制数表示一个节拍
//百位表示节拍速度,0表示慢速,1表示快速
//十位表示高、中、低音--0表示中音,1表示低音,2表示高音
//个位是1~7的简谱代码,如果为0,表示休止符不发声
//曲子以255结束
//两只老虎的音乐程序
const UCHAR music[]={
001,002,003,001,0, //歌词:两只老虎
001,002,003,001,0, //两只老虎
003,004,005,0, //跑得快
003,004,005,0, //跑得快
105,106,105,104,003,001,0, //一只没有耳朵
105,106,105,104,003,001,0, //一只没有尾巴
003,015,001,001,0,0,255 //真奇怪-
};
UCHAR beat=0; //节拍数
UINT tone=0; //音调
UINT beat_time; //一个节拍时间
void delay(UINT i)
{
for(;i>0;i--);
}
void main(void)
{
WDTCTL = WDTPW+WDTHOLD;
TACTL = TASSEL1+TACLR+MC1; //SMCLK, Clear TAR,continuous mode
CCTL0 = CCIE;
CCR0 = 1000;
PxDIR = P_BIT;
_EINT();
for(;;)
{
/***************************************************************************/
tone=music[beat]; //读简谱
if(tone==255) //曲子是否结束
{
beat=0;
tone=music[beat];
beat_time=50000;
}
else if(tone>100)
{
tone-=100;
beat_time=25000;
}
else
{
beat_time=50000;
}
/***************************************************************************/
if(tone<10) //翻译简谱
{
tone=mid[tone];
}
else if(tone<20)
{
tone-=10;
tone=low[tone];
}
else if(tone<30)
{
tone-=20;
tone=high[tone];
}
if(tone==60000)
{
beat_time=10000;
}
delay(beat_time);
beat++;
}
}
interrupt [TIMERA0_VECTOR] void TA_0( void )
{
PxOUT^=P_BIT; //输出方波
TAR=0;
CCR0=tone; //音调对应的时间累加到CCR0上
} 答 1: 哈哈!兄弟好久不见啊
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |