📄 mp3.c
字号:
#include <iom64v.h>
#include <macros.h>
#include <string.h>
#include <stdio.h>
#include "../Lcd/lcd.h"
#include "../Keyboard/key.h"
#include "../Ds1302/ds1302.h"
#define uchar unsigned char
#define uint unsigned int
extern uchar keybuf;
struct time_now timebuf;
extern unsigned char const diskinfor[];
void Init_system(void)
{
uchar temp;
//开启外部总线
MCUCR=0x80;
XMCRA=0x00;
//初始化部件
KEYBUF_NULL; //键盘初值0
Usart_init(); //串口初始化
DelayIni(); //延时初始化
ds1302_init(); //时钟初始化
outpower_init(); //继电器输出初始化
// Set_time();
mp3portIni(); //播放器初始化
// mp3SineTest(); //测试声音播放
mp3Reset(); //软件复位
lcd_init(); //LCD初始化
show_clear();
show_init("init Vs1003...ok",0,0);
delay_1s();
key_init(); //键盘初始化
show_init("init Keyboard...ok",2,0);
delay_1s();
temp = Init_usb();
if(temp==1){ //USB控制器初始化
show_init("init Disk...ok",4,0);
}
else {Print_str("Disk error\r\n");
show_lcd(0, 0, 192, 6, &diskinfor[0],0);
while(1);
}
delay_1s();
test_file_system(); //检查磁盘工作目录
show_init("Start system ...",6,0);
delay_1s();
delay_1s();
show_clear();
show_welcom();
adjust_cheng(0);
}
/*
*设置时间
*/
void set_system_time(void)
{
uchar ii;
uchar temp;
ii = 0; //最大是2
while(1){
show_set_tiem(ii);
KEYBUF_NULL;
while(keybuf == NULL);
if(keybuf == K_UP){
switch(ii){
case 0: temp = timebuf.hour;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.hour&0x0f);
(++temp == 24) ? (temp = 0) : 0;
timebuf.hour = temp/10;
timebuf.hour <<= 4;
timebuf.hour += temp%10;
break;
case 1: temp = timebuf.min;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.min&0x0f);
(++temp == 60) ? (temp = 0) : 0;
timebuf.min = temp/10;
timebuf.min <<= 4;
timebuf.min += temp%10;
break;
case 2: temp = timebuf.sec;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.sec&0x0f);
(++temp == 60) ? (temp = 0) : 0;
timebuf.sec = temp/10;
timebuf.sec <<= 4;
timebuf.sec += temp%10;
break;
}//switch
}
if(keybuf == K_DOWN){
switch(ii){
case 0: temp = timebuf.hour;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.hour&0x0f);
(--temp == 255) ? (temp = 23) : 0;
timebuf.hour = temp/10;
timebuf.hour <<= 4;
timebuf.hour += temp%10;
break;
case 1: temp = timebuf.min;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.min&0x0f);
(--temp == 255) ? (temp = 59) : 0;
timebuf.min = temp/10;
timebuf.min <<= 4;
timebuf.min += temp%10;
break;
case 2: temp = timebuf.sec;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.sec&0x0f);
(--temp == 255) ? (temp = 59) : 0;
timebuf.sec = temp/10;
timebuf.sec <<= 4;
timebuf.sec += temp%10;
break;
}//switch
}
if(keybuf == K_RIFT) (++ii == 3) ? (ii = 0) : 0;
if(keybuf == K_LIFT) (--ii == 255) ? (ii = 2) : 0;
if(keybuf == K_ESC) {Read_InfoDs1302buf();break;}
if(keybuf == K_ENTER) {Write_InfoDs1302buf();break;}
}
}
/*
*设置日期
*/
void set_system_date(void)
{
uchar ii;
uchar temp;
ii = 0; //最大是2
while(1){
show_set_date(ii);
KEYBUF_NULL;
while(keybuf == NULL);
if(keybuf == K_UP){
switch(ii){
case 0: temp = timebuf.year;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.year&0x0f);
(++temp == 100) ? (temp = 0) : 0;
timebuf.year = temp/10;
timebuf.year <<= 4;
timebuf.year += temp%10;
break;
case 1: temp = timebuf.month;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.month&0x0f);
(++temp == 13) ? (temp = 1) : 0;
timebuf.month = temp/10;
timebuf.month <<= 4;
timebuf.month += temp%10;
break;
case 2: temp = timebuf.date;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.date&0x0f);
(++temp == 32) ? (temp = 1) : 0;
timebuf.date = temp/10;
timebuf.date <<= 4;
timebuf.date += temp%10;
break;
}//switch
}
if(keybuf == K_DOWN){
switch(ii){
case 0: temp = timebuf.year;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.year&0x0f);
(--temp == 255) ? (temp = 99) : 0;
timebuf.year = temp/10;
timebuf.year <<= 4;
timebuf.year += temp%10;
break;
case 1: temp = timebuf.month;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.month&0x0f);
(--temp == 0) ? (temp = 12) : 0;
timebuf.month = temp/10;
timebuf.month <<= 4;
timebuf.month += temp%10;
break;
case 2: temp = timebuf.date;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (timebuf.date&0x0f);
(--temp == 0) ? (temp = 31) : 0;
timebuf.date = temp/10;
timebuf.date <<= 4;
timebuf.date += temp%10;
break;
}//switch
}
if(keybuf == K_RIFT) (++ii == 3) ? (ii = 0) : 0;
if(keybuf == K_LIFT) (--ii == 255) ? (ii = 2) : 0;
if(keybuf == K_ESC) {Read_InfoDs1302buf();break;}
if(keybuf == K_ENTER) {Write_InfoDs1302buf();break;}
}
}
/*
*设置星期
*/
void set_system_week(void)
{
while(1){
show_set_week();
KEYBUF_NULL;
while(keybuf == NULL);
if(keybuf == K_UP) (++timebuf.week == 8) ? (timebuf.week = 1) : 0;
if(keybuf == K_DOWN)(--timebuf.week == 0) ? (timebuf.week = 7) : 0;
if(keybuf == K_ESC) {Read_InfoDs1302buf();break;}
if(keybuf == K_ENTER) {Write_InfoDs1302buf();break;}
}
}
/*
*设置时间
*/
void set_out_time(struct time *ps, uchar page)
{
uchar ii;
uchar temp;
ii = 0; //最大是2
while(1){
show_tiem_out(ps, page,ii);
KEYBUF_NULL;
while(keybuf == NULL);
if(keybuf == K_UP){
switch(ii){
case 0: temp = ps->hour;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (ps->hour&0x0f);
(++temp == 24) ? (temp = 0) : 0;
ps->hour = temp/10;
ps->hour <<= 4;
ps->hour += temp%10;
break;
case 1: temp = ps->min;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (ps->min&0x0f);
(++temp == 60) ? (temp = 0) : 0;
ps->min = temp/10;
ps->min <<= 4;
ps->min += temp%10;
break;
case 2: temp = ps->sec;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (ps->sec&0x0f);
(++temp == 60) ? (temp = 0) : 0;
ps->sec = temp/10;
ps->sec <<= 4;
ps->sec += temp%10;
break;
}//switch
}
if(keybuf == K_DOWN){
switch(ii){
case 0: temp = ps->hour;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (ps->hour&0x0f);
(--temp == 255) ? (temp = 23) : 0;
ps->hour = temp/10;
ps->hour <<= 4;
ps->hour += temp%10;
break;
case 1: temp = ps->min;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (ps->min&0x0f);
(--temp == 255) ? (temp = 59) : 0;
ps->min = temp/10;
ps->min <<= 4;
ps->min += temp%10;
break;
case 2: temp = ps->sec;
temp >>= 4;
temp &= 0x0f;
temp *= 10;
temp += (ps->sec&0x0f);
(--temp == 255) ? (temp = 59) : 0;
ps->sec = temp/10;
ps->sec <<= 4;
ps->sec += temp%10;
break;
}//switch
}
if(keybuf == K_RIFT) (++ii == 3) ? (ii = 0) : 0;
if(keybuf == K_LIFT) (--ii == 255) ? (ii = 2) : 0;
if(keybuf == K_ESC) break;
if(keybuf == K_ENTER) {//根据需要进行一个保护数据动作
break;}
}
}
void set_system(void)
{
uchar ii;
ii = 0;
show_clear();
while(1){
show_set_system(ii);
KEYBUF_NULL;
while(keybuf == NULL);
if(keybuf == K_UP){
(--ii == 255) ? (ii = 2) : 0;
}
if(keybuf == K_DOWN){
(++ii == 3) ? (ii = 0) : 0;
}
if(keybuf == K_ESC) break;
if(keybuf != K_ENTER) continue;
switch(ii){
case 0: //设置时间
set_system_time();
break;
case 1: //设置日期
set_system_date();
break;
case 2: //设置星期
set_system_week();
break;
}
show_clear();
}
}
void main_menu(void) //主菜单
{
uchar ii;
uchar time_out;
uchar path[10];
ii = 0;
time_out = 0;
show_clear();
while(1){
show_menu(ii);
KEYBUF_NULL;
while(keybuf == NULL){delay_ms(200);
if(++time_out >= 50) return;
}
time_out = 0;
if(keybuf == K_UP){
if((ii%2) == 0) {
if(ii != 0) ii -= 2;
}
else {if(ii != 1) ii -= 2;
}
continue;
}
if(keybuf == K_DOWN){
if((ii%2) == 0) {
if(ii != 4) ii += 2;
}
else {if(ii != 5) ii += 2;
}
continue;
}
if(keybuf == K_RIFT){
if((ii%2) == 0) ii += 1;
continue;
}
if(keybuf == K_LIFT){
if((ii%2) != 0) ii -= 1;
continue;
}
if(keybuf == K_ESC) break;
if(keybuf != K_ENTER) continue;
switch(ii){
case 0: //编辑播放
Play_edit_data();
show_clear();
break;
case 1: //系统设置
set_system();
show_clear();
break;
case 2: //直选播放
get_sys_path(&path[0]);
Print_str("选择工作目录=");
Print_str(&path[0]);
Print_str("\r\n");
if(path[0] == 0x00) {show_clear();break;}
adjust_cheng(1); //手动操作打开MP3通道
Play_xuanzhe(&path[0],0);
adjust_cheng(0); //恢复原来通道
show_clear();
break;
case 3: //录音开始
Play_record();//创建文件
show_clear();
break;
case 4: //随机播放
get_sys_path(&path[0]);
Print_str("选择工作目录=");
Print_str(&path[0]);
Print_str("\r\n");
if(path[0] == 0x00) {show_clear();break;}
adjust_cheng(1); //手动操作打开MP3通道
Play_audio(&path[0]);
adjust_cheng(0); //恢复原来通道
show_clear();
break;
case 5: //音源切换
Line_in();
show_clear();
break;
}
}//while(1);
}
void main(void)
{
uchar ii;
Init_system();
while(1){
KEYBUF_NULL;
show_status(); //播放起空闲的状态
while(1){
Read_InfoDs1302buf();
show_tiem();
autoplay(&timebuf); //自动播放测试playedit.c
if(keybuf != NULL) {keybuf = NULL;break;}
}
main_menu();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -