版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE1目录摘要第一章绪论第二章方案论证及设计2.1语音存储回放系统方案论证2.2方案讨论及确定第三章单片机介绍3.1单片机简介3.2单片机编程语言介绍3.3系统单片机选择3.4AT89S52引脚功能介绍3.5定时器0和1使用第四章硬件设计4.1单片机系统硬件的设计4.1.1整体电路设计4.1.2供电电路图设计4.1.3键盘、显示电路设计4.1.4存储器设计4.2模拟音频电路设计4.2.1MIC电路设计4.2.2放大滤波电路设计4.2.3ADC设计4.2.4DAC设计4.2.5音频功率放大器设计第五章软件设计5.1KeilC51简介5.2主程序流程图5.3各个模块程序介绍5.3.1键盘子程序设计5.3.2显示子程序设计5.3.3ADC子程序设计5.3.4DAC子程序设计5.3.5定时中断服务子程序 致谢参考文献
摘要本系统以单片机89S52为核心,选用由2片62256组成RAM阵列,作为语音的数字化信号的存储器件,将外部数据存储空间扩大至64KB。利用AM和DPCM方法对数据进行压缩以加长存储时间。本文阐述了实用可靠的设计方案。
第一章绪论磁带语音存储手段应用还比较广泛,目前,随着数字化信号处理技术的不断提高,单片机、数字信号处理器以及语音处理大规模集成电路的进步,语音合成,语音识别,语音存储和回放技术的应用越来越广泛,尽管现在各种语言合成芯片,语音处理应用电路有许多,但都需要增加硬件投资,在一些由单片机构成的测控系统中,由于单片机接口有限,还需要扩宽硬件接口线路,本文介绍的语音存储与回放系统中,没有使用专用的语音处理芯片,不需扩宽接口电路,只利用一般的单片机测控系统中都有的硬件电路(如A/D、D/A、存储器等)就能完成语音信号的数字化处理,即能完成语音的存储与回放,实现单片机测控系统的语音提示报警及语音提示操作。因此特别适用于单片机测控系统,为单片机测控系统的语音报警及语音提示操作在几乎不需增加硬件投资情况下的语音处理提供了一种思路。
第二章方案论证及设计2.1语音存储回放系统方案论证方案一:ADC+MCU+DAC方案数字化语音存储与回放系统的基本思想是将模拟语音信号通过模数转换器A/D转换成数字信号,再通过单片机控制存储在存储器中,回放时,由单片机控制将数据从存储器中读出,然后通过数模转换器D/A转换成模拟信号,经放大在扬声器或耳机上输出语音。本设计方案系统总体结构框图如图2.1所示:图2.1方案一系统总体框图方案二:专用语音芯片方案如采用ISD1110/ISD1420系列语言芯片。ISD1110/ISD1420系列单片录放时间8至20秒,音质好。芯片采用CMOS技术,内含震荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、扬声器驱动及EEPROM阵列。最小的录放系统仅需麦克风、喇叭、两个按钮、电源及少数电阻电容。在录放操作结束后,芯片自动进入低功耗节电模式、功耗仅0.5uA。ISD1110/ISD1420系列有唯一的录音控制和边缘/电平触发两种放音控制。不分段时外围线路最简,也可按最小段长为单位任意组合分段,参见表1-1“最大段数”芯片提供若干操作模式,大大提高了控制的灵活性。芯片采用多电平直接模拟量存储专利技术,每个采样直接存储在片内单个EEPROM单元中,因此能够非常真实、自然地再现语音、音乐、音调各效果,避免了一般固体录音电路因量化和压缩造成的量化噪声和“金属声”。采样频率从5.3,6.4到8.0KHz,对音质仅有轻微影响。片内信息可保存100年(无需后备电源),EEPROM单片可反复录音十万次。这个方案的系统图如下:控制控制电路键盘语音芯片LED显示扬声器扬声器电源如图1,
本系统使用8031作为CPU,由CPU来控制语音合成芯片TC8830AF,使其工作在CPU控制模式下。当系统进行语音再生时,由CPU控制语音合成电路中的语音芯片来读取其外接的存储器内部的语音信息,并合成语音信号,再通过语音输出电路,进行语音报站和提示。CPU同时通过程序读取汉字信息,送入LED点阵显示电路来进行汉字提示。当汽车到达某站时,汽车司机通过键盘来控制本系统进行工作,并且,系统将使用状态指示电路,向司机指示出当前的行驶方向及站号(如与实际方向不符,司机可通过键盘来调整)。当系统进行语音录制时,语音信号通过语音输入电路输入给语音合成电路中的语音合成芯片,由语音合成芯片进行数据处理,并将生成的数字语音信息存储到语音存储芯片中,从而建立语音库。
部分电路的设计1.语音处理图2.2方案二系统设计框图2.2方案讨论及确定ADC+MCU+DAC方案的特点是应用比较灵活,可以实现很多语音压缩处理等算法。专用语音芯片方案特点有使用方便的单片录放系统,外部元件最少,重现优质原声,没有常见的背景噪音,具有自动节电模式等。由于毕业设计的主要目的是巩固大学学过的知识,培养综合运用所学的基础知识,提高学生独立解决问题的能力,所以选择第一种ADC+MCU+DAC方案
第三章单片机介绍3.1单片机简介3.1.1单片机概述单片微机(Single-ChipMicrocomputer)简称单片机,也有的叫做微处理(Micro-Processor简写μP)或微控制器(Micro-Controller简写μC),通常统称微型处理部件(MicroControllerUnit简写MCU)。一般的说,单片机就是在一块硅片上集成CPU、RAM、ROM、定时器/计数器、和多种I/O的完整的数字处理系统。二十世纪,微电子、IC集成电路行业发展迅速,其中单片机行业的发展最引人注目。单片机功能强、价格便宜、使用灵活,在计算机应用领域中发挥着极其重要的作用。从INTEL公司于1971年生产第一颗单片机Intel-4004开始,开创了电子应用的“智能化”新时代。单片机以其高性价比和灵活性,牢固树立了其在嵌入式微控制系统中的“霸主”地位,在PC机以286、386、Pentium、PⅢ高速更新换代的同时,单片机却“始终如一”保持旺盛的生命力。例如,MCS-51系列单片机已有十多年的生命期,如今仍保持着上升的态势就充分证明了这一点。3.1.2单片机的结构与组成目前,单片机的系统结构有两种类型:一种是将程序和数据存储器分开使用,即哈佛(Harvard)结构,当前的单片机大都是这种结构。另一种是采用和PC机的冯.诺依曼(VonNeumann)类似的原理,对程序和数据存储器不作逻辑上的区分,用来存放用户程序,可分为EPROM、OTP、ROM和FLASH等类。EPROM型内存编程后其内容可用紫外线擦除,用户可反复使用,故特别适用于开发过程,但EPROM型单片机价格很高。具有ROM型(掩膜型)内存的单片机价格最低,它适用于大批量生产。由于ROM型单片机的代码只能由生产厂商在制造芯片时写入,故用户要更改程序代码就十分不便,在产品未成熟时选用ROM型单片机风险较高。OTP型(一次可编程)单片机介于EPROM和ROM型单片机之间,它允许用户自己对其编程,但只能写入一次。OTP型单片机生产多少完全可由用户自己掌握,不存在ROM型有最小起订量和掩膜费问题,另外,该类单片机价格已同掩膜型十分接近,故特别受中小批量客户的欢迎。Flash型(闪速型)单片机允许用户使用编程工具或在线快速修改程序代码,且可反复使用,故一推出就受到广大用户的欢迎。Flash型单片机,即可用于开发过程,也可用于批量生产,随着制造工艺的改进,Flash型单片机价格不断下降,使用越来越普遍,它已是现代单片机的发展趋势。随机内存(RAM):用来存放程序运行时的工作变量和数据,由于RAM的制作工艺复杂,价格比ROM高得多,所以单片机的内部RAM非常宝贵,通常仅有几十到几百个字节。RAM的内容是易失性(也有的称易挥发性)的,掉电后会丢失。最近出现了EEPROM或FLASH型的数据存储器,方便用户存放不经常改变的数据及其它重要信息。单片机通常还有特殊寄存器和通用寄存器,它们是单片机中存取速度最快的内存,但通常存储空间很小。3.1.3中央处理器(CPU)是单片机的核心单元,通常由算术逻辑运算部件ALU和控制部件构成。CPU就象人的大脑一样,决定了单片机的运算能力和处理速度。并行输入/输出(I/O)口:通常为独立的双向口,任何口既可以用作输入方式,又可以作输出方式,通过软件编程来设定。现代的单片机的I/O口也有不同的功能,有的内部具有上拉或下拉电阻,有的是漏极开路输出,有的能提供足够的电流可以直接驱动外部设备。I/O是单片机的重要资源,也是衡量单片机功能的重要指针之一。串口输入/输出口:用于单片机和串行设备或其它单片机的通信。串行通信有同步和异步之分,这可以用硬件或通用串行收发器件来实现。不同的单片机可能提供不同标准的串行通信接口,如UART、SPI、I2C、MicroWire等。3.1.4定时器/计数器(T/C)单片机内部用于精确定时或对外部事件(输入信号如脉冲)进行计数,有的单片机内部有多个定时/计数器。3.1.5系统时钟通常需要外接石英晶体或其它振荡源来提供时钟信号输入,也有的使用内部RC振荡器。以上是单片机的基本构成,现代的单片机又加入了许多新的功能部件,如模拟/数字转换器(A/D)、数字/模拟转换器(D/A)、温度传感器、液晶(LCD)驱动电路、电压监控、看门狗(WDT)电路、低压检测(LVD)电路等等3.2单片机编程语言介绍对于51系列单片机,现有四种语言支持,即汇编、PL/M,C和BASIC。BASIC通常附在PC机上,是初学编程的第一种语言。一个新变量名定义之后可在程序中作变量使用,非常易学,根据解释的行可以找到错误而不是当程序执行完才能显现出来。BASIC由于逐行解释自然很慢,每一行必须在执行时转换成机器代码,需要花费许多时间不能做到实时性。BASIC为简化使用变量,所有变量都用浮点值。BASIC是用于要求编程简单而对编程效率和运行速度要求不高的场合。PL/M是Intel从8080微处理器开始为其系列产品开发的编程语言。它很像PASCAL,是一种结构化语言,但它使用关键词去定义结构。PL/M编译器好像汇编器一样可产生紧凑代码。PL/M总的来说是“高级汇编语言”,可详细控制着代码的生成。但对51系列,PL/M不支持复杂的算术运算、浮点变量而无丰富的库函数支持。学习PL/M无异于学习一种新语言。C语言是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生压缩代码。C语言结构是以括号{}而不是子和特殊符号的语言。C可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:对单片机的指令系统不要求了解,仅要求对51的内存结构有初步了解寄存器分配、不同内存的寻址及数据类型等细节可由编译器管理程序有规范的结构,可分为不同的函数。这种方式可使程序结构化将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性编程及程序调试时间显著缩短,从而提高效率提供的库包含许多标准子程序,具有较强的数据处理能将已编好程序可容易的植入新程序,因为它具有方便的模块化编程技术C语言作为一种非常方便的语言而得到广泛的支持,C语言程序本身并不依赖于机器硬件系统,基本上不做修改就可根据单片机不同较快地移植过来。51的汇编语言非常像其它汇编语言。指令系统比第一代微处理器要强一些。51的不同存储区域使得其复杂一些。尽管懂得汇编语言不是你的目的,看懂一些可帮助你了解影响任何语言效率的51特殊规定。例如,懂得汇编语言指令就可以使用在片内RAM作变量的优势,因为片外变量需要几条指令才能设置累加器和数据指针进行存取。要求使用浮点和启用函数时只有具备汇编编程经验才能避免生成庞大的、效率低的程序,这需要考虑简单的算术运算或先算好的查表法。最好的单片机编程者应是由汇编转用C而不是原来用过标准C语言的人。由此来看,单片机有着微处理器所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。3.3系统单片机选择本系统以MCS-51单片机成员中的AT89S52为控制核心。AT89S52是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序内存,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序内存既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S52单片机可为您提供许多高性价比的应用场合,它灵活应用于各种控制领域。主要性能参数:(1)与MCS-51产品指令系统完全兼容(2)4K字节在系统编程(ISP)Flash闪速内存(3)1000次擦写周期(4)4.0-5.5V的工作电压范围(5)全静态工作模式:0Hz—33MHz(6)三级程序加密锁(7)2568字体内部RAM(8)32个可编程I/O口线(9)3个16位定时/计数器(10)8个中断源(11)全双工串行UART通道(12)低功耗空闲和掉电模式(13)中断可从空闲模唤醒系统(14)看门狗(WDT)及双数据指针(15)掉电标识和快速编程特性(16)灵活的在系统编程(ISP—字节或页写模式)其内部结构结构如图2.1所示:图3.1单片机内部结构图3.4看门狗电路由于单片机自身的抗干扰能力比较差,尤其在一些条件比较恶劣、噪声大的场合,常会出现单片机因为受外界干扰而导致死机的现象,造成系统不能正常工作。设置看门狗是为了防止单片机死机、提高单片机系统抗干扰性的一种重要途径。一个完整的单片机应用系统应该是一个软、硬件的结合体,在系统正常工作时,会受到各种外界干扰因素的影响。这种外界干扰轻者导致系统内部数据出错,重者将严重影响程序的运行。因此单片机应用系统的开发一定要考虑系统可靠性的设计,以满足系统在现场苛刻环境下的正常运行,而“看门狗”则是系统可靠性设计的重要一环。在一个单片机应用系统中,所谓的“看门狗”是指在系统设计中通过软件或硬件方式在一定的周期内监控单片机或其它CPU的运行情况。如果在规定的时间内没有收到来自单片机或其它CPU的触发信号,则系统会强制复位,以保证系统在受到干扰时仍能够维持正常的工作状态。在单片机系统中,看门狗的设计一般采用硬件和软件结合两种方式。3.4.1软件看门狗软件看门狗是利用单片机片内闲置的定时器/计数器单元作为看门狗,在单片机程序中适当的插入监控指令,当程序出现异常或进入死循环时,利用软件将程序计数器PC赋予初始值,强制性的使程序重新开始运行。使用软件看门狗的具体实现方法如下。1.首先在初始化程序中设置好定时器/计数器的方式控制寄存器(TMOD)
和定时时间的初值,并开中断。2.根据定时器的定时时间,在主程序中按一定的间隔插入复位定时器的指令,既插入监控指令,两条指令间的时间间隔应该小于定时时间,否则看门狗将发生错误动作。3.在定时器的中断服务程序中设置一条无条件转移指令,将程序计数器PC转移到初始化程序的入口。软件看门狗的最大特点是无须外加硬件电路,经济性好。当然,如果片内的定时器/计数器被占用,就需要寻求其它的设计方式了。3.4.2硬件看门狗专用硬件看门狗是指一些集成化的或集成在单片机内的专用看门狗电路,它实际上是一个特殊的定时器,当定时时间到时,发出溢出脉冲。从实现角度上看,该方式是一种软件与片外专用电路相结合的技术,硬件电路连接好后,在程序中适当地插入一些看门狗复位的指令,保证程序正常运行时看门狗不溢出。而当程序运行异常时,看门狗超时发出溢出脉冲,通过单片机的RESET引脚使单片机复位。这种方式中,看门狗能否可靠有效地工作,与硬件组成及软件的控制策略都有密切的关系。目前常用的集成看门狗电路很多,如MAX705-708、MAX813L、X5043/5045等。看门狗电路可以分为内看门狗和外看门狗。看门狗电路是指看门狗的硬件电路包含在单片机内部,如Microchip的16C5x系列,MOTOROLA的68C05系列,51内核中比较典型的有Atmel公司的AT89C55WD、AT89S8252,Winbond公司的W77E58,SST公司的SST89C58以及Philips公司87系列的多种型号的单片机等。对于没有看门狗定时器的单片机或是认为内部看门狗不可靠时,可以采用外部看门狗定时器。外部看门狗电路既可以用专用看门狗芯片,也可由普通芯片实现。3.5AT89S52引脚功能介绍1.电源引脚Vcc和GNDVcc:电源电压,GND(10脚):接地端。2.时钟电路引脚XTALl和XTAL2。XTAL2(18脚):接外部晶体和微调电容的一端。在内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体的固有频率。要检查单片机的振荡电路是否正确工作,可用示波器查看XTAL2端是否有脉冲信号输出。XTAL1(19脚):接外部晶体的微调电容的另一端。在片内它是振荡电路反相放大器的输入端。若需采用外部时钟电路时,该引脚输入外部时钟脉冲如图2.2,2.3所示:图3.2AT89S51单片机晶振接法3.控制信号引脚RSTRES(8脚)“RST是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。图3.3外部时钟电路4.I/O(输入/输出)P0、P1、P2和P3标准51单片机,如8051、8031、AT89C51、AT89S51、P89C51等有4个I/O(输入/输出)口,分别为:P0口(39—32脚):P0口是一个漏极开路的8位双向埠。作为漏极八路的输出端口,每次能驱动8个Ls型TTL负载。当P0口作为输入口使用时,其先向锁存器(地址80H)写入全1,此时P0口的全部引脚悬空,叫作为高阻抗输入。P1口(1—8脚):P1口是一个带上拉电阻的8位准双向I/O端口每一位能驱动(吸收成输出电流)4个LS型TTL负载。在P1口作为输入口使用时,应先向P1口锁存器(地址90H)写入全1,上拉电阻接成高电平。P2口(21—28脚):P2口是一个带内部上接电阻的8位准双向埠。P2口的每一位能驱动4个LS型TTL负载。P3口(21—28脚):P3口是一个带内部上接电阻的8位准双向埠。P3口的每一位能驱动(吸收或输出电流)4个LS型TTL负载。P3口与其它的I/O埠有很大区别,它除作为—般准双向I/O口外,每个引脚还具有专门的功能,见表3-1。表3-1端口引脚功能P1口也是一个准双向口,作通用I/O口使用。其电路结构见图3.4图3.4P1口作通用I/O口使用输出驱动部分内部有上拉负载电阻与电源相连。实质上拉电阻是两个场效应管(FET)并在一起,—个FET为负载管,其电阻固定;另一个FET可工作在导通或截止两种状态,使其总电阻值变化近为0或阻值很大两种情况。当阻值近似为0时,可将引脚快速上拉至全高电平,当阻值很大时,P1口为高阻输入状态。当P1口输出高电平时,能向外提供拉电流负载,所以不必再接上拉电阻。在埠用作输入时,也必须先向对应的锁存器写入“1”,使FET截止。由于片内负载电阻较大,约20k—3.6定时器0和1使用定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择。这两个定时/计数器有4种操作模式,通过TMOD的M1和M0选择两个定时/计数器的模式0、1和2都相同。模式3不同如下所述模式模式0将定时器设置成模式0时类似8048定时器,即8位计数器带32分频的预分频器。图3.5所示为模式0工作方式。此模式下定时器寄存器配置为13位元寄存器,当计数从全为1翻转为全为0时定时器中断标志位TFn置位。当TRn=1同时GATE=0或INTn=1时定时器计数置位GATE时允许由外部输入。INTn控制定时器,这样可实现脉宽测量,TRn为TCON寄存器内的控制位图3。模式0的操作对于定时器0及定时器1都是相同的两个不同的GATE位,TMOD.7和TMOD.3分别分配给定时器0及定时器1。图3.5定时器/计数器/0/1的模式0:13定时器/计数器模式1模式1除了使用了THn及TLn全部16位元外其它与模式0相同。模式2此模式下定时器寄存器作为可自动重装的8位计数器TLn。如图3.6所示,TLn的溢出不仅置位TFn,而且将THn内容重新装入TLnTHn。内容由软件预置重装时,THn内容不变。模式2的操作对于定时器0及定时器1是相同的。图3.6定时器寄存器模式3在模式3中定时器1停止计数效果与将TR1设置为0相同.此模式下定时器0的TL0及TH0作为两个独立的8位计数器图3.7为模式3时的定时器0逻辑TL0占用定时器0的控制位C/T、GATE、TR0、INT0及TF0。TH0限定为定时器功能计数器周期占用定时器1的TR1及TF1此时TH0控制定时器1中断。模式3可用于需要一个额外的8位定时器的场合定时器0工作于模式3时80C51看似有3个定时器/计数器当定时器0工作于模式3时定时器1可通过开关进入/退出模式3,它仍可用作串行端口的波特率发生器或者应用于任何不要求中断的场合。图3.7定时器/计数器/0/1的模式3:双8位计数器
第四章硬件设计4.1单片机系统硬件的设计本设计单片机选用合适的51系列单片机为系统核心,加以数码管、电阻、电容、晶振、按键开关等器件做其外围电路。4.1.1单片机最小系统51单片机选用AT89S52。单片机及外围电路如图4.1。图4.1单片机及外围电路对于AT89S52单片机,其最小系统只需要电源、上电复位电路、时钟电路就能工作。由于我们的程序存储器(ROM)采用内部Flash存储单元,所以单片机上的EA接高。时钟电路的晶振采用12M的晶振,它由JZ、两个33pF电容和单片机内部的OSC电路组成,为单片机提供12MHz的时钟信号源。微处理器系统在开始工作时必须对微处理器内部的寄存器等进行复位,使各个寄存器的值设为预定状态才能顺利开始工作。复位电路的好坏决定着单片机能否正常工作。复位电路基本功能是在系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经过一定的延时才撤销复位信号,主要是防止由于电源开关或插头分合过程中引起的抖动。复位电路可以使用专用复位芯片,也可以用电阻电容搭建。本文从可靠性和成本考虑最终选用电阻电容来搭建复位电路。对于51内核的单片机,RST是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。当单片机加电时由于RC充电的效果,使得复位脚保持一会高电平使单片机内部寄存器彻底复位。 74HC573为地址锁存器,51单片机的低8位地址总线地址是和数据总线复用的,而RAM的地址总线地址和数据总线是分开的,所以要用地址锁存器把低8位地址和数据分开,常用的地址锁存器有74LS/HC373和74LS/HC573,这里选用74HC573。4.1.2供电电路图设计 单片机系统供电需要+5V电压,而音频放大器需要+12V和-12V双电源供电。所以本系统需要三组电源,如图4.2所示。图4.2单片机供电电路图4.1.3键盘电路设计键盘是标准的输入设备,实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描,如8279,CH451,LMC9768等,还有就是用软件实现键盘扫描。使用现成的芯片可以节省CPU的开销,但增加了成本,而用软件实现具有较强的灵活性,也只需要很少的CPU开销,可以节省开发成本。本文便使用软件实现键盘的扫描。常见的键盘可分为独立按键式键盘和行列扫描式键盘。独立按键式键盘应用在需要少量按键的情况,按键和单片机的I/O口线直接连接。而行列扫描式键盘用在按键需求较多的情形下。考虑到血压计面向大多数人群,需操作简单,所以采用独立按键式键盘。独立式键盘电路如图4.3所示。其中P10、P11、P12、P13为51单片机的IO口。图4.3按键电路图理论上当按键按下或弹起时,可以相应的产生低电平或高电平,但实际并非如此。键盘按键一般都采用触点式按键开关。当按键被按下或释放时,按键触点的弹性会产生抖动现象。即当按键按下时,触点不会迅速可靠地接通,当按键释放时,触点也不会立即断开,而是要经过一段时间的抖动刁才能稳定下来,按键材料不同,抖动时间也各不相同。按键抖动可能导致单片机将一次按键操作识别为多次操作,一般采用硬件电路或软件程序来消除。图4.4按键抖动示意图一次完整的按键过程,如图4.4所示,包含以下几个阶段。1、等待阶段:此时按键尚未按下,处于空闲阶段;2、闭合抖动阶段:此时键刚刚按下,但信号处于抖动状态,系统在检测时应消抖延时,约5ms到20ms;3、有效闭合阶段:此时抖动己经结束,一个有效按键动作己经产生,系统应该在此时执行按键功能,或将按键编码记录下来,待键弹起时再执行其功能;4、释放抖动阶段:许多时候编程人员并不在此时消抖延时,但最好也执行一次消抖延时,以防止误操作;5、有效释放阶段:若设计要求在按键抬起时才执行功能,则应当在此时进行按键功能的处理。按键击键的类型有多种划分方式:按击键时间分:短击和长击;按击键次数分:单击和连击;按特殊功能分:双击或组合键等。功能分析如下:(1)短击,用户快速按下单个按键,然后立即释放;(2)长击,用户长时间按下一个按键。如某些重要的功能键,复位,为防止用户误操作;(3)连击,实现连续操作效果,如连续加1或减1;(4)复合按键,用户同时按下两个或多个按键,实现某些特殊功能;(5)无键按下,当用户在一定时间内未按任何按键,执行某些特殊的操作,如自动进入待机态或节能态。从单片机串口输出的信号先送到左边的移位寄存器(74HC164),由于移位脉冲的作用,使数据向右移,达到显示的目的。移位寄存器74HC164还兼作数码管的驱动,如图4.5所示。图4.5数码管显示电路4.1.4存储器设计存储器采用2片32k*8的RAMHY62256组成,如图,其中U9的地址空间为0000H-7FFFH,U10的地址空间为8000H-0FFFFH,使用U10时,单片机IO口P3.3必须为高,P3.3为低时选中的是ADC,与非门输出高,U10无效。如图4.6所示。图4.6储存器电路4.2模拟音频电路设计4.2.1MIC电路设计MIC采用驻机体MIC,当驻极体话筒MIC拾到微弱声音信号以后,便在MIC两端产生信号电流,R42将信号电流转装换成电压信号,经过电容器C17、C18耦合到运算放大器的进行放大。MIC工做时需要偏压MICBISE。这里用VREF作为MICBISE,R35、E5组成RC低通滤波器,为MIC提供比较干净的偏压。4.2.2放大滤波电路设计放大器采用运算过放大器组成的差分放大器,这样能有效地避免干扰,提高信噪比,运放采用被发烧友称作“运放皇”通用音频运放NE5532,其噪声低,价格便宜。放大器的放大倍数设为20倍,调试时可适当调整放大倍数使音量合适。图4.8中右边的放大器组成低通滤波器。图4.8放大滤波电路设计由于语音信号的带宽为200Hz-3400HZ,涉及频谱混叠现象,低通滤波器的过渡带衰必须较快。我们采用有源二阶滤波器的方案.4.2.3ADC设计ADC采用通用ADC0809,ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。(1)ADC0809的内部逻辑结构如图4.9。图4.9ADC0809的内部逻辑结构ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。IN0-IN7:为8条模拟量输入通。ADC0809地址输入和控制线:4条。ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZADC与51单片机接口如图4.10,由于只采用1个通道,这里选用IN-0,所以三个地址线全接地。时钟信号采用单片机输出的ALE,为2MHz。ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。前边放大器其输出的信号为双极性,这里R45、R46实现双极性到单极性转换。图4.10ADC与51单片机接口电路图ADC的片选采用单片机IO口P3.3,当P3.3为低时有效。4.2.4DAC设计DA转换器的作用是将存储的数字语音信号转换为模拟语音信号,由于一般的DA转换器都能达到1us的转换速率,足够满足题目的要求,故我们在此选用了通用DA转换器DAC0832。DI0~DI7:数据输入线,TLL电平。ILE:数据锁存允许控制信号输入线,高电平有效。CS:片选信号输入线,低电平有效。WR1:为输入寄存器的写选通信号。XFER:数据传送控制信号输入线,低电平有效。WR2:为DAC寄存器写选通输入线。Iout1:电流输出线。当输入全为1时Iout1最大。Iout2:电流输出线。其值与Iout1之和为一常数。Rfb:反馈信号输入线,芯片内部有反馈电阻。Vcc:电源输入线(+5v~+15v)Vref:基准电压输入线(-10v~+10v)AGND:模拟地,摸拟信号和基准电源的参考地。DGND:数字地,两种地线在基准电源处共地比较好。其与单片机连接方式如图4.11,片选采用单片机IO口P3.2,当P3.2为低时有效。图4.11DAC与单片机连接方式4.2.5音频功率放大器设计经带DAC输出的声音回放信号,其幅度为0-5v,足以用耳机来收听,可不接任何放大器。但考虑到实际中经常会用到喇叭外放,故在本系统中增加外放功能,前端放大器采用通用型音频功率放大器LM386来完成。电路如图4.12。该电路增益为50—200,连续可调,最大大不失真输出功率为325mw。输出端接C4、R9串联电路,以校正喇叭的频率特性,防止高频自激。脚7接220uF去耦电容,以消除低频自激。为便于该功故在高增益情况下工作.这里将不使用的输入端脚2对地短路。图4.12音频放大电路设计
第五章软件设计本设计软件采用C语言设计。5.1KeilC51简介1.对于8051单片机,现有四种语言支持,即汇编、FI/M、C和BASIC.C是一种源于编写UNIx操作系统的语言,它是一种结构化语言,可产生紧凑代码.C结构是以括号()而不是字和特殊符号的语言.C可以进行许多机器级函数控制而不用汇编语言.与汇编相比,有如下优点:(1)对单片机的指令系统不要求了解,仅要求对8051的存贮器结构有初步了解(2)寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;(3)程序有规范的结构,可分为不同的函数,这种方式可使程序结构化;(4)具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;(5)关键字及运算函数可用近似人的思维过程方式使用;(6)编程及程序调试时间显著缩短,从而提高效率;(7)提供的库包含许多标准子程序,具有较强的数据处理能力;(8)已编好程序可容易地植入新程序,因为它具有方便的模块化编程技术.8051系列单片机作为工业标准地位,从1985年开始就有8051单片机的C语言编译器。简称C51。C51程序结构与一般C语言没有什么差别.一个C51程序大体上是一个函数定义的集合,在这个集合中有仅有一个名为main的函数(主函数).主函数是程序的入口,主函数中的所有语句执行完毕,则程序执行结束.C5l提供的数据结构是以数据类型的形式出现的,C51的数据类型如下所示:我们最常用的KeilC5l编译器具体支持的数据类型有:位型(bit)、无符号字符(unsignedchar)、有符号字符(signedchar)、无符号整型(unsignedint)、有符号整型(signedint)、无符号长型(unsignedlong)、有符号长型(signedlong)、浮点(float)和指针类型等。2.C51数据的存贮类型与805l存贮器结构:KeilC51编译器完全支持8051单片机的硬件结构,可完全访问8051硬件系统的所有部分.该编译器通过将变量、常量定义成不同的存贮类型(data,Nata,idata,pdata,xdata,code)的方法,将它们定位在不同的存贮区中。存贮类型与8051单片机实际存贮空间的对应关系如表5-1所示。表5-1存贮类型与存贮空间的对应关系当使用存贮类型data,Nata定义常量和变量时,C5l编译器会将它们定位在片内数据存贮区中(片内RAM),这个存贮区根据8051单片机CPU的型号不同,其长度分别为64,128,256或512字节.以今天的标准来看,这个存贮区不很大,但它能快速收发各种数据.外部数据存贮器从物理上讲属于单片机的一个组成部分,但用这种存贮器存放数据,在使用前必须将它们移到片内数据存贮区中.片内数据存贮区是存放临时性传递变量或使用频率较高的变量的理想场所.为了能直接访问这些特殊功能寄存器SFR,KeilC51提供了一种自主形式的定义方法,这种定义方法与标准C语言不兼容,只适用于对8051系列单片机进行C编程.这种定义的方法是引入关键字“sfr”,语法如下:例:sfrSCON=0x98;/*串口控制寄存器地址98H*/sfrTMOD=0x89;/*定时/计数器模式控制寄存器地址89H*/在典型的8051应用问题中,经常需要单独访问SFR中的位,C51的扩充功能使之成为可能。特殊位(sbit)的定义,像SFR一样不与标推C兼容,使用关键字“sbit”可以访问。位寻址对象。例:sbitCY=PSW^7;\*定义CY位为PSW.7地址为0xD7,*\sbitbeep=P3.^6;\*定义位变量beep为I/OP3.6*\5.2主程序流程图5.3各个模块程序介绍5.3.1键盘子程序设计本设计硬件电路的输入采用4个按键,具体程序为:Unsignedchargetkey(void){ucharkeytmp;P1=0xff;keytmp=~(P1)&0xff;if(keytmp==0){km=0;kp=0;}//nokeyisONelse//anykeyisON { if(km==0) km=1; //置按键抖动标志else //按键已去抖 {if(kp==0) //按键没有处理,下面是按键处理代码 //置按键处理标志 {kp=1; return(keytmp); } } }return0;}5.3.2显示子程序//串行LED码表codeunsignedcharled[]={0xfc,0x60,0xda,0xf2,0x66,//0~40xb6,0xbe,0xe0,0xfe,0xf6,//5~90x9e,0x2a,0x7a,//End 0x00};//Space //===================显示========================= voidmputchar(charx){SBUF=led[x];while(TI==0);TI=0;}voidDisplay(longintx)//功能:将变量在3位串行显示器上显示出来{unsignedchary,zf=0,qian;x=60*30000/x;//将周期换算为频率,需修正y=x%10;mputchar(y);x=x/10;y=x%10; qian=qian/10; if(qian==0&&y==0) mputchar(0x0d); elsemputchar(y); if(qian==0) mputchar(0x0d); elsemputchar(qian);}5.3.3ADC子程序设计#defineADC0809XBYTE[0x08000]//P3.3=0P33=0;//片选选择ADC buff=ADC0809;//读数据 P33=1;//片选选择RAM *p=buff;//存储数据5.3.4DAC子程序设计P32=1; buff=*p;//读存储器数据 P32=0;//片选选择DAC DAC0832=buff;//将数据送至DAC,进行DA变换 P32=1;5.3.5定时中断服务子程序本设计语音采样率为8KHz,采用单片机定时器产生8k的采样时序,和播放时DAC的转换时序。定时器初始化:TMOD=0X01;//设置定时器0TH0=0XFF;//定时时间设为0.128ms,8k/s采样率TL0=0X82;EA=1;//开总中断ET0=1;TR0=1;//定时计数起开始计数定时中断服务子程序:timer0()interrupt1using1{uintbuff;if(RECORD) {P33=0; buff=ADC0809; P33=1; *p=buff; }if(PLAY) {P32=1; buff=*p; P32=0; DAC0832=buff; P32=1; }p++;TH0=0XFF;TL0=0X82;TR0=1;}致谢通过本次毕业设计,我在指导老师*****教授的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,并对当前电子领域的研究状况和发展方向有了一定的了解,单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助。另外,此次毕业设计还获得了*******各位领导和老师的大力支持。在此,我忠心感谢*****老师以及******同学的指导和帮助。在未来的工作和学习中,我将以更好的成绩来回报各位领导和老师。
参考文献[1]杨文龙编.《单片机原理及应用》.西安:西安电子科技大学出版社,2000[2]马忠梅等.《单片机的C语言应用程序设计》.北京航空航天大学出版社,1997[3]ATMLE8-BitMicrocontrollerAT89S52DATESHEET.0368D-B–12/97[4]路勇,高文焕主编.《电子电路实验及仿真》.北京:清华大学出版社,1999[5]SCM1602LCM使用说明书。长沙太阳人电子有限公司。[6]冯建华,单片机应用系统设计与产品开发,人民邮电出版社,2004[7]周立功,DP668使用说明文檔,广州周立功单片机发展有限公司,2003[8]StuartBall,嵌入式微处理器系统设计实例,电子工业出版社,2004《单片机原理及应用》课程设计说明书设计题目:基于AT89C52单片机的音乐盒的设计学院:专业班级:设计者:学号:指导老师:
目录摘要…………………4概述……………5音乐盒的发音原理……………62.1播放音乐的原理……………62.2音符频率的产生……………62.3节拍频率的产生……………8硬件电路设计…………………93.1硬件电路……………………93.2整体硬件电路………………103.3原理说明…………………103.4键盘按键…………………10软件设计………114.1程序设计流程………………114.2设计源程序代码……………12仿真及调试……………………165.1调试………165.2仿真………165.3程序调试中出现的问题及解决的办法………17设计小结………18
附录元件清单…………………19
基于AT89C52单片机的音乐盒的设计【摘要】:随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统的音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。【关键词】:音乐盒;单片机
概述传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富,如图1-1所示。图1-1单片机音乐盒功能框图第2章音乐盒的发音原理2.1播放音乐的原理发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解。音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。2.2音符频率的产生音符及定时器初始值:例如:中音1(do)的音频=523HZ,周期T=1/523s=1912定时器/计数器0的定时时间为:T/2=1912/2=956定时器956的计数值=定时时间/机器周期=956/1=956(时钟频率=12MHZ)装入T0计数器初值为65536-956=64580将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。下表2-1是C调各音符频率与计数初值T的对照表:表2-1C调各音符频率与计数初值T的对照表音符频率(Hz)/初值()音符频率(Hz)/初值()低1DO262/63627中1DO523/64580高1DO1042/65056低2RE294/63835中2RE589/64687高2RE1245/65134低3M330/64021中3M661/64780高3M1318/65157低4FA350/64107中4FA700/64822高4FA1397/65178低5SO393/64264中5SO786/64900高5SO1568/65217低6LA441/64402中6LA882/64969高6LA1760/65252低7SI495/64526中7SI990/65031高7SI1967/65282音符、音符编码及定时器初始值:为了产生音符,必须求出音符低音5—高音5的计数初值。例如C调的低1DO的THTL=65536-50000/262=63627,中音DO的THTL=65536-500000/523=64580,高音DO的THTL=65536-500000/1042=65056。为了方便写谱,对其进行简单的编码,在编程时,根据音符编码查找对应的计数初值。比如说音乐是C调的,那么出现低音的5SO,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI,直接写一个3代码。表2-2音符编码表音符音符编码音符音符编码不发音0低5SO1低6LA2低7SI3中1DO4中2RE5中3M6中4FA7中5SO8中6LA9中7SIA高1DOB高2REC高3MD高4FAE高5SOF高6LAG2.3节拍频率的产生节拍的产生与编码:音乐中的节拍用延时时间产生。例如,1拍=0.4s,1/4拍=0.1s,以此类推。假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表2-3和表2-4所示。表2-3节拍数编码表按1/4拍为一个延时时间的节拍编码与节拍对应的表按1/8拍为一个延时时间的节拍编码与节拍对应的表节拍编码节拍节拍编码节拍节拍编码节拍节拍编码节拍11/466/411/866/822/488/422/888/833/4A10/433/8A10/844/4C12/444/8C12/855/4F15/455/8表2-4乐谱节拍编程时的时间延时表乐谱节拍1/4拍的延时时间乐谱节拍1/8拍的延时时间4/4125ms4/462ms3/4187ms3/494ms2/4250ms2/4125ms音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。
第3章硬件电路设计3.1硬件电路设计中用到了AT89C52单片机,3*3键盘,蜂鸣器等硬件电路常用元器件。3.1.1时钟电路由单片机XTAL1、XTAL2引脚外接晶振(12MHz)及起振电容C1、C2(均为30pf)组成。如图3-1所示:图3-1时钟复位电路3.1.2按键输入电路由3*3矩阵键盘组成,P3口作为输入控制按键,其中P3.4~P3.6扫描行,P3.0~P1.2扫描列。图3-2按键输入电路
3.2整体硬件电路如图3-3所示:图3-3音乐盒硬件电路原理图3.3原理说明:当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。(1)
硬件电路中用P3口控制按键,其中P3.0~P3.2扫描列,P3.4~P1.6扫描行;(2)
用P1.0口控制蜂鸣器;(3)
电路为12MHz晶振频率工作,起振电路中C1,C2均为30pf。3.4键盘按键键盘按键分布如下:按键功能说明:1—5五首歌曲6上一首歌曲7关机8暂停9下一首歌曲123456789第4章软件设计本程序可以实现该课程设计的基本要求,并可以通过按键播放达10首歌曲。4.1程序设计流程程序设计流程图如图4-1所示:主程序开始主程序开始初始化计数器T0,计时器T1等待按键,是否有按键?包括播放键,暂停键,停止键依据按键码演奏对应的歌曲初始化计数器T0,计时器T1等待按键,是否有按键?包括播放键,暂停键,停止键依据按键码演奏对应的歌曲 NNYY图4-1程序设计流程图
4.2设计源程序代码ORG0000HLJMPMAINORG000BH;定时器T0溢出中断入口地址LJMPTT0ORG001BH;定时器T1溢出中断入口地址LJMPT1INTORG1000HMAIN:MOVSP,#70HLCALLINITIL;内存初始化WAIT:LCALLKEYLJMPWAITKEY: ;键盘扫描NOP NOPLCALLKSJNZK1 ;有按键转到K1MOVA,37HLCALLSOPXN:LJMPKEYK1:LCALLKSJNZK2LJMPKEYK2: ;读键盘MOVR2,#0FEHMOVR4,#00HK3:MOVA,R2MOVP3,AMOVA,P3JBACC.4,L1;为1跳转,第一行无按键MOVA,#01HLJMPLKL1:JBACC.5,L2MOVA,#04HLJMPLKL2:JBACC.6,NEXT1MOVA,#07HLK:ADDA,R4PUSHACCK4:LCALLDELAY1LCALLKSJNZK4 ;若同时有其他按键,则等待(同时按视为无效)MOVR3,#07HCLRAMOVR0,#30HMOVR1,#31HMM1:MOVA,@R1;键值给37HMOV@R0,AINCR0INCR1DJNZR3,MM1POPACCMOV@R0,ARETNEXT1:INCR4 ;列扫描MOVA,R2JNBACC.2,N2LJMPN1N2:LJMPKEYN1:RLAMOVR2,ALJMPK3KS:MOVA,#0F0H;判断P1口MOVP3,ANOPNOPMOVA,P3CPLAANLA,#0F0HRETDELAY1:;延时2.55ms63×4×1us×10+10×3×1usSETBRS0DL:MOVR5,#0AHDL2:MOVR6,#63DL3:NOPNOPDJNZR6,DL3DJNZR5,DL2CLRRS0RETINITIL: ;30H~37H初值为零MOVR3,#08HMOVR0,#30HM1:MOV@R0,#00HINCR0DJNZR3,M1CLRP1.0RET;按键值播放歌曲SOP:MOVA,37HCJNEA,#01H,A11MOV52H,#HIGHTABLE10MOV53H,#LOWTABLE10LCALLMAIN0A11:CJNEA,#02H,A22MOV52H,#HIGHTABLE20MOV53H,#LOWTABLE20LCALLMAIN0A22:CJNEA,#03H,A33MOV52H,#HIGHTABLE30MOV53H,#LOWTABLE30LCALLMAIN0A33:CJNEA,#04H,A44MOV52H,#HIGHTABLE40MOV53H,#LOWTABLE40LCALLMAIN0A44:CJNEA,#05H,A55MOV52H,#HIGHTABLE50MOV53H,#LOWTABLE50LCALLMAIN0A55:RETDELAY:MOVR4,#05D1:MOVR5,#0FFHDJNZR5,$DJNZR4,D1RET MAIN0:MOVTMOD,#11H;播放歌曲程序MOVIE,#8AHMOVTH1,#3CHMOVTL1,#0B0H LCALLKSJNZTTM12MOV40H,#00HNEXT20:MOVA,40HMOVDPH,52HMOVDPL,53HMOVCA,@A+DPTRMOVR2,AJZSTOPANLA,#0FHMOVR1,AMOVA,R2SWAPAANLA,#0FHJNZSINGCLRTR0JMPW1SING:DECAMOV22H,ARLAMOVDPTR,#TABLE00MOVCA,@A+DPTRMOVTH0,AMOV21H,AMOVA,22HRLAINCAMOVCA,@A+DPTRMOVTL0,AMOV20H,ASETBTR0SETBTR1W1:LCALLDELAY30INC40HLCALLKS;有键跳出JNZSTOPLJMPNEXT20STOP:CLRTR0CLRTR1CLRP1.0LJMPMAIN0TTM12:LCALLK2MOVA,37HCJNEA,#08H,TTM13 ;暂停CLRTR1CLRP1.0LCALLDELAY1TTM120:LCALLKSLCALLDELAY1JZTTM120LCALLK2MOVA,37HCJNEA,#08H,TTM120 SETBTR1LJMPNEXT20TTM13:CJNEA,#09H,TTM14 ;下一曲MOVA,52HINCAMOV52H,AMOVA,53HINCAMOV53H,AMOVA,36HINCAMOV37H,ALJMPTTM2TTM14:CJNEA,#06H,TTM2 ;上一曲MOVA,52HDECAMOV52H,AMOVA,53HDECAMOV53H,AMOVA,36HDECAMOV37H,A TTM2:RETTT0:PUSHACC;定时器中断子程序0PUSHPSWMOVTL0,20HMOVTH0,21HCPLP1.0 ;获得脉冲POPPSWPOPACCRETI;定时器中断子程序1T1INT:MOVTH1,#3cHMOVTL1,#0b0HRETIDELAY30: MOVR7,#2W2:MOVR4,#125W3:MOVR3,#248DJNZR3,$DJNZR4,W3DJNZR7,W2DJNZR1,DELAY30RETTABLE00:DW64580,64684,64777,6482;音符DW64898,64968,65030,64260DWTABLE10: ;第一首《精忠报国》DB66H,52H,36H,22H,12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22HDB32H,52H,22H,42H,38H,66H,52H,36H,22H,12H,22H,22H,32H,98HDB24H,22H,32H,54H,52H,32H,92H,12H,92H,82H,98H,66H,52H,36H,22HDB12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38HDB66H,52H,36H,22H,12H,22H,22H,32H,98H,24H,22H,32H,54H,52H,32HDB22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52HDB62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38HDB64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52HDB52H,62H,7FH,74H,04H,58H,6FHDB00TABLE20: ;第二首《月亮代表我的心》DB02H,82HDB16H,32H,54H,02H,52HDB0A6H,32H,54H,02H,52HDB64H,74H,0B6H,64HDB52H,5CH,32H,22HDB16H,12H,14H,32H,22HDB16H,12H,14H,22H,32HDB26H,12H,94H,22H,32HDB2CHDB32H,52HDB36H,22H,14H,54HDB0ACH,92H,0A2HDB96H,0A2H,96H,82HDB3CH,54HDB36H,22H,14H,54HDB0ACH,92H,0A2HDB16H,12H,14H,22H,32HDB2CH,02H,82HDB16H,32H,56H,12HDB0A6H,32H,56H,52HDB66H,72H,0B6H,62HDB62H,52H,58H,32H,22HDB16H,12H,14H,32H,22HDB16H,12H,14H,22H,32HDB26H,92H,0A4H,12H,22HDB1CHDB00TABLE30: ;第三首《大海》DB82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24HDB22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32HDB22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,94H,1CHDB82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24HDB22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32HDB22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,22H,12H,1CH,32H,52HDB62H,64H,62H,64H,0B2H,62H,52H,54H,62H,54H,32H,22HDB12H,14H,12H,14H,24H,3CH,32H,22H,12H,14H,12H,14H,0B2H,62H,52H,54H,62H,54H,32H,52HDB66H,0B2H,0B4H,62H,52H,5CH,32H,52H,62H,64H,62H,64H,0B2H,62H,52H,54HDB62H,54
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度房屋买卖合同涉及的家具租赁协议2篇
- 第五章透镜及其应用章末达标检测卷2024-2025学年人教版物理八年级上学期(无答案)
- 砂石料资源开发利用合作协议(2024年度)3篇
- 2024年度农业科技研发及推广合同
- 全新建筑工地用大型水泵租赁合同20242篇
- 2024年度游戏开发合同标的游戏设计要求与开发周期2篇
- 二零二四年房屋建筑工程监理合同3篇
- 肩难产的临床护理
- 全新物业服务合同注意2024年条款:物业公司与业主的服务约定
- 二零二四年度技术转让合同:人工智能技术授权使用协议
- 高考倒计时 二百天大有可为-高三冲刺班会
- 低空经济发展研究报告(2024年)-和君咨询
- 常见职业病危害和预防基础知识
- 大学体育与体质健康(山东联盟)智慧树知到期末考试答案章节答案2024年中国石油大学(华东)
- 期末考试-公共财政概论-章节习题
- PICCO监测技术及评分标准
- 小学体育五至六年级体育与健康3.2 轻度损伤的自我处理(课件)人教版(15张PPT)
- 家具店消防应急预案
- 新车提车验车表4页
- 盾构穿越岩溶地区施工技术总结
- 慢性病健康管理教材
评论
0/150
提交评论