单片机音乐播放器课程设计
更新时间:2024-05-17 16:32:01 阅读量: 综合文库 文档下载
摘 要
本文将介绍一种以89C51型单片机为基础元件设计的自动音乐播放器。在当今这个科技高速发展的时代,生活节奏的加快,人们长期处于工作、学习压力过大的状态,对于调节心理压力而言音乐对于每一个人都十分重要,由此音乐播放器在国内已经开始普及。校园里的上下课的铃声,宿舍内早晨的起床号声音,都由以前枯燥刺耳的铃音转变成了好听的音乐,公路、广场中的计时装置也逐渐开始采用音乐来充当铃声。此装置不仅为人们日常生活的计时提供了方便,同时也为目前快节奏的生活带来了乐趣。
本文是应用MCS-51单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用C语言进行程序设计。通过控制单片机内部的定时器来产生不同频率的方波,驱动蜂鸣器发出不同音调的音乐,再利用延迟来控制发音时间的长短。把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳动听的音乐。
这种控制电路结构简单,可读性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。
关键词:单片机;音乐播放器;C语言。
I
目 录
绪 论 .................................................................. 1 第1章 音乐盒的设计总体方案 ............................................ 2 第2章 硬件电路设计 .................................................... 3 2.1 总体设计框图 ..................................................... 3 2.2 时钟电路 ......................................................... 3 2.3 复位电路 ......................................................... 3 2.4 选曲按键电路 ..................................................... 3 2.5 音频发生及放大电路 ................................................ 4 第3章 软件程序设计 .................................................... 5 3.1单片机发声概述 .................................................... 5 3.2 程序流程图 ........................................................ 6 3.3 音乐的产生 ........................................................ 7 第4章 KEIL仿真软件的应用 ............................................. 8 第5章 调试与故障分析 .................................................. 9 5.1 软件程序调试 ..................................................... 9 5.2 硬件电路调试 ..................................................... 9 总 结 ................................................................. 10 致 谢 ................................................................. 11 参考文献 ............................................................... 12 附录1:原理图 ......................................................... 13 附录2:源程序 ......................................................... 14
II
绪 论
单片机,更确切地说应称为作微控制器,是20世纪70年代中期发展起来的一种面向控制的大规模集成电路模块,其特点是功能强、体积小、可靠性高、价格低廉。它一面世便在工业控制、数据采集、智能仪表化、机电一体化、家用电器等领域得到了广泛应用,极大地提高了这些领域的技术水平和自动化程度。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
本文将介绍一种以89C51型单片机为基础元件设计的自动音乐播放器。在当今这个科技高速发展的时代,生活节奏的加快,人们长期处于工作、学习压力过大的状态,对于调节心理压力而言音乐对于每一个人都十分重要,由此音乐播放器在国内已经开始普及。校园里的上下课的铃声,宿舍内早晨的起床号声音,都由以前枯燥刺耳的铃音转变成了好听的音乐,公路、广场中的计时装置也逐渐开始采用音乐来充当铃声。此装置不仅为人们日常生活的计时提供了方便,同时也为目前快节奏的生活带来了乐趣。
本次设计以89C51单片机为基础,利用单片机编成技术对芯片进行功能设定,实现音乐的播放。同时,利用单片机的定时器中断,在单片机内部产生所需要的音乐频率,并通过音频功率放大器将音频信号放大,通过蜂鸣器连续播放一段音乐。此设计通过多次测试,音乐声音宏亮清晰,节拍正常,达到预期效果。
本文将围绕基于单片机的自动音乐播放器,介绍一些关于单片机的基础知识、音乐播放器的制作原理及方法(其中包括了音乐编程原理)、定时器的设定,以及仿真软件(Keil、Proteus)的使用方法。
1
第1章 音乐盒的设计总体方案
单片机音乐播放器控制系统结构简单,环节较少,因此,单片机音乐播放器包括LED彩灯、数码管的显示。除了播放音乐有按键外,其余的硬件组成大体相同;对于单片机音乐播放器声音的读出除了蜂鸣器以外,还要配置合适的放大器播放出响亮的声音。
单 晶振电路 时钟电路 片 机 电源电路 复位电路 按键电路 发声电路 图 1-1 结构总图
单片机音乐播放器电路板向着小型化、低功耗、抗千扰、低成本、实用功能方向发展。因此在对单片机的选择趋向于容量适中、功能丰富、性能可靠、价格低的元件。因此本设计中应用最为广泛的MCS-51系列8位单片机8051。
2
R31KR210KRT110474
IN-V OUTBYPASSGAINGNDGAINLM38618R410第2章 硬件电路设计
1P10/TVcc2P11/TP00P123STC89C51/52P12P01VCC4P13P02S05C1P14P03扬声器 S1680c51 P15电源 P04P127P16P05单片机 8S2复位 P17歌曲制按钮 P0610ufP329RESETP07S310RXDEA/VP时钟晶振 R5P3511TXDALE/P10KP3212INT0PSEN 13INT1P27图 2-1 总设计图 14T0P26P35152.2 时钟电路 T1P25VCCD11610ufVCCC7WRP24C217386运放RDP2330p1836C6P22X2IN+19Vcc10425X1P21IN-V OUTR371C312MHZ20C5BYPASSGAINGNDP20R4R11K482.1 总体设计框图 2.2KR210KRT110430pGNDGAINLM38689C52RC 10473122.3 复位电路 P123VCC4S05C1S16P127S2810ufP329S310R5图 2-3 复位电路 P351110KP32122.4 选曲按键电路 1314P3515VCCD116C21730p1819C312MHZ20R12.2K
图 2-2 时钟电路 P10/TP11/TP12P13P14P15P16P17RESETRXDTXDINT0INT1T0T1WRRDX2X1GND89C52RC3
STC89C51/52 VccP00P01P02P03P04P05P06P07EA/VPALE/PPSENP27P26P25P24P23P22P21P20403938373635343332313029282726252423222130p
S1P12S2P32S3P35
图 2-4 选曲电路
其中P3.2 播放\\暂停, P1.2上一首歌,P3.5下一首歌。
2.5 音频发生及放大电路 386运放3274IN+VccIN-V OUTBYPASSGAINGNDGAINLM3866518VCCC7C6R41010ufC8BEEPC5473100uf+-0.25W104R31KR210KRT1104 图 2-5音频发生及放大电路
利用STC89C51的I/O口产生一定频率的方波脉冲,通过LM386功放电路驱动喇叭发出不同的音调从而演凑乐曲。
4
第3章 软件程序设计
3.1单片机发声概述
一般来说,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐振频率。单片机演奏的音乐基本都是单音频率。因此单片机演奏音乐比较简单,只需能清楚“音调”和“节拍”两个概念即可。 音调表示一个音符唱多高的频率。 节拍表示一个音符唱多长的时间。
知道了一个音符的频率后,便可以让单片机发出相应频率的振荡信号,从而产生相应的音符声音。通过单片机的定时器进行定时中断,在中断服务程序中将单片机上完结单片机I/O口来回置高电平或者是低电平的,从而让扬声器发出声音。通过节拍计算出每个音符所需要的时间,采用循环延时的方法来实现控制一个音符唱多长的时间,从而构成一首完整的音乐。
音调主要由声音的频率决定。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随响度增加而下降,高频纯音的音调却随响度增加而上升。
以标准高音A的频率F=440HZ,其对应的周期为: T=1/F=1/440=2272us 因此需要在单片机I/O端口输出周期为T=2272us的方波脉冲,也就是t=T/2=2272/2=1136us
也就是说,单片机上定时器的中断出发时间为1136us。如果单片机采用定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设外接晶振的振荡器频率为f,则定时器的预置初始值有以下公式来确定:
Temp = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC) TH = Temp /256 TL = Temp %6
5
3.2 程序流程图 开始 初始化堆栈 初始化音乐输出口及按钮 根据当前状态播放相应歌曲的某个音 暂停/播放键是否按下 是按键处理 否上一曲键是否按下,并且在开机后有一次按下暂停/播放键 是按键处理 否下一曲键是否按下,并且在开机后有一次按下暂停/播放键 是按键处理 否否开机后是否按下过暂停/播是按键处理 6
3.3 音乐的产生
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,,则半周期为1912/2=956μs,因此只要令计数器计时956μs,每计数956次时将I/O反相,就可得到中音DO(523Hz)则初始值为65535-956 = 64579 = 0xFC43。
计数脉冲值与频率的关系式(如式3-1所示)是:
N=fi÷2÷fr (3-1) 式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下: T=65536-N=65536-fi÷2÷fr
例如:设K=65536,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/1046=65059
7
第4章 KEIL仿真软件的应用
硬件与软件的设计一般都要分别借助一些软件,如我们通常用作电路设计与制版的Protel,MCS-51程序开发工具KEIL等。
Keil C51 uVision2集成开发环境是基于80C51内核的软件开发平台,支持工程建立、程序的编译与链接、软件仿真、硬件仿真、目标代码的生成等功能。Keil C51编译器在产生代码的准确性和效率方面达到了较高的水平。
与大多数集成开发环境类似,Keil C51集成开发环境也是用工程的方法来管理文件,在一个工程文件中源程序(C51程序、汇编程序)、头文件等都可以进行统一管理。
安装运行KEIL51,使用KEIL的开发工具进行项目开发过程,与其他软件开发项目的过程基本上相同:
创建C 语言或汇编语言的源程序。 编译或汇编源文件。 纠正源文件中的错误。
从编译器和汇编器连接目标文件。 测试连接的应用程序。
8
附录2:源程序
#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 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, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,
14
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, 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, 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个半拍;
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,
15
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, 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, 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, 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, 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,
16
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, //低音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 main(void) {
TMOD=0x11; //T0 T1 均在工作方式1 ET0=1; //T0开中断 EA=1; //CPU开中断 while(1) {
music_play(); //根据当前状态播放相应歌曲的某个音符 if(!pause) {
if(!pause) {
if(music_num==0) //music_num=0只有在刚开机,且未按下暂停键时
//暂停键处理
存在,表示刚开机时的状态,按下后从第一首开始播放
{
music_num=1; //歌曲序号置1
17
}
num=0; //从头播放 play_enable=1;
//允许播放
else {
play_enable=~play_enable;
speaker=1; }
while(!pause) //若按着暂停键不放手时的处理 {
if(play_enable==0){} //如果是暂停,则显示时间不变//(暂
停时play_enable==0)
}
}//暂停键处理结束
}//while结束
if((!play_up)&&(music_num!=0)) //上一首按键 {
delayms(5);
if((!play_up)&&(music_num!=0)) { speaker=1;
music_num-=1;//歌曲编号减一 if(music_num<=0) music_num=8; num=0;
//从头开始播放
if(music_num==(sound_amount+1))
music_num=1;
delayms(500);//歌曲切换时延时0.5S
} }
if((!play_down)&&(music_num!=0))
18
} }
{
delayms(5);
if((!play_down)&&(music_num!=0)) { speaker=1; } }
music_num=1;
num=0; //从头开始播放 if(music_num==0)
music_num=sound_amount;
delayms(500);//歌曲切换时延时0.5S
void delayms(unsigned int t) {
unsigned int i,j; for(i=0;i for(j=0;j<123;j++); } //MS延时子程序 void delay(unsigned char t) //延时子函数,控制发音的时间长度,每个节拍0.4S { unsigned char t1; for(t1=0;t1 for(t2=0;t2<8000;t2++) ;//延时期间, 可进入T0中断去发音 } TR0=0; //关闭T0, 停止发音 19 } void timer0(void) interrupt 1 //T0中断程序,控制发音的音调 { speaker=!speaker;//输出方波, 发音 TH0=timer0h; //下次的中断时间,这个时间控制音调高低 TL0=timer0l; } void song(void) { TH0=timer0h; //控制音调 TR0=1; //启动T0, 由T0输出方波发音 //演奏一个音符 delay(time); //每个音符的演奏时间 } void music_play(void)//播放相应歌曲的某个音符 { if((music_num==1)&&(play_enable==1)) { fre=song1[num]+7*song1[num+1]-1;//第i个是音符,第i+1个是第几个八度 timer0h=FREQH[fre]; //从数据表中读出频率数值,实际上是 定时的时间长度 timer0l=FREQL[fre]; time=song1[num+2]; //读出时间长度数值 num+=3; if(fre<0) { num=0; //下一首从头播放 music_num=2; //判断歌曲的结束位,结束后转到下一首 } } 20 song(); //发出一个音符 if((music_num==2)&&(play_enable==1)) { fre=song2[num]+7*song2[num+1]-1; timer0h=FREQH[fre]; num+=3; if(fre<0) { num=0; music_num=3; } } if((music_num==3)&&(play_enable==1)) song(); { fre=song3[num]+7*song3[num+1]-1; timer0h=FREQH[fre]; num+=3; if(fre<0) { num=0; music_num=4; } } if((music_num==4)&&(play_enable==1)) { fre=song4[num]+7*song4[num+1]-1; timer0h=FREQH[fre]; song(); num+=3; if(fre<0) 21 { num=0; music_num=5; } } if((music_num==5)&&(play_enable==1)) { fre=song5[num]+7*song5[num+1]-1; timer0h=FREQH[fre]; song(); num+=3; if(fre<0) { num=0; music_num=6; } } if((music_num==6)&&(play_enable==1)) { fre=song6[num]+7*song6[num+1]-1; song(); timer0l=FREQL[fre]; time=song6[num+2]; num+=3; if(fre<0) { num=0; music_num=7; } song(); 22 } if((music_num==7)&&(play_enable==1)) { timer0l=FREQL[fre]; time=song7[num+2]; num+=3; if(fre<0) { num=0; music_num=8; } } if((music_num==8)&&(play_enable==1)) { fre=song8[num]+7*song8[num+1]-1; song(); timer0l=FREQL[fre]; time=song8[num+2]; num+=3; if(fre<0) { music_num=1; } } } //程序结束 song(); 23
正在阅读:
单片机音乐播放器课程设计05-17
2018-2019学年四川省遂宁市高一上学期期末考试 物理03-14
冲击、疲劳、光测等力学实验11-09
s1-SPEC-170SX01TB_common_ Rev4.0最新04-12
行政法期末材料06-04
2012湖南教育心理学第七章学习技能04-11
金花路L型楼施工组织设计05-25
哈 尔 滨 师 范 大 学 课 程 表(呼兰10级)11-28
花开并蒂02-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 单片机
- 播放器
- 课程
- 设计
- 音乐
- 最新东财16秋《统计学》在线作业三满分标准答案
- 高一化学必修一第四章复习教案
- 二上课文重点(1-40课)
- 最后一公里现状
- 2017人教版三年级数学下册期中复习教案yu
- 驱逐舰 - 图文
- 4.十项安全技术交底
- 2017年河南省平顶山市中考数学二模试卷(有答案)
- 心理学概要
- 教师课堂教学质量评价实施方案范文
- 国内标准化公益信托典型案例研究
- 2015年专业技术人员创新能力培养与提高试题参考答案
- 最新 2018年深圳市卫生计生系统科研项目立项名单
- 四年级小数单位换算练习题经典
- 体温单书写规范与示例
- 关于加强占道经营流动摊点规范管理的建议
- 以a开头的单词
- 安全专项施工方案
- 2019年04月25日数学账号的初中数学组卷
- 2019鄂教版九上《公输》word教案1