找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1820|回复: 1
收起左侧

单片机智能小车的时候按键切换程序问题

[复制链接]
ID:709389 发表于 2020-4-20 18:35 | 显示全部楼层 |阅读模式
30黑币
单片机小白求助,我做智能小车的时候按键切换,切换到音乐模式的时候,我想的是在按一下他就停止,但是播放了音乐他就停不下来了。有大佬帮我看看出在哪吗。附上代码

  1. void music(void)   
  2. {

  3.    unsigned char t1;
  4.         unsigned char p,m;   //m为频率常数变量   
  5.   unsigned char i=0;   
  6.   TMOD&=0x0f;   
  7.   TMOD|=0x01;   
  8.   TH0=0xd8;TL0=0xef;   
  9.   IE=0x82;   
  10. play:   
  11.    while(1)   
  12.     {   
  13.     a:          p=music_tab[i];
  14.        if(p==0x00)       { i=0, delay4(1000); goto play;}     //如果碰到结束符,延时1秒,回到开始再来一遍   
  15.        else if(p==0xff)  { i=i+1;delay4(100),TR0=0; goto a;}  //若碰到休止符,延时100ms,继续取下一音符   
  16.             else         {m=music_tab[i++], n=music_tab[i++];}//取频率常数 和 节拍常数   
  17.                                                         TR0=1;                                             //开定时器1   
  18.            while(n!=0) Beep=~Beep,delay3(m);                         //等待节拍完成, 通过P1口输出音频(可多声道哦!)   
  19.        TR0=0;                                             //关定时器1   
  20.     }   
  21.         }


  22. void main()                               //主程序入口
  23. {

  24.   bit RunFlag=0;                          //定义小车运行标志位
  25. // LedFlash=3000;                                       //对闪灯数据进行初始化
  26. // EX1=1;                                               //同意开启外部中断1
  27.   IT1=1;                                               //设定外部中断1为低边缘触发类型
  28.   EA=1;                                                //总中断开启
  29.   tingzhi();   
  30.         //初始化小车运行状态
  31.         
  32.   while(1)                                //程序主循环
  33.   {
  34.              if(P3_2 == 0)
  35.           {
  36.            delay_nms(10);
  37.            if(P3_2 == 0)
  38.            {
  39.                      temp++;
  40.                   while(!P3_2);
  41.            }
  42.           }
  43.           if(temp > 4)
  44.           {
  45.           temp = 1;
  46.           }
  47.           switch(temp)
  48.           {
  49.                     case 1:Beep=1;tingzhi();break;        
  50.                                 
  51.                 case 2:Robot_Avoidance();EX1 = 0;break; //ShowPort = LedShowData[2];
  52.                         
  53.                 case 3://SB1 = 1;
  54.                                                 EX1 = 1;break;//ShowPort = LedShowData[3];
  55.                 case 4:tingzhi();music();EX1=1;break;
  56.                
  57.           }

  58.   }
  59. }
复制代码

回复

使用道具 举报

ID:236035 发表于 2020-4-21 13:34 | 显示全部楼层
如果tingzhi()是关闭音乐,那你贴出来的代码没问题。就应该单独测试一下播放音乐和停止音乐。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表