EXP30_单片机演奏音乐实验

合集下载

单片机 利用蜂鸣器演奏音乐

单片机 利用蜂鸣器演奏音乐

实验三-操纵蜂鸣器演奏音乐之青柳念文创作一、实验目标二、实验硬件设计及电路1. BlueSkyC51单片机实验板三极管主要是做驱动用的.因为单片机的IO口驱动才能不敷让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电畅通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音.三、实验原理用一个口,输出方波,这个方波输入进蜂鸣器就会发生声音,通过节制方波的频率、时间,就可以发生简单的音乐.一般说来,单片机演奏音乐基本都是单音频率,因此单片机奏乐只需节制音调和节拍.(1)音调的确定音调是由频率来确定的.通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口往返取反,从而让蜂鸣器发出分歧频率的声音.只需将定时器给以分歧的定时值便可实现.通过延时,即可发出所需要的频率.(2)节拍的确定一拍的时长大约为400—500ms,每一个音符的时长通过节拍来计算.详细见程序代码.(1)头文件#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned long(2)歌曲曲谱uchar code diaodata[30]={ //音调代码0x10,0x0e,0x0c,0x10,0x0e,0x0c,0x10,0x0e,0x10,0x0c,0x10,0x15,0x13,0x10,0x13,0x15,0x15,0x13,0x15,0x13,0x10,0x0e,0x0c,0x0e,0x0e,0x10,0x0e,0x0c,0x0e,0x00};uchar code jiedata[30]={ //音长代码0x04,0x04,0x08,0x06,0x02,0x08,0x04,0x04,0x04,0x04,0x02,0x06,0x08,0x02,0x02,0x04,0x04,0x04,0x04,0x08,0x02,0x02,0x04,0x04,0x02,0x02,0x04,0x04,0x0c,0x00};(3)音阶表uchar code freq[36*2]={ //音阶码表0xf8,0x50, //466hz , 1# //1 0xf8,0xbc, //494hz , 2 //2 0xf9,0x26, //524hz , 2# //3 0xf9,0x85, //554hz , 3 //4 0xf9,0xe5, //588hz , 4 //5 0xfa,0x3d, //622hz , 4# //6 0xfa,0x92, //660hz , 5 //7 0xfa,0xdd, //698hz , 5# //8 0xfb,0x29, //740hz , 6 //9 0xfb,0x70, //784hz , 6# //10 0xfb,0xb0, //830hz , 7 //11 0xfb,0xef, //880hz , 1 //12 0xfc,0x29, //932hz , 1# //13 0xfc,0x62, //988hz , 2 //14 0xfc,0x95, //1046hz, 2# //15 0xfc,0xc7, //1108hz, 3 //16 0xfc,0xf5, //1174hz, 4 //17 0xfd,0x20, //1244hz, 4# //18 0xfd,0x4c, //1318hz, 5 //19 0xfd,0x72, //1396hz, 5# //20 0xfd,0x97, //1480hz, 6 //210xfd,0xdc, //1662hz, 7 //230xfd,0xfb, //1769hz, `1 //240xfe,0x18, //1864hz, `1# //250xfe,0x34, //1976hz, `2 //260xfe,0x4e, //2092hz, `2# //270xfe,0x67, //2218hz, `3 //280xfe,0x7d, //2350hz, `4 //290xfe,0x94, //2488hz, `4# //300xfe,0xa8, //2639hz, `5 //310xfe,0xbc, //2794hz, `5# //320xfe,0xcf, //2960hz, `6 //330xfe,0xe0, //3136hz, `6# //340xfe,0xf1, //3322hz, `7 //35};(4)音符发生程序(中断服务程序)void timer0() interrupt 1 //用于发生音符的T0中断服务程序{TH0=th0_f;TL0=tl0_f;beep=~beep; //取反beep引脚,发声}三、实验过程及问题(1)新建“Project”,选择单片机为“AT89C52”(2)新建c文件“music.c”,并添加到工程中(3)设置生成“HEX”文件,编译(4)将生成的“HEX”文件烧录到单片机,检验(5)不竭修改完善(1)实际发音颤音重处理方法为修改蜂鸣器的驱动频率.(2)实际节拍过快或者过慢调整延时四、C51程序代码(部分来历于网络)#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longuchar th0_f; //中断装载T0高8位uchar tl0_f; //T0低8位uchar code freq[36*2]={ //音阶码表0xf7,0xd8, //440hz , 1 //00xf8,0x50, //466hz , 1# //10xf8,0xbc, //494hz , 2 //20xf9,0x26, //524hz , 2# //3 0xf9,0x85, //554hz , 3 //4 0xf9,0xe5, //588hz , 4 //5 0xfa,0x3d, //622hz , 4# //6 0xfa,0x92, //660hz , 5 //7 0xfa,0xdd, //698hz , 5# //8 0xfb,0x29, //740hz , 6 //9 0xfb,0x70, //784hz , 6# //10 0xfb,0xb0, //830hz , 7 //11 0xfb,0xef, //880hz , 1 //12 0xfc,0x29, //932hz , 1# //13 0xfc,0x62, //988hz , 2 //14 0xfc,0x95, //1046hz, 2# //15 0xfc,0xc7, //1108hz, 3 //16 0xfc,0xf5, //1174hz, 4 //17 0xfd,0x20, //1244hz, 4# //18 0xfd,0x4c, //1318hz, 5 //19 0xfd,0x72, //1396hz, 5# //20 0xfd,0x97, //1480hz, 6 //21 0xfd,0xbb, //1568hz, 6# //22 0xfd,0xdc, //1662hz, 7 //23 0xfd,0xfb, //1769hz, `1 //240xfe,0x18, //1864hz, `1# //250xfe,0x34, //1976hz, `2 //260xfe,0x4e, //2092hz, `2# //270xfe,0x67, //2218hz, `3 //280xfe,0x7d, //2350hz, `4 //290xfe,0x94, //2488hz, `4# //300xfe,0xa8, //2639hz, `5 //310xfe,0xbc, //2794hz, `5# //320xfe,0xcf, //2960hz, `6 //330xfe,0xe0, //3136hz, `6# //340xfe,0xf1, //3322hz, `7 //35};uchar code diaodata[30]={ //音调代码0x10,0x0e,0x0c,0x10,0x0e,0x0c,0x10,0x0e,0x10,0x0c,0x10,0x15,0x13,0x10,0x13,0x15,0x15,0x13,0x15,0x13,0x10,0x0e,0x0c,0x0e,0x0e,0x10,0x0e,0x0c,0x0e,0x00};uchar code jiedata[30]={ //音长代码0x04,0x04,0x08,0x06,0x02,0x08,0x04,0x04,0x04,0x04,0x02,0x06,0x08,0x02,0x02,0x04,0x04,0x04,0x04,0x08,0x02,0x02,0x04,0x04,0x02,0x02,0x04,0x04,0x0c,0x00};void timer0() interrupt 1 //用于发生音符的T0中断服务程序{TH0=th0_f;TL0=tl0_f;beep=~beep; //取反beep引脚,发声}void main(void){uchari,j,k=0;uint n;TMOD=0X01; //T0方式1TR0=0; //关闭T0(不发声)ET0=1; //允许T0中断EA=1; //允许总中断while(1){TR0=1; //开T0for(i=0;diaodata[i]!=0;i++){th0_f=freq[diaodata[i]*2];tl0_f=freq[diaodata[i]*2+1];for(j=0;j<20000;n++);//(jiedata*20000)TR0=0;for(n=0;n<256;n++); //音符之间的短暂延时TR0=1;}TR0=0;}}。

单片机课程设计音乐播放器报告

单片机课程设计音乐播放器报告

中州大学《单片机》课程设计报告报告题目:音乐播放器作者所在系部:工程技术学院作者所在专业:电气自动化作者所在班级:B10204作者姓名:张强作者学号:20104020416指导教师姓名:雷刚完成时间:2014年10月12日课程设计任务书课题名称音乐播放器的设计完成时间 6.12 指导教师王晓职称副教授学生姓名张婷班级B10204总体设计要求和技术要点利用单片机设计一个音乐播放器,并能够播放三种音乐,音乐自行设计。

一、设计目的1.掌握单片机定时器的使用方法2.掌握单片机扩展显示器、键盘的方法二、技术指标1.键盘设置3种音乐的播放切换;2.LED显示3种音乐的提示符;3. 流水灯闪烁工作内容及时间进度安排第14周:周1到周2查阅资料,确定设计方案周3到周4编写程序并进行proteus仿真周5焊接调试第17周:周1撰写实验报告周2验收课程设计成果1.与设计内容对应的软件程序与焊接实物2.课程设计报告书内容摘要本文的主要内容是用AT89C52单片机为核心控制元件,设计一个音乐播放器,以单片机作为主控核心、蜂鸣器等模块组成。

利用单片机产生不同频率来获得要求的音阶,最终可随意编写需要的程序,播放出音乐。

在此设计中我采用12MHz的晶振,产生的频率信号即音乐信号由P3.7口输出,信号经过放大后由喇叭发出声音。

设有四个按键,其中两个能实现多首音乐的选择,另一个能实现开始功能和单曲重播的功能,最后一个能实现复位和关闭歌曲的功能。

设有一位数码管,每选择一首曲子能在数码管上显示当前的曲目(只是数字)。

设十六个发光二极管,能随歌曲频率闪烁。

关键字:单片机音乐不同频率按键目录一、概述 (1)二、方案设计与论证 (1)1.硬件设计 (1)2.软件设计 (2)三、单元电路设计与分析 (3)1.单片机最小系统 (3)2. 数码管显示 (4)3.发光二级管和按键 (4)4.蜂鸣器发声 (5)5.软件部分程序和流程图 (5)四、总原理图及元器件清单 (11)1.总原理图 (11)2元器件清单 (11)五、结论 (12)六、心得体会 (12)七、参考文献 (12)一、概述作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括“Do“、“Re“、“Me“--等音阶在内的各种频率声音。

单片机演奏音乐实验

单片机演奏音乐实验

单片机演奏音乐实验
利用单片机演奏音乐大概是单片机爱好者感兴趣的问题之一。

这里我们用
网站提供的实验板来做这个实验,并且了解单片机演奏音乐的基本原理,和相
关的源程序。

首先来完成必要的硬件部分,硬件部分比较简单,如下图:
AT89C51单片机的P2.5口控制一个8550的三极管,三极管控制电磁蜂鸣器的电源通断。

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处
机某个口线的高电平或低电平,则在该口线上就能产生一定频率的矩形波,接
上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续
时间,就能改变输出频率,从而改变音调。

例如,要产生200HZ的音频信号,200HZ音频的变化周期为1/200秒,即
5ms。

这样,当P2.5的高电平或低电平的持续时间为2.5ms时就能发出200HZ 的音调。

乐曲中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应
的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表
程序依次取出,产生音符并控制节奏,就可以实现演奏效果。

此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间
单位的频率略有不同的音符。

【免费下载】单片机音乐播放实验报告

【免费下载】单片机音乐播放实验报告

课程设计课程名称微机原理与单片机技术实践题目名称单片机制作与音乐播放学生学院自动化学院专业班级电子(2)学号学生姓名指导教师张学习2013年5 月24 日单片机制作与音乐播放一、课程设计的内容1.用面包板焊一块PIC单片机最小系统,包括晶振,复位电路,按钮,LED灯。

2.自主添加新模块。

3.写程序驱动单片机工作。

二、课程设计的要求与数据1.焊板所需原理图:复位晶振LED灯蜂鸣器2.音乐播放所需资料。

摘要:16F877A 单片机原理和控制理论来设计音乐盒的硬件电路,并利用16单片机语言进行程序设计。

通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音调的音乐,再利用延迟来控制发音时间的长短。

该程序通过把乐谱转化成相应的定时常数来驱动发音设备演奏出悦耳动听的音乐。

这种控制电路结构简单,可靠性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。

音乐产生的方法:一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

现在以单片机12MHZ 晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表4.1所示:表4.1 高中低音符与单片机计数T0相关的计数值音符对应的PR2值音符对应的PR2值M_1119M_2105M_394M_579M_670H_159L_5158L_6141如表4.2所示:音乐的音拍,一个节拍为单位(C 调)表4.2 音乐的音拍曲调值DELAY 曲调值DELAY 调4/4125ms 调4/462ms 调3/4187ms 调3/494ms 调2/4250ms 调2/4125ms对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

实验名称:单片机编程奏音乐“生日之歌”

实验名称:单片机编程奏音乐“生日之歌”

实验名称:单片机编程奏音乐“生日之歌”
一、实验电路
二、实验目的
掌握8051内部定时器的工作原理,通过编程并与音频放大电路相连,实现演奏音乐的功能
三、实验器材
(1)单片机CPU板
(2)运算放大器及音频放大实验板
(3)导线
四、实验要点
(1)按图连好线。

(2)要产生音频脉冲,只要算出某一音频的周期,然后将此周期除以2,即为板周期的时间。

利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O
反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率
的脉冲。

(3)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。

(4)计数脉冲值与频率的关系公式如下:
N=Fi÷2÷Fr N:计数值
Fi:内部计时一次为1μs,故其频率为1MHz
Fr::要产生的频率
(5)计数值的求法如下:
T=65536-N
(6)每个音符使用一个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时
间。

假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。

所以只要求得
1/4拍的DELAY时间,其余的节拍就是它的倍数。

单片机音乐播放课程设计

单片机音乐播放课程设计

单片机音乐播放课程设计一、课程目标知识目标:1. 学生能理解单片机的原理和基本结构,掌握音乐播放器的设计流程。

2. 学生能掌握音乐播放器编程的基本语法和逻辑,如音符的时长、音调控制等。

3. 学生能了解并运用数字信号处理基本概念,如采样、量化等,解释音乐播放过程。

技能目标:1. 学生能运用单片机开发环境进行音乐播放器的程序编写、调试与下载。

2. 学生能通过实验和项目实践,掌握音乐播放器硬件与软件的协同设计方法。

3. 学生能够独立或合作完成音乐播放器的制作,展示作品并进行简单的故障排查。

情感态度价值观目标:1. 学生培养对电子技术和编程的兴趣,激发创新意识和探索精神。

2. 学生通过实践,培养问题解决能力和团队协作能力,增强自信心。

3. 学生通过创作音乐播放器,体会技术对生活的影响,培养社会责任感。

课程性质分析:本课程为实践性强的单片机应用课程,结合了电子技术、编程和音乐知识,旨在培养学生的动手能力、创新思维和综合应用能力。

学生特点分析:假设学生为高中生,具有一定的物理电子知识基础,对编程有一定了解,对音乐有基本的感知能力。

教学要求:课程需注重理论与实践相结合,鼓励学生主动探索和动手实践,强调过程评价和成果评价相结合,确保学生达到预定的学习目标。

二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理,重点讲解AT89C51单片机的内部结构、引脚功能及其编程特性。

相关教材章节:第一章单片机概述。

2. 音乐播放器原理:讲解音乐播放器的基本原理,包括音符的生成、音调控制、节拍控制等。

相关教材章节:第三章数字信号处理基础。

3. 编程语言与开发环境:学习单片机编程语言(如C语言),熟悉Keil、Proteus等开发工具的使用。

相关教材章节:第二章单片机编程语言与开发环境。

4. 硬件电路设计:学习音乐播放器硬件电路的设计,包括单片机、音频放大器、扬声器等元件的选型和连接。

相关教材章节:第四章单片机外围电路设计。

如何让单片机演奏音乐

如何让单片机演奏音乐

88河南科技2011.03 下如何让单片机演奏音乐河南信息工程学校 李 峡分析图2可知,1KHz 的信号周期为1ms ,信号电平每0.5ms 取反1次,因此100ms 内信号电平要变化200次。

同理,500Hz 信号周期为2ms ,信号电平为每1ms 取反1次,200ms 内信号电平也要变化200次。

只要在单片机的I/O 口循环输出1KHz (持续100ms )和500Hz (持续200ms )的信号就可以了,输出信号时的持续时间可以用软件产生,也可以用定时/计数器产生。

以软件延时为例,可编程如下:MAIN: MOV R0, #DATA1 ;R0中存放循环次数DATA1,决定第1种音 频的持续时间LOOP1: CPL P1.0;输出取反,产生第1种音频信号LCALL DELAY1;DELAY1的延时时间决定第一种音频信号频率DJNZ R0, LOOP1;第1种音频信号持续一定时间,直到R0为0MOV R0, #DATA2 ;R0中存放循环次数DATA2,决定第2种音频的持续 时间LOOP2: CPL P1.0;输出取反,产生第2种音频信号LCALL DELAY2;DELAY2的延时时间决定第2种音频信号的频率DJNZ R0, LOOP2;第2种音频信号持续一定时间,直到R0为0LJMP MAIN;依次循环以上程序段中DELAY1、DELAY2为延时子程序,只要让DA-LAY1的延时时间为0.5ms ,让DALAY2的延时时间为1ms ,每次向R0中存放循环次数200,即可得到图2所示的双音频信号。

修改DE-LAY1、DELAY2,可以改变2种音频信号的频率;而改变R0的值,则可以改变每种音频持续的时间。

三、让单片机演奏一首乐曲要想让单片机演奏乐曲,首先要了解一些简单的乐理知识,这样才能进行编程。

所有音乐都由4个基本要素构成,即音的高低、音的长短、音的力度和音质,而其中最重要的是“音的高低”和“音的长短”。

单片机音乐播放实验报告

单片机音乐播放实验报告

课程设计课程名称微机原理与单片机技术实践题目名称单片机制作与音乐播放学生学院自动化学院专业级电子产品学生卡学生指导教师学习MCU制作和音乐播放课程设计的内容1. 使用面包板焊接PIC单片机的最小系统,包括晶振、复位电路、按键、LED灯。

2.独立添加新模块。

3、编写程序驱动单片机工作。

