毕业设计基于单片机控制的语言复读机设计.doc
1 引言1.1 基于单片机控制的语言复读机研究的意义单片机又称微控制器,或称嵌入式控制器。单片机的出现和应用,正从根本上改变着传统的控制系统设计思想和设计方法,给人们带来观念上的冲击。广大的电子应用专业技术人员面临的单片机应用技术,如同20世纪70年代面临数字集成电路技术一样。过去经常采用模拟电路,脉冲电路,组合逻辑实现的大部分控制电路系统,现在相当一部分都可以用各种单片机利用软件方法予以取代。这种用软件代替硬件并能提高系统性能的控制技术,我们称之“微控制技术”。它标志着一种全新概念的出现,是对传统控制技术的革命。可以说,单片机,可编程门阵列与传统模拟技术相结合,构成新一代电子应用技术,这是不可能回避的一项新型的工程应用技术。传统的设计方法正在演变成软件和硬件相结合的方法,许多电路设计将转化为程序设计问题。虽然单片机已经是一个微型机算计,但实质上它只是一个芯片。光有这样一个芯片还不能完成任何工作。要让单片机去完成相应的工作,在实际应用中,就应当将单片机和被控对象进行电气连接,必须外加各种扩展接口电路,外部设备,被控对象的硬件和软件,构成一个“单片机应用系统”才行。单片机应用系统由硬件和软件组成,硬件是指MCU、存储器、I/O接口和外设等物理器件的有机组合。软件是指系统监控程序的总称。在开发的过程中,它们的设计不能完全分开,二者需要互相配合、不断调整才能组成高性能的应用系统。单片机应用系统的开发包括系统总体设计、硬件设计、软件设计、系统调试等几个阶段,它们有时交叉进行。单片机主要用于计算机外设、实时控制、仪器仪表、通信和家用电器等各个领域,是计算机技术和电子技术的综合性应用,在不同应用场合其技术要求各不相同,因此设计方法和研制的步骤不完全一样。而现在的智能家电无一例外是采用微控制器来实现的,所以家用电器是单片机应用最多的领域之一。它是家用电器实现智能化的心脏和大脑。由于家用电器体积小,故要求其控制器体积更小以便能嵌入其结构之中。而家用电器品种多,功能差异也大,所以又要求其控制器有灵活的控制功能。单片机以微小的体积和编程的灵活性而产生多种控制功能,完全可以满足家用电器的需求1。随着国民经济的发展,人民的生活水平不断提高,语言复读机作为人们学习工作的好助手,越来越受到消费者的喜爱。通过对于基于单片机控制的语言复读机的研究我们可以更清晰,更实际的掌握单片机的一些基本的控制和应用10。单片机在日常家电中的应用比较广泛,语言复读机控制系统就是一种以单片机为控制核心的系统,它把以往对复读机的繁琐的操作变得简单化,不但其机器性能显著提高,还增加了难以实现得功能。因此对于语言复读的研究一方面可以让我们对于所学的单片机和电路有关知识有个更好的理解和巩固,一方面也锻炼了自身的动手能力,特别是能够实现软硬连调所具备的能力111.2 复读机的发展史自1999年国家教委正式宣布:今后我国大、中、小学生的外语教学和考试将侧重于学生的口语、听力综合水平后,复读机市场被国家政策迅速孵化为一个容量上千万台的成熟市场。据统计,中国市场1998年、1999年和2000年复读机的销量分别为50万台、300万台和800万台,2001年复读机的销量超过1000万台,2002年达到1300万台,2003年将增加到1500万台12。 我国消费电子行业经过多年的发展,出现了生产能力过剩、需求增长缓慢、市场竞争剧烈的残酷局面。复读机产业的异军突起,导致金正.新科、清华紫光等众多的大型家电企业和IT企业纷纷在2002年进入复读机行业。根据消费电子行业以往的经验,这么多厂家在一个有限的市场内竞争,必然以爆发大规模的价格战收场,而且最终往往是落得两败俱伤。复读机的市场容量虽然每年还在高速增长,但是市场竞争突出表现为价格竞争,价格不断被迫下跌,使复读机成为仅有微利或无利可图的产品,过早地进入了产品衰退期。为了求得企业的生存与发展,一些具有战略眼光的企业早在几年前就投入了大量的人力物力进行新产品开发,以便将来给企业提供新的利润增长点。 2002年6月,清华紫光推出了一种可视复读机.打破了传统复该机无法显示文字和翻译文字的功能局限,将听说、阅读、翻译、词汇等语言技能训练有机地结合起来,可综合提高外语学习者的英语水平和学习效率。这种集文字显示、可视复读、英汉互译和电子辞典等功能于一身的复读机,可同时营造“声音”与“文字”构造的语言环境,从语言的音、形、义三个角度全方位展示语言信息,可充分调动学生的听觉、视觉、大脑等多种器官去综合捕捉并理解语言信息,从而极大地激发学生的求知欲望和学习兴趣。在2002年9月举办的第五届中关村电脑节上,清华紫光可视复读机荣获了“中关村十大数码产品”和“数码学习机最佳品牌”两项殊荣14。 可视复读机的出现,不仅仅导致了外语学习工具的革命,而且发展出一项划时的信息记录与传播技术-可视录音技术,使人类可以利用价格低廉的录音磁带记录和传播声音与文字信息,将传统的图书、报刊杂志、录音节目记录在同一载体上出版发行,创造出一种大众化的信息传播媒介和文化消费载体,对人类的学习方式、工作方式和生活方式产生深远的影响,产生巨大的社会效益和经济效益13。 复读机就是可以把声音存储下来并且重复播放的一种机器。是在便携式收录机的基础上,增加了微处理芯片、数字存储芯片后形成的多功能语言信号存取设备。它是在磁带放音的同时将模拟信号转换为数字信号,储存在数字存储芯片中;复读状态时再将数字存储器中的信号转换为模拟信号,通过功率放大后由扬声器还原出声音。复读机所有状态的转换均是在电脑微处理芯片的控制下来完成的15。2 单片机简介2.1 单片机的发展史单片机是把微型计算机主要部分都集中在一个芯片上的单芯片微型计算机。由于他的结构与指令都是按照工业控制要求设计的,故又叫单片机微控制器。国外曾经一度把它称作单片微计算机。 单片机作为微型计算机的一个重要分支,应用面很广,发展很快。自单片机诞生至今,已发展为上百种系列的近千个机种。 如果将8位单片机的推出作为起点,那么单片机的发展历史大致可分为以下几个阶段: (1)第一阶段(1976-1978):单片机的探索阶段。以Intel公司的MCS48为代表。MCS48的推出是在工控领域的控索,参与这一控索的公司还有Motorola 、Zilog等,都取得了满意的效果。这就是SCM的诞生年代,“单机片”一词即由此而来。 (2)第二阶段(1978-1982)单片机的完善阶段。Intel公司在MCS48基础上推出了完善的、典型的单片机系列MCS51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有很多机通信功能的串行通信接口。 CPU外围功能单元的集中管理模式。 体现工控特性的位地址空间及位操作方式。 指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。 (3)第三阶段(1982-1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel公司推出的MCS96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。随着MCS51系列的广泛应用,许多电气厂商竞相使用80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道A/D转换部件、可靠性技术等应用到单片机中,增强了外围电路路功能,强化了智能控制的特征。 (4)第四阶段(1990至今):微控制器的全面发展阶段。随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机5。 2.2 单片机的发展趋势 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。 1:CMOS化 近年,由于CHMOS技术的进步,大大地促进了单片机的CMOS化。CMOS芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。这也是今后以80C51取代8051为标准MCU芯片的原因。因为单片机芯片多数是采用CMOS(金属栅氧化物)半导体工艺生产。CMOS电路的特点是低功耗、高密度、低速度、低价格。采用双极型半导体工艺的TTL电路速度快,但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了HMOS(高密度、高速度MOS)和CHMOS工艺。CHMOS和HMOS工艺的结合。目前生产的CHMOS电路已达到LSTTL的速度,传输延迟时间小于2ns,它的综合优势已在于TTL电路。因而,在单片机领域CMOS正在逐渐取代TTL电路。 2:低功耗化 单片机的功耗已从Ma级,甚至1uA以下;使用电压在3-6V之间,完全适应电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化。 3:低电压化 几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在3-6V范围内工作。低电压供电的单片机电源下限已可达1-2V。目前0.8V供电的单片机已经问世。 4:低噪声与高可靠性 为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施。 5:大容量化 以往单片机内的ROM为1KB-4KB,RAM为64B-128B。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内ROM最大可达64KB,RAM最大为2KB。 6:高性能化 主要是指进一步改进CPU的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达100MIPS(Million Instruction Per Seconds,即兆指令每秒),并加强了位处理功能、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出10倍以上。由于这类单片机有极高的指令速度,就可以用软件模拟其I/O功能,由此引入了虚拟外设的新概念。 7:小容量、低价格化 与上述相反,以4位、8位机为中心的小容量、低价格化也是发展动向之一。这类单片机的用途是把以往用数字逻辑集成电路组成的控制电路单片化,可广泛用于家电产品。 8:外围电路内装化 这也是单片机发展的主要方向。随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内。除了一般必须具有的CPU、ROM、RAM、定时器/计数器等以外,片内集成的部件还有模/数转换器、DMA控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等。 9:串行扩展技术 在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位OTP(One Time Programble)及各种类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展。特别是IC、SPI等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将列强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片6。 2.3 89C51单片机的内部结构图2.1所示为89C51带闪存(Flash ROM)单片机的基本结构框图。图2.1 89C51单片机结构框图在一小块芯片上,集成了一个微型计算机的各个组成部分,即89C51单片机芯片内包括:(1)一个8位的80C51微处理器(CPU);(2)片内256字节数据存储器RAM/SFR片内4KB程序存储器Flash ROM;(3)4个8位并行I/O端口P0P3,每个端口既可以用作输入,也可以用作输出;(4)2个16位的定时/计数器;(5)具有5个中断源,2个中断优先级的中断控制系统;(6)1个全双工的串行I/O口;(7)片内振荡器和时钟产生电路(最高允许振荡频率为24MHz);(8)具有节电工作方式(即空闲方式及掉电方式)。以上各个部分通过片内8位数据总线(DBUS)相连接7。2.4 89C51单片机引脚及其功能2.4.1 89C51的引脚结构89C51芯片具有40根引脚,其引脚图如下。图2.2 89C51的引脚结构2.4.2 89C51单片机的引脚分类1.电源线2根。Vcc:编程和正常操作时的电源电压,接+5V。Vss:地电平。2.晶体振荡器2根。XTAL1:振荡器的反向放大器输入。使用外部振荡器时必须接地。XTAL2:振荡器的反向放大器输出和内部时钟发生器的输入。当使用外部振荡器时用于输入外部震荡信号。3.I/O口共有P0、P1、P2、P3四个8位口,32根I/O线,其功能如下: (1)P0.0P0.7(AD0AD7)是I/O端口0的引脚。端口0是一个8位漏极开路的双向I/O端口。在存取外部存储器时,该端口分时地用作低8位的地址线和8位双向的数据端口(在此时内部上拉电阻有效)。 (2)P1.0P1.7是端口1的引脚,是一个带内部上拉电阻的8位双向I/O通道,专供用户使用。 (3)P2.0P2.7(A8A15)是端口2的引脚。端口2是一个带内部上拉电阻的8位双向I/O口,在访问外部存储器时,它输出高8位地址A8A15。 (4)P3.0P3.7是端口3的引脚。端口3是一个带内部上拉电阻的8位双向I/O口,该口的每一位均可独立地定义第一I/O口功能或第二I/O口功能。作为第一功能使用时,口的结构与P1操作与口完全相同,第二功能如下所示:引脚 第二功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INT0(外部中断)P3.3 INT1(外部中断)P3.4 T0(定时器0外部输入)P3.5 T1(定时器1外部输入)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通) 由上看出,89C51单片机不是将地址总线、数据总线和控制总线分开,而是地址线、数据线和部分控制均由I/O口完成。4.控制线 (1)PSEN:程序存储器的使能引脚,是外部程序存储器的选通信号,低电平有效。从外部程序存储器取数时,在每个机器周期内二次有效。 (2)EA/VPP:EA为高电平时,CPU执行内部程序存储器的指令。EA为低电平时,CPU仅执行外部程序存储器的指令。因为89C51芯片没有内部程序存储器,所以EA必须接地。 (3)ALE/PROG:ALE是地址锁存器使能信号。作为地址锁存允许时高电平有效。因为P1端口是分时传送数据和低8位地址。所以访问外部存储器时,ALE信号锁存低8位地址。即使在不访问外部存储器时,也以1/6振荡频率的固定频率产生ALE,因此可以用它作为外部的时钟信号。ALE主要是提供一个定时信号,在从外部程序存储器取指令时,把P0口的低位地址字节锁存到外接的地址锁存器中。 (4)RST/VPD:是复位/备用电源端。在振荡器运行时,使RST引脚至少保持两个机器周期为高电平,可实现复位操作,复位后程序计数器清零,即程序从0000H单元开始执行。在VCC关断前加上VPD(掉电保护)RAM的内容将不变8。2.5 89C51的CPUCPU是单片机的核心部件。它由运算器和控制器等部件组成。2.5.1 运算器运算器的功能是进行算术运算和逻辑运算。可以对半字节(4位)、单字节等数据进行操做,例如能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算和与、或、异或、求补、循环等逻辑操作,操作结果的状态信息送至状态寄存器。89C51运算器还包含有一个布尔处理器,用来处理位操作。它是以进位标志位C为累加器的,可执行置位、复位、取反、等于1转移、等于0转移、等于1转移且清0以及进位标志位与其他可寻址的位之间进行数据传送等位操作。也能使进位标志位与其他可位寻址的位之间进行逻辑与、或操作。(1)程序计数器PC程序计数器PC用来存放即将要执行的指令地址,共16位,可对64K程序存储器直接寻址。执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。(2)指令寄存器指令寄存器中存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。(3)定时与控制部件2.5.2 时钟电路89C51片内设有一个由反向放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入和输出端,时钟可以由内部方式产生或外部方式产生。内部方式时钟电路如图2.3所示。在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶振可以在1.2MHz到12MHz之间选择,电容值在5-30PF之间选择,电容的大小可起频率微调作用。XTAL1XTAL2 图2.3 内部方式时钟电路外部方式的时钟很少用,若要用时,只要将XTAL1接地,XTAL2接外部振荡器就行。对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于12MHz的方波信号。时钟发生器把振荡频率两分频,产生一个两相时钟信号P1和P2供单片机使用。P1在每一个状态S的前半部分有效,P2在每个状态的后半部分有效9。2.6 复位操作89系列单片机与其他微处理器一样,在启动时需要复位,使CPU及系统各部件处于确定的初始状态,并从初始状态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也须按复位键重新启动10。3 语言复读机的硬件功能介绍3.1 基于AT89C51单片机控制的语言复读机原理原理图见附录B复读机就是可以把声音存储下来并且重复播放的一种机器。是在便携式收录机的基础上,增加了微处理芯片、数字存储芯片后形成的多功能语言信号存取设备。它是在磁带放音的同时将模拟信号转换为数字信号,储存在数字存储芯片中;复读状态时再将数字存储器中的信号转换为模拟信号,通过功率放大后由扬声器还原出声音。复读机所有状态的转换均是在电脑微处理芯片的控制下来完成的 3.2 硬件系统主要包括三大模块, 控制解码模块( 包括DSP、D/AC 转换电路, 中断控制, 实时时钟) , 数据存储模块( 包括DSP 内部8K×24bits ROM, DSP 内部96K×24bitsRAM, 文件存储NANDFlash 内存, SDRAM) , 输入输出模块( 包括开关、按钮、USB2.0 接口、OLED 显示屏, 高保真放大器及耳机接口, CD 线路直录口) 。3.2.1 系统的结构 系统结构框图如图3.1 所示, 以微处理器AT89C51为核心, 加电启动后, 加载引导程序及操作系统程序,接受按键操作指令, 访问片外Flash 存储模块, 读出压缩音频文件, 存入内部RAM中, DSP 解码后, 将数字音频信号传送到数模转换器DAC, 模拟音频信号通过耳机输出。文字信号在MCU 控制下通过OLED 屏幕显示。图3.1 系统结构框图3.3 按键设计采用矩阵扫描式按键方案, 可以使通用I/O 口的利用率达到最高。按键的功能设计完全按照复读机的实际需求, 主要有复读键,播放键、菜单键、快进、快退键等。按键功能通过编写软件来完成。为了节约播放器空间, 采用按键组合功能方案: 短按/长按、模式双功能键, 尽量利用少的按键实现多种功能。按键接口如图3.2所示。图3.2 矩阵式按键接口示意图 1.菜单键播放器关闭状态下,长按MENU/ON 键,系统开机;播放或停止状态下, 短按MENU/ON 键, 进入系统主菜单。2.播放键开机后, 短按PLAY/OFF 键开始播放, 播放状态下短按PLAY/OFF 键暂停播放; 长按PLAY/OFF 键,进入关机进程。3.复读键(1)一键复读:播放状态下, 短按REPLAY 键, 播放器将重复播放当前位置前t 秒( 设定为30 秒) 的内容。在复读状态下, 再次短按REPLAY 键, 将退出复读模式,继续播放正文内容。在播放或复读状态下,如果播放的文件带有LRC 内容, 文词将同步显示.跟读: 在播放状态下, 长按REPLAY 键, 屏幕提示:“录音中, 按MENU/ON 键跟读”字样, 此时播放器将对用户的语音进行录音。当用户需要结束录音时, 可以根据屏幕提示短按MENU/ON 键, 进入跟读模式, 即重复播放刚才的录音, 此时屏幕提示“跟读中, 按REPLAY 键,进入对比复读”字样, 此时用户可以有两种选择: 第一种,短按MENU/ON 键, 回到播放的状态; 第二种,短按REPLAY 键, 进入对比复读状态。对比复读: 在跟读模式中, 短按REPLAY 键, 进入对比复读模式, 将刚才的录音和播放内容进行对比播放, 循环播放:录音<>正文内容<>录音<>正文内容<>, 如果播放文件有LRC 内容, 则屏幕同步显示文词。短按MENU/ON 键返回到正常的播放状态。(2) 对比复读: 在跟读模式中, 短按REPLAY 键, 进入对比复读模式, 将刚才的录音和播放内容进行对比播放, 循环播放:录音<>正文内容<>录音<>正文内容<>, 如果播放文件有LRC 内容, 则屏幕同步显示文词。短按MENU/ON 键返回到正常的播放状态。3.4 对比复读模块的流程1.一键复读一旦播放器开始播放, 则在内存空间中开辟一个循环缓冲区, 用来对当前正文播放的内容进行同步记录。循环缓冲区中只保留最近t 秒( 设定为30 秒) 的内容。当用户按下复读键时, 播放器先中断当前播放, 再循环播放缓冲区中的内容, 直到用户再次按键。每一次记录都需要新建一个与之对应的记录文件, 第二次复读需要先对记录文件进行刷新。2.跟读系统一旦发现跟读条件, 即中断正文播放, 判断本次按键是否为开机后第一次按下跟读键。如果是,则不进行文件删除操作; 如果不是, 则将最近一次的录音文件删除(为存储新的录音文件作准备)。然后从正文播放模式切换到录音模式, 建立相应的路径和文件名, 对用户的语音进行录音。在语音记录过程中, 系统一旦检测到菜单键按下, 则结束当前的录音过程,并开始循环播放刚才的语音文件。循环播放中, 一旦系统检测到播放键, 则从录音模式切换到正文播放模式, 并将开始播放的位置定位到被中断位置的前t 处,并开始播放。3.对比复读对比复读是跟读功能与复读功能的综合。系统一旦检测到对比复读条件, 找出跟读时的正文中断位置y, 再前移t 秒开始从x 位置开始播放正文, 并每隔固定时间检测是否已经播放到y 位置; 如果已到达y 位置, 则将正文播放模式切换到录音模式, 把最近一次跟读时建立的录音文件调出来进行播放, 每隔一定时间检测是否已经播放到录音文件末尾。播放到录音文件末尾时, 则将录音模式切换到正文播放模式, 并重新从x 位置开始新一轮的对比复读, 内容与前一次相同。对比复读过程中, 系统一旦检测到菜单键按下, 则退出对比复读功能, 从x 位置开始常规播放正文内容。图 3.3 对比复读流程4 软件过程控制在本设计中,我们用Keil c51软件对设计中的程序进行调试。用Protel软件对原理图进行绘制,用Proteus和Keil c51共同完成本设计的仿真。4.1 Keil c51集成开发环境随着单片机的不断发展,以C为主流的单片机高级语言也不断被更多的单片机爱好者和工程师所喜爱。使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持PLM,汇编和C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。Keil的使用方法如下:(1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图4.2。接着弹出一个标准Windows文件对话窗口,如图4.3,在“文件名”中输入您的第一个C 程序项目名称,这里我们用“test”。“保存”后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后可以直接点击此文件以打开先前做的项目。图4.2 New Project 菜单(2)首先在项目中创建新的程序文件或加入旧程序文件。如果您没有现成的程序,那么就要新建一个程序文件。这里采用Hello World!串行通讯程序。图4.4 选取芯片 图4.5 新建程序文件(3)点击图4.5中的3保存新建的程序,也可以用菜单FileSave或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出类似图4.3的文件操作窗口,把第一个程序命名为test1.c,保存在项目所在的目录中,这时您会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。如图4.6鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。选“Add File to Group Source Group 1”弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。图4.6 把文件加入到项目文件组中(4)C程序文件已被加到了项目中了,下面就剩下编译运行了。这个项目只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件。先看图4.7,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译链接当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5是菜单中的它们。在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6是有一个小放大镜的按钮,这就是开启关闭调试模式的按钮,它也存在于菜单DebugStartStop Debug Session,快捷键为Ctrl+F5。图4.7 编译程序(5)进入调试模式,软件窗口样式大致如图4.8所示。图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4可以打开5中的串行调试窗口,这个窗口可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有。首先按4打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打印“HelloWorld!”。最后要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后就可以进行关闭KEIL 等相关操作了12。图4.8 调试模式窗口4.2 仿真软件Proteus介绍 在学习、开发单片机系统时,常常需要硬件仿真设备,用于加快学习和开发的进度,但此设备对单片机数量、种类和固定外围电路有所限制,并且价格较贵。而联合运用仿真软件Proteus和单片机开发软件环境Keil uVision构建单片机虚拟实验室,在没有硬件实物的环境下虚拟建立了一个硬件仿真平台,大大扩充实验灵活性,为单片机的学习、开发提供了一种十分方便有效的平台。Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者,从事单片机教学的教师,致力于单片机开发应用的科技工作者的青睐。Proteus可提供的仿真元器件资源:仿真数字和模拟,交流和直流等数千种元器件,有30多个元件库。Proteus可提供的仿真仪表资源:示波器,逻辑分析仪,虚拟终端,SPI调试器,I2C调试器,信号发生器,模式发生器,交直流电压表,交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗,极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。Proteus提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号13。 4.3 Keil与Proteus的在线联合仿真Keil与Proteus在各自的环境下都可以进行一定程度仿真调试。然而,Keil只能对程序进行调试,不能看到硬件的运行结果,因此并不直观;而Proteus软件在对单片机系统进行仿真调试的时候只能对硬件做出改动,不能直观的了解程序运行的情况,难以对程序中存在的不足和错误进行修改。如果能把这两者结合起来,同时观察程序的运行情况和当时硬件系统所处的状态,则可以方便地找出系统设计中存在的软、硬件错误。根据Proteus软件的官方文档,在单片机仿真模型中包含了专门的代码,可以联合Keil uVision集成开发环境,提供源代码级的仿真调试,即在Keil中调试、运行程序,而将硬件输入输出结果显示在Proteus中,两者可以进行无缝联合仿真14。5 程序设计5.1 C程序介绍本课题采用C语言作为一种结构化的程序设计语言,C语言的特点就是可以使你尽量少地对硬件进行操作,具有很强的功能性、结构性和可移植性,常常被优选作为单片机系统的编程语言。但是基于单片机的C语言和标准C语言有很大区别,如何结合单片机的系统资源,用C语言开发符合实际工程需要的单片机系统,对用编程者来说具有十分重要的意义。C语言具有很强的功能性和结构性,可以缩短单片机控制系统的开发周期,而且易于调试和维护,已经成为目前单片机语言中最流行的编程语言。 用C编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能,这样可使整个应用系统程序结构清晰,易于调试和维护。不同的功能模块,分别指定相应的入口参数和出口参数,对于一些要重复调用的程序一般把其编成函数,这样可以减少程序代码的长度,又便于整个程序的管理,还可增强可读性和移植性15。5.2 主程序设计主程序见附录A主程序的工作过程为:先进行初始化工作,随后根据输入的键值分别散转至对应的子程序)。复读机开始工作。INT0外中断服务子函数用于实现功能选择。6 结论在本次设计中利用AT89C51单片机作为主控芯片,P1口为输入端口,P2,P0口为输出端口,使用单片机的A/D、D/A转换器完成声音的数字录放,效果较以便采用语音芯片的复读机清晰、明亮、逼真。 因为本人水平有限,故论文中所述内容如有不够详细、明确的地方还请各位老师及领导批评指正,本人再次表示虚心接受和聆听教诲。附录A 程序清单REREAD BIT 20H.0PLAY BIT 20H.1START BIT P1.5TEND BIT P1.4ORG 0000LJMP MAINORG 0003LJMP SINTOORG 0013HLJMP SINT1MAIN:MOV P1,#10011110BCLR REREADCLR PLAYSETB ITOSETB IT1SETB EASETB EXOJNB REREAD,$CLR REREADMOV DPTR,#0MLAB1:SETB STARTCLR STARTJNB TEND,$CLR TENDCLR P1.3MOV A,P0SETB P1.3MOVX DPTR,AINC DPTRCLR P1.2MOVX DPTR,AINC DPTRJNB REREAD,MLAB1CLR REREADMOV 25H,DPHMOV 26H,DPLSETB P1.6CLR P1.7MOV DPTR,#0MLAB2:MOVX A,DPTRMOV PO,ASCLR P1.1SETB P1.1INC DPTRMOV A,DPHCJNE A,15H,MLAB3MOV A,DPLCJNE A,26H,MLAB3MOV DPTR,#0MLAB3:JNB PLAY,MLAB2SETB P1.7CLR P1.6LJMP