2531|2

6917

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

MSP430G2 LaunchPad,蜂鸣器演奏音乐的方法 [复制链接]

本帖最后由 Jacktang 于 2020-5-11 21:56 编辑

#include "msp430g2553.h"

unsigned char n=0;  //n为节拍常数变量    
unsigned char  music_tab[] ={  
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,    
0x20, 0x40, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x10,   
0x1C, 0x10, 0x18 , 0x40,   
0x1C, 0x20, 0x20 , 0x20,   
0x1C, 0x20, 0x18 , 0x20,   
0x20, 0x80, 0xFF , 0x20,
0x30, 0x1C, 0x10 , 0x18,   
0x20, 0x15, 0x20 , 0x1C,   
0x20, 0x20, 0x20 , 0x26,   
0x40, 0x20, 0x20 , 0x2B,   
0x20, 0x26, 0x20 , 0x20,   
0x20, 0x30, 0x80 , 0xFF,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x80,   
0x20, 0x30, 0x1C , 0x10,   
0x20, 0x10, 0x1C , 0x10,   
0x20, 0x20, 0x26 , 0x20,   
0x2B, 0x20, 0x30 , 0x20,   
0x2B, 0x40, 0x20 , 0x15,   
0x1F, 0x05, 0x20 , 0x10,   
0x1C, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x30,   
0x20, 0x30, 0x1C , 0x10,
0x18, 0x40, 0x1C , 0x20,   
0x20, 0x20, 0x26 , 0x40,   
0x13, 0x60, 0x18 , 0x20,   
0x15, 0x40, 0x13 , 0x40,   
0x18, 0x80, 0x00   
};   
   

void delay (unsigned char m)   //控制频率延时    
{   
 unsigned i=3*m;   
 while(--i);   
}   
   
void delaymms(unsigned int a)  //毫秒延时子程序    
{   
  unsigned int t;
     while(--a)
        for(t=0;t<200;t++);
}   
   
void main(void)
{
   unsigned char p,m;   //m为频率常数变量    
   unsigned char i=0;     

   WDTCTL = WDTPW + WDTHOLD;     // 停止看门狗

   P1DIR = 0Xff;        
   P2DIR = 0Xff;        
        
   CCTL0 |= CCIE;                             // CCR0 interrupt enabled
   CCR0 = 10000;                         //10ms
   TACTL = TASSEL_2 ;                  // SMCLK, contmode
   _EINT();

 
   while(1)   
      {   
         p=music_tab;   
          if(p==0x00)      
          { 
            i=0;
            delaymms(1000);
            continue;;
          }     //如果碰到结束符,延时1秒,回到开始再来一遍    
          else if(p==0xff)  
          { 
            i=i+1;
            delaymms(100);
            TACTL &=~MC_1;
            continue;
          }  //若碰到休止符,延时100ms,继续取下一音符    
          else         
          {
             m=music_tab[i++];
             n=music_tab[i++];
          }  //取频率常数 和 节拍常数    
                 
           TACTL |= MC_1+TACLR;                                           //开定时器   
           while(n!=0) P1OUT ^= BIT0,delay(m);                         //等待节拍完成
           TACTL &=~MC_1;                                           //关定时器     
    }  
   
}


// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
    n--;
}

最新回复

不错的分享啊   详情 回复 发表于 2020-5-13 11:26
 
点赞 关注

回复
举报

1万

帖子

203

TA的资源

管理员

沙发
 

谢谢楼主分享

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 

回复

2618

帖子

0

TA的资源

纯净的硅(高级)

板凳
 

不错的分享啊

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表