2. 课程设计要求和数据1、焊板所需原理图:复位晶振LED灯蜂鸣器2. 音乐播放所需的信息。

摘要:利用16F877A 单片机原理和控制原理设计了八音盒的硬件电路,并使用16位单片机语言进行编程。

通过控制单片机的定时器产生不同频率的方波,驱动扬声器发出不同音调的音乐,然后利用延时来控制发声时间的长短。

该程序通过将乐谱转换为相应的时间常数来驱动发声设备播放悦耳的音乐。

这种控制电路结构简单,可靠性高,适用性强;软件程序适应范围广,只需要针对不同的音乐改变相应的定时常数即可。

音乐是如何产生的:一首音乐是由许多不同的音阶组成的,每个音阶对应不同的频率,这样我们就可以利用不同频率的组合来形成我们想要的音乐。

频率很方便。

我们可以使用微控制器的定时器/计数器T0来产生这样的方波频率信号。

因此,我们只需要修正一首歌曲的音阶之间的频率关系。

现在以单片机的12MHZ 晶振为例,单片机的高、中、低音符相关的计数值和计数T0如下表4.1所示:表 4.1 与单片机计数 T0 相关的高、中、低音符的计数值笔记对应PR2值 笔记 对应PR2值 M_1119 M_2 105 M_394 M_5 79 M_670 H_1 59 L_5 158 L_6 141如表4.2:音乐的节拍,一拍为单位(C 键)表 4.2 音乐节拍 调整值延迟 调整值 延迟 调4/4125毫秒 调4/4 62毫秒 调3/4187毫秒 调3/4 94 毫秒 调2/4250毫秒 调2/4 125毫秒对于不同的曲调,我们也可以使用单片机的另一个定时器/计数器来完成。

代码的发音部分在程序中实现,由单片机的一个引脚输出。

单片机实现电子琴并可播放歌曲

单片机实现电子琴并可播放歌曲
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8e};
//中音1-7和高音1-7对应频率列表
uint16 code NoteFrequ[] = {
523,587,659,698,784,880,988, //中音1-7
for(i=0;i<4;i++)
{
P2=buff[i];
temp=P2;
temp&=0xf0;//取P2的高四位;
while(temp!=0xf0)
{
delay5ms(5);//延时5ms去除抖动;
temp=P2;
temp&=0xf0;
while(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=i*4+0;break;//获取键值;
}
if(num==8)
{
T0LoadH = 0xff;
T0LoadL = 0x00;
TR0 = 1;
flag = 0;
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
P0 = 0x00;
for(i=0;i<10000;i++);//闪烁灯全亮
PlayTwoTiger();
}
}
void PlayTwoTiger()
//计算发生时间,为总时间的0.75
/***********去除抖动********************/
while(temp!=0xf0)
{
temp=P2;

单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用实现简单的音乐播放功能单片机音乐播放器应用音乐是人们生活中不可或缺的一部分,而在现代科技的不断发展下,单片机音乐播放器应用已经成为许多人追求的目标。

本文将介绍如何实现一个简单的单片机音乐播放器功能,让您能够轻松享受音乐的魅力。

一、硬件准备在开始之前,我们需要准备一些硬件设备,以确保音乐播放器能够正常工作。

首先,我们需要一块单片机开发板,例如STC89C52,这是一款常用的单片机开发板;其次,我们需要一个音频解码模块,例如DFPlayer Mini,他可以轻松解码并播放存储卡上的音乐文件;最后,我们还需要一个音箱或者耳机,用于输出音乐。

二、软件编程1. 搭建开发环境首先,我们需要安装MIDE-51集成开发环境,它是STC89C52单片机所使用的开发工具。

安装完成后,可以通过打开MIDE-51来创建一个新的工程。

2. 编写代码首先,我们需要在代码中包含一些必要的库文件,以便使用一些功能函数。

例如,我们可以通过以下代码片段引入DFPlayer Mini音频库文件:```c#include <DFPlayer_Mini_Mp3.h>```接下来,我们可以通过定义一些常量或变量来控制音乐的播放,例如:```cconst int playButton = 2; // 播放按钮连接到单片机的2号引脚const int nextButton = 3; // 下一首按钮连接到单片机的3号引脚const int previousButton = 4; // 上一首按钮连接到单片机的4号引脚```然后,我们可以在主循环中不断检测按钮的状态,并根据按钮的状态来控制音乐的播放:```cvoid loop() {if (digitalRead(playButton) == HIGH) { // 如果播放按钮被按下DFPlayer_Mini_Mp3.play(); // 播放音乐}if (digitalRead(nextButton) == HIGH) { // 如果下一首按钮被按下 DFPlayer_Mini_Mp3.next(); // 播放下一首音乐}if (digitalRead(previousButton) == HIGH) { // 如果上一首按钮被按下DFPlayer_Mini_Mp3.previous(); // 播放上一首音乐}}```通过上述代码,我们可以实现简单的音乐播放功能。

单片机音乐实训报告

单片机音乐实训报告

一、实训目的1.了解实验系统发出不同音调的编程方法2.学习外部中断技术的基本使用方法和编程方法3.通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力二、实训内容及步骤1.内容利用定时器产生不同频率的方法,组成乐谱由单片机进行信息处理,经过放大利用8032 p1.0口输出歌曲。

当外部中断0脉冲到来后,播放下一首歌;当外部中断1到来后,播放最后一首歌。

2.步骤(1)把程序送到实验系统上(2)把P1.0用连线连至“音响与合成”框LM386的VINI插孔上(3)用一根试验线一端连接脉冲源IM插孔,另一端碰一下P3.2,放下一首歌;用一根试验线一端连接脉冲源IM插孔,另一端碰一下P3.3,播放最后一首歌。

三、流程图及原理图图1 流程图图1 原理图四、源程序OUT BIT P1.0NEXTSONG BIT P3.2LASTSONG BIT P3.3PLAY BIT P3.4SONGNUM EQU 40HORG 0000HAJMP STARTORG 0003HAJMP zhongduan0ORG 000BHAJMP TIMEORG 0013HAJMP zhongduan1ORG 0100HSTART: MOV SONGNUM,#0MOV 50H,#0MOV TMOD,#01HSETB EASETB ET0SETB IT0SETB IT1SETB EX0SETB EX1SETB PX0SETB PX1START0:MOV 30H,#0 NEXT:ACALL SON MOV A,30HMOVC A,@A+DPTR MOV R2,AJZ START0ANL A,#0FHMOV R5,AMOV A,R2SWAP AANL A,#0FHJNZ SINGCLR TR0AJMP SING1SING: DEC AMOV 60H,AMOV A,SONGNUM CJNE A,#0,SHIJIAN MOV 50H,#2AJMP JKSHIJIAN: MOV 50H,#4 JK: MOV A,60HADD A,50HMOV 22H,ARL AMOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV TH0,AMOV 21H,AMOV A,22HRL AINC AMOVC A,@A+DPTR MOV TL0,AMOV 20H,ASETB TR0SING1: LCALL DELAY INC 30HAJMP NEXTSON:MOV A,SONGNUM SON0: CJNE A,#0,KON MOV DPTR,#SONG0 RETKON:CJNE A,#10,SON1MOV DPTR,#KONGRETSON1: CJNE A,#1,SON2MOV DPTR,#SONG1RETSON2: CJNE A,#2,SON3MOV DPTR,#SONG2RETSON3: CJNE A,#3,SON4MOV DPTR,#SONG3RETSON4: CJNE A,#4,SON5MOV DPTR,#SONG4RETSON5: CJNE A,#5,SON6MOV DPTR,#SONG5RETSON6: CJNE A,#6,SON7MOV DPTR,#SONG6RETSON7: CJNE A,#7,SON8MOV DPTR,#SONG7RETSON8: CJNE A,#8,SON9MOV DPTR,#SONG8RETSON9: MOV DPTR,#SONG9 RETzhongduan0: CLR EX0PUSH ACCPUSH PSWACALL DELAY0JB NEXTSONG,TO1 ;P3.2 K1: MOV A,SONGNUMINC AMOV SONGNUM,ACJNE A,#11,TOE0MOV SONGNUM,#0TOE0:ACALL DISPMOV 30H,#0TO1: POP PSWPOP ACCSETB EX0RETIzhongduan1: CLR EX1PUSH ACCPUSH PSWACALL DELAY0JB LASTSONG,TO2 ;P3.3 JNB PLAY,K3 ;P3.4 K2: MOV A,SONGNUMDEC AMOV SONGNUM,ACJNE A,#0FFH,TOE1AJMP TOE1K3: ACALL DELAY0CPL TR0TOE1: ACALL DISPMOV 30H,#0TO2: POP PSWPOP ACCSETB EX1RETITIME: PUSH ACCPUSH PSWMOV TL0,20HMOV TH0,21HCPL OUTPOP PSWPOP ACCRETIDISP:PUSH DPLPUSH DPHMOV A,SONGNUMMOV DPTR,#TABMOVC A,@A+DPTRMOV P1,ACLR P2.0POP DPHPOP DPLRETDELAY0:MOV R6,#200MOV R1,#250DJNZ R1,$DJNZ R6,$-4RETDELAY:MOV R7,#2D2: MOV R4,#155D3: MOV R3,#248DJNZ R3,$DJNZ R4,D3DJNZ R7,D2DJNZ R5,DELAYRETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H;0-9"灭" TABLE1:DW 63628,63835,64021,64103,64260,64400,64524 ;低音1234567 DW 64580,64684,64777,64820,64898,64968,65030 ;中音1234567DW 65058,65110,65157,65178,65217,65252,65282 ;高音1234567 SONG0:DB 42H,82H,82H,82H,86H,72H,63H,71H,62H,52H,48HDB 0B2H,0B2H,0B2H,0B2H,0B6H,0A2HDB 83H,0A1H,0A2H,92H,88H,82H,0B2H,0B2H,0A2H,86H,72HDB 63H,71H,62H,52H,44H,12H,02HDB 12H,62H,62H,52H,46H,82H,73H,61H,52H,32H,48HDB 00HSONG1:DB 44H,54H,64H,44HDB 44H,54H,64H,44HDB 64H,74H,88HDB 64H,74H,88HDB 82H,92H,82H,72H,64H,44HDB 82H,92H,82H,72H,64H,44HDB 54H,14H,48HDB 54H,14H,48HDB 00HSONG2:DB 82H,01H,81H,94H,84HDB 0B4H,0A4H,04HDB 82H,01H,81H,94,84HDB 0C4H,0B4H,04HDB 82H,01H,81H,0F4H,0D4HDB 0B4H,0A4H,94H,04HDB 0E2H,01H,0E1H,0D4H,0B4HDB 0C4H,0B4H,04HDB 00HSONG3:DB 62H,82H,82H,62H,98HDB 92H,0B2H,0B2H,82H,98HDB 62H,82H,82H,52H,68HDB 92H,0B2H,0B2H,82H,92H,92H,94HDB 92H,0B2H,0B2H,92H,84H,94HDB 0B8H,0B2H,04HDB 00HSONG4:DB 84H,02H,82H,64H,54HDB 64H,54H,48HDB 64H,02H,52H,44H,24HDB 14H,24H,18HDB 84H,94H,88HDB 64H,54H,68HDB 84H,64H,54H,44HDB 52H,42H,52H,62H,48HDB 00HSONG3:DB 62H,52H,64H,04HDB 52H,62H,52H,44H,04HDB 22H,42H,54,64H,52H,42H,22H,42H,14H,04HDB 62H,52H,64H,04HDB 52H,62H,52H,44H,04HDB 22H,42H,54H,64H,52H,42H,22H,42H,54H,04HDB 62H,52H,64H,04HDB 52H,62H,52H,44H,04HDB 22H,42H,54H,64H,52H,42H,22H,42H,14H,04HDB 62H,82H,84H,04HDB 82H,92H,82H,64H,04HDB 52H,62H,54H,64H,52H,42H,22H,42H,44H,04HDB 82H,82H,92H,0B2H,0A2H,92H,62H,52H,52H,66H,04HDB 62H,62H,82H,94H,94H,22H,62H,56H,04HDB 62H,82H,82H,62H,84H,04HDB 0B4H,0A2H,92H,0A2H,64H,04HDB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04HDB 82H,82H,92H,0B2H,0A2H,0A2H,92H,62H,52H,52H,66H,04HDB 62H,62H,82H,94H,94H,22H,62H,56H,04HDB 62H,82H,82H,62H,84H,04HDB 0B4H,0A2H,92H,0A2H,64H,04HDB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04HDB 62H,82H,82H,62H,84H,04HDB 0B4H,0A2H,92H,0A2H,64H,04HDB 92H,92H,0A2H,92H,82H,62H,53H,63H,53H,84H,04HDB 00HSONG5:DB 84H,82H,82H,82H,0B2H,0B2H,82H,0C3H,82H,84H,0B2H,0A2H,0A2H,93H,04H DB 94H,92H,82H,82H,63H,62H,62H,52H,52H,42H,44H,04HDB 62H,52H,52H,42H,84H,04HDB 92H,82H,84H,82H,63H,04HDB 84H,82H,82H,82H,0B2H,0B2H,82H,0C2H,0C3H,83H,04HDB 84H,0B2H,0A2H,0A2H,93H,94H,82H,92H,82H,63H,04HDB 52H,62H,52H,62H,44H,04HDB 14H,62H,52H,52H,42H,54H,42H,44H,04HDB 0A2H,0B2H,0A2H,63H,04HDB 0A2H,0B2H,0A2H,63H,04HDB 0D2H,0C2H,0C2H,0B2H,0C2H,0B2H,0B2H,0B2H,94H,84H,94H,64H,04HDB 64H,62H,52H,52H,41H,44H,04HDB 64H,62H,52H,52H,42H,84H,04HDB 84H,92H,82H,92H,83H,63H,04HDB 0A2H,0B2H,0A2H,63H,04HDB 0A2H,0B2H,0A2H,63H,04HDB0D2H,0C2H,0C2H,0B2H,0D2H,0C2H,0C2H,0B2H,0C2H,0C2H,0C4H,0E4H,64H,04HDB 0D4H,0C2H,0D2H,0C2H,0B2H,94H,04HDB 0D4H,0C2H,0D2H,0C2H,0B2H,0C4H,04HDB 0D4H,0C2H,0D2H,0C2H,0B2H,0C4H,0B4H,96H,04HDB 00HKONG: DB 04H,00HEND五、硬件安装与调试1.焊接注意事项焊接更是困难重重。

单片机音乐实训设计报告

单片机音乐实训设计报告

一、实训目的1. 熟悉单片机的结构和工作原理;2. 掌握单片机音乐播放器的硬件设计和软件编程;3. 培养动手能力和创新意识;4. 提高单片机应用系统的设计和实现能力。

二、实训内容1. 硬件设计(1)选择合适的单片机:本实训选用STC89C52RC单片机作为主控核心;(2)音频模块:选用压电式蜂鸣器作为音频输出设备;(3)存储模块:选用串行EEPROM(如AT24C02)存储音乐数据;(4)按键模块:选用独立按键或矩阵键盘作为用户输入设备;(5)显示模块:选用数码管或LCD显示当前播放曲目和状态。

2. 软件设计(1)音乐数据格式:采用PWM(脉冲宽度调制)信号生成不同频率的方波,模拟不同音调的音乐;(2)音乐播放控制:根据音乐数据生成PWM信号,驱动蜂鸣器播放音乐;(3)按键控制:通过按键实现歌曲切换、播放/暂停、音量调节等功能;(4)显示控制:显示当前播放曲目、状态等信息。

三、实训步骤1. 硬件电路搭建(1)根据设计要求,绘制电路原理图;(2)根据原理图,焊接电路板;(3)测试电路,确保电路功能正常。

2. 软件编程(1)编写初始化程序,设置单片机工作模式、端口状态等;(2)编写PWM生成程序,生成不同频率的方波;(3)编写音乐播放程序,根据音乐数据生成PWM信号,驱动蜂鸣器播放音乐;(4)编写按键控制程序,实现歌曲切换、播放/暂停、音量调节等功能;(5)编写显示控制程序,显示当前播放曲目、状态等信息。

3. 系统测试与调试(1)测试硬件电路,确保电路功能正常;(2)测试软件程序,确保程序功能正常;(3)调整程序参数,优化系统性能;(4)测试系统稳定性,确保系统长时间运行无故障。

四、实训成果1. 完成单片机音乐播放器硬件电路搭建;2. 编写并实现单片机音乐播放器软件程序;3. 通过测试,系统功能正常,稳定性良好。

五、实训心得1. 通过本次实训,掌握了单片机音乐播放器的硬件设计和软件编程;2. 提高了动手能力和创新意识,学会了如何将理论知识应用于实际项目中;3. 了解了单片机在音乐播放领域的应用,为今后从事相关领域工作打下了基础。

单片机音乐播放器课程设计总结

单片机音乐播放器课程设计总结
硬件设备
软件问题:编 写高效的程序 代码,优化算 法,提高运行
效率
兼容性问题: 确保播放器能 够兼容多种音 频格式和设备
用户体验问题: 优化用户界面, 提高易用性和
用户体验
经验教训
问题:硬件设计复杂,需要深入了解单片机原理 解决方案:查阅相关资料,请教专业老师 问题:软件编程难度大,需要掌握C语言和单片机编程技巧 解决方案:参加相关培训,实践操作,积累经验
词显示方式
音效调节:调节音效, 如低音、高音、环绕
声等
定时关闭:设置定时 关闭时间,到时间后
自动关闭播放器
音量控制功能
音量调节:通过按键或触摸屏调节音量大小 音量显示:在屏幕上显示当前音量值 音量记忆:保存用户设定的音量值,下次开机自动恢复 音量均衡:实现左右声道音量平衡,提高音质效果
歌曲切换功能
功能描述:用户可以通过按键或触摸屏等方式切换歌曲 实现方法:通过单片机控制音频解码芯片,实现歌曲的切换 技术难点:如何实现歌曲的平滑切换,避免出现声音中断或卡顿 解决方案:采用缓冲技术,提前加载下一首歌曲,实现无缝切换
其他附加功能
定时播放:设置播放时间,到时自动停止 音量调节:根据需要调整音量大小 歌曲切换:支持上一首、下一首、随机播放等功能 歌词显示:支持歌词同步显示,方便用户跟唱
对课程设计的建议
加强实践操作,提高动手能力 增加课程难度,提高挑战性 增加团队合作,提高沟通协作能力 增加课程内容,提高知识面和技能水平
感谢观看
汇报人:
06
课程设计的收获与展望
收获与体会
掌握了单片机的基本原理和编程方法 提高了硬件设计和调试能力 学会了如何将理论知识应用到实际项目中 增强了团队合作和沟通能力 对未来在电子领域的发展有了更清晰的认识和规划

单片机演奏简单的音乐

单片机演奏简单的音乐

为了让单片机演奏音乐,看了不少的资料,现在整理了相关的资料,让你一次看懂音调、节拍的确定方法,看懂简谱,懂得编写用来演奏音乐的程序。

单片机不能像其他的专业的乐器一样能奏出多种音色的声音,即不包含相应幅度的谐波频率。

单片机演奏的音乐基本都是点单音频率。

因此单片机演奏音乐比较简单,只需弄清楚“音调”和“节拍”两个概念即可。

音调表示一个音符唱的多高的频率。

节拍表示一个音符唱多长的时间。

那么音调、节拍该怎样确定呢?首先来看音调的确定:不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。

在音乐中常把五线谱中央C 上方的A 音定为标准音高,其频率f=440Hz。

当两个声音信号的频率相差一倍时,也即f2=2*f1时,则称f2比f1 高一个倍频程,例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。

在音乐学中称它相差一个八度音。

在一个八度音内,有12个半音。

以1—i 八音区为例,12 个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5 一#5、#5—6、6—#6、#6—7、7—i。

那些在它们的左上角加上﹟号或者b号的叫变化音。

﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。

这12 个音阶的分度基本上是以对数关系来划分的。

如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。

实验十单片机演奏乐曲实验 (1)

实验十单片机演奏乐曲实验 (1)

实验报告十一、实验目的1.、进一步掌握51单片机定时计数器、中断以及通过I/O口的综合应用2.、熟练掌握有多种中断源应用系统程序的编写和调试方法二、实验内容1、编程实现通过键盘选择演奏曲目,驱动实验板上的喇叭,完成乐曲的演奏。

2、完成该任务要求用两个定时器,一个负责控制发出音符对应频率信号,另一个负责控制每个音的持续时间(节拍),同时,要求外部中断接受用户用按键对乐曲选择,用一位数码管显示正在演奏的乐曲代号。

程序要求设计成能重复选择。

C调常用音频及其对应频率如下表:音符频率T值音符频率T值7SI 494 64603 5 So 784 649481 DO 523 64654 6 La 880 650122 Re 587 64751 7 Si 987 650693 Mi 659 64837 1 DO 1046 650954 Fa 698 64875 2 RE 1174 65143三、实验相关说明1、实验电路原理图开始中断初始化,TR0=0,TR1=0T1装50ms初值数码管显示歌曲代码,不选择则显示0Si按下?分离出第i首歌的音符跟音长T0装第i首歌音符初值TR0=1,TR1=1结束外部中断1流程图: T0中断流程图: T1中断流程图:实验程序:#include<reg52.h>#define TH (65536-46080)/256 //定时50ms 初值 #define TL (65536-46080)%256sbit s1=P3^4; //定义按键s1 sbit s2=P3^5; //定义按键s2 sbit buz=P2^5; //定义蜂鸣器 charled_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //七段数码管0~9的值 unsigned char codesong1[]={0x54,0x32,0x52,0x88,0x64,0x82,0x62,0x58,0x54,0x12, //送别音码表0x22,0x34,0x22,0x12,0x2c,0x54,0x32,0x52,0x84,0x74,0x64,0x84,0x58,0x54,0x22,0x23,0x44,0x74,0x1c,0x64,开始Si 按下?Flag_si=1,save=i结束开始TR0=0,buz=~buz 装第i 首歌第j 个音符初值第j 个音符时间到?j++,count=0TR0=1结束开始TR1=0装50ms 初值统计50ms 计数了多少次,每计数一次,count++TR1=1结束0x84,0x88,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x62,0x52,0x32,0x12,0x2c,0x54,0x32,0x52,0x84,0x74,0x64,0x84,0x58,0x54,0x22,0x32,0x44,0x74,0x1c,0x00};unsigned charsong2[]={0x01,0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x81,0x91,0x00}; //第二首歌音码表unsigned inthz[]={64603,64654,64751,64837,64876,64948,65012,65069,65095,65143};//各种音符计数初值int a=0,b=0; //a为音码表的高位,b为音码表的低位int k=0,j=0,count=0,flag_s1=0,flag_s2=0,save=0;void init(); //中断初始化void main(){P2=0x08; //关蜂鸣器P3=0x08; //键盘扫描init(); //中断初始化TH1=TH; //装50ms初值TL1=TL;while(1){P3=0x08; //键盘扫描P0=led_mod[save]; //显示歌曲代码if(k){if(k==1) //S1键按下{a=song1[j]/16;b=song1[j]%16;TH0=hz[a]/256; //装初值TL0=hz[a]%256;}if(k==2) //S2键按下{a=song2[j]/16;b=song2[j]%16;TH0=hz[a]/256; //装初值TL0=hz[a]%256;}k=0;TR0=1;TR1=1;}}}void init() //中断初始化程序{IE=0x8e;TCON=0x04;IP=0x04;TMOD=0x11;TR0=0;TR1=0;}void time1(void) interrupt 1 //TO中断{TR0=0;buz=~buz;if(flag_s1==1) //S1键按下{a=song1[j]/16;b=song1[j]%16;TH0=hz[a]/256; //装初值TL0=hz[a]%256;}if(flag_s2==1) //S2键按下{a=song2[j]/16;b=song2[j]%16;TH0=hz[a]/256; //装初值TL0=hz[a]%256;}if(count==5*b) //音长{count=0;j++;}if(a==0&&b==0) //歌唱结束{TR0=0;TR1=0;buz=0;return;}TR0=1;}void time2(void) interrupt 3 //T1中断子程序{TR1=0;TH1=TH; //装50ms初值TL1=TL;count++;TR1=1;}void keyscan(void) interrupt 2 //外部中断1{int t,i=0;EX1=0;t=500;while(t--); //延时去抖if(INT1==1){EX1=1;return ; //若INT1为高电平(是按键抖动)则返回}P3=0xf4;if(!s1) //判断S1是否按下{j=0;k=1;flag_s1=1; //如果S1按下则置1flag_s2=0; //如果S1按下则置0count=0; //重新计数}if(!s2) // 判断S2是否按下{j=0;k=2;flag_s1=0; //如果S2按下则置0flag_s2=1; //如果S2按下则置1count=0; //重新计数}save=k;P3=0x08;EX1=1;}实验分析:在本次实验中集合了很多方面的内容,有定时器中断,外部中断,在这次实验中,通过对按键的选择,让单片机驱动蜂鸣器与数码管且让数码管显示相应的按键的编号。

单片机音乐实例

单片机音乐实例

单片机的音乐实例最近做单片机突然对单片机唱歌产生了兴趣,在此向大家做了几首歌,仅供娱乐。

首先做单片机的音乐实例必须要明白单片机控制蜂鸣器发声的原理,只要这里明白了,那后面的就好做多了。

一.原理:美妙的音乐是由不同音调的声音组成的,也就是由不同频率的声波组成,我们只要写程序控制单片机输出频率不同的波形,就能控制蜂鸣器发出不同频率的声音,经过组合就能发出美妙的音乐了。

二.音调频谱1.低音区音调频率(hz)延时(us)十六进制1 220 2270 0x7b2 247 2024 0x6d3 277 1805 0x624 294 1701 0x5c5 330 1515 0x526 370 1351 0x497 415 1205 0x412.中音区音调频率(hz)延时(us)十六进制1 440 1136 0x3d2 494 1012 0x373 554 902 0x314 587 852 0x2e5 659 759 0x296 740 676 0x247 831 602 0x213.高音区音调频率(hz)延时(us)十六进制1 880 568 0x1f2 988 506 0x1b3 1109 451 0x184 1175 425 0x175 1318 379 0x146 1480 338 0x127 1661 301 0x10三.源程序#include <reg52.h>#define uint unsigned int#define uchar unsigned charuchar num;uint i;sbit beep=P2^3;sbit led=P1^0;void init(){TMOD=0x10;TH1=(65536-10000)/256;//10ms一中断TL1=(65536-10000)%256;EA=1;ET1=1;}uchar code table[]={//天空之城0x24,0x32,0x21,0x32,0x1f,0x16,0x21,0x32,0x1f,0x32,0x18,0x32,0x21,0 x94,0x31,0x32,0x31,0x32,0x24,0x16,0x29,0x32,0x24,0x32,0x1f,0x32,0x29,0 x32,0x29,0x64,0x31,0x32,0x31,0x32,0x2e,0x16,0x31,0x32,0x2e,0x16,0x1f,0x32,0x31,0x64,0x31,00x1f,0x32,0x21,0x16,0x2e,0x32,0x2e,0x16,0x21,0x32,0x21,0x32,0x21,0 x64,0x24,0x16,0x21,0x32,0x1f,0x16,0x21,0x32,0x1f,0x32,0x18,0x32,0x21,0x32,0x21,0x64,0x31,0 x32,0x31,0x32,0x24,0x16,0x29,0x32,0x24,0x32,0x1f,0x32,0x29,0x32,0x29,0x32,0x29,0x32,0x31,0 x32,0x2e,0x32,0x1f,0x16,0x21,0x16,0x21,0x32,0x1f,0x32,0x1b,0x32,0x1b,0x32,0x18,0x32,0x1f,0 x32,0x1f,0x64,0x21,0x32,0x24,0x32,0x24,0x32,0x21,0x32,0x29,0x32,0x24,0x32,0x24,0x32,0x1f,0 x32,0x1b,0x32,0x18,0x16,0x1b,0x32,0x18,0x32,0x14,0x32,0x1b,0x32,0x1b,0x64,0x29,0x32,0x29, 0x32,0x1f,0x16,0x21,0x32,0x1f,0x32,0x18,0x32,0x18,0x32,0x18,0x64,0x24,0x16,0x21,0x32,0x1f,0 x32,0x21,0x32,0x1b,0x32,0x1b,0x32,0x1f,0x16,0x29,0x16,0x29,0x32,0x17,0x32,0x18,0x32,0x1b,0 x32,0x1f,0x32,0x18,0x16,0x18,0x16,0x18,0x16,0x18,0x16,0x18,0x32,0x14,0x32,0x14,0x32,0x12, 0x32,0x12,0x64,0x14,0x32,0x14,0x32,0x18,0x32,0x1b,0x32,0x1f,0x32,0x1f,0x32,0x1b,0x32,0x1f,0 x16,0x1b,0x16,0x1b,0x32,0x14,0x32,0x18,0x32,0x18,0x32,0x18,0x32,0x14,0x64,0x1f,0x32,0x1f,00x1b,0x16,0x1b,0x32,0x21,0x32,0x24,0x32,0x24,0x32,0x24,0x16,0x24, 0x32,0x24,0x32,0x24,0x32,0x00,};void delayms(uint z)//1ms{uint x,y;for(x=z;x>0;x--)for(y=2;y>0;y--);}void play_song(uint i){uchar temp1,temp2;num=0;while(1){TR1=1;temp1 = table[i++];if (temp1==0xff) //休止符{TR1 = 0;delayms(1000);}else if ( temp1 == 0x00 ) //歌曲结束符{return;}else{temp2 = table[i++];TR1 = 1;while(1){beep= ~beep;led=~led;delayms(temp1); //频率if ( temp2 == num ) //持续时间{num = 0;break;}}}}}void timer1() interrupt 3{TH1=(65536-10000)/256;//10ms一中断TL1=(65536-10000)%256;num++;}void main(){init();while(1){play_song(0);}}四.附加歌曲程序//帝女花主题曲/*0x41,0x27,0x49,0x27,0x3d,0x27,0x3d,0x27,0x37,0x27,0x37,0x27,0x3 1,0x27,0x29,0x27,0x24,0x27,0x24,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x37,0x27,0x31,0x27,0x3d,0x27,0x41, 0x27,0x41,0x27,0x49,0x27,0x3d,0x27,0x49,0x27,0x52,0x27,0x49,0x27,0x3d,0x27,0x62, 0x27,0x52,0x27,0x52,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x49,0x27,//061 22356 2352317 61656135 6666660x31,0x27,0x24,0x27,0x29,0x27,0x24,0x27,0x29,0x27,0x31,0x27,0x24, 0x27,0x24,0x27,0x24,0x27,0x24,0x27,0x29,0x27,0x24,0x27,0x1f,0x27,0x31,0x27,0x29,0x27,0x31,0x27,0x37,0 x27,0x31,0x27,0x31,0x27,0x31,0x27,0x31,0x27,//3656536 56i353230x37,0x27,0x31,0x27,0x29,0x27,0x3d,0x14,0x41,0x14,0x49,0x27,0x3d, 0x27,0x37,0x27,0x37,0x27,0x37,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x24,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x3d, 0x27,0x3d,0x27,0x3d,0x27,//23517612 35623510x37,0x27,0x31,0x14,0x29,0x14,0x3d,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x49,0x27,0xff,0x3d,0x27,0x3d,0x27,0x49,0x27,0x3d,0x27,0x49,0 x27,0x52,0x27,0x37,0x27,0x31,0x27,0x31,0x27,0x31,0x27,//1616123-0x29,0x27,0x29,0x27,0x24,0x27,0x24,0x27,0x24,0x14,0x31,0x14,0x37, 0x27,//556-6.32.0x29,0x27,0x31,0x27,0x29,0x27,0x24,0x27,0x37,0x27,0x31,0x27,0x29, 0x27,0x31,0x27,0x37,0x27,0x41,0x27,0x49,0x27,0x3d,0x14,0x49,0x14,0x52,0x14,0x5c,0x14,0x52,0x27,0x62,0x14,0x52, 0x14,0x49,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x49,0x27, 0x3d,0x27,0x37,0x27,0x3d,0x27,0x49,0x27,0x52,0x14,0x62,0x14,0x52, 0x27,0x49,0x27,0x3d,0x27,0x3d,0x27,0x3d,0x27,//121653560x31,0x27,0x37,0x27,0x3d,0x27,0x37,0x27,0x31,0x27,0x49,0x27,0x49, 0x27,//321236-0x37,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x24,0x27,0x37,0x27,0xff,0 x29,0x27,0x31,0x27,0x37,0x27,0x3d,0x27,0x41,0x27,0x49,0x27,0x3d,0 x27,0x29,0x14,0x24,0x14,0x21,0x27,0x31,0x14,0x29,0x27,0x24,0x27,0x24, 0x27,0x24,0x27,0x24,0x27,//223556.2353217 6156i356-0x31,0x27,0x31,0x27,0x31,0x27,0x31,0x27,0x31,0x14,0x24,0x14,0x29, 0x14,0x31,0x27,0x37,0x27,0x3d,0x27,0x3d,0x27,0x3d,0x27,0x37,0x27,0x31,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x3d,0x27,//3653 23210x37,0x27,0x31,0x27,0x29,0x27,0x24,0x27,0x29,0x27,0x31,0x27,0x31, 0x27,0x31,0x27,0x31,0x27,//2356530x31,0x27,0x31,0x27,0x37,0x27,0x31,0x27,0x37,0x27,0x3d,0x27,0x3d, 0x27,0x3d,0x27,0x37,0x27,0x31,0x27,0x3d,0x27,0x37,0x27,0x31,0x27, 0x49,0x27,0x3d,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x3d,0x27,0x49,0x27,0x3d,0x27,0x37, 0x27,0x31,0x27,0x31,0x27,0x31,0x27,0x31,0x27,0x29,0x27,0x29,0x27,0x29,0x27,0x29,0x27,0x24,0x27,0x24,0x27,0x24, 0x27,0x24,0x27,//32321 2312361235161235---6---0x24,0x27,0x21,0x27,0x31,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0xff,0 x29,0x14,0x24,0x27,0x1f,0x14,0x21,0x27,0x24,0x27,0x1f,0x27,0x24,0x 27,0x1f,0x27,0x24,0x27,0x29,0x27,0x31,0x27,0x31,0x27,0x31,0x27,0x31,0x27,//6i3235056i76i6 i6530x3d,0x32,0x49,0x32,0x37,0x27,0x37,0x27,0x37,0x27,0x31,0x14,0x37, 0x14,0x31,0x27,0x29,0x14,0xff,0x31,0x27,0x37,0x14,0x3d,0x27,0x37,0 x27,0x31,0x27,0x29,0x27,0x24,0x27,0x1f,0x27,//16232353212356i0x31,0x27,0x29,0x27,0x24,0x27,0x29,0x27,0x2e,0x27,0x31,0x27,0x37, 0x27,0x3d,0x14,0x3d,0x14,0x3d,0x14,0x41,0x27,0x49,0x27,0x37,0x27, 0x37,0x27,0x37,0x27,0x31,0x27,0x31,0x27,0x29,0x27,0x24,0x27,0x37, 0x27,0x31,0x27,0x29,0x27,0x29,0x27,0x31,0x14,0x37,0x27,0x3d,0x27,0x41,0x27,0x49,0x27,0x3d,0x27,0x49,0x27,0x52,0x27,0x5c,0x27,0x62, 0x27,0x52,0x27,0x49,0x27,0x49,0x14,0xff,0x1b,0x27,0x1f,0x27,0x1b,0x27,0x1f,0x27,0x24,0x27,0x29,0x14,0x31,0 x27,0x29,0x14,0x24,0x27,0x1f,0x27,0x1f,0x27,0x1f,0x27,0x1f,0x27,0x37,0x27,0x37,0x27,0x37,0x27,0x37,0x27,0x31,0x27,0x31,0x27,0x31, 0x27,0x29,0x27,0x24,0x27,0x24,0x14,0x31,0x27,0x37,0x27,0x37,0x27, 0x31,0x27,0x31,0x14,0x29,0x27,0x24,0x27,0x1f,0x27,0x29,0x27,0x24,0 x27,0x2e,0x27,0x24,0x14,0x29,0x14,0x2e,0x27,0x31,0x27,0x31,0x27, 0x31,0x27,0x31,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x3d,0x27,0x37, 0x27,0x37,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x29,0x27,0x24,0x14, 0x31,0x27,0x37,0x27,0xff,0x31,0x27,0x29,0x14,0x1f,0x27,0x24,0x27,0x29,0x27,0x31,0x27,0x29,0 x27,0x24,0x27,0x29,0x27,0x2e,0x27,0x31,0x14,0x29,0x27,0x3d,0x27, 0x3d,0x27,0x3d,0x27,0x49,0x27,0x3d,0x27,0x37,0x27,0x37,0x27,0x31, 0x27,0x29,0x27,0x24,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x37,0x14, 0x31,0x27,0x3d,0x14,0x41,0x27,0x49,0x27,0x52,0x14,0x49,0x14,0x3d, 0x27,0x62,0x14,0x52,0x27,0x49,0x27,0x49,0x27,0x49,0x27,0x31,0x27,0x24,0x27,0x29,0x27,0x24,0x27,0x29,0x27,0x31,0x27,0x24, 0x27,0x24,0x27,0x24,0x27,0x24,0x27,0x29,0x27,0x24,0x14,0x29,0x27, 0x31,0x27,0x29,0x27,0x31,0x27,0x37,0x27,0x31,0x27,0x31,0x27,0x31, 0x27,0x31,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x3d,0x14,0x41,0x27,0x49,0x27,0x3d,0x24,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x3d,0x27,0x3d,0x27,0x3d, 0x27,0x31,0x27,0x37,0x27,0x3d,0x27,0x37,0x27,0x31,0x27,0x49,0x27, 0x31,0x27,0x37,0x27,0x3d,0x27,0x49,0x27,0x3d,0x27,0x49,0x27,0x3d, 0x27,0x49,0x27,0x3d,0x27,0x37,0x27,0x31,0x27,0x31,0x27,0x31,0x27, 0x31,0x27,0x29,0x27,0x1f,0x27,0x24,0x27,0x24,0x27,0x37,0x27,0x37,0 x27,0x31,0x27,0x29,0x27,0x24,0x27,0x37,0x27,0x37,0x27,0x31,0x27, 0x29,0x27,0x24,0x27,0x37,0x27,0x31,0x27,0x29,0x27,0x37,0x14,0x31, 0x27,0x3d,0x27,0x41,0x27,0x49,0x27,0x3d,0x27,0x29,0x14,0x24,0x14, 0x1f,0x27,0x31,0x14,0x29,0x27,0x24,0x27,0x24,0x27,0x24,0x27,0xff,0 x00,*///祝你平安/*0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26, 0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20, 0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b, 0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39, 0x10,0x26,0x20,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b, 0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18, 0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c, 0x20,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0 x10,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b, 0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b, 0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30, 0x10,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40, 0x10,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,*///穿越时空的爱恋/*x23,0x1f,0x23,//245 56i0x1b,0x23,0x17,0x23,0x1b,0x23,0x1b,0x23,0x1f,0x23,0x24,0x23,0x29,0 x23,0x29,0x23,//242 i650x1b,0x23,0x1f,0x23,0x29,0x23,0x29,0x23,0x1b,0x23,0x1f,0x23,0x29,0 x23,0x29,0x23,0x2e,0x23,0x2e,0x23,0x37,0x23,0x37,0x23,0x37,0x23,0x37,0x23,//215 215 420x37,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x23,0x24,0x23,0x1f,0 x23,0x1f,0x23,//245 56i0x1b,0x23,0x17,0x23,0x1b,0x23,0x1b,0x23,0x1f,0x23,0x24,0x23,0x29,0 x23,0x29,0x23,//242 i650x1b,0x23,0x1f,0x23,0x29,0x23,0x29,0x23,0x1b,0x23,0x1f,0x23,0x29,0 x23,0x29,0x23,0x2e,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x23,0xff,//215 215 45 0x37,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x29,0 x23,0x29,0x23,//245 5450x24,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x3d,0x23,0x37,0 x23,0x37,0x23,//645 4120x37,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x20,0x2e,0x23,0x29,0 x23,0x24,0x23,0x24,0x23,0x2e,0x23,0x37,0x23,0x37,0x23,0xff,//245 5456642x23,0x29,0x23,//245 5450x24,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x3d,0x23,0x37,0 x23,0x37,0x23,//645 4120x37,0x23,0x3d,0x23,0x52,0x23,0x52,0x23,0x37,0x23,0x3d,0x23,0x52, 0x23,0x52,0x23,0x62,0x23,0x62,0x23,0x52,0x23,0x52,0x23,0x52,0x23,0xff,//215 215 35 0x37,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x29,0 x23,0x29,0x23,//245 5450x24,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x3d,0x23,0x37,0 x23,0x37,0x23,//645 4120x37,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x29,0 x23,0x24,0x23,0x24,0x23,0x2e,0x23,0x37,0x23,0x37,0x23,0xff,//245 54566420x37,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x29,0 x23,0x29,0x23,//245 5450x24,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x2e,0x23,0x3d,0x23,0x37,0 x23,0x37,0x23,//645 4120x37,0x23,0x3d,0x23,0x52,0x23,0x52,0x23,0x37,0x23,0x3d,0x23,0x52, 0x23,0x52,0x23,0x5c,0x23,0x5c,0x23,0x52,0x23,0x52,0x23,0x52,0x23,//215 215 450x1b,0x23,0x1f,0x23,0x29,0x23,0x29,0x23,0x1b,0x23,0x1f,0x23,0x29,0 x23,0x29,0x23,0x2e,0x23,0x2e,0x23,0x29,0x23,0x29,0x23,0x29,0x23,0xff,//215 215 45 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00*///路边的野华不要采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,0 x1C,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,。

单片机音乐播放器报告

单片机音乐播放器报告

618花式促销技巧总结1. 促销活动前的准备工作在进行618促销活动之前,有一些重要的准备工作需要完成,以确保活动的顺利进行和取得良好的销售效果。

1.1 活动目标规划在制定促销活动计划之前,要确定活动的具体目标。

这可以包括销售额目标、客户增长目标、品牌曝光目标等。

根据不同的目标,制定相应的策略和指标,以便后续的活动评估和优化。

1.2 促销方案制定根据活动目标和需求,制定相应的促销方案。

这可以包括打折、满减、赠品等多种方式。

要根据产品的特点和目标受众的需求,选择合适的促销方案,并考虑与其他营销渠道的结合。

1.3 促销物资准备促销活动需要相应的促销物资,如海报、宣传单页、礼品等。

要提前准备好这些物资,确保活动进行时能够顺利使用和分发。

此外,还要考虑与供应商的沟通和协调,保证物资的质量和数量。

2. 线上促销技巧随着互联网的发展,线上促销活动越来越重要。

下面是一些可以帮助提升线上促销效果的技巧。

2.1 优化网站和APP网站和APP是线上销售的关键,要确保它们的性能和易用性。

优化网站和APP 的速度和响应时间,提升用户体验。

此外,通过设计吸引人的界面和提供个性化的推荐功能,可以增加用户的停留时间和购买欲望。

2.2 利用社交媒体社交媒体是一个强大的促销工具,可以帮助扩大品牌的影响力和吸引更多的用户。

通过发布有趣的内容、与用户互动并提供独家优惠等方式,可以增加用户的关注度和参与度。

2.3 进行电子邮件营销电子邮件营销是一种直接有效的线上促销手段。

通过定期向用户发送促销信息、优惠券和最新产品信息,可以提醒用户关注活动,并促使他们下单购买。

3. 线下促销技巧传统的线下促销也是不可忽视的,它可以帮助增加实体店的客流量和增加销售额。

3.1 导购员培训导购员在促销活动中起着关键作用,他们能够直接接触和影响顾客。

因此,合理的导购员培训非常重要。

培训内容可以包括产品知识、销售技巧和服务意识等方面,以提高导购员的专业素质和销售能力。

单片机播放音乐

单片机播放音乐
单片机播放音乐
1. 实验目的与效果:
通过此实验可以又一次学习单片机定时器及初步对音乐相关知识的了解。
2. 实验板上连接图:
与¡ 门铃发生器¡ 实验同,实物图连接也相同,请查看之。
3.
实验板上操作:
1)用短路冒将 P2.6 口与蜂鸣器的输入端短接起来; 2)将¡ 门铃声发生器程序¡ 的 HEX 文件烧到单片机里。 3) 将蜂鸣器上的白纸撕掉。 提示:做完此实验,不要拆短路冒,继续做下一个实验――单片机播放音乐。 ¡ 单片机 播放音乐¡ 实验线路连接图与此相同,只是程序不一样。 特别提示:单片机产生的音频信号用蜂鸣器表现出来当然不会很动听,大家忍着点! !
Created with novaPDF Printer (). Please register to remove this message.
ET0=1; //开定时器 T0 中断 TR0=0; //先关闭 T0 while(1) { switch(music_code[i]) { case 0x00: i=0;music_out=0;delay(); break; // 曲终停顿一定时间 case 0xff: i=i+1;delay_1us(100);break; //遇到休止符停顿一定时间 100 微秒,再取下一个 频率 default: m=music_code[i++];n=music_code[i++];//取频率到 m,取节拍到 n TR0=1; while(n!=0) { music_out=!music_out; delay_1us(4*m);//调整产生的频率,可以通过在 m 前的值来修正音调的 高低 } TR0=0; } } }
Created with novaPDF Printer (). Please register to removeCreated with novaPDF Printer (). Please register to remove this message.

