历史上的今天

今天是:2024年11月13日(星期三)

2019年11月13日 | 51单片机音乐盒设计 按键可以上一曲,下一曲,开始或暂停

发布者:caoda143 来源: 51hei关键字:51单片机  音乐盒  按键 手机看文章 扫描二维码
随时随地手机看文章

功能介绍:


本设计采用STC89C51/52(与AT89C51/52、AT89S51/52通用,指定单片机请留言)单片机做为主控制器


主要功能:


单片机内置8首歌曲,按键可以上一曲,下一曲,开始或暂停。电位器可以调节音量。LM386驱动喇叭,够响亮!

使用说明:


一共4个按键
上面那个独立的是复位按键,按下去程序从头执行,详情请看视频讲解文件夹中的最小系统介绍。
下面3个按键分别是:上一曲、开始/暂停、下一曲。


单片机源程序如下:

//////////////////////////////////////////////

//51单片机音乐播放器程序                                        //

//共三个按键:上一曲、下一曲、播放暂停                //

//播放完一首歌曲无按键按下时顺序播放下一曲        //

//////////////////////////////////////////////

#include

//#define sound_amount 5 //歌曲的数量

sbit play_up=P1^3;           //上一首歌

sbit play_down=P3^5;   //下一首歌

sbit pause=P3^2;       //播放暂停

sbit speaker=P1^0;     //无源蜂鸣器

//////////////////////////////////////////////

unsigned char timer0h,timer0l,time;//timer0h,timer0l为定时器T0的高低位初值,time为对应的节拍时间

unsigned char music_num;       //music_num为歌曲编号,music_num=0表示刚开机时的状态,num是查找歌曲数据表的地址

unsigned int num;

signed int 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,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 

         5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 

         3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 

         2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 

         1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1, 

         2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2, 

         2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1, 

         7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1, 

         6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2, 

         5,1,2, 6,1,6, 0,0,0 };


//《发如雪》

unsigned char code song2[]={

     5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1, 

         3,2,1, 6,2,1, 5,2,1, 3,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 5,2,1, 

         3,2,1, 5,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 1,2,1, 6,1,1, 3,2,1, 2,2,1, 

         5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1, 

         3,2,1, 6,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 

         5,2,1, 3,2,1, 5,2,1, 3,2,2, 1,2,1, 6,1,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 

         1,2,1, 2,2,1, 2,2,1, 1,2,4, 0,0,0 };


//《简单爱》

unsigned char code song3[]={

     5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1, 

         4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 

         5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1, 

         3,2,1, 3,2,1, 1,2,1, 5,2,1, 1,2,1, 5,2,1, 1,2,1, 7,1,1, 1,2,1, 1,2,1, 6,1,1, 

         2,2,1, 2,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,1, 

         5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2,  

         5,1,1, 1,2,1, 2,1,2, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1, 

         4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 

         5,2,1, 5,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1, 

         3,2,1, 3,2,1, 1,2,2, 5,2,1, 1,2,1, 5,2,1, 5,2,1, 7,1,1, 1,2,1, 0,0,0 };


//《世上只有妈妈好》

unsigned char code song4[]={

     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个半拍;

         //...

     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};


//《当你孤单你会想起谁》

unsigned char code song5[]={

     3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1,  2,2,2, 5,2,2, 2,2,2, 2,2,3,

         1,2,2, 1,2,1, 2,2,1, 1,2,2, 7,1,1, 6,1,1, 7,1,2, 3,2,2, 7,1,2, 7,1,3, 

         6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1, 

         1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6, 0,0,0 };


//《乡间小路》

unsigned char code song6[]={

     3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,

     6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1, 

     2,1,2, 2,1,1, 3,1,1, 2,1,4, 3,1,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2,

     4,1,2, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 7,0,1, 7,0,1, 7,0,1, 6,0,1, 

     5,0,1, 5,0,1, 6,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 6,0,4, 6,1,2,

     3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1, 

     6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1, 

     3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1, 

         6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0};     


//《送别》

unsigned char code song7[]={

     5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2, 

     5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2, 

         3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1, 

         3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1,

         7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1, 

         1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 

         5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0};


//《最浪漫的事》

unsigned char code song8[]={

     5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 3,1,1, 5,1,5, 

         5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 6,1,1, 1,1,5, 

         1,1,1, 2,1,1, 3,1,1, 2,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 6,1,1, 

         3,1,2, 2,1,3, 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 

         6,1,1, 1,1,5, 1,1,1, 2,1,1, 3,1,1, 4,1,2, 4,1,1, 5,1,1, 6,1,1, 6,1,1, 

         5,1,1, 6,1,2, 1,2,1, 6,1,3, 1,2,1, 6,1,1, 5,1,1, 5,1,4, 1,1,1, 6,1,1, 

         5,1,5, 5,1,1, 6,1,1, 1,2,1, 3,1,1, 2,1,1, 3,1,1, 1,1,6, 0,0,0}; 


// 频率-半周期数据表 高八位  共保存了四个八度的28个频率数据

