51单片机 蜂鸣器播放小星星

发布时间 2023-08-02 16:43:03作者: 洋洋不得意

普中科技 a4

#include <REGX52.H>
#include <INTRINS.H>

typedef unsigned char u8;
typedef unsigned int u16;  
typedef unsigned long u32;

void delay_10us(u16 t)
{
     while(--t);
}


//蜂鸣器
sbit buzzer = P2^5;

//频率
u16 music_base_frequency[7] = { 523, 587, 670, 720, 784, 880, 988 };
#define base_time 500000
#define zero_time (100000 / 10)

u8 xxx[] = {
  1,0,1,0,  5,0,5,0,   6,0,6,0,  5,5,0,0,  4,0,4,0,  3,0,3,0,
  2,0,2,0,  1,1,0,0,   5,0,5,0,  4,0,4,0,  3,0,3,0,  2,2,0,0,
  5,0,5,0,  4,0,4,0,   3,0,3,0,  2,2,0,0,  1,0,1,0,  5,0,5,0,
  6,0,6,0,  5,5,0,0,   4,0,4,0,  3,0,3,0,  2,0,2,0,  1,1,0,0,

};

void main()
{
    u16 i=0;
    u16 count = 0;
    u16 delay_time = 0;


    for(i = 0; i < sizeof(xxx); ++i)
    {
        if(0 == xxx[i])
        {
            delay_10us(zero_time);
        }
        else
        {
            delay_time = 1000000 / music_base_frequency[xxx[i]] / 2;
            count = base_time / delay_time;
            delay_time = delay_time / 10;
            while(--count)
            {
                buzzer = !buzzer;
                delay_10us(delay_time);    
            }    
        }
    }
    while(1);
}