资源简介
基于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图像分割中的应用
- 下一篇:北京朝阳的天气数据集
相关资源
- HC-SR04超声波测距显示LED灯闪烁
- 基于51开发板的温度报警闹钟按键控制
- STM32的音乐播放器程序,亲测可用
- 51单片机8位抢答器源程序
- 基于51单片机指纹解锁设计程序
- 基于51单片机的智能小车循迹寻迹避障
- 51单片机例程1602显示秒表
- 基于51单片机的俄罗斯方块
- 基于单片机的锅炉温度水位控制系统
- 基于STC89C52单片机的宿舍智能防火报警
- 开源单片机GPS+谷歌定位地图
- 基于51单片机音乐彩灯
- 基于单片机的鱼塘溶解氧监控系统的
- 51单片机测距报警.rar
- 单片机实现密码锁(1602显示)_带设置
- labview音乐播放器41927
- 基于单片机蜂鸣器唱歌祝你生日快乐
- 基于51单片机的智能垃圾桶V4.01.docx
- 单片机唱歌八月桂花香
- 利用定时器和蜂鸣器唱歌
- 基于PROTEUS的单片机多路温度采集系统
- 基于51单片机的温度显示报警系统
- 51单片机室温 体温测量
- 基于51单片机的ds18b20温度传感器实现
- 基于51单片机的温度报警系统
- 基于单片机的火灾报警器
- 基于51单片机矩阵按键电子琴设计-完
- 基于51单片机的水箱水位检测系统.r
- 基于单片机的公交车报站系统的设计
- 基于52单片机自动空调加PROTEUS仿真
评论
共有 条评论