📄 music.c
字号:
/********************************************************************************/
/* filename : MUSIC.c */
/* created : xillinx */
/* descript : 用来实现电子琴功能 */
/********************************************************************************/
#include "../CPU/CPU.h"
#include "../CFG/CFG.h"
#include "../UART/UART.h"
#include "../MUSIC/MUSIC.h"
/********************************************************************************/
/* 音调频率 */
/********************************************************************************/
/* | 1 | <--> | C | 262 | 0x5b1e | */ //* 低音
/* | 2 | <--> | D | 294 | 0x6d10 | */
/* | 3 | <--> | E | 330 | 0x7d18 | */
/* | 4 | <--> | F | 349 | 0x8438 | */
/* | 5 | <--> | G | 392 | 0x91cc | */
/* | 6 | <--> | A | 440 | 0x9dd2 | */
/* | 7 | <--> | B | 494 | 0xa88d | */
/* | 1 | <--> | C | 523 | 0xad67 | */ //* 中音
/* | 2 | <--> | D | 587 | 0xb668 | */
/* | 3 | <--> | E | 659 | 0xbe73 | */
/* | 4 | <--> | F | 698 | 0xc21c | */
/* | 5 | <--> | G | 784 | 0xc8e6 | */
/* | 6 | <--> | A | 880 | 0xcee9 | */
/* | 7 | <--> | B | 988 | 0xd447 | */
/* | 1 | <--> | C | 1047 | 0xd6be | */ //* 高音
/* | 2 | <--> | D | 1175 | 0xdb3c | */
/* | 3 | <--> | E | 1319 | 0xdf40 | */
/* | 4 | <--> | F | 1397 | 0xe114 | */
/* | 5 | <--> | G | 1568 | 0xe473 | */
/* | 6 | <--> | A | 1760 | 0xe775 | */
/* | 7 | <--> | B | 1976 | 0xea24 | */
/********************************************************************************/
unsigned char code music_table_hi[]=
{ 0x5b,
0x6d,
0x7d,
0x84,
0x91,
0x9d,
0xa8,
0xad,
0xb6,
0xbe,
0xc2,
0xc8,
0xce,
0xd4,
0xd6,
0xdb,
0xdf,
0xe1,
0xe4,
0xe7,
0xea,
};
unsigned char code music_table_lo[]=
{ 0x1e,
0x10,
0x18,
0x38,
0xcc,
0xd2,
0x8d,
0x67,
0x68,
0x73,
0x1c,
0xe6,
0xe9,
0x47,
0xbe,
0x3c,
0x40,
0x14,
0x73,
0x75,
0x24,
};
/********************************************************************************/
/* function : MUSIC_initialize() */
/* recension: xillinx */
/* descript : MUSIC的定时器初始化 */
/* Fosc */
/* 时钟输出频率: ---------------------------------- */
/* N x [65536 -(RCAP2H,RCAP2L)] */
/*------------------------------------------------------------------------------*/
/* Fosc */
/* THTL加载数据: 65536 - ------------------------ */
/* N x 时钟输出频率 */
/********************************************************************************/
void MUSIC_initialize(void)
{ T2CON = 0x0; //* 16位自动重装模式,禁止T2EX功能
T2MOD = 0x2; //* T2OE=1;允许T2引脚输出
TR2 = 0x0; //* 把定时器的溢出信号输出
}
/********************************************************************************/
/* function : MUSIC_start_tone() */
/* recension: xillinx */
/* descript : MUSIC输出启动和控制 */
/********************************************************************************/
void MUSIC_start_tone(unsigned char tone)
{ unsigned char index;
TR2=0x0;
switch(tone)
{
case 0x1:
index=0x0;
break;
case 0x2:
index=0x1;
break;
case 0x3:
index=0x2;
break;
case 0x4:
index=0x3;
break;
case 0x31:
index=0x4;
break;
case 0x32:
index=0x5;
break;
case 0x33:
index=0x6;
break;
case 0x34:
index=0x7;
break;
case 0x35:
index=0x8;
break;
case 0x36:
index=0x9;
break;
case 0x37:
index=0xA;
break;
case 0x38:
index=0xB;
break;
case 0x39:
index=0xC;
break;
case 0x30:
index=0xD;
break;
case 0x41:
index=0xE;
break;
case 0x42:
index=0xF;
break;
case 0x43:
index=0x10;
break;
case 0x44:
index=0x11;
break;
case 0x45:
index=0x12;
break;
case 0x46:
index=0x13;
break;
case 0x2A:
index=0x14;
break;
case 0x23:
index=0x15;
TR2 =0x0;
return;
}
RCAP2H=music_table_hi[index];
RCAP2L=music_table_lo[index];
TH2 =music_table_hi[index];
TL2 =music_table_lo[index];
TR2 =0x1;
}
/********************************************************************************/
/* function : MUSIC_stop_tone() */
/* recension: xillinx */
/* descript : MUSIC输出停止 */
/********************************************************************************/
void MUSIC_stop_tone(void)
{ TR2=0x0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -