Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485244
  • 博文数量: 164
  • 博客积分: 4024
  • 博客等级: 上校
  • 技术积分: 1580
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-10 16:27
文章分类

全部博文(164)

文章存档

2011年(1)

2010年(108)

2009年(55)

我的朋友

分类: 嵌入式

2009-11-01 18:51:18

算有了板子后写成的第一个程序吧,哈哈,会唱歌了,“一闪一闪亮晶晶,满天都是小星星”,可能程序还存在我没发现的问题,但是现在已经好高兴了,另外还要谢谢史先生的指点哦。
下一步该弄个电子琴了。。。

#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++;
}
 
阅读(903) | 评论(0) | 转发(0) |
0

上一篇:MSP430 定时器

下一篇:MSP430 键盘

给主人留下些什么吧!~~