单片机控制音乐播放器毕业论文文档格式.docx
《单片机控制音乐播放器毕业论文文档格式.docx》由会员分享,可在线阅读,更多相关《单片机控制音乐播放器毕业论文文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
概述:
要求阅读或检索的参考资料及文献(包括指定给学生阅读的外文资料):
目录
目录1
摘要2
第1章前言3
第2章单片机的基本组成4
2.1单片机的定义4
2.2单片机的几部份4
第3章硬件系统结构7
3.1SPCE061A结构7
3.2语音采集的硬件电路7
第4章软件设计与实现9
4.1语音信号的采集压缩与数据传输9
4.2语音采集的硬件连接9
4.3语音数据的传输10
第5章控制和编译过程12
5.1软件设计结构12
5.2软件控制音乐播放编译过程13
第6章结论16
致谢17
参考文献18
附录:
19
单片机控制音乐播放器
摘要
现当今,单片机的应用无处不在.利用单片机控制音乐播放也多不胜举,音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛.它有功能多﹑价格优﹑外部电路简单的特点,深受音乐爱好者及音乐芯片制造商的青昧,用80C51单片机及少数外部点路控制MUSIC播放,产生“生日快乐歌”,并伴有彩灯闪烁.利用软件的功能设置,使音乐和灯光有同步的效果.
对于单片机产生音乐,关键是控制頻率的输出.我们知道,不同的聲音对应不同的頻率,产生有规律的頻率输出就可以得到相应規律的聲音.音乐中,有8个基本音符:
do﹑re﹑mi﹑fa﹑so﹑la﹑xi﹑do,八个不同的音符对应著不同的頻率.只要我们对照音符输出相对应的頻率,就可以产生美妙的音乐了.本章中采用了T0中断的方法产生不同頻率,并用两键控制播放和停止。
这里,我用8051单片机控制音乐。
由键盘控制播放,用运算放大器的同相放大方式驱动SPEAKER。
关键词:
单片机硬件系统软件系统控制程序结构
第1章前言
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
MCS-51系列单片机有5个中断源,中断分为2个中断优先级,即高优先级和低优先级,每个中断源的优先级都可以由软件来设定.51单片机中断系统的组成:
它由4个与中断有关的特殊功能寄存器(TCON、SCON的相关位作中断源的标志位)、中断允许控制寄存器IE、中断优先级管理(IP寄存器)和中断顺序查询逻辑电路等组成。
可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成,还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
第2章单片机的基本组成
2.1单片机的定义
2.2单片机的几部份
一、总线:
我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以就需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两?
器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?
这种情况是是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。
器件的数据线也就被称为数据总线,器件所有的控制线被称控制总线。
在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址才能用,分配地址也是以电信号的形给出的,由于存储单元比较多,所以,用于地址分的线也较多,这些线被称为地址总线。
二、数据、地址、指令:
之所以将这三者放在一起,是因为这三者的本质都是一样的—数字,或者说都是串‘0’和‘1’组成的序列。
换言之,地址、指令也都是数据。
指令由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关,不可以由单片机的开发者更改。
地址:
是寻找单片机内部、外部的存储单元、输入输出口的依据,内单元的地址值已由芯设计者规定好,不可更改,外部的单元可以由单片机开发者自行决,但有一些地址单元是一定要有的。
数据:
这是由微理机处理的象,在各种不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况:
1、地址(如MOVDPTR,#1000H),即地址1000H送入DPTR。
2、方式字或控制字(如MOVTMOD,#3),3即是控制字。
3、常数(如MOVTH0,#10H)10H即定时常数。
4、实际输出值(如P1口接彩灯,要灯全亮,则执行指令:
MOVP1,#0FFH,要灯全暗,则执指令:
MOVP1,#00H)这里0FFH和00H都是实际输出值。
又如用于LED的字形码,也是实际输出的值。
理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指令来行了。
三、P0口、P2口和P3的第二功能用法初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动,不需要指令来转换。
如P3.6、P3.7分别是WR、RD信号,当微片理机外接RAM或有外部I/O口时,它们挥作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.或P3.7送出,不需要事先用指令说明。
事实上‘不能作为通用I/O口使用’也并不能将其作为通用I/O口使用。
你完全可以在指令中按排一条SETBP3.7的指令,并且当单片机执行到这条指令时,也会使P3.7变为高电平,但使用者不会这么做,因为这通常这会导致系统当溃(即死机)。
四、程序的执行过程单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000,所以程序总是从‘0000’单元开始执行,也就是说:
在系统的ROM中一定要存在‘0000’个单元,并且在‘0000’单元中存放的一定是一条指令。
五、堆栈:
堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且堆栈有特的数据传输指令,即‘PUSH’和甈OP’,有一个特殊的专为其服务的单元,即堆栈指针SP每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值基础上)动减1。
由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP值,就可以把堆栈设置在规定的内存单元中,如在程序开始时用一条MOVSP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。
一般程序的开头总有这么条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后8H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数的浑乱。
不作编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。
当设置好堆栈区,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情下编程者不会把它当成通内存用了。
六、单片机的开发过程这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件下面就是编写软件的工作。
在编写软件之前,首先要确定一些常数、地址,事实这些常数、地址在设计阶段已被直接或间接地确定下来了。
如当某器件的连线设计好后,其地址也就确定了,当器件的功能被确定下来后,其控制字也就被确定了。
然后用文本编缉器(如EDIT、CCED等)写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。
运行正确后,就可以写(将程序固化在EPROM中)。
在源程序被编译后,生成了扩展名为HEX的目标文件,一般编程器能够识别种格式的文件,只要将此文件调入即可写片。
在此,为使大家对整个过程有个认识,举一说明:
ORG0000HLJMPSTARTORG040HSTART:
MOVSP,#5FH;
设堆栈LOOP:
NOPLJMPLOOP;
循环END。
第3章硬件系统结构
3.1SPCE061A结构
SPCE061A的内部结构如图3-1,其特点如下:
图3-1SPCE061A的内部结构
工作电压:
VDD为2.6~3.6V(CPU),VDDH为VDD~5.5V(I/O);
CPU时钟为0.32~49.152MHz;
内置存储器:
SRAM为2KB,内存Flash为32KB;
可编程音频处理;
2个16位可编程定时器/计数器;
7通道10位ADC(内置麦克风放大和自动增益控制功能);
2个10位DAC;
32路可编程通用输入输出端口;
串行输入输出接口;
低电压监测/低电压复位功能;
14个中断源可来自定时器、外部时钟输入、键唤醒等;
内置在线仿真电路ICE。
3.2语音采集的硬件电路
语音采集的硬件电路如下图3-2所示。
MIC采用驻极体电容话筒,这种话筒具有灵敏度高、无方向性、重量轻、体积小、频率响应宽、保真度好等优点。
与PC机的串行通信用SPCE061A的UART接口,用MAX232芯片进行电平转换,即可实现RS232通信。
图3-2语音采集的硬件电路
第4章软件设计与实现
4.1语音信号的采集压缩与数据传输
语音信号处理的基础是对语音信号进行数字化,并采样存储。
SRCE061A内置专门用于语音信号采集的自动增益控制放大器(AGC)的麦克风输入通道(MIC_IN)。
语音信号经麦克转换成电信号,由隔离电容隔掉直流成分,然后输入至内部前置放大器。
SPCE061A内部自动增益控制电路AGC能随时跟踪、监视前置放大器输出的音频信号电平,当输入信号增器时,AGC电路自动减小放大器的增益;
当输入信号减小时,AGC电路自动增大放大器的增益,以便使进入A/D的信号保持在最佳电平,又可使谐波减至最小。
ADC初始化程序如下:
INTOFF;
R1=0x0030;
[P_TimerA_Ctrl]=R1;
时钟频率为CLKA的fosc/2
R1=0xfa00;
[P_TimerA_Data]=R1;
采样率为16kHz
R1=0x003d;
[P_ADC_Ctrl]=R1;
//设置AGC功能
R1=0x00A8;
[P_DAC_Ctrl]=R1;
//采用自动方式且通过MIC_IN通道输入,通过定时器A的溢出锁存数据,ADC为自动方式
R1=0x1000;
[P_INT_Ctrl]=R1;
//开中断IRQ1_TM
INTIRQ;
4.2语音采集的硬件连接
语音采集的硬件连接图如下图3-1所示:
图3-1语音采集的硬件连接图
波形编码的基本原理是以波形逼近为原则,在时域上把幅度样本分层量化并用代码表示;
特点是语音质量高、抗噪性强编码率高,适于语音及高保真音乐。
参数编码是基于某种语音产生模型,在编程端分析出该模型参数选择适当的方式进行编码;
特点是语音质量差、抗噪抗弱和编码率低。
凌阳SPCE061A提供了压缩算法库——SACMLIB(见表3-1),其处理的语音信号范围是200Hz~3.4kHz的电话语音,并将A/D、编/解码、存储及D/A做成相应的模块,对于每个模块都有其应用程序接口API。
表4-1SACM-LIB库中模块及其算法
模块名称
压缩算法
采样率/kHz
语音压缩编码率/Kb/s
用途
SACM_A2000
子带编码
16
16、20、24
播放语音及高保真音乐
SACM_S480/S720
CELP混合编码
4.8、7.2
播音
SACM_S240
参数编码
24
2.4
SACM_MS01
FM音乐合成
音乐合成
SACM_DVR
16Kb/s的传输率,8Ksps采样率
ADC信道录音DAC放音
4.3语音数据的传输
SPCE061A的通用异步串口(UART)提供了一个8位全双工标准接口,用于完成SPCE061A与外设之间的串行通信。
借助于IOB口的特殊功能和UARTIRQ中断,可以同时完成UART接口的接收与发送数据的过程。
根据应用需求,把UART设置为中断方式接收数据,以查询方式发送数据。
目前,Mircosoft公司的VC++6.0是基于Windows程序设计的主流开发工具之一。
VC++不仅秉承了C++简便、灵活及面向对象等优点,而且提供了功能强大的MFC类库,并能自动生成应用程序框架,提供标准化的程序结构和用户接口。
特别需要指出的是,为了今后调用低层的音频处理API函数,对由下位上传的音频数据进一步进行语音识别方面的处理,我们使用VC来编写上位机的控制及存储程序。
在实验室和工业应用中,RS232串口是常用的计算机与外部串行设备(单片机)之间的数据传输通道,由于串行通信简单易用,所以应用广泛。
通常在VC++中有三种方法可以实现串行通信,使用VC++的标准通信函数_inp和_outp来实现串口通信;
把串口看成是一个特殊的设备文件,使用有关文件处理的API函数来实现串口通信;
使用ActiveX的串行通信控件MSComm来实现串口通信。
第5章控制和编译过程
5.1软件设计结构
主要是实现键盘处理,程序中必须确认是哪一个按键被按下,然后转到相应的处理程序中执行,实际上该程序是一个完整的键盘扫描程序,如果改动其中的处理子程序完全可以应用到其他的控制电路中,下文附有详细的程序和说明供参考,图5-1为软件设计的结构流程图。
图5-1软件设计的结构流程图流程图
键盘扫描程序的任务简单讲就是:
首先确认是否有按键按下,然后通过扫描判断来得到是在哪一行的按键,最后通过比较预先设定的4行表格查找并计算得到具体的按键,从而转到相应的功能程序。
(1)置列线为输入状态(P1.4-P1.7为1),行线(P1.0-P1.3)先为0,即设定的P1.7-P1.0等于F0H并把该状态保存,接这读入当前P1口状态,不难理解,只要有按键(任何一个)按下,P1口的状态肯定不是原来设定的P1.7-P1.0等于F0H,通过判断就可以实现第一步的目的:
首先确认是否有按键按下?
(2)从第一行(P1.0行)开始一步步扫描,找出并确认按键在哪一行,扫描的方法步骤见表2。
行线每次只有一个为0,例如第1次扫描时设定P1.0为0,而P1.1-P1.3为1,显然,在当前扫描过程中按下按键如果不是P1.0行,那么P1口状态始终是FEH,因此表2说明中强调“只有任一次比较P1口不等于该数值,说明当前按键就在该行”就是这样的含义,其余各次比较也是一样道理,通过这样的判断,可以实现查找按键所在得行数。
(3)程序中定义了4个表KEYVALTAB1-KEYVALTAB4,分别存放的数据用来为比较程序服务而指示出各行的按键具体位置,表3列出按键标号和比较数据对应关系,在R2中存放行号的起始值,R0用来存放在每一行中查到按键的具体位置(R0范围是0-3),各行查找时比较的数据见表(3)。
读写可以简单分析就可以得到结果,假设通过程序先判断按键在第一行,显然如果S0按下,P1.7-P1.0的状态是11101110(S1连接于P1.0和P1.4),也就是表3中S0→EEH。
(4)KEYCALCU子程序中通过乘3运算用于散转指令JMP,注意LJMP是3字节指令,各按键对应的功能程序安排在一起串LJMP,所以通过乘3运算才能正确对应到各按键的执行目标功能程序。
关于各键的相应处理功能就较简单,只要对应不同的按键输入相应的控制命令,对于S0-S9是控制P3.3-P3.0不同的状态以得到所对应的BCD编码,对于S10-S13则是控制P3.4,P3.5的状态以实现对U3-U6的控制。
5.2软件控制音乐播放编译过程
软件控制音乐播放编译过程如下程序所示
ORG0000H
LJMPSTART
ORG000BH
INC20H;
中断服务,中断计数器加1
MOVTH0,#0DBH
MOVTL0,#0FFH;
11.0592M晶振,形成10毫秒中断
RETI
START:
MOVSP,#50H
MOVTL0,#0FFH
MOVTMOD,#01H
MOVIE,#82H
MUSIC0:
NOP
MOVDPTR,#DAT;
表头地址送DPTR
MOV20H,#00H;
中断计数器清0
MUSIC1:
CLRA;
A清零
MOVCA,@A+DPTR;
查表取代码
JZEND0;
是00H,则结束
CJNEA,#0FFH,MUSIC5;
如果不是休止符,往下执行,以R6作为音符频率控制,唱R7节拍那么久。
LJMPMUSIC3
MUSIC5:
MOVR6,A;
R6=18H音符的频率
INCDPTR;
DPTR加1
MOVA,#0
取节拍代码送R7
MOVR7,A;
R7=30H音符发音的时间
SETBTR0;
启动计数
MUSIC2:
CPLP3.2;
P3.2是音乐输出引脚
MOVA,R6
MOVR3,A;
R3=R6=18H
LCALLDEL
MOVA,R7
CJNEA,20H,MUSIC2;
中断计数器(20H)=R7否;
不等,则继续循环。
等于,则取下一代码
INCDPTR
LJMPMUSIC1
MUSIC3:
NOP;
休止100毫秒
CLRTR0
MOVR2,#0DH;
R2=13
MUSIC4:
MOVR3,#0FFH;
R3=255
LCALLDEL
DJNZR2,MUSIC4
END0:
MOVR2,#0FFH;
歌曲结束,延时1秒后继续
MUSIC6:
MOVR3,#00H
DJNZR2,MUSIC6
LJMPMUSIC0
DEL:
DEL3:
MOVR4,#02H
DEL4:
DJNZR4,DEL4
DJNZR3,DEL3
RET
DAT:
DB18H,30H,1CH,10H,20H,40H,1CH,10H
DB18H,10H,20H,10H,1CH,10H,18H,40H
DB1CH,20H,20H,20H,1CH,20H,18H,20H
DB20H,80H,0FFH,20H,30H,1CH,10H,18H
DB20H,15H,20H,1CH,20H,20H,20H,26H
DB40H,20H,20H,2BH,20H,26H,20H,20H
DB20H,30H,80H,0FFH,20H,20H,1CH,10H
DB18H,10H,20H,20H,26H,20H,2BH,20H
DB30H,20H,2BH,40H,20H,20H,1CH,10H
DB30H,20H,2BH,40H,20H,30H,1CH,10H
DB18H,20H,15H,20H,1CH,20H,20H,20H
DB20H,10H,1CH,10H,20H,20H,26H,20H
DB2BH,20H,30H,20H,2BH,40H,20H,15H
DB1FH,05H,20H,10H,1CH,10H,20H,20H
DB26H,20H,2BH,20H,30H,20H,2BH,40H
DB20H,30H,1CH,10H,18H,20H,15H,20H
DB1CH,20H,20H,20H,26H,40H,20H,20H
DB2BH,20H,26H,20H,20H,20H,30H,30H
DB20H,30H,1CH,10H,18H,40H,1CH,20H
DB20H,20H,26H,40H,13H,60H,18H,20H
DB15H,40H,13H,40H,18H,80H,00H
END
第6章结论
现当今,单片机的应用无处不在.利用单片机控制音乐播放也多不胜举,音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛.它有功能多﹑价格优﹑外部电路简单的特点,深受音乐爱好者及音乐芯片制造商的青昧,二十世纪跨越了三个“电”的时代,即电气时代,顾名思义,计算机成为我们生活的主流已是家喻户晓的事情,然而,单片机也随之飞速的