单片机蜂鸣器播放《孤勇者》

首先单片机接线搞好

代码:

#include <reg51.h>
#include "Delay.h"
#include "Timer0.h"

#ifndef __TIMER0_H__
#define __TIMER0_H__

#ifndef __DELAY_H__
#define __DELAY_H__
 
void Timer0Init(void);
void Delay(unsigned int xms);
 
//???????
sbit Buzzer=P2^5;
 
//????,?????????????700(ms),????????????
#define SPEED    700
 
//????????,P:???,L:??,M:??,H:??,???:?????#
#define P    0
#define L1    1
#define L1_    2
#define L2    3
#define L2_    4
#define L3    5
#define L4    6
#define L4_    7
#define L5    8
#define L5_    9
#define L6    10
#define L6_    11
#define L7    12
#define M1    13
#define M1_    14
#define M2    15
#define M2_    16
#define M3    17
#define M4    18
#define M4_    19
#define M5    20
#define M5_    21
#define M6    22
#define M6_    23
#define M7    24
#define H1    25
#define H1_    26
#define H2    27
#define H2_    28
#define H3    29
#define H4    30
#define H4_    31
#define H5    32
#define H5_    33
#define H6    34
#define H6_    35
#define H7    36
 
//????????
unsigned int FreqTable[]={
    0,
    63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
    64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
    65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};
 
//??
unsigned int code Music[]={//?????????code?????ROM(flash)
    //??,??,
    //1
//    M3,8,
//    P,4,
//    P,1,
//    M1,1,
//    M2,1,
//    M1,1,
//    
//    //2
//    M3,8,
//    P,3,
//    M1,1,
//    M2,1,
//    M1,1,
//    M2,1,
//    M3,1,
//    
//    //3
//    L6,3,
//    M1,1,
//    L6,3,
//    M1,1,
//    L6,3,
//    M1,1,
//    M3,2,
//    M1,2,
//    
//    //4
//    L7,8,
//    L6,1,
//    M1,1,
//    M6,2,
//    M6,1,
//    M6,1,
//    M6,1,
//    M5,5,
//    M6,2,
//    M6,1,
//    M5,1,
//    M6,1,
//    M5,1,
//    M6,1,
//    M5,1,
//    
//    //5
//    M3,1,
//    M3,3,
//    M3,4,
//    P,4,
//    P,2,
//    L6,1,
//    M1,1,
//    
//    //6
//    M6,3,
//    M6,1,
//    M6,1,
//    M5,1,
//    M6,1,
//    M5,1,
//    M7,3,
//    M7,1,
//    M7,1,
//    M6,2,
//    M7,1,
//    
//    //7
//    M7,1,
//    M6,2,
//    M3,1,
//    M3,8,
//    P,1,
//    M3,1,
//    M5,1,
//    M3,1,
//    
//    //8
//    M2,3,
//    M3,1,
//    M2,3,
//    M3,1,
//    M2,3,
//    M3,1,
//    M5,1,
//    M3,1,
//    M5,1,
//    M3,1,
 
//    //9
//    M2,3,
//    M3,1,
//    M2,3,
//    M3,1,
//    M2,4,
//    P,2,
//    M1,1,
//    M2,1,
//    
//    //10
//    M3,2,
//    L6,2,
//    M1,2,
//    M3,2,
//    M2,3,
//    M3,1,
//    M2,1,
//    M1,1,
//    M1,2,
//    
//    //11
//    L6,8,
//    P,4,
//    P,2,
//    M6,1,
//    M7,1,
 
//---------????----------//
    //12
    H1,1,
    H2,1,
    M7,1,
    H1,1,
    H1,2,
    H1,1,
    M7,1,
    H1,1,
    H2,1,
    M7,1,
    H1,1,
    H1,2,
    H1,1,
    H2,1,
    
    //13
    H3,1,
    H2,1,
    H3,1,
    H2,1,
    H3,2,
    H3,1,
    H2,1,
    H3,2,
    H5,2,
    H3,2,
    M6,1,
    M7,1,
    
    //14
    H1,1,
    H2,1,
    M7,1,
    H1,1,
    H1,2,
    H1,1,
    M7,1,
    H1,1,
    H2,1,
    M7,1,
    H1,1,
    H1,2,
    H1,1,
    M7,1,
    
    //15
    H3,1,
    H2,1,
    H3,1,
    H2,1,
    H3,2,
    H3,1,
    H2,1,
    H3,2,
    H5,2,
    H3,2,
    H5,2,
    
    //16
    H3,3,
    H5,1,
    H3,3,
    H5,1,
    H3,1,
    H5,1,
    H6,1,
    H3,1,
    H5,2,
    H5,2,
    
    //17
    H3,3,
    H5,1,
    H3,3,
    H5,1,
    H3,1,
    H5,1,
    H6,1,
    H3,1,
    H5,2,
    H5,1,
    H5,1,
    
    //18
    H3,1,
    H2,1,
    H2,2,
    H2,2,
    H1,1,
    H3,1,
    H3,1,
    H2,1,
    H2,2,
    H2,2,
    H1,1,
    H1,1,
    
    //19
    M6,8,
    P,4,
    P,2,
    H5,1,
    H5,1,
    
    //20
    H3,1,
    H2,1,
    H2,2,
    H2,2,
    H1,1,
    H3,1,
    H3,1,
    H2,1,
    H2,2,
    H2,2,
    H1,1,
    H1,1,
    
    //21
    M6,8,
    P,4,
    P,4,
    
    
    0xFF    //????
};
 