unsigned char code FREQH[]={

    0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音1234567

    0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i

    0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 234567

    0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567


// 频率-半周期数据表 低八位

unsigned char code FREQL[]={

    0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567

    0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i

    0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567

    0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567  

void KEY()

{

        if(!pause)                //暂停键处理

                {

                delayms(5);

                if(!pause)

                {

                        TR0=0;

                        speaker=1;

                        if(music_num==0)    //music_num=0只有在刚开机,且未按下暂停键时存在,表示刚开机时的状态,按下后从第一首开始播放

                        {

                                music_num=1;    //歌曲序号置1

                                num=0;                //从头播放

                                play_enable=1;        //允许播放

[1] [2] [3]
关键字:51单片机  音乐盒  按键 引用地址:51单片机音乐盒设计 按键可以上一曲,下一曲,开始或暂停

上一篇:单片机6位数电子密码锁源码+PCB+仿真原理图设计(可改密码
下一篇:最后一页

推荐阅读

集微网消息(文/春夏)11月10日,河南省智能传感器创新联盟成立大会暨河南分联盟、河南省智能传感器创新中心授牌仪式在郑州大学举行,汉威科技集团股份有限公司董事长任红军先生等人被聘为联盟第一届理事会副理事长。        据郑视新闻报道,河南省智能传感器创新联盟由郑州大学、河南工业大学、中国电子科技集团公司第二十七研究所、汉威科技集...
本章介绍STM8L051F3的GPIO相关知识。内容分为以下几部分:GPIO简介点亮LED1、GPIO简介GPIO:通用输入/输出口,用于芯片与外部进行数据传输;STM8L051F3的一个I/O端口最多可以有8个Pins(引脚),每个引脚可以独立地配置为数字输入或数字输出。此外,一些I/O端口可能有一些复用功能如模拟输入、外部中断、片上外设的输入输出等,一个引脚不能同时使用多种复...
据外媒报道,美国Nuvera燃料电池公司推出全新E-45氢燃料电池发动机,可用作中型和重型商用车的主要动力,或与电池动力混合使用,以增加行驶里程。该公司计划首先在美国生产该系统,随后在中国生产。(图片来源:nuvera)该公司表示,这一新燃料电池系统可以满足不同移动出行市场的要求,能够无缝集成至现有平台中,适用于电动送货车、公共汽车,以及堆置场...
广告摘要声明广告撰文 | 石头据高工机器人不完全统计,2021年10月机器人行业融资事件仅12起,较上月有所回落,环比下降52%。其中,过亿元融资5起,主要聚焦于服务机器人、手术机器人领域。值得一提的是,与往月相比,资本对于火热的移动机器人赛道,如工业AMR/AGV热度有所下降。在融资轮次来看,天使轮2起,A轮相关5起,B轮2起,C轮相关2起等,其中,优...

史海拾趣

问答坊 | AI 解惑

芯片封装技术简述

【来源:电子技术信息网】 自从美国Intel公司1971年设计制造出4位微处a理器芯片以来,在20多年时间内,CPU从Intel4004、80286、80386、80486发展到Pentium和PentiumⅡ,数位从4位、8位、16位、32位发展到64位;主频从几兆到今天的400MHz以上 ...…

查看全部问答∨

汽车智能MP3无线发射器的设计

引言     汽车MP3无线发射器可以将MP3播放器内存储的音乐通过FM广播方式发送,再通过FM调频收音机接收,通过汽车音响播放。本文采用单片机AT89C52及数字锁相环MC145152等芯片设计了汽车MP3无线发射器,从仿真结果与目标样机的 ...…

查看全部问答∨

LLC谐振原理PDF

LLC谐振的原理介绍,很基础,易懂。…

查看全部问答∨

关于数码管连接问题

我买了单个的数码管,每个上面有10个引脚,不知道怎么连接,请求帮助。最好有电路图。 谢谢~…

查看全部问答∨

一个DSP算法的研发

小弟初学DSP,在做一个项目,算法是将一组数据经过处理之后仅留下几个数据。算法已用C语言实现,而且直接将C语言程序移植到CCS上程序都能通过,且结果正确。但下一步该怎么做就不明白,是买板子在硬件上调试吗?如果是的话,还请各位大侠推荐一个较 ...…

查看全部问答∨

请教MSP430F5528 ?~

请问有啊位大侠用过MSP430F5528这款~性能、稳定性怎样?是否能跟F149共用仿真机?~…

查看全部问答∨

LM3S9B96芯片 建议

网上搜了一下,对于我来说比较有吸引力的有以下几点: 1、内嵌SafeRTOS内核2、8/16/32位独立外设并行总线3、支持SDRAM、SRAM/Flash、FPGA、CPLD4、IEEE1588精密时间协议(PTP)硬件支持的10/100以太网 MAC/PHY5、先进的运动控制 (这个目前用不到 ...…

查看全部问答∨

MSP430G2231无法进入P1口外部中断

求帮忙!!!为什么我的LAUNCHPAD 进不了P1口的外部中断程序?? P1口中断和全局中断全部都打开了 部分程序如下: ..........  P1DIR &= ~BIT3; P1DIR &= ~BIT4; P1DIR &= ~BIT5; P1DIR &= ~BIT7; P1OUT |= B ...…

查看全部问答∨

adc时钟

adc时钟里面有个uclk,是指哪个时钟?还有他的采样周期怎么算,shot哪个怎么算  谢谢…

查看全部问答∨

【C2000 LaunchPad】单相交流电压+电流表__工程创建篇

总贴位置:https://bbs.eeworld.com.cn/viewthread.php?tid=369113&page=1&extra=page%3D2#pid1466612         【C2000 LaunchPad】单相交流电压+电流表      以前一直用CCS3.3。最近装了个 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved