⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music.c

📁 DS1302的1602时钟电路设计LED数码管时钟电路采用24h计时方式
💻 C
字号:
//#include <reg52.h>
sbit P00=P0^0;
unsigned char code song[]={0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,
                           0x81,0x94,0x84,0xc4,0xb4,0x04,0x82,0x01,0x81,0xf4,
                           0xd4,0xb4,0xa4,0x94,0xe2,0x01,0xe1,0xd4,0xb4,0xc4,
                           0xb4,0x04,0x82,0x01,0x81,0x94,0x84,0xb4,0xa4,0x04,
                           0x82,0x01,0x81,0x94,0x84,0xc4,0xb4,0x04,0x82,0x01,
                           0x81,0xf4,0xd4,0xb4,0xa4,0x94,0xe2,0x01,0xe1,0xd4,
                           0xb4,0xc4,0xb4,0x04,0x00};

//unsigned int code note[]={0x0000,0x04fc,0x0471,0x03f4,0x03bc,0x0345,0x02f7,0x02cd,
                    // 0x027e,0x0238,0x01fa,0x01de,0x01aa,0x017c,0x0166,0x013f};

unsigned int note[]={0,0,0,0,0,0,0,0,638,568,506,478,426,380,358,319};//因为取的值都在8后,所以前面的可以用0代替

unsigned char t,low_note,hi_note;

void MDelay(unsigned int beat) //拍子延时程序,不用很精确,可省下一个定时器
 { while(beat--);}

/*void IntT1(void)
{  TMOD=0x10;
   ET1=1;
   EA=1;
   TL1=0x00;//初值为0,定时65.535ms
   TH1=0x00;
}*/

void Timer1(void) interrupt 3 
{  TL1=0x00;//使其打开时能马上获得新值
   TH1=0x00;
   t--;
 }

void Music()
{unsigned int beat,temp;
 unsigned char i;
  i=0;
 do{ temp=song[i];
     if(temp==0)
      {TR1=0;return;}  //用于判断是否结束,
     t=3*(temp&0x0f);        //取低四位拍子
     temp=temp>>4;           //取高四位--简谱码
     if(temp==0)while(t)TR1=1; //如果改位是休止符就延相应的拍子时间,不取反
     else { beat=note[temp];TR1=1;
	        while(t){P00=~P00;MDelay(beat);}   //在拍子的时间里产生音乐频率
          }         
    TR1=0;   
	 i++;
 
  }while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -