标题: 单片机智能小车播放音乐的程序求助 [打印本页]

作者: 滥情    时间: 2020-4-23 14:24
标题: 单片机智能小车播放音乐的程序求助
在做智能小车时遇到点问题,请教大佬们帮我看看问题,我现在要实现小车按照我设定的路线行走,同时还要用蜂鸣器播放音乐,应该怎么做呢?另外就是我的按键切换到了播放音乐这个功能也就是case4的时候,在按键的时候不能切换到case1,让音乐立马停止应该怎么做呢?
  1. void wudao(void)
  2. {
  3.         tingzhi();
  4.   Delay1ms(150);
  5.   qianjin();
  6.   Delay1ms(2000);
  7.         tingzhi();
  8.         Delay1ms(150);
  9.   youzhuan();
  10. Delay1ms(300);
  11.           qianjin();
  12.   Delay1ms(2000);
  13.           zuozhuan();
  14. Delay1ms(300);
  15.                   qianjin();
  16.   Delay1ms(2000);        
  17. }
  18. void music(void)   
  19. {

  20. //   unsigned char t1;
  21.         unsigned char p,m;   //m为频率常数变量   
  22.   unsigned char i=0;   
  23.   TMOD&=0x0f;   
  24.   TMOD|=0x01;   
  25.   TH0=0xd8;TL0=0xef;   
  26.   IE=0x82;   
  27.         wudao();        
  28. play:
  29.    while(1)   
  30.     {   
  31.     a:          p=music_tab[i];
  32.        if(p==0x00)       { i=0, delay4(1000); goto play;}     //如果碰到结束符,延时1秒,回到开始再来一遍   
  33.        else if(p==0xff)  { i=i+1;delay4(100),TR0=0; goto a;}  //若碰到休止符,延时100ms,继续取下一音符   
  34.             else         {m=music_tab[i++], n=music_tab[i++];}//取频率常数 和 节拍常数   
  35.                                                         TR0=1;                                             //开定时器1   
  36.            while(n!=0) Beep=~Beep,delay3(m);                         //等待节拍完成, 通过P1口输出音频(可多声道哦!)   
  37.        TR0=0;                                             //关定时器1   
  38.     }
  39.         }



  40. void main()                               //主程序入口
  41. {

  42.   bit RunFlag=0;                          //定义小车运行标志位
  43. // LedFlash=3000;                                       //对闪灯数据进行初始化
  44. // EX1=1;                                               //同意开启外部中断1
  45.   IT1=1;                                               //设定外部中断1为低边缘触发类型
  46.   EA=1;                                                //总中断开启
  47.   tingzhi();   
  48.         //初始化小车运行状态
  49.         
  50.   while(1)                                //程序主循环
  51.   {
  52.              if(P3_2 == 0)
  53.           {
  54.            delay_nms(10);
  55.            if(P3_2 == 0)
  56.            {
  57.                      temp++;
  58.                   while(!P3_2);
  59.            }
  60.           }
  61.        //   if(temp > 4)
  62.        //   {
  63.        //   temp = 1;
  64.        //   }
  65.           switch(temp)
  66.           {
  67.                     case 1:{Beep=1;tingzhi();TR0=0;break;        }
  68.                                 
  69.                 case 2:{Robot_Avoidance();EX1 = 0;break;}
  70.                 case 3:{EX1 = 1;break;}
  71.                 case 4:{tingzhi();music();EX1=0;break;}
  72.                                         default        :        
  73.                         {
  74.                                 temp=1;                        //恢复正常模式
  75.                                 break;
  76.                         }
  77.                
  78.           }

  79.   }
  80. }
复制代码


作者: 滥情    时间: 2020-4-23 14:26
上面第一个问题没说明白,就是我现在是他先执行的是wudao(),在播放音乐,但是我想要两个同时进行应该怎么做啊?求大佬们发表下看法
作者: 滥情    时间: 2020-4-24 15:24
没大佬帮我看看吗
作者: 5018    时间: 2020-4-24 18:08
music()是个死循环吗?如果音符有0x00,就会一直死在里面,出不来
作者: 滥情    时间: 2020-4-26 12:57
5018 发表于 2020-4-24 18:08
music()是个死循环吗?如果音符有0x00,就会一直死在里面,出不来

0x00是音符的结束符啊,我现在是在main函数的case4跳不出来
作者: 滥情    时间: 2020-4-26 14:34
怎么没人啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1