无线音乐门铃设计与制作.docx
《无线音乐门铃设计与制作.docx》由会员分享,可在线阅读,更多相关《无线音乐门铃设计与制作.docx(18页珍藏版)》请在冰豆网上搜索。
无线音乐门铃设计与制作
无线音乐门铃
设计与制作作品展示
学生:
学号:
指导教师:
完成时间:
2017.06.15
一、作品照片及测试报告
1、作品照片
图5发射模块作品正面照
图6接收放音模块作品正面照
图7作品反面照
2、测试报告
(1)硬件测试
本作品采用万能板进行焊接,对焊接功底以及识图能力有一定要求。
电路中容易出现漏接,接错,短路等问题。
焊接之前,需检查所有元器件是否损坏。
对照原理图,仿真图进行排版,尽量减少跳线。
上电前,测试电源和地是否短路。
本作品须接无线模块,特别要注意正负极是否接反。
调试中发现了很多问题,犯了很多低级错误。
其实很多错误都是不应该犯的。
以下是我检测发现的问题:
问题一:
无线接收模块电源和地接反
解决:
因为没有多余的芯片,为了节约时间。
所以先短接Q1(连接扬声器的三极管模拟接收模块接收信号),看有无音乐播放。
问题二:
短接Q1,有音乐播放。
但三极管的管脚关系搞错,把发射极和集电极焊错
解决:
对照原理图仔细检查三极管各管脚的连接,将焊错的三极管换掉。
按原理的连接关系从新焊接一个三极管。
问题三:
按下开关键,没有音乐播放,液晶屏无显示。
解决:
检测发现发射模块13脚少接一根线。
将线补齐。
问题四:
无线发射模块的实物与原理图引脚顺序不一样,排版时没有注意
解决:
按照实物修改原理图,对照改好的原理图从新进行焊接。
问题五:
无线发射电源和地接反,芯片发烫烧坏
解决:
买了一块芯片,从新接入电路
问题六:
液晶显示器12864在原理图中的19,20脚接反
解决:
老师指出12864和1602接线有问题,通过查阅资料,XX12864以及1602的功能表发现确实接错,将焊错的线改掉
(2)软件测试
本作品采用单片机进行编程,单片机编程较为复杂,在编程调试中我遇到了很多问题。
我采用分段的方法进行编程,一段程序一段程序的编写调试。
首先,将程序下入仿真软件中进行仿真。
然后,将程序下入学习开发板上,在下载之前在程序中把P2.5换成P3.0,模拟发射信号P2.7换成P1.0。
测试能否正常播放音乐和显示。
再将程序下本作品调试。
在老师的悉心指导下,最终完成了任务设计书的要求。
下面是我编程中遇到的问题及解决方法:
问题一:
1602液晶显示
解决:
由于平时上课并未接触过液晶显示的程序,只学习了点阵,通过自己在网上查找资料。
终于写出了一个液晶显示程序,经过仿真发现只能自动循环播放,按键不起作用。
在老师的指导下,终于实现了任务设计书的要求。
问题二:
显示与音乐播放不能同时进行
解决:
(3)系统功能测试
①电源输入电路:
将发射电路接入+12V直流电源,接收显示电路接入+5V直流电源。
看电源指示灯是否被点亮,若发光二极管不亮说明电源电路未接通
②程序下载电路:
将下载线接入下载端口,看是否能下载程序,若不能下载则说明下载电路有问题
③功放电路:
短接与扬声器连接的三极管,看是否有音乐播放,若没有音乐播放说明功放电路存在问题
④无线解码电路:
按下发射模块的开关,看是否有音乐播放,若没有音乐播放则说明无线发射或接收模块电路有问题
⑤显示电路:
按下开关,看液晶显示屏是否显示相应的歌曲,若没有显示或与播放音乐不同步则说明液晶显示或程序出问题了
⑥复位电路:
按下复位开关,看是否能进行系统复位,若不能正常复位则说明复位电路有问题
二、演示过程视频
三、作品操作使用说明
1,将本设计作品主要由单片机最小系统,显示电路,电源输入电路,无线接收发射电路构成。
图6所示接入+5V电源(如图6所示,下面靠右的端口为接收芯片接口从左到右依次为GND,DATA,DATA,VCC。
自锁开关下面的排针为下载端口,从上到下依次为VCC,TXD,RXD,GND。
自锁开关左边的接口为电源接口,电源接口左上排针为扬声器接口右正左负,最左边有两个液晶接口最左边为1602液晶显示屏接口,另一个为12864液晶显示屏接口)
2,将本设计作品图5所示接入+12V电源(如图5所示,右边下的排针为电源正极接口,靠近2262芯片的排针为电源负极。
上面靠左为无线发射芯片接口从左到右依次为GND,VCC,DATA)
3,按下一次原理图所示电路中的S3,开始播放音乐,如果一直没有键按下播放一首后自动停止。
如果再按下一次则暂停播放,液晶屏显示播放的音乐歌名,序号
4,一首歌播放完毕,再次按下S3开始播放下一首,液晶屏显示播放的音乐歌名,序号
4、图纸及源程序
1、仿真图
2、原理图
2
3、PCB图
4、元件清单
名称
型号
对应原理图编号
数量
电池
12V
2
1
电容
10U25V
C1
1
电容
30P
C2,C3
2
3MM红色发光二极管
RED
D1
1
蜂鸣器
蜂鸣器
FM1
1
DC电源座子
POWER
P1
1
PNP三极管
9012
Q1
1
NPN三极管
9013
Q2
1
电阻
10K
R1,R2,R4,R5,R6,R7,R9,R10
8
电阻
1K
R3
1
电阻
4.7M
R8
1
电阻
820K
R11
1
电阻
2K
R12
1
315M无线发射模块
发射模块
RX1
1
电源开关
SWITCH
S1
1
微动开关
SW-PB
S2,S3
2
无线编码芯片
SC2262
SC1
1
无线解码芯片
SC2272
SC2
1
315M无线接收模块
接收模块
TX1
1
51单片机
89c51-DIP40
U1
1
晶振
12M
X1
1
其它材料
USB电源线或电池盒
1
塑料支柱配套螺丝
4
万用板9*15cm
1
焊锡丝
若干
跳线/飞线
若干
5、源程序
//////////////////////////////////////////////
//51单片机无线遥控门铃程序
//////////////////////////////////////////////
#include
#definesound_amount5//歌曲的数量
sbitpause=P3^0;//播放\暂停
sbitspeaker=P1^0;//无源蜂鸣器
//////////////////////////////////////////////
unsignedchartimer0h,timer0l,time;//timer0h,timer0l为定时器T0的高低位初值,time为对应的节拍时间
unsignedcharmusic_num,num;//music_num为歌曲编号,music_num=0表示刚开机时的状态,num是查找歌曲数据表的地址
signedcharfre;//对应频率数据表的地址
bitplay_enable;//歌曲播放的使能标志位,用于播放\暂停
voiddelay(unsignedchart);//延时子函数,控制发音的时间长度
voiddelayms(unsignedintt);//普通延时子程序,可用于按键消抖
voidsong(void);//演奏一个音符
voidmusic_play(void);//播放歌曲
//////////////////////////////////////////////
//每三个数字,代表一个音符
//第一个数字是音符的数值1234567之一(第几个音),代表哆来咪发...
//第二个数字是0123之一,代表低音\中音\高音\超高音(第几个八度)
//第三个数字是时间长度,以半拍为单位,乐曲数据表的结尾是三个0
//////////////////////////////////////////////
//《两只老虎》
unsignedcharcodesong1[]={
5,1,1,5,1,1,6,1,2,5,1,2,1,2,2,7,1,4,
5,1,1,5,1,1,6,1,2,5,1,2,2,2,2,1,2,4,
5,1,1,5,1,1,5,2,2,3,2,2,1,2,2,7,1,2,6,1,2,
4,2,1,4,2,1,3,2,2,1,2,2,2,2,2,1,2,4,0,0,0};
//《世上只有妈妈好》
unsignedcharcodesong2[]={
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个半拍;
//...
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};
//《当你孤单你会想起谁》
unsignedcharcodesong3[]={
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,
1,2,2,1,2,1,2,2,1,1,2,2,7,1,1,6,1,1,7,1,2,3,2,2,7,1,2,7,1,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};
//《乡间小路》
unsignedcharcodesong4[]={
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,
4,1,2,3,1,2,2,1,1,1,1,1,2,1,4,7,0,1,7,0,1,7,0,1,6,0,1,
5,0,1,5,0,1,6,0,1,7,0,1,7,0,1,6,0,1,5,0,1,6,0,4,6,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};
//《送别》
unsignedcharcodesong5[]={
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,
3,1,1,4,1,2,7,0,1,1,1,4,6,1,2,1,2,2,1,2,4,7,1,2,6,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};
//频率-半周期数据表高八位共保存了四个八度的28个频率数据
unsignedcharcodeFREQH[]={
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
//频率-半周期数据表低八位
unsignedcharcodeFREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,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
voidmain(void)
{
TMOD=0x11;//T0T1均在工作方式1
ET0=1;//T0开中断
EA=1;//CPU开中断
while
(1)
{
music_play();//根据当前状态播放相应歌曲的某个音符
if(!
pause)//暂停键处理
{
delayms(5);
if(!
pause)
{
if(music_num==0)//music_num=0只有在刚开机,且未按下暂停键时存在,表示刚开机时的状态,按下后从第一首开始播放
{
music_num=1;//歌曲序号置1
num=0;//从头播放
play_enable=1;//允许播放
}
else
{
play_enable=~play_enable;
speaker=1;
}
while(!
pause)//若按着暂停键不放手时的处理
{
if(play_enable==0){}//如果是暂停,则显示时间不变//(暂停时play_enable==0)
}
}//暂停键处理结束
}//while结束
}
}
voiddelayms(unsignedintt)//MS延时子程序
{
unsignedinti,j;
for(i=0;i{
for(j=0;j<123;j++)
;
}
}
voiddelay(unsignedchart)//延时子函数,控制发音的时间长度,每个节拍0.4S
{
unsignedchart1;
unsignedlongt2;
for(t1=0;t1{
for(t2=0;t2<8000;t2++)//延时期间,可进入T0中断去发音
{
;
}
}
TR0=0;//关闭T0,停止发音
}
voidtimer0(void)interrupt1//T0中断程序,控制发音的音调
{
speaker=!
speaker;//输出方波,发音
TH0=timer0h;//下次的中断时间,这个时间控制音调高低
TL0=timer0l;
}
voidsong(void)//演奏一个音符
{
TH0=timer0h;//控制音调
TL0=timer0l;
TR0=1;//启动T0,由T0输出方波发音
delay(time);//每个音符的演奏时间
}
////////////////////////////////////////////////////////////////////////////////////
voidmusic_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==-1)//判断歌曲的结束位,结束后转到下一首
{
num=0;//下一首从头播放
music_num=2;
play_enable=0;
}
song();//发出一个音符
}
////////////////////////////////////////////////////////////////////////////////////
if((music_num==2)&&(play_enable==1))
{
fre=song2[num]+7*song2[num+1]-1;
timer0h=FREQH[fre];
timer0l=FREQL[fre];
time=song2[num+2];
num+=3;
if(fre==-1)
{
num=0;
music_num=3;
play_enable=0;
}
song();
}
////////////////////////////////////////////////////////////////////////////////////
if((music_num==3)&&(play_enable==1))
{
fre=song3[num]+7*song3[num+1]-1;
timer0h=FREQH[fre];
timer0l=FREQL[fre];
time=song3[num+2];
num+=3;
if(fre==-1)
{
num=0;
music_num=4;
play_enable=0;
}
song();
}
////////////////////////////////////////////////////////////////////////////////////
if((music_num==4)&&(play_enable==1))
{
fre=song4[num]+7*song4[num+1]-1;
timer0h=FREQH[fre];
timer0l=FREQL[fre];
time=song4[num+2];
num+=3;
if(fre==-1)
{
num=0;
music_num=5;
play_enable=0;
}
song();
}
////////////////////////////////////////////////////////////////////////////////////
if((music_num==5)&&(play_enable==1))
{
fre=song5[num]+7*song5[num+1]-1;
timer0h=FREQH[fre];
timer0l=FREQL[fre];
time=song5[num+2];
num+=3;
if(fre==-1)
{
num=0;
music_num=1;
play_enable=0;
}
song();
}
////////////////////////////////////////////////////////////////////////////////////
}
//程序结束