_SO,
_RE,_LA,_SO,_MI,_RE, _DO,
_DO,_DO,_RE,_MI,_MI,_MI,_RE,_DO,
_LA, _DO,_DO, _LA,_SO,_SO,
_LA, _DO, _DO, _RE, _DO,_DO, _LA,_SO,_MI, _SO,
_LA, _DO, _DO,_RE, _DO,
_LA, _SO,_SO,_LA, _MI,_MI,_SO,_MI, _RE, _MI, _RE, _RE,_MI,_FA,
_SO,
_MI,_SO, _SO,_LA, _SO,_SO,_MI,_RE, _MI, _MI,_MI, _RE,_DO,_DO,
_LA, _DO,_DO, _RE,_DO,_DO,_LA,_SO,_MI, _SO,
_LA,_DO, _DO,_RE, _DO,_DO,_LA,_SO,_MI,
_SO, _SO,_SO, _LA,_MI,_MI,_SO,_MI, _RE, _RE,_LA, _SO,_MI, _RE, _DO, _DO,
_DO,_SO, _MI, _RE, _LA,_SO, _MI,_RE,
_DO, _SO,_MI, _RE, _LA,_SO, _MI,_RE, _DO, };
/* 歌曲节拍 */
const uint32 HCMM_L4[] = {
_2d, _1,
_2d, _2d, _8, _8, _1, _1, _1, _1,
_8, _8, _8, _16, _1,
_8,_8,_8,_16,_16,_4,_8,_8,_8, _8,_8,_8,_16,_16,_4,_8,_8, _4d,_8,_4,_8,_8,_8, _1,
_4d,_8,_4,_8,_8, _1,
_4,_8,_16,_16,_8,_8d,_16,_8d,
_8, _8,_8, _16,_16,_2,
_8, _8, _8, _16, _16,_4, _8,_8,_8, _1,
_4d, _8, _8,_8, _4,
_8, _8,_8,_16, _16,_4,_8,_8, _4d, _8, _4, _8,_8,_8,
_16,_2,
_8,_8,_8,_16,_16,_4,_8, _8, _8,
_8, _8, _8,_16, _16, _4,_16,_8d,
_1,
_8,_8, _8,_16, _16,_4,_16,_8d, _8, _8,_8, _16,_16,_2,
_8, _8,_8, _16,_16,_4,_8,_8,_8, _1,
_8,_8, _8,_16, _16,_4,_8,_8,_8,
_8, _8,_8, _16,_16,_4,_8,_8, _8, _4,_8, _8,_4, _8, _1, _1, _2d,_8, _8, _4d, _8,_8, _4,_8,
_2d, _8,_8, _4d, _8,_8, _4,_8, _1, }; /*
******************************************************************************************************** ** 函数名称: Delay ** 功能描述: 软件延时函数
******************************************************************************************************* */
void Delay(uint8 dly) {
uint32 i;
for(; dly > 0; dly--)
for(i = 0; i < 0x7FFFF; i++); }
uint8 const DISP_TAB[10] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};
OS_STK TaskStk [TaskStkLengh]; OS_STK Task0Stk [TaskStkLengh]; OS_STK Task1Stk [TaskStkLengh]; OS_STK Task2Stk [TaskStkLengh]; OS_STK Task3Stk [TaskStkLengh]; OS_STK Task4Stk [TaskStkLengh]; void void void void void void
uint32 voice_global; uint32 b_n_global; uint32 p_s_global;
void MSPI_Init(void) //SPI初始化 {
PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500; // 设置管脚连接SPI PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x15 << 8) ;
// 设置SPI时钟分频
// CPHA = 0, 数据在SCK 的第一个时钟沿采
MP3(void *pdata);
//对MP3主任务声明
//Define the Task0 stack 定义用户任务0的堆栈
Is_button_press(void *pdata); //对判断按键任务声明 PWM(void *pdata); //对音乐播放任务声明 voicepend(void *pdata); p_spend(void *pdata);
//对控制音量任务声明
b_npend(void *pdata);
SPI_SPCCR = 0x52; 样 }
(1 << 4) | (1 << 5) | (0 << 6) | (0 << 7);
SPI_SPCR = (0 << 3) |
// CPOL = 1, SCK 为低有效 // MSTR = 1, SPI 处于主模式
// LSBF = 0, SPI 数据传输MSB (位7)在先 // SPIE = 0, SPI 中断被禁止
uint8 MSPI_SendData(uint8 data) //向数码管发送消息 {
IOCLR = HC595_CS;
// 片选74HC595
SPI_SPDR = data;
while( 0 == (SPI_SPSR & 0x80));
// 等待SPIF置位,即等待数据发送完毕
IOSET = HC595_CS; return(SPI_SPDR); }
int main(void) { INT8U error;
OSInit (); //系统初始化
OSTaskCreate (MP3,(void *)0, &TaskStk[TaskStkLengh - 1], 2); OSStart (); //启动多任务环境 return 0;
}
void MP3(void *pdata) { pdata = pdata;
TargetInit (); / /初始化目标板 PINSEL1 = 0x00000000; //设置管脚连接GPIO IO0DIR = BEEP;
//设置蜂鸣器为输出
IO0DIR = ~(0x3F) << 16; //选择按键作为输入
PINSEL2 &= ~0x08; //设置管脚连接到GPIO IO1DIR = 0xFF << 18; //选择流水灯作为输出
IO1SET = 0xFF << 18; //使流水灯处于高电平,灯熄灭
MSPI_Init(); //SPI初始化
IODIR = HC595_CS; //将SPI作为输出
IO0DIR = ~(0x3F) << 16; //将p0.16~p0.21作为输入
//创建MP3主任务