用单片机演奏电子乐曲课程设计报告

用单片机演奏电子乐曲课程设计报告

1、课程设计目的:咱们学习了一个学期的单片机,这次课程设计就是以现有的基础和能力,利用本次设计加以运用,从而达到对所学知识的巩固,更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,在对各个板块进一步的具体的设计,先进行硬件电路设计,现在必然要考虑好要用什么元件、各个元件的具体参数、是不是能实现应有功能,从而取得一个完整的硬件电路。

在按照该电路设计出软件的功能模块、从而完成程序流程图,在跟据程序流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件,硬件结合进行调试、运行,对其功能进行最终测试,并反复试探其测试中碰到相应问题的原因,并将其一一处置,从而完本钱次设计的实验要求,和本次课程设计的最终目的。

本课程设计教学按照课程的教学大纲的要求和单片机原理与接话柄验室建设所提供的条件,安排了单片机控制系统的设计课题,从而使咱们更好地掌握课堂学习的理论知识,掌握大体实践技术,并能进行必然的综合应用和探索。

通过课程设计的教学,使咱们巩固和深化已学的理论知识,增强综合应用能力,训练学生掌握分析问题、解决问题的方式,培育较强的动手能力和必然的单片机应用系统的设计和调试能力。

2、课程设计要求:本次课程设计要求在一周的时刻内利用实验室的现有条件或自己的设备完成程序的编写和调试,具体要求如下:一、设计题目都需要进行硬件设计和软件设计,并调试成功;二、设计的硬件电路要包括I/O设备,并利用I/O功能;3、尽可能利用单片机的按时计数器和中断资源4、硬件可利用THDPJ-1/2型单片机开发综合实验箱,也可利用自己的硬件电路五、可用C51或汇编语言编程3、设计题目分析3.1 题目简介用单片机演奏电子乐曲,相当于制作一个带有录音播放功能的电子琴。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有壮大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部份。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机的音乐盒设计【摘要】本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。

