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

📄 main.c

📁 ARM做的MP3播放器(LPC2148+VS1003+CH375+OLED)有频谱,用了操作系统uCOS-II(共享全部源码)
💻 C
📖 第 1 页 / 共 2 页
字号:
							}
							OSFlagPost(SemFlag, (OS_FLAGS)(CH375SemFlag | LGDP4216SemFlag), OS_FLAG_SET, &err);
						}
						ch375Result = CH375FileClose( );
						mStopIfError( ch375Result );
					}
				}

			}
			else {  /* 出错 */
				mStopIfError( ch375Result );
				break;
			}
		}
		LED_OUT_INACT( );  /* LED灭 */
		OSTimeDly( OS_TICKS_PER_SEC / 20 );
	}
}

//音乐播放任务
void VS1003Task	(void *pdata)
{
	uint8 byteIndex, data;
	uint32 blockIndex;	
	pdata = pdata; 

	InitPortVS1003();
	//printf( "VS1003 test begin.\r\n" );
	//VsSineTest();
	//printf( "VS1003 test finish.\r\n" );
	SpeFlag = 0;
	Mp3SoftReset();
	LoadPatch();
	while(1) 
	{
		OSFlagPend(SemFlag, (OS_FLAGS)(CH375SemFlag), OS_FLAG_WAIT_SET_ALL, 0, &err);
		OSFlagPost(SemFlag, (OS_FLAGS)(CH375SemFlag), OS_FLAG_CLR, &err);
		for(blockIndex = 0; blockIndex < (FILE_DATA_BUF_LEN / VS1003_BLOCK_SIZE); blockIndex++) {
			DREQWait();			
			SPIStart();
			Mp3SelectData();
			//SPIBatchSend((uint8 *)&FILE_DATA_BUF, (blockIndex << 5/* 2^5 = VS1003_BLOCK_SIZE */) , 32);
			
			for(byteIndex = 0; byteIndex < VS1003_BLOCK_SIZE; byteIndex++) {
				if(SPIRW(&data, FILE_DATA_BUF[(blockIndex << 5/* 2^5 = VS1003_BLOCK_SIZE */) + byteIndex]) == FALSE) {
					//printf( "SPIRW error!.\r\n" );	
				}
			}
			Mp3DeselectData();

			if(SPIEnd()== FALSE) {
				//printf( "SPIEnd error!.\r\n" );
			}
			if(SpeFlag == 0) {
				// Request to read Spectrum Analyzer register                                                                                    
				Mp3WriteRegister(SCI_WRAMADDR, 0x18, 0x04);                                                                                                 
				// Read Spectrum Analyzer registers                                                                                              
				for (byteIndex = 0; byteIndex < 14; byteIndex ++) {                                                                               
					Spe[byteIndex] = Mp3ReadRegister(SCI_WRAM) & 63; 
				}
				SpeFlag = 0xFF;
			}
		}
		OSFlagPost(SemFlag, (OS_FLAGS)VS1003SemFlag, OS_FLAG_SET, &err);
	}
}

void DrawColorTable() {
	uint16 i,j;
	SendCommand(MXSTART);//开始坐标
	WriteData(0);
	SendCommand(MXEND);//开始x坐标
	WriteData(127);
	SendCommand(MYSTART);
	WriteData(0);
	SendCommand(MYEND);
	WriteData(125);
	SendCommand(AD_X);
	WriteData(0);
	SendCommand(AD_Y);
	WriteData(0);
	SendCommand(DISP_DATA);
	for(i = 0; i < 30; i++) {
		for(j = 0; j < 64; j++) {
			WriteData(j);
			WriteData(0);
			WriteData(0);
			WriteData(j);
			WriteData(0);
			WriteData(0);
		}
	}

	for(i = 0; i < 2; i++) {
		for(j = 0; j < 64; j++) {
			WriteData(0x3F);
			WriteData(0);
			WriteData(0);
			WriteData(0x3F);
			WriteData(0);
			WriteData(0);
		}
	}

	for(i = 0; i < 30; i++) {
		for(j = 0; j < 64; j++) {
			WriteData(0);
			WriteData(j);
			WriteData(0);
			WriteData(0);
			WriteData(j);
			WriteData(0);
		}
	}

	for(i = 0; i < 2; i++) {
		for(j = 0; j < 64; j++) {
			WriteData(0);
			WriteData(0x3F);
			WriteData(0);
			WriteData(0);
			WriteData(0x3F);
			WriteData(0);
		}
	}

	for(i = 0; i < 30; i++) {
		for(j = 0; j < 64; j++) {
			WriteData(0);
			WriteData(0);
			WriteData(j);
			WriteData(0);
			WriteData(0);
			WriteData(j);
		}
	}

	for(i = 0; i < 2; i++) {
		for(j = 0; j < 64; j++) {
			WriteData(0);
			WriteData(0);
			WriteData(0x3F);
			WriteData(0);
			WriteData(0);
			WriteData(0x3F);
		}
	}

	for(i = 0; i < 30; i++) {
		for(j = 0; j < 64; j++) {
			WriteData(j);
			WriteData(j);
			WriteData(j);
			WriteData(j);
			WriteData(j);
			WriteData(j);
		}
	}
}

