基于单片机用C语言的音乐播放器怎么实现暂停和播放 7C

void song(unchar p)
{
unint temp;
unchar jp;//jp是简谱
// unint i=0,j;
temp=0;
while(1)
{
temp=
(p+i);
if(temp==0xff)
{
EA=0;
break;
}

jp=temp/16; //取数的高4位
P1=yinyue[jp];
if(jp!=0)
{
timeh=cuzhi[jp*2];
timel=cuzhi[jp*2+1];
}
else
{
TR1=0;
fm=1;//关蜂鸣器
}
delay(temp%16); //取数的低4位
TR1=0; //唱完一个音停10MS
fm=1;
delay_ms(10);
TR1=1;
i++;
keyboard();

if(number==6)
{
number=0;
fm=1;
EA=0;
while(1)
{
keyboard();
if(number==6)
{ EA=1;
// i=j;
break;
}

         }
    }
}
fm=1;return;    

} //其中number是按键对应的传递数值来实现暂停,可是不知道为什么能实现暂停但是不能再播放

2个回答

代码太乱,你也没说清楚哪个num表示暂停。
关键是你暂停的时候记录下当前的p(播放位置)到全局变量,恢复的时候从这个地方开始播放。调试下你的程序。

qq_22945213
咸菜鱼 那个函数就是我自己写的暂停函数,我让播放函数进入死循环,最后在通过键盘扫描实现跳出循环
4 年多之前 回复
qq_22945213
咸菜鱼 我的number就是我的键盘扫描返回的值当我键盘按了暂停键,我就返回到song函数里面,if(number==6) { number=0; fm=1; EA=0; while(1) { keyboard(); if(number==6) { EA=1; // i=j; break; }
4 年多之前 回复
qq_22945213
咸菜鱼 我的number就是我的键盘扫描返回的值当我键盘按了暂停键,我就返回到song函数里面,if(number==6) { number=0; fm=1; EA=0; while(1) { keyboard(); if(number==6) { EA=1; // i=j; break; }
4 年多之前 回复
qq_22945213
咸菜鱼 我的number就是我的键盘扫描返回的值当我键盘按了暂停键,我就返回到song函数里面,if(number==6) { number=0; fm=1; EA=0; while(1) { keyboard(); if(number==6) { EA=1; // i=j; break; }
4 年多之前 回复
qq_22945213
咸菜鱼 我的number就是我的键盘扫描返回的值当我键盘按了暂停键,我就返回到song函数里面,if(number==6) { number=0; fm=1; EA=0; while(1) { keyboard(); if(number==6) { EA=1; // i=j; break; }
4 年多之前 回复

暂停后,要把当前状态全部保存下来,播放的时候恢复,有点像中断的机理

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问