该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。

使用两个按键控制音乐盒,一个用来切换歌曲,另一个用来切换8路LED的变化花样,本音乐盒共有两首歌曲,花样灯花样共计3种。

播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。

本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。

【关键字】音乐盒;AT89C51单片机; KEIL; PROTEUS;音调一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。

因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。

音乐盒的功能结构图音乐盒的功能结构如图(下图)所示。

Key1负责切换播放歌曲,播放歌曲共2首,分别是世上只有妈妈好。

图2.2 音乐盒功能结构图音调的确定:不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。

把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。

两个音之间的距离有两个“半音”,就叫“全音”。

在钢琴等键盘乐器上,C–D、D–E、F–G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。

通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。

﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。

例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。

1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

2)利用AT89C51的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。

此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系公式如下:N=Fi÷2÷FrN:计算值;Fi:内部计时一次为1us,故其频率为1MHz;4)其计数值的求法如下:T=65536-N=65536-Fi÷2÷Fr例如:设K=65536,F=1000000=Fi=1MHz,球低音DO(261Hz)。

中音DO(523Hz)。

高音的DO(1046Hz)的计算值T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627低音DO的T=65536-500000/523=64580低音DO的T=65536-500000/1047=650595)C调各音符频率与计数值T的对照表如表4.1所示。

