⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpa.c

📁 msp430上播放波斯猫的mid音乐
💻 C
字号:
//design by 非常qq
#include "msp430xw42x.h"
unsigned int tone_dl;  //定义全局变量
unsigned char jiepai;
const unsigned int tone_frq[] =
{ 0,
  //低音
  16384/262, 16384/277, 16384/294, 16384/311, 16384/330,16384/349,
  16384/370, 16384/392,16384/415,16384/440, 16384/466, 16384/494, 
  //中音
  16384/523, 16384/554, 16384/578, 16384/622, 16384/659, 16384/698, 
  16384/740, 16384/784, 16384/831, 16384/880, 16384/932, 16384/988,  
 //高音 
 16384/1046,16384/1109,16384/1175,16384/1245,16384/1318,16384/1397,
 16384/1480,16384/1568,16384/1661,16384/1760,16384/1865,16384/1976};
  
//音乐简谱定义
//低音
#define  L1  1      //低音DO
#define  L_1  2      //半音DO,用于升调/降调
#define  L2  3      //以下以此类推
#define  L_2  4
#define  L3  5
#define  L4  6
#define  L_4  7
#define  L5  8
#define  L_5  9
#define  L6  10
#define  L_6  11
#define  L7  12
//中音
#define  M1  13
#define  M_1  14
#define  M2  15
#define  M_2  16
#define  M3  17
#define  M4  18
#define  M_4  19
#define  M5  20
#define  M_5  21
#define  M6  22
#define  M_6  23
#define  M7  24
//高音
#define  H1  25
#define  H_1  26
#define  H2  27
#define  H_2  28
#define  H3  29
#define  H4  30
#define  H_4  31
#define  H5  32
#define  H_5  33
#define  H6  34
#define  H_6  35
#define  H7  36
//节拍定义,以四分音符为一拍,1/4拍为187ms
#define  P1   176 //4
#define  P1D    254        //6
#define  P2   88        //2
#define  P2D   132 //3
#define  P4    44 //1
#define  P4D   66 //1+1/2
#define  P8    22 //1/2
#define  P8D    33    //3/4
#define  P16     11         //1/4
#define  P16D     16          //3/8
#define  P32     5  //1/8

//歌曲数据库
const unsigned char music_dt1[100][2] =

{
{H1,P8},{0,P32},{H1,P8},{0,P32},{H1,P8},{0,P32},{M5,P16},{0,P32},{M6,P16},{0,P32},{M5,P16},{0,P32},{M6,P8},{0,P32},{M3,P8},{0,P16},{M3,P2},{0,P16},//波斯猫眯着她的双眼
{M6,P8},{0,P32},{M6,P8},{0,P32},{M6,P8},{0,P32},{M5,P16},{0,P32},{M3,P16},{0,P32},{M5,P16},{0,P32},{M3,P8},{0,P32},{M2,P8},{0,P16},{M2,P2},{0,P16},//波斯冒踮者她的脚尖
{H1,P8},{0,P32},{H1,P8},{0,P32},{H1,P8},{0,P32},{M5,P16},{0,P32},{M6,P16},{0,P32},{M5,P16},{0,P32},{M6,P8},{0,P32},{M3,P8},{0,P16},{M3,P2},{0,P16},//波斯猫守着她的爱恋
{M2,P8},{0,P32},{M6,P16D},{0,P32},{M3,P4},{0,P16},{M3,P16},{0,P32},{M3,P16},{0,P32},{M5,P16D},{0,P32},{M6,P8},{0,P32},{M6,P8},{0,P16},{M6,P2},{0,P16}//一转眼确又看不见
};

//看门狗中断用于控制每一节拍的时长
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
 tone_dl++;
}

#pragma vector=TIMERA0_VECTOR   //定时器1中断服务程序,翻转P4.3, P4.2口的状态
__interrupt void TIMEA0(void)
{
P4OUT^=BIT3;
P4OUT^=BIT2;
}

 void sound(void)//将得到的数据转化为声音信号
{
 unsigned int i;
  for(i=0;i<80;i++)
   {
   CCR0=tone_frq[music_dt1[i][0]];//值到ccr0时候产生中断。
   jiepai=music_dt1[i][1];
   while(tone_dl<jiepai);//每一拍的时间延时控制
   if(tone_dl>=jiepai)
   tone_dl=0;
  }
}


void main(void)
{
      while(1)
      {
      _EINT();
      P4OUT=0;
      P4OUT=BIT2;//BIT2和BIT3的状态始终为相反(为产生矩形波)
      P4DIR|=BIT2+BIT3;
      TACTL=TASSEL0+TACLR;// ALK. Clear TAR
      CCTL0=CCIE;//CCRO中断允许
      CCR0=0;
      TACTL|=MC0;//增记数
      WDTCTL=(WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1);//定义1ms中断一次。。
      IE1|=WDTIE;//看门狗中断使能
      sound();
           
      }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -