




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机的音乐播放器设计摘要: 利用单片机演奏音乐大概是单片机爱好者感兴趣的问题之一。利用单片机控制音乐播放也多不胜举.音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛。它有功能多价格优外围电路简单的特点,备受音乐爱好者及音乐芯片制造商的青昧。用AT89S51单电机及少数外围电路控制音乐播放,产生几首不同的歌曲。 对于单片机产生音乐,关键是控制频率的输出。我们知道,不同的声音对应不同的频率,产生有规律的频率输出就可以得到相应规律的声音。本文应用单片机和音乐发声的相关知识设计了一个简单的音乐播放器。所谓音乐播放器,由单片机进行信息处理,再经过信号放大,由耳机或扬声器(喇叭)放出乐曲声。我们知道,振动产生声音,振动频率不同,所发出的声音也就不同,有规律的振动发出的声音叫“乐音”,音乐由音频和节拍构成,音频即发声的频率,节拍即延时的长短,因此利用单片机的定时器/计数器产生一定频率的方 关键词:8051单片机,中断,编程,音乐,音乐播放器一、 设计要实现的功能(1):利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏歌曲。(2):采用共阳七段数码管显示当前播放歌曲的序号。(3):可以通过按键实现暂停、三首歌之间换歌的基本操作。二、 功能说明(1)硬件电路中P1.0口为音频输出端口。(2)用P3.0,P3.1和P3.2分别作为切换三首歌曲的功能键,P3.3作为暂停键,当按下时停止播放,弹开后继续播放。 (3)用P0.0-P0.7这几个管脚来控制七段数码管的显示。(4)单片机18和19号管教接12MHZ的晶振,其中电容皆为30PF的瓷片电容。(5)单片机40号管脚接VCC,20号管脚接地。31号管脚接VCC,9号管脚外接复位电路。三、 主要元器件介绍 3.1:AT89S52AT89S52是一种低功耗、高性能的CMOS工艺的8位单片机。它带有8KB的可在线编程的 Flash 存储器,该单片机采用了ATMEL公司的高密度、非易失性存储器技术,与工业上标准型80C51单片机的指令系统及引脚完全兼容;片内的Flash 存储器可在线重新编程,或使用通用的非易失性存储器编程器;通用的8位CPU与在线可编程Flash集成在一块芯片上,从而使AT89S52功能更加完善,应用更加灵活;具有较高的性能价格比,使其在嵌入式控制系统中有着广泛的应用前景。3.2独立式键盘单片机系统中常见的键盘有:触摸式键盘、薄膜键盘和按键式键盘。其中按键式键盘是最常用的。键的闭合与否反映在行线输出电压上就是呈现高电平或者低电平。如果呈现高电平,表示键断开,低电平则表示键闭合,通过对行线的电平高、低状态的检测,便可以确认按键按下以及按键释放与否。本设计使用独立式按键,分别于单片机的P3.0,P3.1和P3.2,P3.3连接。独立式键盘电路3.3共阳七段数码管LED数码管是由发光二极管构成的,亦称半导体数码管。将条状发光二极管按照共阳极(正极)的方法连接,组成“8”字,再把发光二极管另一电极作笔段电极,就构成了LED数码管。若按规定使某些笔段上的发光二极管发光,就能显示从09的一系列数字。同荧光数码管(VFD)、辉光数码管(NRT)相比,它具有:体积小、功耗低、耐震动、寿命长、亮度高、单色性好、发光响应的时间短,能与TTL、CMOS电路兼容等的数显器件。如上图所示是共阳极七段数码管的原理图 本设计使用静态显示驱动静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。3.4蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。三:软件流程图主程序流程图 键选歌曲与暂停四:系统仿真图五:音乐播放器C51源程序:#include sbit SPK=P10; /蜂鸣器sbit a=P30;/选择歌曲1的按键;sbit b=P31; /选择歌曲2的按键;sbit c=P32; /选择歌曲3的按键;sbit f=P33;/控制暂停与继续;unsigned char code * data song; /指向具体歌的指针unsigned int data j; /取码指针unsigned char data i; /用于循环unsigned char data k; /几个1/4拍unsigned char data l; /第几个码void delay(void);unsigned char code yin30=0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0xFB,0x04,0xFA,0x67,0xFE,0x85; /C调各音符频率与计数初值T的对照表/第一首 兰花草unsigned char code song146=0x12,0x52,0x52,0x52,0x56,0x42, 0x32,0x42,0x32,0x22,0x18, 0x82,0x82,0x82,0x82,0x86,0x72, 0xB2,0x72,0x72,0x62,0x58, 0x52,0x82,0x82,0x72,0x56,0x42, 0x32,0x42,0x32,0x22,0x16,0xB2, 0xB2,0x32,0x32,0x22,0x16,0x52, 0x42,0x32,0x22,0xC2,0x88,0xFF;/第二首 祈祷unsigned char code song237=0xC4,0x12,0x32,0x44,0x42,0x52, 0x52,0x44,0x32,0x32,0x12,0x14, 0x12,0x12,0x32,0x42,0x54,0x44, 0x4F,0xC4,0x12,0x32,0x44,0x42,0x72, 0x58,0x42,0x32,0x34, 0x14,0x12,0x32,0x34,0x32,0x12, 0x1F,0xFF;/第三首 最浪漫的事unsigned char code song3138=0xC2,0xC2,0x12,0x34,0x32,0x32,0x32,0x12,0x12,0x52, 0x54,0x02,0xC2,0x12, 0x32,0x32,0x32,0x32,0x34,0x52,0x72, 0x7C,0x02,0x72, 0x82,0x72,0x82,0x72,0x84,0x72,0x41,0x51, 0x52,0x41,0x31,0x34,0x02,0x32,0x32,0x12, 0x34,0x32,0x12,0x32,0x54,0x42, 0x32,0x32,0x32,0x32,0x34,0x52,0x72, 0x7C,0x72,0x72, 0x82,0x72,0x82,0x72,0x84,0x82,0x72, 0x42,0x52,0x42,0x34,0x12,0x12,0x32, 0xC4,0x52,0x42,0x34,0x12,0x12, 0x31,0x41,0x32,0x3C, 0x84,0x82,0x72,0x82,0x72,0x52,0x72, 0x78,0x02,0x72,0x82,0xA2, 0x84,0x82,0x72,0x82,0x72,0x82,0x32, 0x0A,0x72,0x82,0xA2, 0x38,0x02,0x32,0x42,0x52, 0x64,0x62,0x72,0x82,0x82,0x72,0x82, 0x82,0xA2,0x82,0x82,0x82,0xA2,0x82,0x72, 0x78,0x72,0x32,0x82,0x72, 0x78,0x72,0x82,0xA3,0x51, 0x42,0x51,0x41,0x3C,0xFF;void delay1() /延时20ms子程序,用于播放歌曲频率之间的延时; unsigned int m,n; for(m=1000;m0;m-) for(n=120;n0;n-);void song1() /当P30对应的键a(P3.0)按下时播放歌曲1 delay1(); if(a=1) /确定键a已经弹起; song=song1; / 播放第一首歌曲;P0=0x06; / 数码管显示1; void song2() /当P31对应的键b(P3.1)按下时播放歌曲2 delay1(); if(b=1) 确定键b已经弹起; song=song2; / 播放第二首歌曲;P0=0x5b; / 数码管显示2; void song3() /当P32对应的键c(P3.2)按下时播放歌曲3 delay1(); if(c=1) 确定键b已经弹起; song=song3; / 播放第三首歌曲; P0=0x4f; / 数码管显示3; void another()/当P33对应的键f(P3.3)按下时暂停 delay1(); if(f=1) P0=0x3f; / 数码管显示0; void main() TMOD=0x01; /timer0工作在方式1 IE=0x82; /EA=1开总中断;ETO=1开总中断计时器T0中断允许; song=song1; /预置演奏第一首; P0=0x06; / 数码管显示1; while(1) j=0; while(*(song+j)!=0xFF) /是否取到结束码 if(a=0) / 判断是否键a(P3.0)按下; song1(); Break; if(b=0) / 判断是否键b(P3.1)按下; song1(); Break; if(c=0) / 判断是否键c(P3.2)按下; song1(); Break; if(f=0) / 判断是否键f(P3.3)按下; do ; while(e=0); k=*(song+j)&0x0F; /后4位为多少个1/4拍 l=*(song+j)4; /song(song+j)中所放的每个字节 /前4位乘2表示为音符频率在数组yin中的位置 TH0=yin2*l; /置初值 TL0=yin2*l+1; TR0=1; /起动定时器0 if (yin2*l=0xff)&(yin2*l+1=0xff) /如果取到的都是休止符,则不输出音频 TR0=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 历史城市文化产业发展咨询基础知识点归纳
- 石大学前儿童保育学课件1-4消化系统
- 预分配模型与环境经济学的交叉研究-洞察阐释
- AI在生理学教学中的发展历程与趋势分析
- 社区嵌入式托育服务模式的创新与可持续发展路径
- 原料药企业经营管理方案
- 提升政法队伍职业道德与服务意识的行动方案
- 松岗街道松涛花园老旧小区改造工程可行性研究报告
- 2025至2030年中国玻璃扁珠行业投资前景及策略咨询报告
- 2025至2030年中国熔接保护套管行业投资前景及策略咨询报告
- 学科教学与心理健康教育的融合案例分析
- 丝绸产品设计创新-洞察分析
- 管道沟槽开挖施工方案
- 连接器行业专业英语高频词句
- 医院监控设备故障应急预案
- 护理安全隐患及防范措施
- 葡萄球菌感染病因介绍
- 【MOOC】信息组织原理与利用-武汉大学 中国大学慕课MOOC答案
- 矿井地质灾害防治中长期规划(2018-2022年)
- 【MOOC】供应链管理-四川大学 中国大学慕课MOOC答案
- 抖音本地生活BD培训
评论
0/150
提交评论