




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告题 目: 数字音乐盒学 生: 指导老师: 系 别: 专 业: 班 级: 学 号: 2014年9月目录一、绪论31.1课题背景31.2国内外研究现状及发展趋势3二、数字音乐盒的总体设计42.1设计基本要求42.2总体设计42.3方案论证与比较52.4本章小结6三、硬件设计63.1硬件设计原则63.2LCD显示部分硬件73.3按键部分硬件143.4蜂鸣器驱动153.5PCB设计16四、软件设计174.1开发环境174.2软件设计18五、系统展示和测试255.1程序:见附录255.2下载程序255.3调试26六、总结286.1系统总结286.2不足和展望296.3个人心得29附录一:程序:29附录二、电路原理图38附录三、数据分配38参考文献38一、绪论传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁 钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富1.1课题背景音乐盒的起源,可追溯至中世纪欧洲文艺复兴时期。当时为使教会的的钟塔报时,而将大小的钟表上机械装置,被称为“可发出声音的组钟”。 1598年,意大利籍耶稣会士利玛窦第一次来到北京,随行礼物中就有八音琴一台。这是有史书记载的最早进入中国的八音琴。经过各种的发明创造,1780年前后,拉匀芳的瑞士人从人偶自动钟的原理获得启示,发明了一种令人赞叹的机制机械鸟鸣钟。 1796年,日内瓦钟匠的发明,给机械音乐盒带来了革命性的改变,使音乐盒的体积缩小达到极限,而在接下来的世纪得以成功的发展。1870年,德国的发明家首创了盘式音乐盒。 17世纪初,音乐盒的工业成为瑞士超过制表和缝制蕾丝业的第一大产业,这使得位于瑞士侏罗山边的小镇闻名于世。1.2国内外研究现状及发展趋势1992年,中国第一台具有自主知识产权的八音琴在中国宁波韵升的诞生,标志着中国,全方位地参与全球音乐盒这块巨 大蛋糕的市场竞争,经过十多年的努力,韵升 对八音琴的制造技术进行了更多的技术更新, 取得了多个国家和地区50余项发明专利。这使 得音乐盒无论在音质,音量,谱曲,和外观设计等方面都有了更大的改进。目前,韵升八音琴已占据全球八音琴市场份额的1/4,仅次于 日本Sankyo,位居全球第二位。 音乐盒300多年的产品发展,同时也是人类文明300多年发 展的历史鉴证。每个不同时期的音乐盒造型,都能折射出当时不同的社会心态和文明发展现状,它也成了时代的一面镜子。二、数字音乐盒的总体设计2.1设计基本要求1、利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少3首音乐,每首不少于30s)。2,采用LCD显示信息。 1)开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。 2)可通过功能键选择乐曲,暂停,播放。可以通过数字键选择相应的歌曲。3)具有循环播放歌曲的功能4)显示乐曲播放时间或剩余时间。2.2总体设计1、要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲 2、利用stc89c52的内部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。 记数脉冲值与频率的关系公式如下: N=Fi/2/Fr N:记数值 Fi:内部计时一次为1微秒故其频率为1MHZ Fr;要产生的频率 3、起记数值的求法如下: T65536N65536Fi2Fr 例如:设K65536,F1000000Fi1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的记数值。 T65536N65536Fi2Fr6553610000002Fr65536500000Fr 低音D0的T6553650000026263627 中音D0的T6553650000052364580 低音D0的T655365000001047650594. 本设计中用到了AT89C51单片机,4个独立键盘,蜂鸣器,162LCD。当按键有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出音乐。同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲及播放时间,也可在LED显示歌曲号。1,硬件电路中用P1.0P1.7控制按键,其中P1.0P1.3扫描行,P1.4P1.7扫描列。2,用P2.5P2.7作为LCD的R/W, RS,E的控制信号。用P0.0P0.7作为LCD的D0D7的控制信号。3、P3.2驱动蜂鸣器2.3方案论证与比较2.3.1编程方案的选择方案一:整体法编程采用的是整体编程的方式对总控制程序进行编程,这样会使程序精简,内存占用的空间少,但是他的逻辑能力要强,而且设计难度较大。方案二:模块化编程采用模块化的思想,针对各项功能的构建子模块进行编程,通过各个模块独立编程,逐个添加,逐个调试,最后结合完成整体功能,模块化编程具有编程逻辑简单,但程序代码不够精简,简单,占用的空间比较大等的特点。综上所述:对于初学者的我们采用方案二比较好,这样有利于初学者更好的编程,不容易混乱,把程序分成许多子模块进行完成。2.3.2键盘消抖方案的选择方案一:滚动滤波法进行消抖滚动滤波法是一种利用软件的方法进行消抖,由于主流程的循环时间为10MS,已经从一定的程度上消除抖动,此为定节拍读,让抖动减小,接着用表决法存四个状态,当前后四个状态都一样才确定为有键按下。方案二:利用软件延时消抖由于键盘存在抖动现象,这一消除抖动的方法是运用扫描的时候延时跳过键盘抖动时间的原理,这种方法,在子模块的时间大约要一个主流程所运用的时间,但是由于工业上处理一个扫描周期要小于10ms方案三:利用硬件消抖动这种方法可以分为电容滤波和RS出发消除抖动,RS具有准时的有效的消抖效果,能严格的保证每一次按键按下只有一次发生触动,是一种比较好的消抖动的方法。综上三种法案:因为此次课程设计主要是学习汇编语言并且考虑到程序的时实性以及硬件的成本,设计思路是在取音调,节拍中检测是否按键按下,因处理音调时间很短不到1ms,所以采用延时消斗的方法 2.4本章小结本次设计方案的选取,知道很多方面的不足,知道的歌曲是如何通过凤鸣器发出我们所期望的音符,是通过对蜂鸣器的切换电压使其振荡,产生频率,通过控制蜂鸣器产生的频率让它发声。通过查找资料知道了蜂鸣器是有极性的,后面自己做板时应该稍加注意。知道了LCD的工作原理,它有三个控制端口,我8位数据口与单片机进行信息交流,了解了1602LCD的结构,还有就是知道了一些常用的消斗方法,还有一些音乐方面的知识三、硬件设计3.1硬件设计原则 本次课程设计的数字音乐盒的设计硬件电路主要由独立键盘输入部分,LCD灯显示部分,蜂鸣器部分,复位电路部分,振荡电路部分和电源部分构成单片机LCD显示部分蜂鸣器驱动部分振荡部分和复位部分按键部分电源部分 3.2LCD显示部分硬件3.2.1硬件框图单片机LCD显示部分按键部分电源部分3.2.2LCD电路设计用P2.5P2.7作为LCD的R/W, RS,E的控制信号。用P0.0P0.7作为LCD的D0D7的控制信号。通过按键的控制选择相应的操作,按下1-3键播放1-3首歌,按下暂停/播放键歌曲暂停,再按下暂停/播放键歌曲恢复播放。可通过数字键选择相应的歌曲。按键采用的是独立按键。P1.0-P1.3接按键s1-4的一端,按键另一端接地,当按下时,按键被拉成低电平,从而进行相应的操作。3.2.2.1 1602LCD器件1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:图10-54 1602LCD尺寸图1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。10823 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表10-14所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表10-14:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表10-15:基本操作时序表读写操作时序如图10-55和10-56所示:图10-55 读操作时序图10-56 写操作时序10824 1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。图10-57 1602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”图10-58 字符代码与图形对应图10825 1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置3.3按键部分硬件3.3.1硬件框图单片机按键1(歌曲1)按键2(歌曲2)按键3(歌曲3)按键4(暂停/播放)3.3.2.1按键器件型号名称:微动开关 6*6*5性能参数:轻触开关系列主要技术指标(Specification of TACT switch Series)使用温度范围Temperature :-25+-85C额定负荷Rated Load :DC12V 0.1A接触电阻Contact Resistance :=100M寿命 Life :100000 times(次)参考尺寸图:注(Remark):下图中h表示高度,单位为毫米。例如6*6*7,即高度是7mm(毫米)3.3按键电路设计3.4蜂鸣器驱动使用器件:蜂鸣器,电阻200R,三极管s8550蜂鸣器电路设计3.5PCB设计3.4.1PCB设计原则电路板一般用敷铜层压板制成,板层选用时要从电气性能、可靠性、加工工艺要求和经济指标等方面考虑。常用的敷铜层压板是敷铜酚醛纸质层压板、敷铜环氧纸质层压板、敷铜环氧玻璃布层压板、敷铜环氧酚醛玻璃布层压板、敷铜聚四氟乙烯玻璃布层压板和多层印刷电路板用环氧玻璃布等。不同材料的层压板有不同的特点。环氧树脂与铜箔有极好的粘合力,因此铜箔的附着强度和工作温度较高,可以在260的熔锡中不起泡。环氧树脂浸过的玻璃布层压板受潮气的影响较小。超高频电路板最好是敷铜聚四氟乙烯玻璃布层压板电路板采用1mm厚度。器件布局要注意LCD的尺寸,电位器应放置在LCD尺寸范围外,便于调节观察LCD辉度,按键置于LCD的下方,便于操作和观察,线宽设为0.7mm,间距0.2mm,焊盘直径2mm,USB电源接口,放置在边上3.4.2PCB版图四、软件设计4.1开发环境编译软件keil进入keil后,出现编辑界面一、首先我们要养成一个习惯:最好先建立一个空文件夹,把您的工程文件放到里面,以避免和其他文件混合,如下图笔者先创建了一个名为“Mytest”文件夹二、点击桌面上的KeiluVision4图标,出现启动画面三、点击“project-NewuVisionProject”新建一个工程四、在对话框,选择放在刚才建立的“Mytest”文件夹下,给这个工程取个名后保存,不需要填后缀五、弹出一个框,在CPU类型下我们找到并选中“Atmel”下的AT89S51或52七、在下面空白区别写入程序八、输入源程序文件名名称,。注意:如果您想用汇编语言,要带后缀名一定是“test.asm”,如果是C语言,则是“test.c”,然后保存九、接下来需要把刚创建的源程序文件加入到工程项目文件中,大家在点“ADD”按钮时会感到奇怪,怎么对话框不会消失呢?不管它,直接点击“Close”关闭就行了,此时大家可以看到程序文本字体颜色已发生了变化十、最后还要有设置一下,按下图设置晶振,建议初学者修改成12M,因12MHZ方便计算指令时间十一、在Output栏选中CreateHEXFile,使编译器输出单片机需要的HEX文件十三、工程项目创建和设置全部完成!点击保持并编译十四、将hex文件通过STC下载软件下载到单片机中4.2软件设计4.2.1系统软件总设计软件设计主要分三个模块:音乐产生模块,LCD显示模块、按键检测处理模块4.2.2.2音乐产生模块1)音调控制程序是通过调用延时子程序DELAY实现的。在延时子程序DELAY中,R3中存放延时常数,当R3为1时,延时时间约为20us 以标准音高A为例说明如何调用延时子程序。对于标准音高A的440HZ的声音频率,他的时间常数t为1136us,延时常数为57(39H)相关程序:BUZZER_PINEQUP3.2 ;蜂鸣器驱动端口ORG 0000HLJMP MAINMAIN:CPL BUZZER_PINMOV R3,#51LCALL DELAYSJMP MAINDELAY:MOVR4,#02HDELAY1:NOPDJNZ R4,DELAY1NOPDJNZ R3,DELAYRET4.2.2.3音乐播放流程图NYNYNYNY总体初始化起始播放歌曲1显示欢迎界面音乐表1音乐表2根据歌曲号选择歌曲音乐表3歌曲结束符歌曲号加1时间清零设定时器初值歌号3歌曲设为1休止符取音调,节拍(R6,R7)每R320usP3.2取反一次,产生音调LCD显示歌号,时间按键处理节拍=R7?指针指向下一组音调延时100ms指针指向下一组音调4.2.2.4LCD显示模块LCALL CZ ;歌曲号,时间的拆字LCALL LCD_TIME ;LCD显示时间40CZ:MOV A,35H ;35H存时间ANL A,#0FHMOV 36H,A ;36H存时间的低位MOV A,35HANL A,#0F0HSWAP AMOV 37H,A ;37H存时间的高位MOV A,34H ;转化为LCD显示的ASCIIADD A,#30HMOV 39H,A;39H歌曲号的ASCIIMOV A,36H ;此时36H存时间低位的ASCIIADD A,#30HMOV 36H,A MOV A,37H ;此时37H存时间高位的ASCIIADD A,#30HMOV 37H,ARETLCD_TIME:LCALL LCDSET1MOV DPTR,#MTAB11LCALL WRITE1 ;LCD显示歌曲号MOV A,#0C0HLCALL LCD_CMDMOV DPTR,#MTAB12 LCALL WRITE2 ;LCD显示歌曲时间RETLCDSET1:MOV A,#01H ;显示前设置LCALL LCD_CMD;LCALL D5MSMOV A,#06HLCALL LCD_CMD;LCALL D5MSMOV A,#80HLCALL LCD_CMD;LCALL D5MSRETWRITE1: CLR AMOVC A,A+DPTRJZ WRITE10;判断是否查到00H,查到就显示歌曲号LCALL WDATA INC DPTR SJMP WRITE1WRITE10: MOV A,39H;INC ALCALL WDATARETWRITE2:CLR AMOVC A,A+DPTRJZ WRITE20 ;判断是否查到00H,查到就显示歌曲时间LCALL WDATA INC DPTRSJMP WRITE2WRITE20:MOV A,37H ;先显示时间高位LCALL WDATAMOV A,36H;显示歌曲低位LCALL WDATARETWDATA:LCALL CHEACKBUSYSETB LCD_RSCLR LCD_RWMOV P0,ASETB LCD_ENNOPNOPNOPNOPCLR LCD_ENRETLCD_CMD:LCALL CHEACKBUSY ;检查忙时LCD_CMD_NC:CLR LCD_RSCLR LCD_RWMOV P0,ASETB LCD_ENNOPNOPNOPNOPCLR LCD_ENRETCHEACKBUSY:;PUSH ACCCLR LCD_RSSETB LCD_RWMOV P0,#0FFHSETB LCD_ENCB1:NOPJB P0.7,CB1CLR LCD_EN;POP ACCRETTAB1:DB MUSIC BOX TAB2:DB WELCOME YOU MTAB11:DB NUM:,00HMTAB12:DB TIME:,00H4.2.2.5LCD工作流程图NY开始初始化写字符串结束延时写38H命令查忙写08H命令查忙写01H命令查忙写06H命令查忙写0CH命令查忙取x,yY为第二行?写(80H+40H+X)延时写(80H+Y)主程序初始化写地址(X为行,Y为列)NY开始取第一个字符写(X,Y)字符=0?忙时写第一个字符结束写字符串4.2.2.6按键处理KEYPAN: MOV P1,#0FHMOV A,P1CJNE A,#0FH,KEY1 ;判断是否摁下JNB 00H,KEYPAN ;没摁下再判断是否为暂停SETB TR0 ;因为判断暂停时有关计数,所以要重开 RETKEY1:CLR TR0;关计数,因为10ms会影响节拍的计数LCALL D10MS;消抖时间 ; LCALL D10MS ;LCALL D10MSMOV P1,#0FHMOV A,P1;MOV 32H,ACJNE A,#0FH,KEY2 ;再次判断是否摁下JNB 00H,KEYPAN ;没摁下再判断是否为暂停SETB TR0 ;因为判断暂停时有关计数,所以要重开RETKEY2:; MOV P1,#0FH;MOV A,P1;CJNE A,#0FH,KEYPAN;LCALL D1S/*MOV 32H,A ;取按键号MOV P1,#0F0HMOV A,P1ANL 32H,#0FHANL A,#0F0HORL 32H,AMOV A,32H */;CJNE A,#0EEH,KEY3 ;播放第一首歌 JB P1.0,KEY3MOV 34H,#1 ;歌曲号为1;MOV 40H,#1MOV 35H,#0MOV TL0,#0 ;重新计数MOV TH0,#0MOV 31H,#36MOV 38H,#100CLR TR0SETB P3.2;恢复SETB 00H;暂停状态清楚LCALL D1S ;放开按键消抖CLR 01H;LCALL D1S;LJMP MUSIC0;重新播放RETKEY3:;CJNE A,#0EDH,KEY4 ;和上一样JB P1.1,KEY4MOV 34H,#2;MOV 40H,#2MOV 35H,#0MOV TL0,#0MOV TH0,#0CLR TR0MOV 31H,#36MOV 38H,#100SETB P3.2SETB 00H LCALL D1S; LCALL D1S;LJMP MUSIC0CLR 01HRETKEY4:;CJNE A,#0EBH,KEY5JB P1.2,KEY5MOV 34H,#3; MOV 40H,#3MOV 35H,#0MOV TL0,#0MOV TH0,#0CLR TR0SETB P3.2MOV 31H,#36MOV 38H,#100SETB 00HLCALL D1S;LCALL D1S;LJMP MUSIC0CLR 01HRETKEY5:;CJNE A,#0E7H,KEY6; 暂停和播放JB P1.3,KEY6CLR TR0CPL 00HLCALL D1S;LCALL D1SKEY7:LJMP KEYPANKEY6: JNB 00H,KEY7 ;如果暂停时等待播放 SETB TR0 RET4.2.2.7按键工作流程图NYNYNY延时10ms检测按键是否按下检测是否有键按下检测按键是否放开执行相应的代码五、系统展示和测试5.1程序:见附录5.2下载程序将下载器的母头插到对应的排针上,排针由上到下依次是end,txd,rxd,vcc。通过STC-isp软件将音乐程序载入单片机中5.3调试按下S1-3播放第一到三首歌对应的歌曲,按下S4暂停,再按下S4播放。Lcd开机显示欢迎界面,当播放第一首歌时,上面显示歌曲号,下面显示播放的时间欢迎界面第一首歌第二首歌第三首歌:六、总结6.1系统总结1、本次课程设计,了解了音乐盒的发展背景和国内研究现状和发展趋势,音乐盒在300多年前就有了,不过不是数字的,是机械带动的,随着时代的发展,电能的普及和电子元器件的发展,音乐盒也从机械化朝着数字化的趋势发展,而且功能实现越来越多。2、在数字音乐盒的总体设计中,通过查找相关资料,设计多种方案,从方案中选择最优的,数字音乐盒只要包括显示部分,播放部分和按键部分组成,通过单片机对按键输入的信息进行采集处理,使其达到相应的功能,驱动凤鸣器,使蜂鸣器发出声音。3、起初对音乐一窍不通的我,通过查找相关找资料知道了一些关于音乐的知识,比如什么是音调,什么是节拍,一个音符表示声音的频率叫做音调,于是通过程序设定使蜂鸣器的输出电压成一定的周期变化,就使蜂鸣器发出所需的音调;节拍表示一个音调持续的时间,时音乐演奏出更准的音乐,了解这两个概念,就可以通过程序发出声音。4、还有要LCD是怎么工作的,通过查找资料知道了1602lcd的结构,它有16个接口包括接地端,电源端,液晶驱动电压端,寄存器选择端RS,读写选择端RW,液晶屏块使能端E,8位数据总线,背光电源正极和负极,RS=0 RW=0,指令寄存器写入;RS=0 RW=1,忙时标志和地址计数器读出;RS=1 RW=0,数据寄存器写入;RS=1 RW=1,数据寄存器读出;要注意lcd工作忙时,在让lcd显示时,要对其进行命令设置,通过设置lcd才能实现相应的功能。按键本次课程设计采用的是延时消斗,因为我的思路是在音调和节拍切换的过程中,检测按键。5、在编程过程中要注意按键和按键之间的干扰,比如暂停状态时,通过标记判断非暂停的影响,因为暂停的时候,按键一直在扫描,等待操作,不让蜂鸣器不发声,原先的状态要保存起来。当按下播放时,恢复原先数据。蜂鸣器采用的是5V有源蜂鸣器,通过三极管驱动,要接限流电阻。6.2不足和展望本次课程设计也存在不足之处1、功能。本次课程设计是从书本后面的课程设计中选的,实现的功能只局限于书本,没有上网查看借鉴别人的音乐盒是怎么做的,借鉴别人的功能,还有就是由于自己作板,考虑到三首歌,所以选择了用独立键盘,没有考虑到长远,加歌曲之类的话,独立键盘是不够的2、对汇编的一些语法不太熟悉,编程的过程中一直翻书,在用调用指令时,没有加ret返回,导致查错误查半天没查到,还有就是一些标号标的有点乱,有的时候自己都看不懂,要注意模块化,便于修3、因为第一次话单片机的电路,再画板的时候,没注意到LCD的大小,导致一些控制器件放到lcd大小范围内,然后重画浪费了时间,腐蚀的过程中,没把握好时间,导致腐蚀过度,断了一根线。板做好的时候发现,下载的时候要把下载线断电载通电,没设个开关导致下载麻烦6.3个人心得通过本次课程设计,有收获的也有不足的1、在做课程设计或者其他事情时,一定要考虑多方案,多功能,再多个方案中选择最优的。要考虑到长远,成本。写程序的时候要注意模块化,方便查看和修改,最好先画流程图,还有特别是很长的程序时,最好加备注,这样不会乱。2、用到按键的时候要选择正确消斗的方法,如果用到更多的按键时候,要考虑用矩阵键盘,少的话就用独立按键3、用到1602LCD的时候,要注意初始化,再每写入字符串的时候,要进行命令设置,在设置前检测是否忙时,还有1602LCD显示的是ASCII码,1602LCD可进行辉度调节,不清晰的时候可以调节电位器,1602LCD可以通过设置移屏,光标,闪的,两行还是一行,但是1602LCD不能显示汉字4、在设计的时候,要考虑到用户使用是否方便,成本,能耗等。程序最好能为以后的实现功能进行扩展,模块化,能更好的修改,添加和查错,不断调试附录一:程序:; 数字音乐盒;BUZZER_PINEQUP3.2 ;蜂鸣器驱动端口TIME_COUNTDATA 30H ;节拍LCD_RS EQU P2.6 ;LCD控制端接口 LCD_RW EQU P2.5 LCD_EN EQU P2.7ORG0000H;伪指令,指定程序从0000H开始存放LJMP MAIN;跳转指令,程序跳转到MAIN处ORG000BH;伪指令,指定程序从T0入口地址000BH开始存放LJMP T0_INT;跳转指令,程序跳转到T0_INT处MAIN:LCALL D40MS ;等待各个元器件复位MOVSP,#6FH;给堆栈指针赋初值MOVTH0,#00H;设定定时器T0的初始值TH0MOVTL0,#00H;设定定时器T0的初始值TL0MOVTMOD,#02H ;定时器T0工作在方式2MOVIE,#82H;中断允许MOV 31H,#36 ;判断10msMOV 38H,#100 ;判断1s MOV DPTR,#MUSIC_1;41H和42H存音乐1的表头MOV 41H,DPLMOV 42H,DPHMOV DPTR,#MUSIC_2 ;43H和44H存音乐2的表头MOV 43H,DPLMOV 44H,DPHMOV DPTR,#MUSIC_3 ;45H和46H存音乐3的表头MOV 45H,DPLMOV 46H,DPHMOV 34H,#1 ;34H存歌曲号,初始化播放第一首歌的歌曲号MOV 35H,#0 ;35存时间,初始化时间为0s开始MOV 36H,#0;36H存时间的低位MOV 37H,#0 ;37H存时间高位;MOV R0,#41H ;间接存音乐表的低位;MOV R1,#42H ;间接存音乐表的高位MOV DPTR,#MUSIC_1;MOV 40H,#1SETB 00H;暂停和播放的标志位SETB 01HLCALL LCD_SET ;LCD初始化LCALL LCD_WEL ;LCD显示欢迎界面 LCALL D1S;LCALL D1S;LCALL D1SMUSIC0:MOV 3AH,DPL ;保存原先音乐表信息,因为下面要用到DPTRMOV 3BH,DPHLCALL CZ ;歌曲号,时间的拆字LCALL LCD_TIME ;LCD显示时间0MOV DPL,3AHMOV DPH,3BHSETB 01HMOV A,34HCJNE A,#1,MUS1MOV DPTR,#MUSIC_1SJMP MUS0MUS1: CJNE A,#2,MUS2MOV DPTR,#MUSIC_2SJMP MUS0MUS2: CJNE A,#3,MUS3MOV DPTR,#MUSIC_3 AJMP MUS0MUS3:CLR 00HCLR TR0MOV 35H,#0SETB P3.2LJMP KEYPANMUS0:MOVTIME_COUNT,#00H;中断计数器清0MOVB,#00H;表序号清0MUSIC1:CLRAMOVC A,A+DPTR;查表取代码JZ END0;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:MOVR6,A ;取音调INCDPTR ;取完,指向节拍MOVA,BMOVC A,A+DPTR;取节拍代码送R7MOVR7,ASETB TR0;启动计数MUSIC2: ;LCALL KEYPANCPLBUZZER_PIN;MOVA,R6MOVR3,ALCALLDELAYLCALL KEYPAN;矩阵键盘处理JB 01H,MUSS1LJMP MUSIC0MUSS1:MOVA,R7CJNE A,TIME_COUNT,MUSIC2;中断计数器(20H)=R7否?;不相等,则继续循环MOVTIME_COUNT,#00H;等于,则取下一代码INCDPTRLJMP MUSIC1MUSIC3:CLRTR0;休止100毫秒MOVR2,#0DHMUSIC4:MOVR3,#0FFHLCALL DELAYDJNZ R2,MUSIC4INCDPTRLJMP MUSIC1END0:MOVR2,#64H;歌曲结束,延时1秒后继续MUSIC6:MOVR3,#00HLCALL DELAYDJNZ R2,MUSIC6MOV 35H,#0INC 34HMOV A,40HMOV 31H,#36MOV 38H,#100MOV A,34HCJNE A,#4,MUSICFMOV 34H,#1;MOV 34H,#5;CLR 00HMUSICF:LJMP MUSIC0T0_INT:; T0中断服务程序;12M晶振时,每10毫秒中断一次; PUSH ACCPUSH PSW DJNZ 31H,FANH ;判断10ms是否到来MOV 31H,#36 INCTIME_COUNT;中断计数器加1DJNZ 38H,FANH;判断1s是否到来MOV 38H,#100MOV A,35H ;到了1s,时间加1 ,进行十进制调整ADD A,#1DA AMOV 35H,A MOV 3AH,DPL ;保存原先音乐表信息,因为下面要用到DPTRMOV 3BH,DPH LCALL CZ ;歌曲号,时间的拆字LCALL LCD_TIME ;LCD显示时间MOV DPL,3AHMOV DPH,3BH ;恢复音乐表FANH: POP PSWPOP ACC RETIDELAY:; 延时子程序;说明:延时时间通过R3传递,延时时间为(R320)uS;MOVR4,#02HDELAY1:NOPDJNZ R4,DELAY1NOPDJNZ R3,DELAYRETMUSIC_1:DB 026H,020H,020H,020H,020H,020H,026H,010H,020H,010H,020H,080H,026H,020H,030H,020HDB 030H,020H,039H,010H,030H,010H,030H,080H,0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高一数学试卷及答案手写
- 高一拼音考试试卷及答案
- 高三政治模考试卷及答案
- 运动类真人秀行业跨境出海战略研究报告
- 自闭症社交技能训练板企业制定与实施新质生产力战略研究报告
- 信贷机构合同标准文本
- 三方汽车抵押合同样本
- 供货方合同样本
- 买断股权转让合同样本
- epc模式合同样本
- DB42-T 2275-2024 消防给水设施物联网系统技术标准
- 七律长征读书分享 课件
- 2024年新物业管理技能及理论知识考试题与答案
- 《工程经济学》题集
- 《直播运营实务》 课件 5.3直播间场景搭建
- 2024汽车行业社媒营销趋势【微播易CAA中国广告协会】-2024-数字化
- NB/T 11440-2023生产煤矿储量估算规范
- 华为产品战略规划全景训战两份资料
- 二手车交易定金合同范本5篇
- 2024年福建省中考化学试卷附答案
- 经营异常授权委托书范本
评论
0/150
提交评论