unsigned int FreqSelect,MusicSelect;//MusicSelect???????,FreqSelect?????
 
void main()
{
    Timer0Init();
    while(1)
    {
        if(Music[MusicSelect]!=0xFF)    //?????????
        {
            FreqSelect=Music[MusicSelect];    //?????????
            MusicSelect++;
 
            Delay(SPEED/4*Music[MusicSelect]);    //?????????
            MusicSelect++;
 
            TR0=0;//?????????,???????????
            Delay(5);    
            TR0=1;
        }
        else    //????????
        {
            TR0=0;  //?????
            while(1);
        }
    }
}
 
void Timer0_Routine() interrupt 1
{
    if(FreqTable[FreqSelect])    //??????(0),???????,?????
    {
        //???????????????(????)FreqSelect=Music[MusicSelect]
        TL0 = FreqTable[FreqSelect]%256;        //????????
        TH0 = FreqTable[FreqSelect]/256;        //????????
        Buzzer=!Buzzer;    //?????IO?(??????????????,????????????)
    }
}
void Timer0Init(void)
{
    TMOD &= 0xF0;        //???????
    TMOD |= 0x01;        //???????
    TL0 = 0x18;        //??????
    TH0 = 0xFC;        //??????
    TF0 = 0;        //??TF0??
    TR0 = 1;        //???0????
    ET0=1;
    EA=1;
    PT0=0;
}
void Delay(unsigned int xms)
{
    unsigned char i, j;
    while(xms--)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
    }
}

注意:蜂鸣器的引脚为P2.5,如果没声音那就是引脚连错了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于51单片机播放者的蜂鸣器代码: ```c #include<reg51.h> sbit beep=P1^5;//定义蜂鸣器 void delay(unsigned int i) { while(i--);//实现i毫秒的延时 } void main() { unsigned int i; while(1) { beep=1; delay(150);//发声150毫秒 beep=0; delay(150);//静音150毫秒 for(i=0;i<2;i++) { beep=1; delay(250);//发声250毫秒 beep=0; delay(250);//静音250毫秒 } delay(500);//两个音符之间延时500毫秒 beep=1; delay(350);//发声350毫秒 beep=0; delay(150);//静音150毫秒 beep=1; delay(350);//发声350毫秒 beep=0; delay(150);//静音150毫秒 beep=1; delay(350);//发声350毫秒 beep=0; delay(150);//静音150毫秒 beep=1; delay(250);//发声250毫秒 beep=0; delay(250);//静音250毫秒 for(i=0;i<2;i++) { beep=1; delay(150);//发声150毫秒 beep=0; delay(150);//静音150毫秒 } delay(500);//两个音符之间延时500毫秒 for(i=0;i<2;i++) { beep=1; delay(250);//发声250毫秒 beep=0; delay(250);//静音250毫秒 } beep=1; delay(350);//发声350毫秒 beep=0; delay(150);//静音150毫秒 beep=1; delay(350);//发声350毫秒 beep=0; delay(150);//静音150毫秒 beep=1; delay(350);//发声350毫秒 beep=0; delay(150);//静音150毫秒 beep=1; delay(250);//发声250毫秒 beep=0; delay(250);//静音250毫秒 for(i=0;i<2;i++) { beep=1; delay(150);//发声150毫秒 beep=0; delay(150);//静音150毫秒 } delay(500);//两个音符之间延时500毫秒 } } ``` 这段代码实现了者的蜂鸣器播放,其中使用了定时器和延时函数。用户可以根据需要自行调整发声和静音的时间以及两个音符之间的延时时间。需要注意的是,这段代码是基于51单片机的,如果要在其他单片机或者开发板上运行,需要根据具体的硬件情况进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值