include
#define sound_amount 5 // 歌曲的数量
sbit pause=P2^5; // 播放 暂停
sbit speaker=P2^7; // 无源蜂鸣器
//////////////////////////////////////////////
unsigned char timer0h,timer0l,time;//timer0h,timer0l 为定时器 T0的高低位初
值,time 为对应的节拍时间
unsigned char music_num,num; //music_num 为歌曲编号 ,music_num=0表示刚
开机时的状态 ,num 是查找歌曲数据表的地址
signed char fre; // 对应频率数据表的地址
bit play_enable; // 歌曲播放的使能标志位 , 用于播放 暂停
void delay(unsigned char t); // 延时子函数 , 控制发音的时间长度
void delayms(unsigned int t); // 普通延时子程序 , 可用于按键消抖
void song(void); // 演奏一个音符
void music_play(void); // 播放歌曲
//////////////////////////////////////////////
// 每三个数字 , 代表一个音符
// 第一个数字是音符的数值 1234567之一( 第几个音 ), 代表哆来咪发 ...
// 第二个数字是 0123之一, 代表低音 中音 高音 超高音 ( 第几个八度 )
// 第三个数字是时间长度 , 以半拍为单位 , 乐曲数据表的结尾是三个 0
//////////////////////////////////////////////
// 《祝你生日快乐》
unsigned char code song1[]={
5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,
5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,
5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,
4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4, 0,0,0};
- 29 -
// 《世上只有妈妈好》
unsigned char code song2[]={
6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,
//6,2,3 代表 6, 中音,3 个半拍 ;
//5,2,1 代表 5, 中音,1 个半拍 ;
//3,2,2 代表 3, 中音,2 个半拍 ;
//5,2,2 代表 5, 中音,2 个半拍 ;
//1,3,2 代表 1, 高音,2 个半拍 ;<

本文介绍了基于51单片机的无线音乐门铃设计,使用C语言编写程序,包括歌曲播放、暂停功能。通过定义歌曲数据表和频率数据表,实现了播放多个不同歌曲的功能。主要涉及的变量和函数包括音乐编号、节拍时间、播放状态等,以及延时子函数、演奏音符和播放歌曲的函数。
最低0.47元/天 解锁文章
1211

被折叠的 条评论
为什么被折叠?



