遥控电子琴实验报告
摘要:电子琴是现代电子科技与音乐结合的产物,是一种新型的乐器。它在现
代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
我们设计的这个红外遥控电子琴以单片机做为主控核心,与蜂鸣器、红外遥控器相连。这个设计主要是利用单片机的定时器,使它产出不同的频率,调整频率来产生相应的音调。在红外遥控器上有21个键,按纵向顺序分别对应电子琴三个音阶的1-7音。
目 录
一、需求分析„„„„„„„„„„„„„„„„„„„„„„ 3
二、总体设计„„„„„„„„„„„„„„„„„„„„„„ 3
三、详细设计„„„„„„„„„„„„„„„„„„„„„„ 12
四、收获„„„„„„„„„„„„„„„„„„„„„„„„ 15
五、附录„„„„„„„„„„„„„„„„„„„„„„„„ 16
一、需求分析
大家都知道当物体振动时,能够发出声音。振动的频率不同,声音的音调就不同。在简易电子琴里有许多特殊的电装置,每个电装置一工作,就会使喇叭发出一定频率的声音。当按动某个琴键时,就会使与它对应的电装置工作,从而使喇叭发出某种音调的声音。
简单的说就是按键触发信号发给处理器,再由处理器调用音色库音色通过功放电路输出或者通过数码接口进行数字输出。振荡器是根据需要产生一定频率的振荡信号,振荡信号通过分频器分解成不同频率的信号输送到放大器,放大器将信号放大,推动扬声器发出声音。按下遥控器的一个键,就等于接通一只开关,只允许某一种频率的信号通过到放大器里去,扬声器就发出一个音来。这样,按照一定的演奏规律来按键,就能奏出美妙的音乐来。
利用定时器可发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同音调。其次,定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平,由于定时参数不同,就发出不同频率的脉冲。
当系统扫描到红外遥控器上有键按下,则快速检测出是哪个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,然后蜂鸣器发出一个音调。
二、总体设计
1、红外遥控发射电路结构框图:
2、红外遥控发射电路管脚图:
3、红外遥控发射电路管脚说明:
4、红外遥控发射电路编码方式:
WD6122 所发射的一帧码含有一个引导码,16位的用户编码和8位的键数据码、键数据码的反码也同时被传送。
引导码由一个9ms的载波波形和4.5ms的关断时间构成,它作为随后发射的码的引导,这样当接收系统是由微处理器构成的时候,能更有效地处理码的接收与检测及其它各项控制之间的时序关系。编码采用脉冲位置调制方式(PPM)。利用脉冲之间的时间间隔来区分“0”和“1”。每次8位的码被传送之后,它们的反码也被传送,减少了系统的误码率。 5、红外遥控发射电路遥控输出波形: WD6122 的输出波形如下图所示
:
6、红外遥控器键码图:
初始化设置:
#include #include
#define uchar unsigned char #define uint unsigned int
uint code yindiao[]={63625,63833,64019,64104,64260,64400,64524, //低音 64580,64685,64778,64820,64898,64968,65030, //中音 65058,65110,65157,65178,65217,65252,65283}; //高音 uchar n,ms,
num;
void qiuzhi(uchar num); void delay(uchar x); void beep(uchar ms); void delay1(uchar x);
sbit IRIN = P3^2; //红外接收器数据线 sbit BEEP = P1^5; //蜂鸣器驱动线 uchar IRCOM[7];
红外接受函数:
void IR_IN() interrupt 0 using 0 {
uchar j,k,N=0; EX0 = 0; //关掉外部中断防止中断的再次发生进入检测引导码阶段(9ms
的低电平4.5ms的高电平)
delay(15); if (IRIN==1) { EX0 =1; //9ms的检测检测结束从新打开外部中断 return; } //确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {delay(1);}
for (j=0;j=30) { EX0=1; return; } //0.14ms计数过长自动离开。 } //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //高电平持续时间大于1.12ms则数据最高位补“1”
N=0; } }
if (IRCOM[2]!=~IRCOM[3]) // 判断有没有误码(有责放弃没有判断键码)
{ EX0=1; return; }
switch(IRCOM[2]) { case 0x45: num=0; qiuzhi(num); ms=n; break; case 0x44: num=1; qiuzhi(num); ms=n; break; case 0x07: num=2; qiuzhi(num); ms=n; break; case 0x16: num=3; qiuzhi(num); ms=n; break; case 0x0c: num=4; qiuzhi(num); ms=n; break; case 0x08: num=5; qiuzhi(num); ms=n; break; case 0x42: num=6; qiuzhi(num); ms=n;
break; case 0x46: num=7; qiuzhi(num); ms=n; break; case 0x40: num=8; qiuzhi(num); ms=n; break; case 0x15: num=9; qiuzhi(num); ms=n; break; case 0x19: num=10; qiuzhi(num); ms=n; break; case 0x18: num=11; qiuzhi(num); ms=n; break; case 0x1c: num=12; qiuzhi(num); ms=n; break; case 0x52: num=13; qiuzhi(num); ms=n; break; case 0x47: num=14; qiuzhi(num); ms=n; break; case 0x43: num=15; qiuzhi(num);
ms=n; break; case 0x09: num=16; qiuzhi(num); ms=n; break; case 0x0d: num=17; qiuzhi(num); ms=n; break; case 0x5e: num=18; qiuzhi(num); ms=n; break; case 0x5a: num=19; qiuzhi(num); ms=n; break; case 0x4a: num=20; qiuzhi(num); ms=n; break; default: break; }
beep(ms); EX0 = 1; }
计算频率函数:
void qiuzhi(uchar num) { n=(65536-yindiao[num])/30; }
蜂鸣器函数:
void beep(uchar ms) //蜂鸣器{
unsigned char i; for (i=0;i
delay1(ms);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
}
延时函数:
void delay(unsigned char x) //x*0.14ms
{
unsigned char i;
while(x--)
{
for (i = 0; i
}
}
void delay1(unsigned char x) //x*0.03ms
{
unsigned char i;
while(x--)
{
for (i = 0; i
}
}
主函数:
void main()
{
IRIN=1; //I/O口初始化
BEEP=1;
IE = 0x81; //允许总中断中断,使能 INT0 外部中断
IT0=1;
while(1);
}
三、详细设计(硬件(和cpu的连法)软件(扫描方式,具体的值) 连线图:
CPU
蜂鸣器
红外
振荡电路
程序流程图:
四、收获 通过两个多星期的课程设计,从选题到查资料,从完善原理图到写报告文档,让我明白了课程设计是名副其实的综合性训练,不仅要运用学过的单片机技术及应用,还要学会查阅各种图书资料和工具书,并将新知识和所学的结合起来为自己所用。要注意积累每次的体会和错误,下次碰到该注意的地方就要小心点,碰到出过错误的地方就要格外注意不要再犯同样的错误,这种方法可以适用做任何一件事。在设计中遇到一些困难和问题,在向老师请教和与同学的讨论中,解决了问题,觉得很有收获。
在为期两周的课程设计当中,感触最深的便是实践联系理论的重要性,当遇到实际问题时,我们要学会结合书本知识、查阅资料才能解决问题。运用所学的
知识,一步一步的去探索,才可以解决遇到的问题。本次实习使我们对电子元件及电路设计有一定的感性和理性认识;培养和锻炼我们的实际动手能力。使我们的理论知识与实践充分地结合,作到不仅具有专业知识,而且还具有实践动手能力,能分析问题和解决问题,为以后的顺利就业作好准备。本次实习的对我们很重要,是我们应用电子技术专业学生实践中的重要环节。在以前我们学的都是一些理论知识。两周的的时间虽然很短,但是我们学到的知识却很多,以前我们光只注意一些理论知识,并没有专门的练习我们的实际动手能力。这次的实习使我意识到我的操作能力的不足,在理论上也有很多的缺陷。要在以后的学习中不断提高自己。
五、附录: