无线音乐门铃设计与制作作品展示学生:学号:指导教师:完成时间:2017.06.15一、作品照片及测试报告1、作品照片图5发射模块作品正面照图6接收放音模块作品正面照图7作品反面照2、测试报告(1)硬件测试本作品采用万能板进行焊接,对焊接功底以及识图能力有一定要求。
电路中容易出现漏接,接错,短路等问题。
焊接之前,需检查所有元器件是否损坏。
对照原理图,仿真图进行排版,尽量减少跳线。
上电前,测试电源和地是否短路。
本作品须接无线模块,特别要注意正负极是否接反。
调试中发现了很多问题,犯了很多低级错误。
其实很多错误都是不应该犯的。
以下是我检测发现的问题:问题一:无线接收模块电源和地接反解决:因为没有多余的芯片,为了节约时间。
所以先短接Q1(连接扬声器的三极管模拟接收模块接收信号),看有无音乐播放。
问题二:短接Q1,有音乐播放。
但三极管的管脚关系搞错,把发射极和集电极焊错解决:对照原理图仔细检查三极管各管脚的连接,将焊错的三极管换掉。
按原理的连接关系从新焊接一个三极管。
问题三:按下开关键,没有音乐播放,液晶屏无显示。
解决:检测发现发射模块13脚少接一根线。
将线补齐。
问题四:无线发射模块的实物与原理图引脚顺序不一样,排版时没有注意解决:按照实物修改原理图,对照改好的原理图从新进行焊接。
问题五:无线发射电源和地接反,芯片发烫烧坏解决:买了一块芯片,从新接入电路问题六:液晶显示器12864在原理图中的19,20脚接反解决:老师指出12864和1602接线有问题,通过查阅资料,百度12864以及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开始播放下一首,液晶屏显示播放的音乐歌名,序号四、图纸及源程序1、仿真图2、原理图23、PCB图4、元件清单名称型号对应原理图编号数量电池12V 2 1 电容10U 25V C1 1 电容30P C2, C3 23MM 红色发光二极RED D1 1 管蜂鸣器蜂鸣器FM1 1 DC电源座子POWER P1 1 PNP三极管9012 Q1 1 NPN 三极管9013 Q2 1R1, R2, R4, R5, R6, R7,电阻10K8R9, R10电阻1K R3 1 电阻 4.7M R8 1 电阻820K R11 1 电阻2K R12 1315M 无线发射模块发射模块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<REG51.H>#define sound_amount 5 //歌曲的数量sbit pause=P3^0; //播放\暂停sbit speaker=P1^0; //无源蜂鸣器//////////////////////////////////////////////unsigned char timer0h,timer0l,time;//timer0h,timer0l为定时器T0的高低位初值,time为对应的节拍时间unsigned char music_num,num; //music_num为歌曲编号,music_num=0表示刚开机时的状态,num是查找歌曲数据表的地址signed char fre; //对应频率数据表的地址bit play_enable; //歌曲播放的使能标志位,用于播放\暂停void delay(unsigned char t); //延时子函数,控制发音的时间长度void delayms(unsigned int t); //普通延时子程序,可用于按键消抖void song(void); //演奏一个音符void music_play(void); //播放歌曲////////////////////////////////////////////////每三个数字,代表一个音符//第一个数字是音符的数值1234567之一(第几个音),代表哆来咪发...//第二个数字是0123之一,代表低音\中音\高音\超高音(第几个八度)//第三个数字是时间长度,以半拍为单位,乐曲数据表的结尾是三个0////////////////////////////////////////////////《两只老虎》unsigned char code song1[]={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};//《世上只有妈妈好》unsigned char code song2[]={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};//《当你孤单你会想起谁》unsigned char code song3[]={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 };//《乡间小路》unsigned char code song4[]={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};//《送别》unsigned char code song5[]={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个频率数据unsigned char code FREQH[]={0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567// 频率-半周期数据表低八位unsigned char code FREQL[]={0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567void main(void){TMOD=0x11; //T0 T1 均在工作方式1ET0=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; //歌曲序号置1num=0; //从头播放play_enable=1; //允许播放}else{play_enable=~play_enable;speaker=1;}while(!pause) //若按着暂停键不放手时的处理{if(play_enable==0){} //如果是暂停,则显示时间不变//(暂停时play_enable==0)}}//暂停键处理结束}//while结束}}void delayms(unsigned int t) //MS延时子程序{unsigned int i,j;for(i=0;i<t;i++){for(j=0;j<123;j++);}}void delay(unsigned char t) //延时子函数,控制发音的时间长度,每个节拍0.4S{unsigned char t1;unsigned long t2;for(t1=0;t1<t;t1++) //嵌套循环, 共延时t个半拍{for(t2=0;t2<8000;t2++) //延时期间, 可进入T0中断去发音{;}}TR0=0; //关闭T0, 停止发音}void timer0(void) interrupt 1 //T0中断程序,控制发音的音调{speaker=!speaker;//输出方波, 发音TH0=timer0h; //下次的中断时间,这个时间控制音调高低TL0=timer0l;}void song(void) //演奏一个音符{TH0=timer0h; //控制音调TL0=timer0l;TR0=1; //启动T0, 由T0输出方波发音delay(time); //每个音符的演奏时间}//////////////////////////////////////////////////////////////////////////////////// void music_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();}//////////////////////////////////////////////////////////////////////////////////// }//程序结束。