void OLedClear(unsigned char r, unsigned char g, unsigned char b)
{
	uint16 i;
	SendCommand(MXSTART);
	WriteData(0);
	SendCommand(MXEND);
	WriteData(159);
	SendCommand(MYSTART);
	WriteData(0);
	SendCommand(MYEND);
	WriteData(127);
	SendCommand(DISP_DATA);
	for(i = 0; i < 10240; i ++ )
	{
		WriteData(r);
		WriteData(g);
		WriteData(b);
		WriteData(r);
		WriteData(g);
		WriteData(b);
	}
}

void DisplayTask(void *pdata)
{
	uint8 i, j, k, l;
	InitLGDP4216Port();
	OSFlagPend(SemFlag, (OS_FLAGS)CH375SemFlag, OS_FLAG_WAIT_SET_ALL, 0, &err);
	OSFlagPost(SemFlag, (OS_FLAGS)LGDP4216SemFlag, OS_FLAG_CLR, &err);
	InitLGDP4216();
	OLedClear(0x00,0x00,0x00);
	OSFlagPost(SemFlag, (OS_FLAGS)LGDP4216SemFlag, OS_FLAG_SET, &err);
	while(1) {
		OSFlagPend(SemFlag, (OS_FLAGS)CH375SemFlag, OS_FLAG_WAIT_SET_ALL, 0, &err);
		OSFlagPost(SemFlag, (OS_FLAGS)LGDP4216SemFlag, OS_FLAG_CLR, &err);
		//DrawColorTable();
		//OLedClear(0x00,0x00,0x00);
		for(i = 0; i < 14; i ++) {
			SendCommand(MXSTART);
			WriteData(k);
			SendCommand(MXEND);
			WriteData(k+7);
			SendCommand(MYSTART);
			WriteData(0);
			SendCommand(MYEND);
			WriteData(63);
			SendCommand(AD_X);
			WriteData(k);
			SendCommand(AD_Y);
			WriteData(0);
			SendCommand(DISP_DATA);	
			for(j = 0; j < 64; j ++) {
				if(j < Spe[i] ) {
					if( j < 5) {
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);
						for( l = 0; l < 6; l ++) {
							WriteData(0x3F);
							WriteData(0x3F);
							WriteData(0x3F);
						}
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);
					}else if(j < 10) {
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);
						for( l = 0; l < 6; l ++) {
							WriteData(0x00);
							WriteData(0x00);
							WriteData(0x3F);
						}
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);

					}else if(j < 15) {
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);
						for( l = 0; l < 6; l ++) {
							WriteData(0x3F);
							WriteData(0x3F);
							WriteData(0x00);
						}
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);

					}else {
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);
						for( l = 0; l < 6; l ++) {
							WriteData(0x3F);
							WriteData(0x00);
							WriteData(0x00);
						}
						WriteData(0x2F);
						WriteData(0x2F);
						WriteData(0x2F);

					}
				}else {
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
					WriteData(0x00);
				}
			}
			k += 8;		
		}
		k = 0;
		SpeFlag = 0;	
		OSFlagPost(SemFlag, (OS_FLAGS)LGDP4216SemFlag, OS_FLAG_SET, &err);
		OSTimeDly( OS_TICKS_PER_SEC / 100 );
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -