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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
uid:196768 日志

基于51單片機的電子節(jié)拍器設計

已有 2180 次閱讀2017-5-5 08:05 |個人分類:51| 單片機, 節(jié)拍器, 電子

/************************************************************************  
[文件名]  C51音樂程序(八月桂花)  
[功能]    通過單片機演奏音樂  
  
/**********************************************************************/   
#include <REG52.H>    
#include <INTRINS.H>    
//本例采用89C52, 晶振為11.0592MHZ    
//關于如何編制音樂代碼, 其實十分簡單,各位可以看以下代碼.    
//頻率常數(shù)即音樂術語中的音調(diào),而節(jié)拍常數(shù)即音樂術語中的多少拍;    
//所以拿出譜子, 試探編吧!    

//定義各個低音頻率
#define Low_1 262
#define Low_2 294
#define Low_3 330
#define Low_4 349
#define Low_5 392
#define Low_6 440
#define Low_7 494
//
#define Mid_1 523
#define Mid_2 587
#define Mid_3 659
#define Mid_4 698
#define Mid_5 784
#define Mid_6 880
#define Mid_7 988
//
#define High_1 1046
#define High_2 1175
#define High_3 1318
#define High_4 1397
#define High_5 1568
#define High_6 1760
#define High_7 1976

sbit Beep =  P1^5 ;         
sbit StopSpeaker =  P2^7 ;//鄒靜 Add 靜機狀態(tài)檢查所用端口  
unsigned char n=0;  //n為節(jié)拍常數(shù)變量    
unsigned char code music_tab[] ={   
0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),    
0x20, 0x40, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x10,   
0x1C, 0x10, 0x18 , 0x40,   
0x1C, 0x20, 0x20 , 0x20,   
0x1C, 0x20, 0x18 , 0x20,   
0x20, 0x80, 0xFF , 0x20,   
0x30, 0x1C, 0x10 , 0x18,   
0x20, 0x15, 0x20 , 0x1C,   
0x20, 0x20, 0x20 , 0x26,   
0x40, 0x20, 0x20 , 0x2B,   
0x20, 0x26, 0x20 , 0x20,   
0x20, 0x30, 0x80 , 0xFF,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x80,   
0x20, 0x30, 0x1C , 0x10,   
0x20, 0x10, 0x1C , 0x10,   
0x20, 0x20, 0x26 , 0x20,   
0x2B, 0x20, 0x30 , 0x20,   
0x2B, 0x40, 0x20 , 0x15,   
0x1F, 0x05, 0x20 , 0x10,   
0x1C, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x30,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x40, 0x1C , 0x20,   
0x20, 0x20, 0x26 , 0x40,   
0x13, 0x60, 0x18 , 0x20,   
0x15, 0x40, 0x13 , 0x40,   
0x18, 0x80, 0x00   
};   

unsigned int code ShengRiCode[]={ Low_5,Low_5,Low_6,Low_5,Mid_1,Low_7,
 Low_5,Low_5,Low_6,Low_5,Mid_2,Mid_1,
 Low_5,Low_5,Mid_5,Mid_3,Mid_1,Low_7,Low_6,
 Mid_4,Mid_4,Mid_3,Mid_1,Mid_2,Mid_1,
 0xff
}; //Happy Brisday
unsigned int code ShengRiJP[]={0x96,0x36,0x36,0x02,0x02,0x04,0x04,
  0x04,0x08,
  0x02,0x02,0x04,0x04,
  0x04,0x08,
  0x02,0x02,0x04,0x04,
  0x04,0x04,0x04,
  0x03,0x01,0x04,0x04,
  0x04,0x08
};
   
void int0()  interrupt 1   //采用中斷0 控制節(jié)拍    
{  TH0=0xd8;   
   TL0=0xef;   
   n--;   
}   
   
void delay (unsigned char m)   //控制頻率延時    
{   
 unsigned i=3*m;  //頻率延時時間3m 
 while(--i);   
}   
   
void delayms(unsigned char a)  //豪秒延時子程序    
{   
  while(--a);                  //采用while(--a) 不要采用while(a--); 各位可編譯一下看看匯編結果就知道了!    
}  

void StopStatus()
{
unsigned char m,n;
n=0;
TR0=0; //關定時器1
for(m=0;m<1500;m++) //靜機時間
{
if(StopSpeaker==0) //低電平唱
{
n=1;//正常狀態(tài)
TR0=1; //開定時器
break;
}
else //高電平,靜機狀態(tài)轉(zhuǎn)換的延時時間
{
delay(1);
}
}
if(n==0)   //高電平不唱n依然為0,即不響,進入靜機狀態(tài)
while(1)
{
Beep=0;  //蜂鳴器端口為0,不響
}
   
void main()   
{ unsigned char p,m;   //m為頻率常數(shù)變量    
  unsigned char i=0;   
  TMOD&=0x0f;   
  TMOD|=0x01;   
  TH0=0xd8;TL0=0xef;   
  IE=0x82;   
play:   
   while(1)   
    {   
    a: p=music_tab[i];   
       if(p==0x00)       { i=0, delayms(1000); goto play;}     //如果碰到結束符,延時1秒,回到開始再來一遍    
       //else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a;}  //若碰到休止符,延時100ms,繼續(xù)取下一音符 
  else if(StopSpeaker==1)  { StopStatus();delay(1);} //高電平進入靜機狀態(tài),延時100ms,繼續(xù)取下一音符   
           // else    {m=ShengRiCode[i++], n=music_tab[i++];}  //取頻率常數(shù) 和 節(jié)拍常數(shù) 
  else    {m=ShengRiCode[i++], n=ShengRiJP[2];}  //取頻率常數(shù) 和 節(jié)拍常數(shù)   
             TR0=1;                                             //開定時器1    
           while(n!=0) Beep=~Beep,delay(m);                         //等待節(jié)拍完成, 通過P1口輸出音頻(可多聲道哦!)    
       TR0=0;                                             //關定時器1    
    }   
}  

路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

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

Powered by 單片機教程網(wǎng)

返回頂部
主站蜘蛛池模板: 亚洲精品久久久9婷婷中文字幕 | 日韩精品视频在线免费观看 | 久久精品亚洲 | 做a视频| 中文字幕在线看 | 99av成人精品国语自产拍 | 日韩在线精品 | 国产成人99久久亚洲综合精品 | 国产色网站 | 偷拍自拍网 | 97色免费视频 | 精久久| 国产色网| 国产二区三区 | 蜜桃视频在线观看www社区 | 自拍偷拍亚洲欧美 | 国产精品一区三区 | 手机看黄av免费网址 | 久久机热 | 男女羞羞免费视频 | 懂色av一区二区三区在线播放 | 欧美在线视频一区二区 | 亚洲a网| 欧美精品在线观看 | 久久人体视频 | 韩国av一区二区 | 一区二区三区免费在线观看 | 全部免费毛片在线播放网站 | 日韩电影中文字幕 | 久久久久久久国产 | 免费在线观看黄网站 | 欧美黄页 | 亚洲综合二区 | 黄色成人国产 | 黄色一级毛片 | 操久久| 欧美日韩久久 | 成人欧美一区二区三区在线播放 | 日韩在线一区二区 | 国产精品国产三级国产aⅴ浪潮 | 免费视频二区 |