目录前言……………………………………………………………………………………1一、方案设计与论证…………………………………………………………………1二、硬件电路设计……………………………………………………………...……12.1整体电路方框图与说明…………………………………………………….……12.2各部分电路设计……………………………………………………………….…22.2.1数码管显示驱动电路………………………………………………..…………22.2.2单片机系统电路…………………………………………………….…………32.2.3语音播放电路…………………………………………………….……………42.2.4电源电路部分…………………………………………………….……………52.2.5复位电路……………………………………………………….………………62.2.5键盘电路……………………………………………………….………………6三、软件设计……………………………………………………………………...…63.1软件流程图及设计思路说明………………………………………………….…63.2模块设计……………………………………………………………………….…73.2.1语音播放部分………………………………………………….………………83.2.2DS1302实时时钟部分…………………………………………………………8四、整机测试…………………………………………………………………………10五、对C51程序在凌阳单片机上移植分析……………………………….………..10六、总结………………………………………………………………………………10七、致谢………………………………………………………………………………11参考文献………………………………………………………………………………12附录……………………………………………………………………………………12前言由于科学技术的快速发展,电子技术在20世纪取得了惊人的进步,特别是近几十年来单片机技术和其他高技术的飞速发展,致使工业、农业、科技和国防等领域以及人们的社会生活发生了令人瞩目的变革。凌阳单片机就是在这样的环境下发展起来,旗下的SPCE061A单片机在语音方面也有了很大的发展,在消费电子中除了显示之外再加上语音的功能可以让产品更具人性化,本文将设计一个基于凌阳单片机的具有语音功能的电子钟。一、方案设计与论证方案一:本方案采用凌阳SPCE061A十六位单片机,通过单片机控制DS1302实时时钟芯片进行读写,并对数码管、矩阵键盘进行扫描,语音报时采用凌阳单片机自带的语音系统。方案二:本方案采用AT89S51单片机,亦是控制对DS1302实时时钟的读写,并对数码管、矩阵键盘进行扫描,语音报时系统采用ISD1420,键盘采用矩阵键盘。方案确定:比较两个方案,如果是不考虑语音报时系统,则采用方案二,但本系统侧重语音,并且就51单片机C语言在凌阳SPCE061A上的移植做分析,所以最终采用方案一。二、硬件电路设计2.1.1整体电路方框图与说明系统原理框图如图2.1所示。主控元件采用凌阳SPCE061A单片机,属于凌阳u’nSP.系列产品的一个16位结构的微控制器。在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH),但用在此系统上已经足够。较高的处理速度使u’nSP.能够非常容易地、快速地处理复杂的数字信号。因此以u’nSP.为核心的SPCE061A微控制器也适用在数字语音识别应用领域。SPCE061A在2.6V~3.6V工作电压范围内的工作速度范围为0.32MHz~49.152MHz,较高的工作速度使其应用领域更加拓宽。2K字SRAM和32K字FLASH仅占一页存储空间,32位可编程的多功能I/O端口;两个16位定时器/计数器;32768Hz实时时钟;低电压复位/监测功能;8通道10位模-数转换输入功能并具有内置自动增益控制功能的麦克风输入方式;双通道10位DAC方式的音频输出功能,这就为本系统的语音播报打下了基础,整体系统框架如图2.1。键盘控制电路图2.1系统原理框图整体具体工作原理是单片机控制DS1302实时时钟芯片的读写时序,将时间数据读出,再对数码管进行扫描,将时间正确显示出来。与此同时扫描键盘是否有报时键按下,有则调用语音报时函数进行报时。2.2各部分电路设计2.2.1数码管显示驱动电路图2.2位选驱动电路凌阳SPCE061A单片机DS1302实时实时时钟芯片音频放大电路语音播放数码管显示图2.3段选驱动电路2.2.2单片机系统电路单片机系统是整个硬件系统的核心,也是协调整机工作的控制器,又是数据处理器。图2.4单片机系统电路2.2.3语音播放电路音频部分的原理图2.5所示,在图7中可以看到两个跳线,其作用在于可以测量DAC的输出波形;另外拔掉跳线,可以断开DAC到喇叭放大的通路,使得DAC通道处于开路状态。这样便于用DAC做其他用途,用户可以用过这个跳线来加入自己的外围电路。凌阳音频压缩算法根据不同的压缩比分为以下几种(具体可参见语音压缩工具一节内容):SACM-A2000:压缩比为8:1,8:1.25,8:1.5SACM-S480:压缩比为80:3,80:4.5SACM-S240:压缩比为80:1.5按音质排序:A2000S480S240用凌阳CompressTool事先把所需要的语音信号录制好,本系统共包括十多个语音资源,整个语音信号经凌阳SACM_S2000压缩算法压缩占了26K存储空间,SPCE061A单片机具有32k闪存,使用内部flash即可满足要求。凌阳SPCE061A单片机自带双通道DAC音频输出,DAC1、DAC2转换输出的模拟量电流信号分别通过AUD1和AUD2管脚输出,DAC输出为电流型输出,所以DAC输出经过SPY0030音频放大,以驱动喇叭放音,放大电路如图7(只列出了DAC1,DAC2类似),这为单片机的音频设计提供了极大方便。在它们后面接一个简单的音频放大电路和喇叭即可实现语音播报功能,音频的具体功能主要通过程序来实现。图2.5语音播放电路2.2.4电源电路部分:图2.6是电源电路的部分,5V直流电压经过SPY0029后给整个系统供电,当然也可选用其它芯片。SPY0029是凌阳公司设计的电压调整IC,采用CMOS工艺。SPY0029具有静态电流低、驱动能力强、线性调整好等优点。图2.6电源电路2.2.5复位电路:图2.7复位电路2.2.6键盘电路:图2.84*4矩阵键盘三、软件设计3.1总程序流程图及设计思路说明初始化读DS1302显示时间扫描键盘Y报时N修改时间图3.1程序流程图程序开始运行,初始化IO口,如IO口的方向和属性向量,然后对读取DS1302时间寄存器的数据,然后将时间数据通过数码管扫描显示,扫描4*4矩阵键盘判断是否有键按下,如有则读出相应键值,如果是报时键则调用报时间函数,如果是报日历键则调用报日历函数,如果是修改键,则使数码管显示“------”等待键盘输入数值,输入完毕等待确认修改时间还是日历,确认完成之后调用修改时间或者日历函数,调整DS1302中相应的时间或者日历寄存器值,达到修改时间的目的,到这里程序运行完毕,进入下一轮的开始。3.2模块设计3.2.1语音播放部分本设计是采用凌阳SACM_S2000语音播报,流程图如图3.2。显示“------”等待输入输入完毕修改时间/日对DS1302进行写操作调用报时/日历函结束SACM_S2000初始化获取所需音频数据初始化N播放完毕?Y图3.2语音播放程序流程图3.2.2DS1302实时时钟部分DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个IO口线分别是RST-复位、I/O-数据线、SCLK-串行时钟,其内部还有32*8bit的RAM,以供存储重要数据,如闹钟时间等。DS1302的读写操作如图3.3:开始播放结束图3.3DS1302读写操作其内部寄存器如图3.4:图3.4DS1302内部寄存器具体的操作时序请见附表A中DS1302操作部分四、整机测试由于该系统设计比较简单,所以调试也较容易,运行效果良好,都能够实现设计的要求与功能。语音播放部分已经录制并压缩好,播放起来效果也不错。五、对C51程序在凌阳单片机上移植分析从51单片机移植到凌阳单片机上主要注意的问题是要了解这两种单片机的内部结构的差别,以及性能上的不同,首先是IO口的操作,凌阳单片机的IO口输入输出要手动更改,不像51那么方便,其次是要注意清看门狗,由于凌阳单片机为了程序运行能够更加稳定,所以加入了看门狗,清狗周期必需要小于0.75S,刚开始接触凌阳单片机经常会忘记这一步,最后就在于中断、定时器、选频等特殊功能寄存器的操作上。下面就凌阳的位操作进行举例说明:这是定义set_IO是将IO置1,clr_IO则定义为清零。#defineset_IO*P_IOA_Data|=0x2000//IO=1#defineclr_IO*P_IOA_Data&=0xdfff//IO=0这是输出,输入则需要将该引脚定义为输入如:*P_IOA_Dir&=0xdfff;//IOA13口定义为输入*P_IOA_Attrib|=0x2000;//IOA13口定义为悬浮式每次需要对IO口进行读写的时候都要改变IO口的属性及方向向量。这样就可以对DS1302进行读写操作了。51单片机的汇编语言移植造成的程序改变量太大,无疑于重新编写,但是凌阳单片机的汇编语言已经和C语言很类似,不会再使用MOV这种指令,所以重新编写所造成的工作量不是非常大。六、总结凌阳单片机我从来没有接触过,只是听学长们说过,记得有一位学长说凌阳单片机有些不稳定,这个我没有深入研究过,但是在调试的时候发现在了个问题,在对数码管进行扫描的时候,偶尔会显示乱码,需要复位才能恢复正常。虽然之前没有学习过凌阳单片机,但是有了51单片机的基础之后,学起来不会很吃力,凌阳单片机和51单片机的差别就只是在于对一些特殊功能寄存器的操作和IO口的位操作上,相对于习惯使用51单片机而言凌阳单片机使用起来不太方便,这就是51单片机和凌阳单片机的最大差别,凌阳虽然相比32位的ARM等高级的单片机相差甚远,但是对比51单片机还有许多优势,特别是在语音功能上,具有很大的优势。我学习凌阳单片机的目的除了它拥有强大的语音功能之外,还有一个目的就是如果能掌握凌阳单片机,那么就说明一样能掌握其它的单片机,比如说AVR、PIC、ARM,这说明各种单片机具有的共通性。这更说明平常对基础的积累相当重要,不管是学习单片机或者其它的一切事情都需要脚蹋实地才能继续做下去。七、致谢我的的毕业设计是在明老师的指导下才能顺利完成的,在此我对明鑫老师表示衷心的感谢。参考文献[1]雷思孝,李伯成,雷向莉编著.SPCE061A单片机原理及其应用技术---凌阳16位单片机原理及应用[M].西安:西安电子科技大学出版社.2004[2]马忠梅,籍顺心,张凯,马岩编著.单片机的C语言应用程序设计(第三版)[M].北京:北京航空航天大学出版社.2003附录#includereg061.h#includea2000.h#includeconsist.h#defineuintunsignedint#defineP_IOA_Data(volatileunsignedint*)0x7000#defineP_IOA_Buffer(volatileunsignedint*)0x7001#defineP_IOA_Dir(volatileunsignedint*)0x7002#defineP_IOA_Attrib(volatileunsi