单片机音乐演奏(STC89C51)

在学完单片机后的扩展实验里有蜂鸣器的音乐实验,简单来说就是一段频率编码,如果熟悉音乐的可以自己写谱给单片机编程

由于对音乐一窍不通,这里把学习的代码附上

/************************************************************************  
[文件名]  C51音乐程序(八月桂花)  
[功能]    通过单片机演奏音乐 
接线说明:
参考蜂鸣器实验接线 
  
/**********************************************************************/   
#include <REG52.H>    
#include <INTRINS.H>    
//本例晶振为12MHZ    
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.    
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;    
//所以拿出谱子, 试探编吧!    

sbit Beep =  P1^5 ; //蜂鸣器接口
   
unsigned char n=0;  //n为节拍常数变量    
unsigned char code music_tab[] ={   
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,    
0x20, 0x40, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x10,   
0x1C, 0x10, 0x18 , 0x40,   
0x1C, 0x20, 0x20 , 0x20,   
0x1C, 0x20, 0x18 , 0x20,   
0x20, 0x80, 0xFF , 0x20,   
0x30, 0x1C, 0x10 , 0x18,   
0x20, 0x15, 0x20 , 0x1C,   
0x20, 0x20, 0x20 , 0x26,   
0x40, 0x20, 0x20 , 0x2B,   
0x20, 0x26, 0x20 , 0x20,   
0x20, 0x30, 0x80 , 0xFF,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x20, 0x1C , 0x10,   
0x18, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x80,   
0x20, 0x30, 0x1C , 0x10,   
0x20, 0x10, 0x1C , 0x10,   
0x20, 0x20, 0x26 , 0x20,   
0x2B, 0x20, 0x30 , 0x20,   
0x2B, 0x40, 0x20 , 0x15,   
0x1F, 0x05, 0x20 , 0x10,   
0x1C, 0x10, 0x20 , 0x20,   
0x26, 0x20, 0x2B , 0x20,   
0x30, 0x20, 0x2B , 0x40,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x20, 0x15 , 0x20,   
0x1C, 0x20, 0x20 , 0x20,   
0x26, 0x40, 0x20 , 0x20,   
0x2B, 0x20, 0x26 , 0x20,   
0x20, 0x20, 0x30 , 0x30,   
0x20, 0x30, 0x1C , 0x10,   
0x18, 0x40, 0x1C , 0x20,   
0x20, 0x20, 0x26 , 0x40,   
0x13, 0x60, 0x18 , 0x20,   
0x15, 0x40, 0x13 , 0x40,   
0x18, 0x80, 0x00   
};   
   
void int0()  interrupt 1   //采用中断0 控制节拍    
{  TH0=0xd8;   
   TL0=0xef;   
   n--;   
}   
   
void delay (unsigned char m)   //控制频率延时    
{   
 unsigned i=3*m;   
 while(--i);   
}   
   
void delayms(unsigned char a)  //豪秒延时子程序    
{   
  while(--a);                  //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!    
}   
   
void main()   
{ unsigned char p,m;   //m为频率常数变量    
  unsigned char i=0;   
  TMOD&=0x0f;   
  TMOD|=0x01;   
  TH0=0xd8;TL0=0xef;   
  IE=0x82;   
play:   
   while(1)   
    {   
    a: p=music_tab[i];   
       if(p==0x00)       { i=0, delayms(1000); goto play;}     //如果碰到结束符,延时1秒,回到开始再来一遍    
       else if(p==0xff)  { i=i+1;delayms(100),TR0=0; goto a;}  //若碰到休止符,延时100ms,继续取下一音符    
            else         {m=music_tab[i++], n=music_tab[i++];}  //取频率常数 和 节拍常数    
             TR0=1;                                             //开定时器1    
           while(n!=0) Beep=~Beep,delay(m);                         //等待节拍完成, 通过P1口输出音频(可多声道哦!)    
       TR0=0;                                             //关定时器1    
    }   
}  

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STC89C51单片机音乐盒系统设计包括以下几个部分: 1. 硬件设计: 包括STC89C51单片机、音频解码芯片、液晶显示屏、按键等组件的连接。 2. 软件设计: 包括STC89C51单片机程序设计、音频文件的读取和播放、界面显示等功能的实现。 3. 测试和调试: 包括硬件和软件的测试和调试,确保系统能够正常工作。 ### 回答2: stc89c51单片机音乐盒系统设计是一种基于stc89c51单片机的嵌入式系统,可以实现音乐的播放和控制。stc89c51单片机是一种高性能、低功耗的8位单片机,具有丰富的外设资源和多种通信接口,常用于嵌入式系统和智能控制领域。 在stc89c51单片机音乐盒系统中,主要包括音乐播放模块、控制模块和显示模块。其中音乐播放模块采用SD卡作为存储介质,通过SPI接口与stc89c51单片机进行通信实现音乐的读取和解码,然后通过DAC芯片将音频信号输出到扬声器。控制模块主要用于实现音乐盒的操作和控制,包括按键检测、音量控制、播放控制等功能,可以通过LED灯或LCD屏幕显示当前状态和操作结果。显示模块可以通过LCD液晶屏显示音乐名称、歌手、唱片封面等信息,也可以支持多国语言显示。 在设计stc89c51单片机音乐盒系统时,需要考虑各个模块之间的数据传输和协作,以保证系统的正常运行和稳定性。同时,还需要进行低功耗优化和抗干扰测试,以应对各种复杂环境和异常情况。 总之,stc89c51单片机音乐盒系统设计是一项复杂而又有挑战性的工作,需要设计者具备全面的嵌入式系统知识和技能,才能保证系统的稳定性、可靠性和灵活性,以满足人们对音乐盒的需求和期望。 ### 回答3: STC89C51单片机音乐盒系统是一种集成了音乐播放,按键控制和显示功能的娱乐系统。设计中使用STC89C51单片机作为控制核心,通过与其他相关的外围电路、音频设备、喇叭等进行连接,实现音乐播放、控制以及显示等功能。 音乐盒系统的硬件和软件设计流程中包括了电路设计,控制程序编写和音频文件编写等部分。在电路设计中主要包括了按键电路、显示电路、音频放大电路、喇叭及其他周边电路的设计。控制程序编写需要根据硬件设计所得到的IO口进行控制,对于音频播放需要使用到串口通信协议。在音频文件编写方面,需要将音乐文件进行压缩,转化为可以被系统识别的数字信号,然后通过程序进行解码和播放。 在软件实现方面,首先将音乐文件进行压缩和编码,生成相应的数字信号。然后再根据数字信号输出控制信号,通过控制音频放大电路,实现音频放大和输出。其次,需要编写按键的检测程序,当按键被按下时,系统能够及时检测到,通过程序进行相应的处理,如切歌、暂停等。最后,在显示屏的设计中,需要编写相应的显示程序,将系统的状态和播放列表等信息进行实时更新,并显示在屏幕上,从而方便用户的操作。 总的来说,设计STC89C51单片机音乐盒系统需要对硬件和软件方面都有一定的了解和掌握,从而能够对系统进行有效的设计和实现。该系统可以为用户提供一种轻松、愉悦的娱乐方式,同时也能够促进对电子技术的学习和理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值