基于单片机的红外无线控制 音乐播放器.docx

上传人:b****5 文档编号:6872405 上传时间:2023-01-11 格式:DOCX 页数:20 大小:158.58KB
下载 相关 举报
基于单片机的红外无线控制 音乐播放器.docx_第1页
第1页 / 共20页
基于单片机的红外无线控制 音乐播放器.docx_第2页
第2页 / 共20页
基于单片机的红外无线控制 音乐播放器.docx_第3页
第3页 / 共20页
基于单片机的红外无线控制 音乐播放器.docx_第4页
第4页 / 共20页
基于单片机的红外无线控制 音乐播放器.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于单片机的红外无线控制 音乐播放器.docx

《基于单片机的红外无线控制 音乐播放器.docx》由会员分享,可在线阅读,更多相关《基于单片机的红外无线控制 音乐播放器.docx(20页珍藏版)》请在冰豆网上搜索。

基于单片机的红外无线控制 音乐播放器.docx

基于单片机的红外无线控制音乐播放器

中国矿业大学徐海学院

技能考核培训

 

姓名:

刘京京学号:

22110842

专业:

 信息11-2班 

题目:

基于单片机的红外无线控制

专题:

技能考核培训

指导教师:

有鹏老师翟晓东老师

设计地点:

电工电子实验室

时间:

2014年4月

 

通信系统综合设计训练任务书

学生姓名刘京京专业年级信息11-2班学号22110842

设计日期:

2014年4月5日至2014年4月10日

设计题目:

基于单片机的红外无线控制

设计专题题目:

简易MP3

设计主要内容和要求:

1.主要内容:

红外遥控解码

音乐播放

C语言程序设计

2.功能扩展要求

音乐的暂停和播放

音乐的选取

实现音乐器的播放

 

指导教师签字:

摘要:

现当今,单片机的应用无处不在.利用单片机控制音乐播放也多不胜举,音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛.它有功能多﹑价格优﹑外部电路简单的特点,深受音乐爱好者及音乐芯片制造商的青昧,用80C51 单片机及少数外部点路控制MUSIC播放,产生“生日快乐歌”,并伴有彩灯闪烁.利用软件的功能设置,使音乐和灯光有同步的效果.对于单片机产生音乐,关键是控制頻率的输出.我们知道,不同的声音对应不同的頻率,产生有规律的頻率输出就可以得到相应規律的聲音.音乐中,有8个基本音符:

do﹑re﹑mi﹑fa﹑so﹑la﹑xi﹑do,八个不同的音符对应著不同的頻率.只要我们对照音符输出相对应的頻率,就可以产生美妙的音乐了.本章中采用了T0中断的方法产生不同頻率,并用两键控制播放和停止。

这里,我用8051单片机控制音乐。

由键盘控制播放,用运算放大器的同相放大方式驱动SPEAKER。

 

关键词:

单片机 硬件系统 软件系统 红外遥感

 

目录

1绪论5

1.1概述5

1.2功能5

2硬件电路6

2.1总体设计方6

2.2单片机最小系统6

2.3红外遥控收发电路6

2.3.1红外遥控发射电路7

2.3.2红外遥控接收电路8

2.4蜂鸣器电路8

2.5LED指示灯电路9

3软件编程10

3.1C语言实现系统设计10

3.2乐谱的改编11

3.3实现功能11

参考文献12

附录13

 

1绪论

1.1概述

本设计采用红外线来遥控蜂鸣器使其播放音乐,红外遥控是如今广泛使用的一种通信和遥控手段;红外线遥控利用红外线来传输数据,这种情况下不需要实体连线,体积小,成本低,功能强;因此红外遥控设备已经广泛的应用在如今的电气设备的数据交互和设备控制中。

利用单片机演奏时音乐爱好者的兴趣之一,应用的范围也比较广泛。

所谓音乐播放器由单片机进行信息处理,再经过信号放大,由蜂鸣器发出乐曲声。

详细说来,演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。

这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。

众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;因此演奏时,要根据音符的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。

本文比较详细地介绍了音乐播放器的工作原理、设计思路、硬件的选择及相关作用、软件的实现方法以及详细的程序清单。

1.2功能

本设计以单片机为核心实现红外遥控音乐播放器功能,主要完成功能为四首歌曲的选择播放、暂停、暂停后断点播放,播放下一曲,播放上一曲以及流水灯显示音符等功能。

本设计中使用常见的红外遥控器进行控制,使用其中的1、2、3、4四个数字键(对应功能选择1、2、3、4四首歌曲),频道加、减两个按键(对应功能上一曲、下一曲),静音键(对应功能暂停),以及确定键(对应功能播放歌曲)

 

2硬件电路

2.1总体设计方

 

图1系统组成框图

本系统以AT89S52单片机为控制核心,以遥控器作为控制元件,以蜂鸣器作为执行器件。