表4.1 C调各音符频率与计数值T的对照表低音频率T 参数中音频率T 参数高音频率T 参数Do 262 1908 229 Do 523 956 115 Do 1046 57 57 Do﹟277 1805 217 Do﹟554 903 108 Do﹟1109 54 54Re 294 1701 204 Re 587 852 102 Re 1175 51 51 Re﹟311 1608 193 Re﹟622 804 97 Re﹟1245 48 48Mi 330 1515 182 Mi 659 759 91 Mi 1318 45 45Fa 349 1433 172 Fa 698 716 86 Fa 1397 43 43 Fa﹟370 1351 162 Fa﹟740 676 81 Fa﹟1480 41 41So 392 1276 153 So 784 638 77 So 1568 38 38 So﹟415 1205 145 So﹟831 602 72 So﹟1661 36 36La 440 1136 136 La 880 568 68 La 1760 34 34 La﹟464 1078 129 La﹟932 536 64 La﹟1865 32 32Si 494 1012 121 Si 988 506 61 Si 1976 30 30节拍的确定:若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。

“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。

若1拍实0.5s,则1/4 拍为0.125s。

至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。

音持续时间的长短即时值,一般用拍数表示。

休止符表示暂停发音。

一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。

了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。

对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。

因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。

表4.2节拍与节拍码对照节拍码节拍数节拍码节拍数1 1/4拍 1 1/8拍2 2/4拍 2 1/4拍3 3/4拍 3 3/8拍4 1拍 4 2/1拍5 1又1/4拍 5 5/8拍6 1又1/2拍 6 3/4拍8 2拍8 1拍A 2又1/2拍 A 1又1/4拍C 3拍 C 1又1/2拍F 3又3/4拍节拍,图5.2为节拍码的对照。

