基于51单片机带存储播放功能功能的电子琴.doc_第1页
基于51单片机带存储播放功能功能的电子琴.doc_第2页
基于51单片机带存储播放功能功能的电子琴.doc_第3页
基于51单片机带存储播放功能功能的电子琴.doc_第4页
基于51单片机带存储播放功能功能的电子琴.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计报告书小组成员:吕梦莎 吴玉凤学 号:11213072 11213078班 级:自动化1106指导教师:于振宇基于AT89C51的屏幕声光式可录音电子琴北京交通大学 电子信息工程学院 吕梦莎 吴玉凤摘要:本文的主要内容是用AT89S51单片机为核心控制元件,通过脉冲触发产生出电子音调,与按键、扬声器、LCD显示屏等模块组成控制模块,设计一个电子琴。该系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用与参考价值。关键词:AT89C51、脉冲触发、屏幕声光式、录音、播放、演奏、电子琴。第一章 引言1.1设计背景单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。 本文对利用单片机设计简易电子琴进行了分析,分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。本系统是简易电子琴的设计,按下四角自锁开关会使LCD显示屏显示当前音符名称、播放的歌曲名称或播放的录音名称,同时扬声器播放对应的音符,LED闪烁相应的节奏。通过设计本系统可熟悉掌握单片机的基本功能。1.2设计任务1、设计以单片机为核心的简易电子琴系统,可随意弹奏想要表达的音乐;2、针对要求控制的对象完成程序的编制;3、硬件软件联调,完成题目所要求的功能;1.3设计思路1、发声部分设计思路音乐是由不同频率的声音组成的。利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波。 利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。于是产生do,re,mi,fa,so,la,xi七个音符的变换。 2、显示部分设计思路考虑到信息的多媒体传播已经成为信息化时代的主流,我们给电子琴设计了LCD显示器和节拍指示LED灯,带来视听双重冲击。 LCD具有功耗低,显示质量高,数字式接口更加稳定可靠的优点。演示过程中可显示欢迎语,当前功能,按下的音符名称,当前播放的歌曲名称等。第二章 方案论证采用AT89C51单片机作为主控芯片,设置独立按键、扬声器、LCD显示屏等外围器件,另外还用到一些简单器件如NPN型三极管及电阻等。利用按键实现音符和音调的输入;LCD显示屏进行被操作的按键显示;用PNP型三极管2N2907实现低音频功率放大;最后用扬声器发音。主控芯片采用AT89C51单片机,它是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。避免了由于元器件种类、个数繁多,而过于复杂的硬件电路也容易引起系统的精度不高、体积过大等不利因素。同时具有强大的控制功能和灵活的编程实现特性,由于本设计主要用于娱乐方面,因此在设计上尽量使其安全以及简单易操作。具有经济可行性、技术可行性、实物应用性。第三章 硬件系统设计3.1 时钟电路 MCS-51内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端输出端。本图采用内部时钟电路,如图3-1所示,通常在引脚XTALl和XTAL2上跨接石英晶体X1和两个补偿电容C1、C2构成自激振荡器。可以根据情况选择212MHz频率之间的石英晶体,补偿电容通常选择30pF左右的瓷片电容。图3-1 时钟电路3.2 复位电路 单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。本实验采用上电自动复位方式,其结构图如图3-2所示。上电复位要求接通电源后,自动实现复位操作。复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。对于MCS-51单片机,只要在RST复位端接一个电容至VCC和一个电阻至VSS即可。在加电瞬间,RST端出现一定时间的高电平,只要高电平保持时间足够长,就可以使MCS-51复位。图3-2 复位电路3.3 原理框图本系统有主控芯片AT89C52、扬声器、显示模块、按键模块和晶振复位电路组成。图3-3 原理框图3.4 显示部分设计为了让电子琴能够显示出音调,我们另外附加了一个LCD1602提供屏幕式音调显示,LCD1602属于字符型液晶,可以显示字母和数字等字符。LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 图3-4 显示电路3.5 按键部分设计3.5.1键盘设计键盘可以分为2类:独立连接式键盘和矩阵式键盘。本设计采用独立式键盘。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键电路配置灵活,软件结构简单。独立式按键软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。由于本程序较为简单,为了使用方便及节省资源,选择独立式键盘。下图为独立式键盘电路图:图3-5 独立式键盘电路图3.5.2 去抖动键盘编程中主要考虑去抖动的问题。当测试表明有键被按下之后,紧接着就进行去抖动处理。因为按键是机械开关结构,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动。为保证键识别的准确,在电压信号抖动的情况下不能进行行状态输入。为此需进行去抖动处理。去抖动有硬件和软件两种方法。硬件方法就是加去抖动电路,从 根 本上 避 免 抖 动的 产生。软件消 抖,在第一次 检 测 到有 键 按 下 时,执 行一段延时程序之后,再检测此按键,如果第二次检测结果仍为按下状态,CPU便确认此按键己按下,消除了抖动。本实验采用软件消抖法,在按键按下后,执行一段延时程序。3.6 发音部分设计如下图所示,发音电路是由扬声器、三极管、变位器构成。由三极管来驱动扬声器发音的,同时加上变位器实现电阻的可调来增强驱动电流,提高驱动能力,从而调节扬声器的音效。图3-6 扬声器电路图第四章 软件系统设计4.1系统分析4.1.1系统软件的组成(1)键盘扫描程序:检测是否有按键按下,有按键按下则记录按下键的键值,并跳转至功能转移程序;无按键按下,则返回键盘扫描程序继续检测。(2)功能转移程序:对检测到的按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有三种,即音色调节功能、自动播放乐曲和录音的功能。(3)琴键处理程序:根据检测到的按键值,查询音调表,给计时器赋值,使发出相应频率的声音。(4)自动播放歌曲程序:检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放的歌曲或录音歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有按键按下。(5)录音程序:检测到按键按下的是录音功能键后执行该程序,跳转到键盘扫描程序,检测是否有键按下,有按键按下则记录按下键值,根据检测到的按键值,查询音调表,给计时器赋值,使发出相应频率的声音并跳转到功能转移程序。4.1.2系统总体功能流程图开始初始化T0键盘扫描程序演奏功能键按下自动播放键按下录音功能键按下 N N Y Y Y记录音符 播放内部存储的音乐查表得到按键音符频率查表得到按键音符频率播放音符播放音符4.2参数计算4.2.1发音原理若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。4.2.2 音调的确定音调是唱曲时乐音的发音,一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音。例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系式是:Nfi2fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。其计数初值T的求法如下:T65536N65536fi2fr例如:设K65536,fi1MHz,求中音DO(261Hz)。T65536N65536fi2fr6553610000002fr65536500000/fr,中音DO的T65536500000/52364580。由音符的频率值可以计算得出各个音调的计数值,如表4-1所示:(叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。)表4-1 音调频率与计数初值对照音符频率(Hz)计数值(T值)音符频率(Hz)计数值(T值)低1DO26263628#4FA#74064860#1DO#27763737中5SO78464898低2RE29463835#5SO#83194934#2RE#31163928中6LA88064968低3MI33064021#6LA#93264994低4FA34964103中7SI96865030#4FA#37064185低1DO104665058低SO39264260#1DO#110965085#5SO#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3MI131865157低7SI49464524高4FA139765178中1DO52364580#4FA#149065198#1DO#55464633高5SO156865217中2RE58764633#5SO#166165235#2RE#62264884高6LA176065252中3MI65964732#6LA#186565268中4FA69864820高7SI196765283采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据。4.2.3 节拍的确定若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4 拍为0.125s,只要设定延迟时间就可以求得节拍的时间,假设1拍为4DELAY,则1/4应为1DELAY,以此类推,得到如表4-2所示的节拍与延迟时间对照表。休止符表示暂停发音。表4-2 1/4和1/8节拍的时间设定曲调值DELAY曲调值DELAY调4/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒4.3程序设计4.3.1播放子程序(包括自动播放存储音乐和按键发音)本设计共两种播放模式,包括自动播放存储音乐和按键发音。上电后,首先开中断并设定定时器0为工作方式1,当自动播放键按下时,进入中断,根据乐谱在定义的音频数组中查找相应音律,然后给定时器赋初值,即开始播放音乐。当DO、RE、MI、FA、SO、LA、SI七种音符键按下时,根据音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。开始开中断并设定工作寄存器有键按下自动播放键按下进入中断 N Y Y根据yinfu和工作方式取值,并在数组中查找相应音律进入中断给定时器T0 赋值根据乐谱在数组中查找相应音律播放键值对应的音符给定时器T0赋值播放音乐第五章实验结果5.1硬件调试硬件调试主要是针对单片机部分进行的调试。在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。在确保硬件电路正常且无异常情况(断路或短路)的情况下方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要是检测单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。1、数码管LED电路调试:接通电源,随机按下按钮可以看到数码管显示数字。2、键盘单片机控制部分调试:上电后,随机按动键盘可以发现各个按键对应的音正确。5.2软件调试调试主要方法和技巧:通常一个调试程序应该具备至少四种性能:跟踪、断点、查看变量、更改数值。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。5.3仿真结果第六章 总结本次51单片机课程设计我们组做的是基于AT89C51单片机的屏幕式声光电子琴的设计,通过这次的DIY制作的学习,我学到了不少知识,真正体会到了学以致用的快感,通过自己动手制作小作品不仅加深了我们对51单片机的理解,而且也增强了我们对音乐的兴趣,也因此喜欢上了各种基于51单片机的小制作,从而更好地将课本知识与实践过程相结合。在这次课程设计中,主要涉及了软件和硬件两个方面的内容。在软件方面,我们掌握了仿真软件proteus的仿真方法,实现了7音符的发声、录音以及音乐的自动播放功能,同时也提高了我们用汇编语言编程的能力;在硬件方面,我们对电子产品的开发流程和功能应用有了一定的了解,进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤。并且提高了我们运用所学的专业基础知识来解决实际问题的能力,加深了对所学理论知识的理解和运用,动手能力也得到了相应的提高,创新意识得到了锻炼。在本次的实验设计中,我们在借鉴前人的基础上也对自己的作品进行了一部分创新,在设置录音功能方面,根据随机弹奏的音调,将其偏移地址存入36H单元中,然后通过查询音调表,使其发出相应频率的声音,从而弹奏出事先录好的一段音乐。在控制节奏方面,我们设置了休止符,来控制节奏的停顿,这样就能产生有停顿感的音乐,而不是连续的,使音乐听起来更加悦耳。而这些创新均基于汇编语言的学习。总体来说,此次单片机课程设计使我们收获良多,虽然课程设计的过程中遇到了很多困难与问题,但我们最终还是完成了设计的任务及要求。也让我认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没有什么办不到的。最后,衷心感谢老师给我们提供了这样一次难得的机会来展示自己的作品,激发了我们对单片机DIY小制作的兴趣,也感谢老师在这个学期孜孜不倦的教悔,让我们在学习单片机的基础知识的同时,真正体会到学以致用带来的快感。由此我觉得,我们的学习不仅要在教师引导和帮助下顺利入门, 还要掌握自动控制原理课程的精髓和要点, 并且能够“由厚及薄”, 达到对课程整体的把握, 具有一定的工程概念和实践能力。附录一:源程序RS EQU P3.5RW EQU P3.6E EQU P3.7ORG 00HSJMP MAINORG 00BHMOV TH0,33HMOV TL0,34HCPL P3.4RETI;!ORG 001BH INC 3CH ;中断服务,中断计数器加1 MOV TH1,#0D8H MOV TL1,#0EFH ;12M晶振,形成10毫秒中断 RETI;!ORG 30HMAIN : SETB P3.4 ;关闭扬声器LCALL CSH1602 ;初始化1602MOV TMOD,#11H ;设置定时器0为工作模式1SETB EA ;开总中断SETB ET0 ;开定时器0中断HUANYING: MOV P1,#80H ;欢迎语显示地址LCALL ENABLEMOV DPTR,#TAB_HYMOV 30H,#00LP: MOV A,30HMOVC A,A+DPTRJZ KEYLCALL DELAY_100MSLCALL WRITE_1602INC 30HSJMP LPKEY: MOV P1,#01H ;清屏 ACALL ENABLE MOV P1,#80H LCALL ENABLE MOV DPTR,#TAB_YANZHOU MOV 30H,#00LP7: MOV A,30H MOVC A,A+DPTR JZ KEY_0 LCALL WRITE_1602 INC 30H SJMP LP7KEY_0: MOV P1,#0C0H ;音符的显示地址 LCALL ENABLE MOV 38H,#16 ;写入1602的显示地址指针 MOV 35H,#2 ;控制节拍KEY_1: MOV P2,#0FFH ;置P2为输入 JB P2.0,KEY_2 ;K1键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.0,$ MOV 36H,#0 ;装入1的音符码相对地址 LCALL BOFANG_YFKEY_2: JB P2.1,KEY_3 ;K2键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.1,$ MOV 36H,#2 LCALL BOFANG_YFKEY_3: JB P2.2,KEY_4 ;K3键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.2,$ MOV 36H,#4 LCALL BOFANG_YFKEY_4: JB P2.3,KEY_5 ;K4键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.3,$ MOV 36H,#6 LCALL BOFANG_YFKEY_5: JB P2.4,KEY_6 ;K5键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.4,$ MOV 36H,#8 LCALL BOFANG_YFKEY_6: JB P2.5,KEY_7 ;K6键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.5,$ MOV 36H,#10 LCALL BOFANG_YFKEY_7: JB P2.6,KEY_9 ;K7键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.6,$ MOV 36H,#12 LCALL BOFANG_YFKEY_9: JB P3.2,KEY_1 ;K9键没按下,重新扫描 LCALL DELAY_10MS ;延时消抖 JNB P3.2,$ LCALL DELAY_10MS;-播放音乐程序段- MOV P1,#01H ;清屏 ACALL ENABLE MOV P1,#80H LCALL ENABLE MOV DPTR,#TAB_PLAY MOV 30H,#00LP8: MOV A,30H MOVC A,A+DPTR JZ PLAY LCALL WRITE_1602 INC 30H SJMP LP8PLAY: MOV P2,#0FFH ;置P2为输入 JB P2.0,PLAY_2 ;K1键没按下,转移 MOV DPTR,#TAB_GEQU1 ;存曲目标志 LCALL BOFANG_GEQUPLAY_2: JB P2.1,PLAY_3 ;K2键没按下,转移 SETB ET1MOV 3BH,TMODMOV TMOD,#11Hmov dptr,#tab2 mov p1,#0c0hlcall enablelcall write1MOV DPTR,#DAT2 LCALL MUSIc0 CLR TR1 CLR ET1 MOV TMOD,3BHPLAY_3: JB P2.2,PLAY_4 ;K3键没按下,转移SETB ET1MOV 3BH,TMODMOV TMOD,#11Hmov dptr,#tab1 mov p1,#0c0hlcall enablelcall write1MOV DPTR,#DAT1 LCALL MUSIc0 CLR TR1 CLR ET1 MOV TMOD,3BHPLAY_4: JB P2.3,PLAY_9 MOV R1,#50H LCALL BOFANG_LUYINPLAY_9: JB P3.2,PLAY ;K8键没按下,重新扫描 LCALL DELAY_10MS ;延时消抖 JNB P3.2,$ LCALL DELAY_10MS;-录音程序段- MOV P1,#01H ;清屏 ACALL ENABLE MOV P1,#80H LCALL ENABLE MOV DPTR,#TAB_RECORD MOV 30H,#00LP9: MOV A,30H MOVC A,A+DPTR JZ RECORD_0 LCALL WRITE_1602 INC 30H SJMP LP9RECORD_0: MOV R1,#50H ;录取音符存放地址 MOV 35H,#3 ;控制节拍 MOV P1,#0C0H ;音符的显示地址 LCALL ENABLE MOV 38H,#16 ;写入1602的显示地址指针;-写入录音的名字- MOV 30H,#00C5: MOV A,30H LCALL TAB_RECORDING MOV R1,AINC R1INC 30HCJNE A,#0FEH,C5RECORD_1: MOV P2,#0FFH ;置P2为输入 JB P2.0,RECORD_2 ;K1键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.0,$ MOV 36H,#0 ;装入1的音符码相对地址 LCALL BOFANG_YF LCALL CUNCU ;调存音符子程序RECORD_2: JB P2.1,RECORD_3 ;K2键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.1,$ MOV 36H,#2 LCALL BOFANG_YF LCALL CUNCURECORD_3: JB P2.2,RECORD_4 ;K3键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.2,$ MOV 36H,#4 LCALL BOFANG_YF LCALL CUNCURECORD_4: JB P2.3,RECORD_5 ;K4键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.3,$ MOV 36H,#6 LCALL BOFANG_YF LCALL CUNCURECORD_5: JB P2.4,RECORD_6 ;K5键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.4,$ MOV 36H,#8 LCALL BOFANG_YF LCALL CUNCURECORD_6: JB P2.5,RECORD_7 ;K6键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.5,$ MOV 36H,#10 LCALL BOFANG_YF LCALL CUNCURECORD_7: JB P2.6,RECORD_8 ;K7键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.6,$ MOV 36H,#12 LCALL BOFANG_YF LCALL CUNCURECORD_8: JB P2.7,RECORD_9 ;K8键没按下,转移 LCALL DELAY_10MS ;延时消抖 JNB P2.7,$ MOV 36H,#42 ;休止符标志存36H LCALL DELAY_100MS LCALL CUNCURECORD_9: JNB P3.2,J0 ;K8键没按下,重新扫描 LJMP RECORD_1J0: LCALL DELAY_10MS ;延时消抖 JNB P3.2,$ LCALL DELAY_10MS MOV R1,#255 ;写入歌曲结束标志 LJMP KEY ;回演奏模式;*子程序区*;=初始化1602显示器=CSH1602: MOV P3,#0FFHMOV P1,#01HACALL ENABLEMOV P1,#38HACALL ENABLEMOV P1,#0CHACALL ENABLEMOV P1,#06HACALL ENABLERET;=1602发命令子程序=ENABLE: CLR RS CLR RWCLR EACALL DELAY_2MSSETB ERET;=读1602IR中命令子程序=ENABLE_1: CLR RSSETB RWCLR EACALL DELAY_2MSSETB ERET;=写数据子程序(1602)=WRITE_1602: MOV P1,A SETB RSCLR RWCLR EMOV R5,#50 ;延时100us(12M晶振)DJNZ R5,$SETB ERET;=播放一个音符并显示音符和频谱=BOFANG_YF: MOV A,36H LCALL TAB_YF MOV 33H,A MOV A,36H INC A LCALL TAB_YF MOV 34H,A MOV TH0,33H MOV TL0,34H SETB TR0 ;启动定时器0 MOV A,36H ;取音符的显示码 LCALL TAB_YF1 LCALL WRITE_1602 DEC 38H MOV A,36H INC A LCALL TAB_YF1 LCALL WRITE_1602 DJNZ 38H,D2 ;1602一行没写满,转移 MOV 30H,#16 ;1602满行清行并从头开始写 MOV P1,#0C0H LCALL ENABLE MOV A,# LP10: LCALL WRITE_1602 DJNZ 30H,LP10 MOV 38H,#16 MOV P1,#0C0H LCALL ENABLE;-显示频谱分析条程序段-D2: MOV A,36H ;音符码转换为相应键值 MOV B,#2 DIV AB ADD A,#1 MOV 39H,A MOV 3AH,39H ;保护音符码对应的键值 MOV P1,#85H ;设定频谱分析条显示初地址 LCALL ENABLE MOV A,#D5: LCALL WRITE_1602 DJNZ 39H,D5;-控制节拍时长程序段- MOV 37H,35H ;保护循环次数控制(节拍) LP1: ACALL DELAY_100MS DJNZ 35H,LP1 ;延时次数控制 MOV 35H,37H;-发音结束,清除频谱分析条- MOV P1,#85H ;频谱分析条显示的初地址 LCALL ENABLE MOV A,# MOV 39H,3AH D6: LCALL WRITE_1602 DJNZ 39H,D6 MOV A,#10H ;释放音符码显示地址 CLR C SUBB A,38H ADD A,#0C0H MOV P1,A LCALL ENABLE CLR TR0 ;关定时器0 RET;=播放一个音符并显示频谱=BOFANG_YF_1: MOV A,36H LCALL TAB_YF MOV 33H,A MOV A,36H INC A LCALL TAB_YF MOV 34H,A MOV TH0,33H MOV TL0,34H SETB TR0 ;启动定时器0 ;-显示频谱分析条程序段- MOV A,36H ;音符码转换为相应键值 MOV B,#2 DIV AB ADD A,#1 MOV 39H,A MOV 3AH,39H ;保护音符码对应的键值 MOV P1,#85H ;设定频谱分析条显示初地址 LCALL ENABLE MOV A,#D7: LCALL WRITE_1602 DJNZ 39H,D7;-控制节拍时长程序段- MOV 37H,35H ;保护循环次数控制(节拍) LP11: ACALL DELAY_100MS DJNZ 35H,LP11 ;延时次数控制 MOV 35H,37H;-发音结束,清除频谱分析条- MOV P1,#85H ;频谱分析条显示的初地址 LCALL ENABLE MOV A,# MOV 39H,3AH D8: LCALL WRITE_1602 DJNZ 39H,D8 CLR TR0 ;关定时器0 RET;=播放一首歌并显示歌名=;-(一个音符2字节存储,音符码存低字节,节拍存高字节;254为歌曲名结束标志,255为歌曲结束标志)-BOFANG_GEQU: MOV P1,#0C0H ;歌名显示地址 LCALL ENABLE MOV 30H,#00LP2: MOV A,30H MOVC A,A+DPTR INC 30H CJNE A,#254,XIANSHI_GEMING SJMP C1XIANSHI_GEMING: MOV P1,A LCALL WRITE_1602SJMP LP2C1:MOV P1,#0C0H ;歌词显示地址LCALL ENABLELP3:MOV A,30H MOVC A,A+DPTR ;取音符码CJNE A,#0FFH,C6SJMP S0C6:CJNE A,#42,C0 ;音符码为休止符不开定时器,直接调用延时 INC 30HMOV A,30HMOVC A,A+DPTRINC 30HMOV 35H,ALP12: LCALL DELAY_100MS DJNZ 35H,LP12SJMP LP3C0:MOV 36H,AINC 30HMOV A,30HMOVC A,A+DPTRMOV 35H,AINC 30HLCA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论