?? cpa.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,用于升調(diào)/降調(diào)
#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
//節(jié)拍定義,以四分音符為一拍,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
//歌曲數(shù)據(jù)庫
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}//一轉(zhuǎn)眼確又看不見
};
//看門狗中斷用于控制每一節(jié)拍的時長
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
tone_dl++;
}
#pragma vector=TIMERA0_VECTOR //定時器1中斷服務(wù)程序,翻轉(zhuǎn)P4.3, P4.2口的狀態(tài)
__interrupt void TIMEA0(void)
{
P4OUT^=BIT3;
P4OUT^=BIT2;
}
void sound(void)//將得到的數(shù)據(jù)轉(zhuǎn)化為聲音信號
{
unsigned int i;
for(i=0;i<80;i++)
{
CCR0=tone_frq[music_dt1[i][0]];//值到ccr0時候產(chǎn)生中斷。
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的狀態(tài)始終為相反(為產(chǎn)生矩形波)
P4DIR|=BIT2+BIT3;
TACTL=TASSEL0+TACLR;// ALK. Clear TAR
CCTL0=CCIE;//CCRO中斷允許
CCR0=0;
TACTL|=MC0;//增記數(shù)
WDTCTL=(WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1);//定義1ms中斷一次。。
IE1|=WDTIE;//看門狗中斷使能
sound();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -