帮我写一个msp430f149的能用按键控制歌的程序
时间: 2023-05-24 22:02:14 浏览: 107
当然可以,以下是一份 MSP430F149 上的按键控制歌曲的程序:
```
#include <msp430.h>
// 音乐频率
#define FREQ_C5 262
#define FREQ_D5 294
#define FREQ_E5 330
#define FREQ_F5 349
#define FREQ_G5 392
#define FREQ_A5 440
#define FREQ_B5 494
// 按键定义
#define KEY1 BIT0
#define KEY2 BIT1
#define KEY3 BIT2
#define KEY4 BIT3
// 播放时间
#define BEAT 100
// 音乐数据
unsigned int melody[] = {FREQ_E5, FREQ_E5, FREQ_F5, FREQ_G5, FREQ_G5, FREQ_F5, FREQ_E5, FREQ_D5,
FREQ_C5, FREQ_C5, FREQ_D5, FREQ_E5, FREQ_E5, FREQ_D5, FREQ_D5};
unsigned int noteLength[] = {1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1};
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // 禁用看门狗定时器
// 端口初始化
P1DIR = BIT4; // P1.4 作为音乐输出
P2DIR = 0; // P2 上的按键输入
P2REN = 0x0F; // 使能 P2 上的下拉电阻
P2OUT = 0x0F;
// 播放音乐
int i, j, pause;
while(1)
{
if(!(P2IN & KEY1)) // 检查按键1是否按下
{
for(i = 0; i < sizeof(melody)/sizeof(melody[0]); i++)
{
if(melody[i] != 0)
for(j = 0; j < BEAT/noteLength[i]; j++)
{
P1OUT |= BIT4; // 产生音乐频率
__delay_cycles(1000000/melody[i]);
P1OUT &= ~BIT4; // 关闭音乐输出
__delay_cycles(1000000/melody[i]);
}
else
__delay_cycles(BEAT); // 如果是休止符,就延迟
}
}
else if(!(P2IN & KEY2)) // 检查按键2是否按下
{
for(i = 0; i < sizeof(melody)/sizeof(melody[0]); i++)
{
if(melody[i] != 0)
for(j = 0; j < BEAT/noteLength[i]; j++)
{
P1OUT |= BIT4;
__delay_cycles(1000000/melody[i]*2);
P1OUT &= ~BIT4;
__delay_cycles(1000000/melody[i]*2);
}
else
__delay_cycles(BEAT);
}
}
else if(!(P2IN & KEY3)) // 检查按键3是否按下
{
for(i = 0; i < sizeof(melody)/sizeof(melody[0]); i++)
{
if(melody[i] != 0)
for(j = 0; j < BEAT/noteLength[i]; j++)
{
P1OUT |= BIT4;
__delay_cycles(1000000/melody[i]*3);
P1OUT &= ~BIT4;
__delay_cycles(1000000/melody[i]*3);
}
else
__delay_cycles(BEAT);
}
}
else if(!(P2IN & KEY4)) // 检查按键4是否按下
{
pause = 0;
for(i = 0; i < sizeof(melody)/sizeof(melody[0]); i++)
{
if(melody[i] != 0)
for(j = 0; j < BEAT/noteLength[i]; j++)
{
if(!pause)
{
P1OUT |= BIT4;
__delay_cycles(1000000/melody[i]/2);
P1OUT &= ~BIT4;
__delay_cycles(1000000/melody[i]/2);
}
else
__delay_cycles(BEAT);
if(!(P2IN & KEY4)) // 如果再次按下按键4,就暂停播放
pause = !pause;
}
else
__delay_cycles(BEAT);
if(pause) // 暂停播放
i--;
}
}
}
}
```
你可以将该代码编译后烧录到你的 MSP430F149 上,在按键 1、2、3、4 上按下时,就可以播放不同的音乐。
阅读全文