算有了板子后写成的第一个程序吧,哈哈,会唱歌了,“一闪一闪亮晶晶,满天都是小星星”,可能程序还存在我没发现的问题,但是现在已经好高兴了,另外还要谢谢史先生的指点哦。
下一步该弄个电子琴了。。。
#include "msp430x44x.h"
char table[]={"1 1 5 5 6 6 5 4 4 3 3 2 2 1 5 5 4 4 3 3 2 5 5 4 4 3 3 2 1 1 5 5 6 6 5 4 4 3 3 2 2 1\n"};
int i=0;
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
TACCTL0 |= CCIE;//使能比较中断
TACTL|=TASSEL0+MC_0;//选择时钟源ACLK(32768HZ)
TBCCTL0|=CCIE;//使能比较中断
TBCCR0=(32768-1)/4;//TB 中断周期为1秒
TBCTL|=TASSEL0+MC0;//时钟源选择ACLK(32768HZ),增计数模式
P1DIR|=BIT1;//蜂鸣器对应端口设为输出
_EINT();//使能全局中断
while(1){}
}
//定时器A中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT^=BIT1;//取反,产生方波
}
//定时器B中断服务程序
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B(void)
{
if(table[i]=='1')
TACTL|=MC0; //定时器A设置为增计数模式
switch(table[i])
{
case '1':P1DIR|=BIT1;TACCR0=31;break;
case '2':P1DIR|=BIT1;TACCR0=28;break;
case '3':P1DIR|=BIT1;TACCR0=25;break;
case '4':P1DIR|=BIT1;TACCR0=23;break;
case '5':P1DIR|=BIT1;TACCR0=21;break;
case '6':P1DIR|=BIT1;TACCR0=19;break;
case '7':P1DIR|=BIT1;TACCR0=17;break;
case '8':P1DIR|=BIT1;TACCR0=16;break;
case ' ':P1DIR &= ~BIT1;break;
default:i=0; //循环播放
}
i++;
}
阅读(913) | 评论(0) | 转发(0) |