久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1854|回復: 0
打印 上一主題 下一主題
收起左側

串口通信 PC機向單片機發送命令啟動或停止蜂鳴器播放音樂

[復制鏈接]
跳轉到指定樓層
樓主
ID:396671 發表于 2018-11-6 21:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
PC機向單片機發送命令啟動或停止蜂鳴器播放音樂,
當播放音樂時該怎么停止,這時是播放函數運行中,pc輸入數據要等到放完才接受,也就是停不下來
是不是應該換個播放函數?該怎么寫?


#include<reg52.h>
#include<string.h>


unsigned char Count;
sbit speak = P3^4;
unsigned char code SONG[] ={      //祝你平安
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00};


void Delay_xMs(unsigned int x)
{
    unsigned int i,j;
    for( i =0;i < x;i++ )
    {
        for( j =0;j<3;j++ );
    }
}


void Play_Song(unsigned char i)
{
unsigned char Temp1,Temp2;
unsigned int Addr;
Count = 0;      //中斷計數器清0
Addr = i * 217;
while(1)
{
  Temp1 = SONG[Addr++];
     if ( Temp1 == 0xFF )          //休止符
     {
      TR0 = 0;
      Delay_xMs(100);
     }
     else if ( Temp1 == 0x00 )   //歌曲結束符
     {
      return;
     }
     else
     {
      Temp2 = SONG[Addr++];
      TR0 = 1;
     while(1)
     {
       speak = ~speak;
       Delay_xMs(Temp1);
       if ( Temp2 == Count )
       {
        Count = 0;
        break;
       }
      }
     }
}
}


void main (void)
{ char a,b=0;
  SCON=0x50;//串行口方式1
  PCON=0x00;//T1初始化,
  TMOD=0x21;//T1設為方式2  T0設為方式1
  TH1=0xFD;//選9600波特,fosc=11.0592MHz
  TR1=1;//啟動T1
  IE   = 0x82;
  TH0  = 0xD8;
  TL0  = 0xEF;
  


  while(1)
    {
      if(RI)//如果接收到數據,就把接收到的數回發給PC
         { RI=0;//清接收標志
           a=SBUF ;//讀串行口數據
           SBUF=a;//把從PC機發送過來的數據返回給PC機
           while(!TI);//沒有發送完等待
           TI=0;//清發送完中斷標志
                 
                   switch(a)
             {
               case 0x00 : P0=0xff; break;   
               case 0x01 : P0=0xAA; break;
               case 0x02 : P0=0x00; break;
               case 0x03 : Play_Song(0);break;  //播放
               case 0x04 : P0=0xff;
                                TR0 = 1;speak=0;
                                 break;
             }
       }
  }  
}


void Time0_Int() interrupt 1
{
TH0 = 0xD8;
TL0 = 0xEF;
Count++;   //長度加1

}

新建文件夾 (2).zip

65.57 KB, 下載次數: 12

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 不用播放器看的av | 在线观看中文字幕亚洲 | 天天综合久久 | 久久精品免费看 | 久久综合久久综合久久 | 久久久久黄 | 国产伦精品一区二区三区视频金莲 | 欧美精品一区二区免费 | 国产精品美女www爽爽爽 | 精品久久av | 亚洲视频一区在线 | 91精品久久久久久久久久小网站 | 国产男女猛烈无遮掩视频免费网站 | 欧美一级全黄 | 日韩快播电影 | 99re6在线视频精品免费 | 日本久久一区 | 99精品欧美一区二区三区 | 精品视频 免费 | 日韩成人精品视频 | 中文字幕第一页在线 | 亚洲在线高清 | 国产日韩欧美精品 | 成人在线免费网站 | 国产一级一级毛片 | 午夜影院网站 | a在线v| 欧美一区二区三区在线播放 | 高清视频一区二区三区 | 亚洲成人综合在线 | 久久国产精品一区二区三区 | 91久久久久久久久久久久久 | 欧美一级免费看 | 国产亚洲精品精品国产亚洲综合 | 久久精品一区二区视频 | av手机免费在线观看 | 黄a网 | 久久国产综合 | 欧美成人猛片aaaaaaa | 国产ts人妖另类 | 在线观看亚洲专区 |