嵌入式系统设计实验报告 下载本文

_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主任务