Skip to content

AidenDJ/lightdance

Repository files navigation

51单片机音乐播放器 (lightdance)

项目简介

这是一个基于51单片机的音乐播放器项目,使用蜂鸣器播放预设的音乐。项目采用定时器中断方式产生不同频率的方波信号,实现音乐播放功能。

硬件要求

  • 单片机: 51系列单片机 (如STC89C52)
  • 晶振频率: 12MHz
  • 蜂鸣器: 有源或无源蜂鸣器
  • 连接方式: 蜂鸣器连接到P3.4引脚

硬件连接

单片机P3.4 -----> 蜂鸣器正极
GND        -----> 蜂鸣器负极

注意: 蜂鸣器为低电平有效,即P3.4输出低电平时蜂鸣器响。

项目结构

lightdance/
├── main.c              # 主程序文件
├── beep.h              # 音乐数据头文件
├── lightdance.uvproj   # Keil工程文件
├── Objects/            # 编译输出文件夹
│   ├── lightdance.hex  # 烧录文件
│   └── ...
└── Listings/           # 编译列表文件夹

代码结构

main.c - 主程序

  • Timer1Init(): 初始化定时器1,设置为1ms中断
  • PlayMusic(): 播放音符函数,设置定时器重装值和音符持续时间
  • Timer1_ISR(): 定时器1中断服务程序,产生方波并控制音符切换
  • main(): 主函数,初始化系统并开始播放音乐

beep.h - 音乐数据

包含预设的音乐数据数组 buzzer_music[],每个音符由4个字节组成:

  • 字节0-1: 定时器重装值 (TH1, TL1) - 决定音调频率
  • 字节2-3: 音符持续时间 (16位) - 决定音符长度
  • 结束标志: 0x00, 0x00, 0x00, 0x00 表示音乐结束

工作原理

  1. 音调产生: 通过设置定时器1的重装值控制中断频率,产生不同频率的方波
  2. 音符切换: 在中断服务程序中递减音符计数器,当计数为0时切换到下一个音符
  3. 播放控制: 使用全局变量 play_flag 标识播放状态,音乐结束后设置为1

速度调节

项目支持播放速度调节,通过修改 SPEED_FACTOR 宏定义:

#define SPEED_FACTOR 2  // 播放速度因子
  • SPEED_FACTOR = 1: 原始速度(最慢)
  • SPEED_FACTOR = 2: 2倍速度(默认)
  • SPEED_FACTOR = 3: 3倍速度
  • SPEED_FACTOR = 4: 4倍速度(建议最大值)

编译和烧录

使用Keil uVision

  1. 打开 lightdance.uvproj 工程文件
  2. 编译项目 (F7)
  3. 生成的 lightdance.hex 文件位于 Objects/ 文件夹
  4. 使用烧录器将hex文件烧录到单片机

编译注意事项

  • 确保使用12MHz晶振频率设置
  • 如果遇到代码大小限制,可能需要使用完整版Keil或优化代码

使用方法

  1. 硬件连接: 按照硬件连接图连接蜂鸣器
  2. 烧录程序: 将编译生成的hex文件烧录到单片机
  3. 上电运行: 单片机上电后自动开始播放音乐
  4. 播放完成: 音乐播放完成后程序进入无限循环等待状态

自定义音乐

要播放自定义音乐,需要修改 beep.h 文件中的 buzzer_music[] 数组:

  1. 计算定时器值: 根据所需频率计算TH1和TL1值

    定时器值 = 65536 - (晶振频率 / (12 * 2 * 目标频率))
    
  2. 设置持续时间: 以毫秒为单位设置音符持续时间

  3. 添加结束标志: 数组末尾必须添加 0x00, 0x00, 0x00, 0x00

技术特点

  • ✅ 基于定时器中断的精确时序控制
  • ✅ 支持播放速度调节
  • ✅ 低资源占用,适合51单片机
  • ✅ 模块化设计,易于扩展
  • ✅ 完整的音乐播放状态管理

故障排除

常见问题

  1. 蜂鸣器不响

    • 检查硬件连接是否正确
    • 确认蜂鸣器极性
    • 检查P3.4引脚是否正常输出
  2. 音调不准确

    • 确认晶振频率为12MHz
    • 检查定时器初始化设置
  3. 播放速度异常

    • 调整 SPEED_FACTOR
    • 检查音乐数据中的持续时间设置
  4. 编译错误

    • 确保所有文件在同一目录
    • 检查Keil工程配置

开发环境

  • IDE: Keil uVision 5
  • 编译器: C51
  • 目标芯片: 51系列单片机
  • 晶振: 11.0952MHz

版本历史

  • v1.0: 基础音乐播放功能
  • v1.1: 添加播放速度调节功能
  • v1.2: 优化中断服务程序,提高播放稳定性

许可证

本项目仅供学习和研究使用。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors