• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-10
  • 语言: 其他
  • 标签: 单片机  

资源简介

基于51单片机的蜂鸣器音乐播放器代码,直接在代码中包含头文件,调用函数即可使用,可自行添加歌曲谱播放

资源截图

代码片段和文件信息

/*
*要用无源蜂鸣器!!
*单片机晶振12M
*/

#include“beep.h“

unsigned char th0_f;//计数器高8位重装值
unsigned char tl0_f;//计数器低8位重装值
unsigned char speed_flag=160;//音速

unsigned char code freq[36*2]={
0x8c0xf8//00262hz1//低音   1
0xf30xf8//00277hz1#   2
0x5b0xf9//00294HZ 2    3
0xb80xf9//00311HZ 2#   4
0x150xfa//00330HZ 3   5
0x670xfa//00349HZ 4   6
0xb90xfa//00370HZ 4#   7
0x040xfb//00392HZ 5   8
0x4b0xfb//00415HZ 5#   9
0x900xfb//00440HZ 6   10
0xcf0xfb//00466HZ 6#   11
0x0c0xfc//00494HZ 7   12
0x440xfc//00523HZ 1 //中音  13
0x790xfc//00554HZ 1#    14
0xac0xfc//00587HZ 2    15
0xdc0xfc//00622HZ 2#    16
0x090xfd//00659HZ 3    17
0x340xfd//00698HZ 4    18
0x5c0xfd//00740HZ 4#    19
0x820xfd//00784HZ 5    20
0xa60xfd//00831HZ 5#    21
0xc80xfd//00880HZ 6    22
0xe20xfd//00932HZ 6#    23
0x060xfe//00988HZ 7    24
0x220xfe//01064HZ ‘1//高音  25
0x3d0xfe//01109HZ ‘1#   26
0x560xfe//01175HZ ‘2   27
0x6e0xfe//01245HZ ‘2#   28
0x850xfe//01318HZ ‘3   29
0x9a0xfe//01397HZ ‘4   30
0xae0xfe//01480HZ ‘4#   31
0xc10xfe//01568HZ ‘5   32
0xd30xfe//01661HZ ‘5#   33
0xe40xfe//01760HZ ‘6   34
0xf40xfe//01865HZ ‘6#   35
0x030xff//01967HZ ‘7    36
};

char code jie7[7]={13151718202224};//C调的7个值

/********************定时器0得到频率**************/
void timer0() interrupt 1
{
TL0=tl0_f;
TH0=th0_f;
beep=~beep; //取反音乐输出IO
}

/***********音乐符号串解释函数************/
//入口参数:song--要解释的音乐符号串;diao--输出的音符号串;jie--输出的时长串
void changedata(unsigned char *songunsigned char *diaounsigned char *jie)
{
unsigned char ii1jflag;
char gaodi;//高低+/-12音阶
unsigned char banyin;//有没有半个升音阶
unsigned char yinchang;//音长
*diao=*song;
for(i=0i1=0;;)
{
gaodi=0;//高低=0
banyin=0;//半音=0
yinchang=4;//音长1拍
flag=1;

while((*(song+i)==‘|‘)||(*(song+i)==‘ ‘))//拍子间隔和一个空格过滤
i++;
switch(*(song+i))
{
case ‘‘: gaodi=-12;
i++;//低音
break;
case ‘‘‘: gaodi=12;
i++;//高音
break;
default:break;
}

j= *(song+i)-0x30;//取出基准音
i++;
j=jie7[j-1];
if(gaodi>0)
j+=12;//加上高低音
else if(gaodi<0)
j-=12;//加上高低音

while(flag)
{
switch(*(song+i))
 {
case ‘#‘:  //有半音 j加一个音阶
 i++;
 j++;
 break;
case ‘-‘: //有一个音节加长
 yinchang+=4;
 i++;
 break;
case ‘_‘: //有一个音节缩短
 yinchang=yinchang/2;
 i++;
 break;
case ‘.‘: //有一个加半拍
 yinchang=yinchang+yinchang/2;
 i++;
 break;
default:
 flag=0;
 break;
 }
 }
 *(diao+i1)=j;//记录音符
 *(jie+i1)=yinchang;//记录音长
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      14111  2019-05-06 09:52  蜂鸣器音乐盒文件\beep.c

     文件        164  2019-05-06 09:49  蜂鸣器音乐盒文件\beep.h

     目录          0  2019-05-06 09:53  蜂鸣器音乐盒文件

----------- ---------  ---------- -----  ----

                14275                    3


评论

共有 条评论