"该资源是关于使用51单片机实现数字音乐盒的程序设计,具备播放、暂停、上一首、下一首以及LCD显示歌曲信息和播放时间等功能,并且通过LED灯来显示音调和节拍。" 在这个项目中,我们看到51单片机被用来控制一个数字音乐盒,它能够播放多首不同的音乐。51单片机是一种广泛应用的微控制器,具有8位CPU,适合简单的嵌入式系统。这个音乐盒的控制涉及到以下几个关键知识点: 1. **51单片机编程**:代码使用了`<reg52.h>`头文件,这是51系列单片机的寄存器定义,方便访问和操作硬件资源。`<intrins.h>`包含了51单片机的一些内联函数。 2. **音乐存储与播放**:音乐被编码为一串数字数组,如`MUSIC0`, `MUSIC1`, `MUSIC2`, `MUSIC3`,这些数组代表了音乐的旋律。每一项数值可能对应特定频率的音符持续时间或音高。通过解码这些数组,单片机可以控制音乐的播放。 3. **键盘控制**:音乐盒具备独立键盘,用户可以通过键盘实现对播放的控制,包括暂停/播放、上一首和下一首等操作。 4. **LCD显示**:使用LCD(Liquid Crystal Display)屏幕来显示当前播放的曲目信息和播放时间。这需要单片机处理LCD的控制指令,如初始化、写入数据和命令等。 5. **LED灯**:LED(Light Emitting Diode)灯用于指示音调和节拍,可能通过改变亮度或闪烁频率来表现音乐的节奏。 6. **中断服务**:在实际应用中,音乐盒可能会有中断服务,比如按键按下中断,用于实时响应用户的操作。 7. **编程结构**:代码中可能包含循环结构和条件判断,以便在不同状态下执行相应的操作,如播放、暂停或切换歌曲。 8. **I/O操作**:单片机需要进行输入/输出操作,如读取键盘状态,控制LCD和LED,这就涉及到对单片机的IO口的操作。 9. **音乐编码格式**:音乐盒中的音乐数据是自定义编码的,需要自定义解码算法将数字数组转换为音频信号。 10. **定时器/计数器**:在51单片机中,定时器/计数器通常用于产生音乐播放所需的定时信号,确保音乐节奏的准确。 这个项目结合了嵌入式系统的基本元素,包括微控制器编程、硬件接口、中断处理和定制的音乐播放算法,为学习和实践51单片机提供了很好的实例。
#include <intrins.h>
code unsigned char MUSIC0[]=
{ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};//世上只有妈妈好简谱(34音符)
code unsigned char MUSIC1[]={ 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};//生日快乐
unsigned char code MUSIC2[]={ 5,2,2, 3,2,1, 5,2,1, 1,3,4, 6,2,2, 1,3,2, 5,2,4,
5,2,2, 1,2,1, 2,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,8,
5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1, 6,2,2, 1,3,2,
5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1, 1,2,8,
6,2,2, 1,3,2, 1,3,4, 7,2,2, 6,2,1, 7,2,1, 1,3,4,
6,2,1, 7,2,1, 1,3,1, 6,2,1, 6,2,1, 5,2,1, 3,2,1,
1,2,1, 2,2,8, 5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1,
6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,3,
7,1,1, 1,2,8, 0,0,0};//送别
code unsigned char MUSIC3[]={
5,1,4 ,1,2,2, 2,2,2, 3,2,3, 4,2,1, 3,2,2, 1,2,2, 2,2,4,
1,2,2, 6,1,2, 1,2,8,
5,1,4, 1,2,2, 2,2,2, 3,2,2, 3,2,1, 4,2,1, 5,2,2, 1,2,2,
4,2,3, 3,2,1, 5,2,2, 2,2,1, 3,2,1, 3,2,1, 2,2,1, 2,2,6,
3,2,4, 5,2,2, 7,2,2, 7,2,3, 6,2,1, 6,2,4, 5,2,2, 5,2,1,
6,2,1, 7,2,2, 6,2,1, 5,2,1, 3,2,8,
4,2,3, 4,2,1, 5,2,2, 6,2,2, 5,2,2, 4,2,1, 3,2,1, 2,2,4,
1,3,4, 6,2,4, 4,2,3, 5,2,1, 6,2,4, 7,2,2, 0,0,0, 7,2,1, 0,0,0, 7,2,1, 0,0,0,
7,2,2, 6,2,1, 5,2,1, 3,2,8,
1,3,4, 6,2,4, 4,2,3, 5,2,1, 6,2,4, 0,0,0, 6,2,2, 0,0,0, 6,2,1, 0,0,0, 6,2,1, 0,0,0,
6,2,1, 0,0,0, 6,2,2, 4,2,1, 3,2,1, 2,2,8, 0,0,0,
5,2,4, 1,2,2, 2,2,2, 3,2,3, 4,2,1, 3,2,2, 1,2,1, 1,2,1,
2,2,3, 2,2,1, 2,2,2 ,2,2,1, 1,2,1, 6,1,2, 6,1,6,
7,1,4, 7,1,3, 6,1,1, 5,1,2, 6,2,2, 5,2,2, 2,2,1, 2,2,1,
4,2,3, 4,2,1, 3,2,1, 2,2,1, 5,2,8, 1,2,8,
6,2,8, 1,3,6, 1,3,8, 0,0,0
};//同一首歌
//code unsigned char MUSIC[]={3,3,1, 1,3,1, 2,3,2, 3,3,2, 6,2, 2, 3,3,1, 1,3,1, 2,3,2, 3,3,1, 5,2,1, 1,3,3, 2,3,1, 2,3,4, 0,0,0 };
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;// 音阶频率表 高八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};// 音阶频率表 低八位
void DelayUs2x(unsigned char t); //相关函数的定义
void DelayMs(unsigned char t);
void init_timer1(void);
void timer1(unsigned int t);
bit LCD_Check_Busy(void);
void LCD_Write_Com(unsigned char com);
剩余17页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