关于用51单片机播放音乐的问题!!!急~~~~

2019-07-15 20:22发布

        在做一个电子万年历,想播放一段音乐当做闹铃铃声,但播放音乐的时候,lcd显示屏上的时间(秒钟)就不动了(但实际上时间是在走动的),音乐停后才能正常显示走动。例如我设置闹钟为9:30,设置为响1分钟。但在9 : 29:59的时候闹钟响了,秒钟一直定住不动定格在9 : 29:59 ,这时闹钟音乐是播放着的,闹铃响完后(大约8秒)停顿一下,lcd的时间就会显示9:30:07,然后音乐重播,完了就显示9 : 30:15然后是9 : 30:23。。。。
这样一直每8秒才显示一次。这样子应该怎么解决?
下面是我用的音乐子函数:

void PlayMusic(void)
{  uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0};
   uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0};
   uint i=0, j=0, k=0;
   while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
   {
       for(j=0;j<SONG_LONG[i]*20;j++)
       {
        beep=~beep;
        for(k=0;k<SONG_TONE[i]/3;k++);
       }
       DelayM(10);
      i++;
   }

   beep=1;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
龙腾四海hrb
1楼-- · 2019-07-16 00:56
外面挂个flash,整首音乐你都可以下载到里面去
p1105583274
2楼-- · 2019-07-16 01:58
【电子产品研发交流】(323764552) 欢迎来群里共同探讨!
Jack315
3楼-- · 2019-07-16 06:10
 精彩回答 2  元偷偷看……
依然落叶飘零
4楼-- · 2019-07-16 12:06
你在发声的时候是通过延时控制发声时间的,这段时间cpu在执行延时操作。因此不会对lcd进行更新操作,要等到音乐播放完才进行下一步操作。因此,发声时间最好就是通过定时器中断控制。这样cpu才能空出来执行其他操作。

一周热门 更多>