资源简介
基于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
- 上一篇:SVM在RGB图像分割中的应用
- 下一篇:北京朝阳的天气数据集
相关资源
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 我做的电子琴,21个音,一般歌曲基本
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 浙江工业大学2005-2006学年单片机习题
- 单片机与PC机串口通讯仿真
- 毕业设计 单片机 对讲机 protues仿真
评论
共有 条评论