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

📄 music.c

📁 STC51系列的源码
💻 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 + -