通过按下遥控器相应按键向单片机发送控制信息(红外信号),单片机红外接收器收到该红外信号后进行解码然后通过P3.2口将解码后的控制信息送入单片机,单片机通过P2.5口控制蜂鸣器播放音乐

2.2单片机最小系统

 

2.3红外遥控收发电路

红外线遥控是目前使用最广泛的一种通信和遥控手段。

由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。

工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。

常用的红外遥控系统一般分发射和接收两个部分。

应用编/解码专用集成电路芯片来进行控制操作,如下图所示。

发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。

图2红外线遥控系统框图

2.3.1红外遥控发射电路

发射部分的主要元件为红外发光二极管。

它实际上是一只特殊的发光二极管;由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。

目前大量的使用的红外发光二极管发出的红外线波长为940nm左右。

遥控器的基本组成如图所示。

它主要由形成遥控信号的微处理器芯片、晶体振荡器、放大晶体管、红外发光二极管以及键盘矩阵组成。

图4遥控器电路图

工作原理:

微处理器芯片IC1内部的振荡器通过2、3脚与外部的振荡晶体X组成一个高频振荡器,产生高频振荡信号。

此信号送入定时信号发生器后进行分频产生正弦信号和定时脉冲信号。

正弦信号送入编码调制器作为载波信号;定时脉冲信号送致扫描信号发生器、键控输入编码器和指令编码器作为这些电路的时间标准信号。

IC1内部的扫描信号发生器产生五种不同时间的扫描脉冲信号,由5~9脚输出送至键盘矩阵电路。

当按下某一键时,相应于该功能按键的控制信号分别由10~14脚输入到键控编码器,输出相应功能的数码信号。

然后由指编码器输出指令码信号,经过调制器调制在载波信号上,形成包含有功能信息的高频脉冲串,由17脚输出经过晶体管BG放大,推动红外线发光二极管D发射出脉冲调制信号

2.3.2红外遥控接收电路

红外线遥控接收器的作用是将接收到的红外线遥控信号,经过放大、解调和整形后输出功能指令信号,送至微处理器进行识别和处理。

2.4蜂鸣器电路

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

 

2.5LED指示灯电路

 

3软件编程

3.1C语言实现系统设计

单片机应用系统的程序设计有两种方法:

一种是基于汇编语言的,另一种是基于C语言的。

汇编语言程序的机器代码生成效率高,但可读性较差,而C语言程序的可读性和可移植性远超过汇编语言。

用C语言编写单片机应用程序,不用具体组织、分配存储器资源和处理端口数据,但对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。

C语言具有以下主要特点:

①语言简洁,使用方便灵活。

它是程序设计语言中规模最小的语言之一。

ANSI标准C语言只有32个关键字,9种流程控制语句。

②程序可移植性好。

③表达能力强。

具有丰富的数据结构类型和多种运算符。

用户可灵活采用多种数据类型和使用各种运算符,实现复杂运算。

④表达方式灵活。

利用C语言的多种运算符可组成各种表达式,还可采用多种方法来获得表达式的值,使程序设计具有更大的灵活性。

⑤可进行结构化程序设计。

C语言以函数作为程序设计的基本单位,非常适合结构化程序设计。

⑥可直接操作计算机硬件。

C语言具有直接访问机器物理地址的能力,C51的编译器都可直接对单片机内部的SFR和I/O端口进行操作,可以直接访问片内、片外存储器,还可以进行各种为操作。

⑦生成的目标代码质量较高。

3.2乐谱的改编

单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。

这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。

众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。

在此程序中,通过两个数据表存放了事先算好的、各种音符频率所对应的、半周期的定时时间初始值。

低音、中音、高音和超高音,四个八度共28个音符。

演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。

3.3实现功能

分析红外遥控音乐播放的功能,包括选择播放歌曲、暂停、暂停后断点播放、结束播放歌曲,播放下一曲,播放上一曲,并且当播放歌曲的时候流水灯显示音阶。

 

参考文献

[1]华成英.童诗白.模拟电子技术基础[M] 北京:

高等教育出版社,2006 :

12-3

[2]陈朝大.单片机应用技术教程[J]华中科技大学出版社2003. 

[3]胡汉才.单片机原理及其接口技术[M].北京:

清华大学出版社,2006:

3:

1-12 

[4]陈燕春. 学习型14路红外遥控开关[J]. 单片机开发与应用, 2005, (6):

 22-25

 

 

附录

附录1:

程序

#include

#include

#include"delay.h"

#include"decode.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineFont_codeP0//字符码写地址

#definereg_codeP2//字位码写地址

sbitspeaker=P2^5;

#defineLEDP1

codeunsignedcharshuzu[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};

unsignedchartimer0h,timer0l,time;

//世上只有妈妈好数据表6,2,3,

codeunsignedcharsszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,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

};

codeunsignedcharsszymmh1[]={

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

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

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

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

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

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

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

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

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

0,0,0};

codeunsignedcharsszymmh2[]={

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

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

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

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

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

};

codeunsignedcharsszymmh3[]={

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

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

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

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

0,0,0

};

//音阶频率表高八位

codeunsignedcharFREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

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

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,

};

//音阶频率表低八位

codeunsignedcharFREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

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

0xEE,0x44,0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,

};

codeucharShow_Tab[]={

0xC0,/*0*/

0xF9,/*1*/

0xA4,/*2*/

0xB0,/*3*/

0x99,/*4*/

0x92,/*5*/

0x82,/*6*/

0xF8,/*7*/

0x80,/*8*/

0x90,/*9*/

0x88,/*A*/

0x83,/*b*/

0xC6,/*C*/

0xA1,/*d*/

0x86,/*E*/

0x8E/*F*/

};

codeucharS_Tab[8]={

0xfe,

0xfd,

0xfb,

0xf7,

0xef,

0xdf,

0xbf,

0x7f

};

unsignedcharDisplay_Buffer[8];//显示缓冲区

ucharbit_con;//字位码扫描计数器

externunsignedcharkey_value;//键值

externbitkey_flg;//按钮按下标志

externbitcycle_flg;//循环标志

voiddelay(unsignedchart)

{

unsignedchart1;

unsignedlongt2;

for(t1=0;t1

{

for(t2=0;t2<8000;t2++)

{

;

}

}

TR1=0;

}

voidt0int()interrupt3

{

TR1=0;

speaker=!

speaker;

TH1=timer0h;

TL1=timer0l;

TR1=1;

}

voidsong()

{

TH1=timer0h;

TL1=timer0l;

TR1=1;

delay(time);

}

voidmain()

{

unsignedchark,i,j,z;

TMOD=0x10;//置CT0定时工作方式1

EA=1;

ET1=1;//IE=0x82//CPU开中断,CT0开中断

delay_nus

(1);

delay_nms

(1);

reg_code=0xff;//关闭显示

for(bit_con=0;bit_con<8;bit_con++)Display_Buffer[bit_con]=Show_Tab[0];

bit_con=0;

Timer0init();//定时器0初始化

EX0init();//外部中断初始化

while

(1)

{

j=0;

if(key_flg)//解码生效,把遥控码值转移到显示区,数据码两位显示

{

key_flg=0;

Display_Buffer[0]=Show_Tab[(key_value&0xf0)>>4];

Display_Buffer[1]=Show_Tab[key_value&0x0f];

switch(z)

{

case0:

{

lop:

i=0;

while(i<10000)

{//音乐数组长度,唱完从头再来

k=sszymmh[i]+7*sszymmh[i+1]-1;

if(i%3==0)

{

j=sszymmh[i];

LED=shuzu[j-1];

}

if(key_value==0x47)

{

while

(1)

{

if(key_value==0x44)

break;

}

}

if(key_value==0x19)

{

gotolop;

break;

}

timer0h=FREQH[k];

timer0l=FREQL[k];

time=sszymmh[i+2];

i=i+3;

song();

if(key_value==0x0c)

{key_value=0;

z=0;break;

}

if(key_value==0x18)

{key_value=0;

z=1;break;

}

if(key_value==0x5e)

{key_value=0;

z=2;break;

}

if(key_value==0x08)

{key_value=0;

z=3;break;

}

if(key_value==0x40)

{key_value=0;

z=3;break;

}

if(key_value==0x43)

{key_value=0;

z=1;break;

}

}

}

;break;

case1:

{

lop1:

i=0;

while(i<1000)

{//音乐数组长度,唱完从头再来

k=sszymmh1[i]+7*sszymmh1[i+1]-1;

if(i%3==0)

{

j=sszymmh[i];

LED=shuzu[j-1];

}

if(key_value==0x47)

{

while

(1)

{

if(key_value==0x44)

break;

}

}

if(key_value==0x19)

{

gotolop1;

break;

}

timer0h=FREQH[k];

timer0l=FREQL[k];

time=sszymmh1[i+2];

i=i+3;

song();

if(key_value==0x0c)

{key_value=0;

z=0;break;

}

if(key_value==0x18)

{key_value=0;

z=1;break;

}

if(key_value==0x5e)

{key_value=0;

z=2;break;

}

if(key_value==0x08)

{key_value=0;

z=3;break;

}

if(key_value==0x40)

{key_value=0;

z=0;break;

}

if(key_value==0x43)

{key_value=0;

z=2;break;

}

}

}

;break;

case2:

{

lop2:

i=0;

while(i<1000)

{//音乐数组长度,唱完从头再来

k=sszymmh2[i]+7*sszymmh2[i+1]-1;

if(i%3==0)

{

j=sszymmh2[i];

LED=shuzu[j-1];

}

if(key_value==0x47)

{

while

(1)

{

if(key_value==0x44)

break;

}

}

if(key_value==0x19)

{

gotolop2;

break;

}

timer0h=FREQH[k];

timer0l=FREQL[k];

time=sszymmh

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1