标题: 51单片机音乐播放,交流贴 [打印本页]

作者: snuoyang    时间: 2018-6-8 13:39
标题: 51单片机音乐播放,交流贴
#include <reg51.h>
#include <intrins.h>
#include <yinyue.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^0;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
uchar code led[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
uchar code led1[]={0x01,0x83,0xc7,0xef,0xff};
uchar tone_H, tone_L, times, i=0, j, temp, x;
uchar beat_H=(65536-62500)/256;
uchar beat_L=(65536-62500)%256;
bit flag,flag1;
void play(uchar *song,uchar *beat);
void display_led();
void delay(uint m)
{
while(--m);
}
void init()
{
  flag1=1;
  beep=0;
  EA=1;
  ET0=1;
  ET1=1;
  TMOD=0x11;
}
void main()
{
        init();
        while(1)
        {
                if(flag1)
                        {
                                if(key1==0)
                                {
                                        delay(3000);
                                        play(song1,beat1);
                                }else
                                        if(key2==0)
                                        {
                                                delay(3000);
                                                play(song2,beat2);
                                        }else       
                                                if(key3==0)
                                                {
                                                        delay(3000);
                                                       play(song3,beat3);
                                               }
                }else
                        display_led();
          }
        }
        void play(uchar  *song,uchar  *beat)
         {
                while(song[i]!=15)
                 {
                          P0=0xff;
                          times=beat[i];   
                        flag=0;                                               
                        tone_H=(65536-tone[song[i]]-6)/256;
                        tone_L=(65536-tone[song[i]]-6)%256;
                        TH0=tone_H;   
                        TL0=tone_L;
                        TH1=beat_H;   
                        TL1=beat_L;
                          TR0=1;   
                        TR1=1;
                        while(flag==0);
                        i++;
                        TR0=0;
                        TR1=1;
                        flag1=0;
                }
        }
        void display_led()
        {
                for(x=0;x<2;x++)
                {
                        for(j=0;j<8;j++)
                        {
                                P1=led[j];
                                delay(50000);
                        }
                        delay(5000);
                        for(j=0;j<5;j++)
                        {
                                P1=led1[j];
                                delay(50000);
                        }
                        delay(5000);
                        for(j=0;j<5;j++)
                        {
                                P1=led1[4-j];
                                delay(50000);
                        }
                        delay(10000);
                        for(j=0;j<6;j++)
                        {
                                P1=0x00;
                                delay(20000);
                                P1=0xff;
                                delay(20000);
                        }
                }
                P1=0x00;
                delay(50000);
                flag1=1;
        }
        void timer0() interrupt 1
        {
                TH0=tone_H;
                TL0=tone_L;
                if(flag==1)
                        TR0=0;
                else
                        beep=~beep;
        }
        void timer1() interrupt 3
        {
                TH1=beat_H;
                TL1=beat_L;
                if(times==0)
                {
                        flag=1;
                        TR1=0;
                }
                times--;
        }






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