用51蜂鸣器做音乐播放器

2019-07-15 07:37发布

<span style="" >#include "reg52.h"
#include <intrins.h>


typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
code u8 sszymmh[]={
        
1,2,2, 2,2,2, 3,2,2, 1,2,2,


1,2,2, 2,2,2, 3,2,2, 1,2,2,


3,2,2, 4,2,2, 5,2,4,


3,2,2, 4,2,2, 5,2,4,


5,2,1, 6,2,1, 5,2,1,


4,2,1, 3,2,2, 1,2,2,


5,2,1, 6,2,1, 5,2,1,
        
4,2,1, 3,2,2, 1,2,2,


2,2,2, 5,1,2, 1,2,4,


2,2,2, 5,1,2, 1,2,4,


};  //音符


code u8 FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,


0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,


0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,


0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;


// 音阶频率表 低八位(计时器初值)


code u8 FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,


0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,


0x8F,0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,


0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};


sbit beep = P1^5;
sbit s1 = P1^6;
sbit led = P1^0;
u8 time,i = 3,k;   
u8 t1;
void configure()
{
        k=sszymmh[0]+7*sszymmh[1]-1;
        TH0=FREQH[k];  
        TL0=FREQL[k];
        TH1 = 0XFC;
        TL1 = 0X18;
        time=sszymmh[2];
        TMOD |= 0x55;
        ET0 = 1;  //  输出频率
        ET1 = 1;
        TR0 = 1;
        TR1 = 1;
}
void main()
{
        configure();
        while(1)
        {
                if(s1==0)
                {
                        EA = 1;
                }
        }
}


void Time0() interrupt 1 using 0
{
        while(i<100) //音乐数组长度 ,唱完从头再来 ?  i 全局
        {
                k=sszymmh+7*sszymmh[i+1]-1;


                TH0=FREQH[k];  


                TL0=FREQL[k];


                time=sszymmh[i+2];


                i=i+3;
                beep=!beep;
                led =0;  //测试
                TR1 = 1;
                TH1 = 0XFC;
                TL1 = 0X18;
            TR0 = 0;
        }
}
void Time1() interrupt 3 using 0  //优先级要高
{
        TR1 = 0;
        t1++;
        TH1=0XFC;
        TL1=0X18;
        if(t1>=32*time)
        {
                TR0 = 1;
                TR1 = 0;
        }
}


我的思路是,先开启俩个定时器,先进入定时器0   控制频率  然后进入  定时器1  控制节拍,不知道是不是时序的问题还是用定时器延时不正确?


0条回答

一周热门 更多>