如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。

假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。

表4.3 1/4和1/8节拍的时间设定曲调值DELAY 曲调值DELAY调4/4 125毫秒调4/4 62毫秒调3/4 187毫秒调3/4 94毫秒调2/4 250毫秒调2/4 125毫秒编码:do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。

播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。

音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。

以0xff作为曲谱的结束标志。

举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。

举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。

先将歌曲的简谱进行编码,储存在一个数据类型为unsignedchar 的数组中。

程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。

表4.4 简谱对应的简谱码、T值、节拍数6 低音LA 2 64400 2 2/4拍7 低音TI 3 64524 3 3/4拍1 中音DO 4 64580 4 1拍2 中音RE 5 64684 5 1又1/4拍3 中音MI 6 64777 6 1又1/2拍4 中音FA 7 64820 8 2拍5 中音SO 8 64898 A 2又1/2拍6 中音LA 9 64968 C 3拍7 中音TI A 65030 F 3又3/4拍1 高音DO B 650582 高音RE C 651103 高音MI D 651574 高音FA E 651785 高音SO F 65217#include <reg51.h>#define uchar unsigned char#define uint unsignedintsbit speaker=P3^0;uchar timer0h,timer0l,time;//世上只有妈妈好数据表uchar code jiepai[]={ 3,1,2,2, 2,1,1,4, 2,1,1,2,2, 1,1,1,1,4,3,1,2,1,1, 2,2,4, 3,1,1,1,1,1, 6};uchar code FREQH[]={0xFD,0xFD,0xFD,0xFD, 0xFE,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD, 0xFC,0xFB,0xFD,0xFD,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD, 0xFD,0xFC,0xFC,0xFD,0xFD,0xFC,0xFC,0xFB,0xFC, 0xFB};uchar code FREQL[]={0xF4,0xB4,0x44,0xB4, 0x47,0xF4,0xB4,0xF4,0x44,0xB4,0xF4,0xB4,0x44, 0x8F,0xE9,0xB4,0x44,0xEE,0xEE,0x44,0xB4,0xB4,0xF4, 0x44,0xEE,0x8F,0xB4,0x44,0xEE,0x8F,0xE9,0x8F, 0x68};void delay(uchar t) //延时大约250ms{uchar t1;unsigned longint t0;for(t1=0;t1<t;t1++){for(t0=0;t0<4921;t0++){;}}}void t0int() interrupt 1{TR0=0;speaker=!speaker;TH0=timer0h;TL0=timer0l;TR0=1;}void song(){TR0=1;delay(time);TR0=0;}void main(void){uchark,i;uint m=0;TMOD=1; //置CT0定时工作方式1EA=1;ET0=1;//CPU开中断,CT0开中断while(1){i=0;k=0;m=1;while(m){timer0h=FREQH[k]; //音符频率timer0l=FREQL[k];time=jiepai[m-1]; //节拍m++;k++;song();if(m>=34) m=0;}}}。

相关文档
最新文档