基于单片机的家居多功能电话系统设计基于单片机的家居多功能电话系统设计 摘 要 本文介绍一种基于SPCE061A单片机的家居多功能电话系统设计。文中给出了系统的硬件构成,简述了SPCEO61A单片机的内部资源。根据语音识别的基本原理,从软件设计角度具体阐述了特定人语音识别在家居多功能电话系统上的实现过程。家居多功能电话的拨打采用语音控制,通过语音触发家居多功能电话拨打号码,并可实现无人安全报警,可以用语音指令加按键指令修改家居多功能电话存储的电话号码,经反复试验表明该系统语音识别准确率高,控制效果好。 关键词: SPCE061A单片机 家居多功能电话 语音识别 C语言 1 前言 1.1 研究的目的及意义随着社会经济水平的发展,家居生活智能化越来越多的出现在人们的面前,大到智能冰箱、洗衣机,小到电话、密码锁,这些电子产品都被现代社会的高科技覆盖。而且现在的人们追求个性化、自动化、快节奏且充满乐趣的生活方式,生活家居人性化、智能化的要求使智能控制技术在智能家居中得到了广泛应用,它不仅优化了人们的居住环境,而且能让人们有效地安排时间和节约各种能源。 语音是人们交流的最直接有效的形式,随着信息技术的飞速发展,人们寻求一种更为直接的人机对话方式,而语音控制就是这种人机对话方式之一[1]。语音控制技术是现在智能化控制的主要潮流,它取决于对语音信号的识别和处理,执行相应的命令。它的作用不仅体现在家居智能化方便操作,更能解决部分行动不便的群体对家居操作的困难,例如智能电话的拨号、门窗的开关等问题。声控技术快速发展到今天,已经能更好应用在新一代家居上面, 让家居生活更加舒适、安全、快速,能根据人们的语音控制, 由原来的被动静止结构转变为具有主动识别语音执行的智慧工具, 能让人们更有效安排时间, 增加家居生活的安全性、舒适性。 当前,实现语音识别及交互可以利用单片机、数字信号处理器(DSP)或语音识别专用芯片来完成[2],而现有产品大部分以传统的单片机加上语音信号采集、输出转换等外围电路构成,结构上显得不够精简,性价比也不是很高,而DSP和语音识别专用芯片价格相对较高,不太适合推广[3]。本课题利用SPCE061A语音单片机对手机模块实现了特定发音人语音识别及交互的控制,用户可以用语音对家居多功能电话进行控制,使其拨打相应电话号码。 本课题语音控制的家居是以手机模块为载体,主要通过研究声控技术来改变以往传统的人工手动拨号,利用智能的声控技术来实现自动拨号。家居多功能电话是利用声音代替人工手动来实现各种目的。首先是利用麦克风将采集到的声音转换为数据,单片机接收数据,再经过已加载在单片机里的程序对数据进行计算分析处理,实现通过对声音的识别,从而将人的发声转变为控制家居多功能电话各个功能的自动操作。由于要按一串难以记忆的电话号码,电话的使用对于独居老人和手眼不方便的长者非常不便。本设计通过声控的方式控制电话的拨号动作,令其使用变得简单方便。同时本设计更具有无线通信的功能,当接收到外部无线警情通知时能自动拨打预设置的电话号码。利用智能家居检测系统对家里进行监控,一旦检测到有人入侵,可通过信号传递给智能电话机实现报警功能,以到达防盗的目的。 1.2 家居多功能电话设计理念与预期结果 语音处理技术是一门新兴的技术,它不仅包括语音的录制和播放,还涉及语音的压缩编码和解码,语音的识别等各种处理技术。以往做这方面的设计,一般有两个途径:一种方案是单片机扩展设计,另一种就是借助于专门的语音处理芯片。普通的单片机往往不能实现这么复杂的过程和算法,即使勉强实现也要加很多的外围器件。专门的语音处理芯片也比较多,如ISD 系列、PM50 系列等,但是专门的语音处理芯片功能比较单一,想在语音之外的其他方面应用基本是不可能的[4]。 SPCE061A 是一款 16 位μnSP结构的微控制器。该芯片带有硬件乘法器,能够实现乘法运算、内积运算等复杂的运算。借助于 SPCE061A 的语音特色,“家居多功能电话系统的设计”实现了对手机模块拨打电话号码、报警以及修改电话存储号码的功能。具体如下: (1)通过麦克风及声音放大电路将声音输出到单片机,单片机进行语音识别,根据识别结果控制固话拨打相应的号码。 (2)当接收到中控系统报警命令时拨打预先设置的报警号码。 (3)通过语音识别,有进行新号码添加、报警指定号码修改的功能。 2 系统的硬件设计 2.1 家居多功能电话系统结构整个家居多功能电话硬件分为四大部分:手机模块、61扳、无线接收模块、4*4键盘模块。 系统硬件实物如图1所示。 图1 系统硬件实物图
信息传送内容:语音和数据 (2)61板:61板是小车的核心部分,它负责整个家居多功能电话控制信号的产生,以及语音的播放和识别功能实现的。61板以SPCE06lA单片机为控制核心,已自配必要的外围电路以及麦克风、扬声器各1只,按键3个,其本身就是一个完整的集仿真、调试、下载等功能为一体的独立系统[5] ,在不使用小车时可以将61板从小车上拆下来,61板仍然是完整的,可以用它来做其它的实验或开发。 (4)4*4键盘模块:有按键按下,并且识别了按键,即键盘上的两红灯亮,如果按键不松开,即两红灯一直保持着亮的状态。当放开了按键,即5个橙色的灯会表示出哪个按键按下,表示方式为16进制。 2.2 硬件框图 家居多功能电话硬件设计主要由语音输人输出电路、SPCE061A单片机、无线接收电路、4*4键盘模块及手机模块等组成,如图2所示。SPCE061A单片机是整个系统的核心,通过识别用户输入的语音命令,输出合适的控制信号,并经驱动电路控制手机模块做出正确的动作;同时,通过输出特定提示音,在一定程度上使系统达到和用户交互的目的。 SHAPE \* MERGEFORMAT 图2 系统硬件框图 其中无线接收模块的2272芯片的引脚配置如图3所示: 图3 2272芯片引脚配置原理图 2.3 家居多功能电话报警原理本论文设计是以普通的手机模块为基础的,主要对无线遥控进行改造。用凌阳61板的串口信号线与无线接收模块相连。若判断出无线接收模块接受到的信号为字符“4”的时候,则单片机开始控制手机模块,进行拨打报警电话。 2.4 4*4键盘原理图 本论文所设计的键盘模块电路另外设计在一块独立的电路板上,图4。 图4 4*4键盘原理图 当没有灯亮的时候,可以语音识别和按键识别。当有某些灯亮着的时候,此时是在键盘的某种状态下,不能进行语音识别,只有按‘<-’键退出了键盘模式才可以进行语音识别。 当有按键按下,并且识别了按键,即键盘上的两红灯亮,如果按键不松开,即两红灯一直保持着亮的状态。当放开了按键,即5个橙色的灯会表示出哪个按键按下,表示方式为16进制,每个按键的键码值如下: 数字0~9代表着0x01~0x09 '#'--0x0A '*'--0x0B 'CALL'--0x0C 'end(del)'--0x0d 'store'--0x0e '<-'--0x0f 键盘处理函数: { k_temp=getkey(); //--获取键盘按键码值k_temp if(k_temp!=0xff) //-- 如果码值不为0xff,即有按键按下了 { delay1(200); //延时 alledoff; } if(k_temp==store) //--- 拿码值和自己定义的值比较,如果等于store即进行存储号码模式 { pnum_flag=1; while(pnum_flag) pnum(); } if(k_temp==key_call) //---如果码值为key_call即为呼叫模式 call(); if(k_temp==key_end) //---如果码值为key_end即终止呼叫 CALL_END(); if(k_temp==TCoff) //---如果码值为TCoff即发送关机命令 TCshutdown(); if(k_temp==retrain) //是否重新训练 { F_FlashErase(0xe000); while(1); } k_temp=*P_IOA_Data&0x0001; //---判断KEY1有没有按下,如果按下了,就执行以下呼叫动作 if(k_temp) //-- key1报警 { PlaySnd(S_GJG,3); num_addr=0xe200; //--存储第一个号码的地址值 for(call_index=0;call_index<11;call_index++) //--读取第一个的存储号码 { num[call_index]=(*(unsigned int *)num_addr); num_addr++; } if(num[0]!=0xffff) //--如果读出来的号码的第一为数不是0xfff为这个地址的号码是已经人为存了进去,有效 { TC35I_CALL(num); //--进行呼叫 call_flag=1; while(call_flag) //--在呼叫过程中,一直读取键盘值 { alledon; k_temp=getkey(); if(key_end==k_temp) //--如果得到的码值为KEY_END, { CALL_END(); //--即结束呼叫然后退出 delay1(200); call_flag=0; //--把标志符清零即可以退出 k_temp=0xff; } WatchdogClear; //--清看门狗 } alledoff; } } redledoff; } 3 SPCE061A精简开发板概述 3.1 SPCE061A芯片简介SPCE061A是台湾凌阳(SUNPLUS)公司最新设计的一款高性价比16位精简指令集(RISC)系统级芯片(SoC),具有DSP功能,较高的处理速度(CPU最高时钟可达49.152 MHz)使其能够快速地处理各种复杂的数字信号,非常适用于语音处理。此外,它抗干扰能力强,适合用于各种领域。同时配合凌阳公司免费提供的语音处理函数库,使得这种微控制器成为设计低成本语音识别系统的理想选择[6],因此,可称之为语音单片机。 凌阳的16位单片机的CPU内核采用凌阳最新推出的μnSP(Microcontroller and Signal Processor)16位微处理器芯片(以下简称μnSP)。围绕μnSP所形成的16位μnSP系列单片机(以下简称μnSP家族)采用的是模块式集成结构,它以μnSP内核为中心集成不同规模的ROM、RAM和功能丰富的各种外设接口部件[7]。 μnSP内核是一个通用的核结构。除此之外的其它功能模块均为可选结构,亦即这种结构可大可小或可有可无。借助这种通用结构附加可选结构的积木式的构成,便可形成各种不同系列派生产品,以适合不同的应用场合。这样做无疑会使每一种派生产品具有更强的功能和更低的成本。 μnSP家族有以下特点: (一)体积小、集成度高、可靠性好且易于扩展。μnSP家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减少了各功能部件之间的连线,提高了其可靠性和抗干扰能力。另外,模块化的结构易于系统扩展,以适应不同用户的需求。 (二)具有较强的中断处理能力。μnSP家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。 (三)高性能价格比。μnSP家族片内带有高寻址能力的ROM、静态RAM和多功能的I/O口。另外,μnSP的指令系统提供具有较高运算速度的16位×16位的乘法运算指令和内积运算指令,为其应用增添了DSP功能,使得μnSP家族运用在复杂的数字信号处理方面既很便利,又比专用的DSP芯片廉价。 (四)功能强、效率高的指令系统。μnSP指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以缩短产品的开发周期。 (五)低功耗、低电压。μnSP家族采用CMOS制造工艺,同时增加了软件激发的弱振方式、空闲方式和掉电方式,极大地降低了其功耗。另外,μnSP家族工作电压范围大,能在低电压供电时正常工作,且能用电池供电,这对于其在野外作业等领域中的应用具有特殊的意义。 3.2 SPCE061A性能16位μnSP微处理器[8]; 工作电压(CPU) VDD为3.0V-3.6V;(I/O) VDDH为3.0V-5.5V; CPU时钟:0.32MHz-49.152MHz; 内置2K字SRAM; 内置32K字FLASH ROM; 可编程音频处理; 晶体振荡器; 系统处于休眠模式下(时钟处于停止状态),耗电仅为2μA/3.6V; 2个16位可编程定时器/计数器(可自动预置初始计数值); 2个10位DAC(数-模转换)输出通道; 32位通用可编程输入/输出端口; 两级中断,14个中断源; 具备触键唤醒的功能; 使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据; 锁相环PLL振荡器提供系统时钟信号; 32768Hz实时时钟; 7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器; 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能; 具备串行设备接口(UART,SIO); 具有低电压复位(LVR)功能和低电压监测(LVD)功能; 内置在线仿真电路ICE(In- Circuit Emulator)接口; 具有加密功能; 具有Watch-dog功能。 3.3 SPCE061A开发方法 SPCE061A的开发是通过在线调试器PROBE实现的。它既是一个编程器(即程序烧写器),又是一个实时在线调试器。用它可以替代在单片机应用项目的开发过程中常用的软件工具——硬件在线实时仿真器和程序烧写器。它利用了SPCE061A片内置的在线仿真电路ICE(In- Circuit Emulator)接口和凌阳公司的在线串行编程技术。PROBE工作于凌阳IDE集成开发环境软件包下,其5芯的仿真头直接连接到目标电路板上SPCE061A相应管脚,直接在目标电路板上的CPU---SPCE061A调试、运行用户编制的程序。PROBE的另一头是标准25针打印机接口,直接连接到计算机打印口与上位机通讯,在计算机IDE集成开发环境软件包下,完成在线调试功能[9]。 4 家居多功能电话的语音功能实现原理 4.1 语音识别原理语音识别分为特定发音识别(Speaker Dependent)和非特定发音人识别(Speaker Independent)两种方式[10]。 特定发音人识别是指语音样板有个人训练,对训练人的语音命令识别准确率较高,而其他人的语音命令识别准确率较低或不识别。非特定发音人识别是指语音样板有不同年龄、不同性别、不同口应得进行训练,可以识别一群人的命令。语音样板的提取非常重要。例子程序就是采用特定发音人识别方式。 我们将标准模式的存储空间称为“词库”,而把标准模式称为“词条”或“样板”。所谓建立词库,就是将待识别的命令进行频谱分析,提取特征参数作为识别的标准模式。 识别过程如图5所示,首先要滤除输入语音的噪声和进行预加重处理,提升高频分量,然后用线性预测系数等方法进行频谱分析,找出语音的特征参数作为未知模式,接着与预先存储的标准模式进行比较,当输入的未知模式与标准模式的特征相一致时,便被机器识别,产生识别结果输出。如果输入的语音标准的特征完全一致固然好,但是语音含有不确定因素,完全一致的条件往往不存在,事实上没有人能以绝对相同的语调把一个词说两遍,因此,预先特定好计算输入语音的特征模式与各种特征模式的类似程度或距离度的算法规则固化在ROM中,把该距离最小即最类似的模式作为识别相应语音的手段。当然,影响识别率的因素还有一些 ,如连续发音(如英语)与断续发音(如汉语)的不同(二者区别在于单词间隔有200ms以上的空隙时间)。 本程序采用特定人识别方式,将训练的标准样板存在内部RAM中(掉电丢失),每次上电复位后都要进行训练,我们可以扩展一块FLASH,将训练的标准样板存在FLASH中,这样就不需要在每次上电复位后再次训练[11]。 图5 语音识别系统原理图 4.2 语音控制程序流程语音识别主要分为“训练”和“识别”两个阶段。在训练阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识别。语音识别的具体流程如图6所示: 图6 语音识别流程说明框图 5 系统软件设计 5.1 系统的主程序设计小车的软件设计采用标准的C语言编程,系统的主程序流程如图8所示: 图8 语音识别流程说明框图 语音识别流程共分为四大部分:初始化部分、训练部分、识别部分、重训操作。 初始化部分:初始化操作将 IOB0、IOB7、IOB10设置为输出端,用以控制手机模块。必要时还要有对应的输入端设置和 PWM 端口设置等。 训练部分:训练部分完成的工作就是建立语音模型。程序一开始判断家居多功能电话系统是否被训练过,如果没有训练过则要求对其进行训练,并且会在训练成功之后将训练的模型存储到 Flash,在以后使用时不需要重新训练;如果已经训练过会把存储在 Flash 中的模型调出来装载到辨识器中。 识别部分:在识别环节当中,当识别到姓名时间,检测姓名是否与存储的姓名相同,相同则拨打相应的电话,不相同则无反映。识别键盘环节,当有按键按下,并且识别了按键,即键盘上的两红灯亮,如果按键不松开,即两红灯一直保持着亮的状态。当放开了按键,即5个橙色的灯会表示出哪个按键按下,表示方式为16进制,每个按键的键码值如下: 数字0~9代表着0x01~0x09 '#'--0x0A '*'--0x0B 'CALL'--0x0C 'end(del)'--0x0d 'store'--0x0e '<-'--0x0f 重训操作:考虑到有重新训练的需求,设置了重新训练的按键,循环扫描该按键,一旦检测到此键按下,则将擦除训练标志位,并等待复位。复位后,程序重新执行,当检测到训练标志位为 0xffff 时会要求重新对其进行训练。 语音识别主程序: int main(void) { unsigned int BS_Flag; //Train标志位 BSR_DeleteSDGroup(0); //初始化存储器RAM BS_Flag=*(unsigned int *)0xe000; //读存储单元0xe000 if(BS_Flag==0xffff) //没有经过训练(0xe000内容为0xffff) { TrainSD(); //训练 StoreSD(); //存储训练结果(语音模型) } else //经过训练(0xe000内容为0x0055) { LoadSD(); //语音模型载入识别器 } PlaySnd(S_START,3); //训练完成提示 BSR_InitRecognizer(BSR_MIC); //初始化识别器 SystemInit(); while(1) { BSR(); keyscan(); } } 5.2 训练子程序 图9 训练流程图 训练子程序, 训练5条指令: int TrainWord(unsigned int WordID,unsigned int SndID) { int Result; PlaySnd(SndID,3); //引导训练,播放指令对应动作 while(1) { Result = BSR_Train(WordID,BSR_TRAIN_TWICE);//训练两次,获得训练结果
if(Result==0)break; switch(Result) { case -1: //没有检测出声音 PlaySnd(S_NOVOICE,3); return -1; case -2: //需要训练第二次 PlaySnd(S_AGAIN,3); break; case -3: //环境太吵 PlaySnd(S_NOISY,3); return -3; case -4: //数据库满 return -4; case -5: //检测出声音不同 PlaySnd(S_CMDDIFF,3); return -5; case -6: //序号错误 return -6; default: break; } } return 0; } void TrainSD() { while(TrainWord(NAME_ID,S_NAME) != 0) ; //训练名称 while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; //训练第1个动作 while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ; //训练第2个动作 while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ; //训练第3个动作 while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ; //训练第4个动作 } 5.3 语音识别子程序图10 语音识别部分流程图 void BSR(void) { int Result; //辨识结果寄存 Result = BSR_GetResult(); //获得识别结果 if(Result>0) //有语音触发? { *P_IOB_Data=0x0000; switch(Result) { case NAME_ID: //识别出第一条指令 first(); //执行指令一 break; case COMMAND_GO_ID: //识别出第二条指令 second(); //执行指令二 break; case COMMAND_BACK_ID: //识别出第三条指令 third(); //执行指令三 break; case COMMAND_LEFT_ID: //识别出第四条指令 fourth(); //执行指令四 break; case COMMAND_RIGHT_ID: //识别出第五条指令 fifth(); //执行指令五 break; default: break; }}} 6 家居多功能电话的使用 6.1 电话的实际使用测试接通电源,两个电源灯亮,听到开始的声音之后手机模块开始初始化,手机模块初始化完成,开始寻找网络,其信号灯会一闪一闪,闪动频率正常即可正常使用,如无信号可重新打开电源进行手机模块初始化,重新寻找网络。经反复试验,证明语音识别准确率高,控制效果好,可以正常拨打电话以及在接到报警信号的时候进行报警,但实际使用中家居多功能电话运行时信号噪音的干扰会可能影响到家居多功能电话的喇叭状态。以下讲述家居多功能电话的使用方法。 6.2 拨打电话当没有灯亮的时候,可以语音识别和按键识别。当有某些灯亮着的时候,此时是在键盘的某种状态下,不能进行语音识别,只有按‘<-’键退出了键盘模式才可以进行语音识别。 先按‘CALL’键,此时橙色灯5常亮,表示为呼叫状态,此时等待着输入号码,0~9和‘<-’有效,‘<-’为退出键。其他按键即所有灯闪四下表示输入无效。当输入了11位手机号码后,5个橙色灯全亮,此时等待着呼叫或放弃。如果按‘<-’键即退出。如果再次按‘CALL’键即进行拨号,此时有语音提示说拨号,5个橙色灯保持常亮,表示着现在是呼叫状态。唯有按'END(DEL)'键结束呼叫退出,其他键均无效。 6.3 电话号码的存储 (1)先按下‘#’号键,不松开再按下‘*’号键,然后同时放开,此时键盘上的两灯同时闪两下,然后变成常亮。 (2)按“STORE”键进入存号码状态,此时键盘上的左灯常亮,右灯灭。 (3)输入号码,11位数字,0~9有效,按其他按键的话所有灯同时闪四下,即表示按键无效,当输入11位有效数字后,5个橙灯同时亮,表示号码输入完成,此时等待着保存或取消保存。 (4)再次按“STORE”键将刚才输入的号码保存然后退出,如果按“<-”键即放弃保存然后退出。其他按键无效。 (5)如果要再保存号码,即要从步骤一开始。 6.4 电话号码的删除 (1)先按下‘#’号键,不松开再按下‘*’号键,然后同时放开,此时键盘上的两灯同时闪两下,然后变成常亮。 (2)按“END(DEL)”键进入删除号码状态,此时键盘上的右灯常亮,左灯灭。 (3)输入要删除的号码,数字1~5和按键‘<-’有效,按其他按键的话所有灯同时闪四下,即表示按键无效。按‘<-’键退出删除模式。如果要再删除号码即从步骤一开始。输入1~5任一数字,橙色灯全亮,即表示了输入了要删除的号码序号,等待删除或退出。 (4)如果再次按"END(DEL)"键即删除刚输入的序号的号码,如果按‘<-‘键即退出删除模式。其他按键无效。 (5)如果要再删除号码,即要从步骤一开始 流程图如图11所示 图11 家居多功能电话使用流程图 结束语 经过几个月的努力,基于单片机的家居多功能电话系统设计已基本完成本设计综合应用了SPCE061A丰富的软硬件资源,成功的实现了语音控制功能。标准的C语言编程,丰富的语音资源函数为编程提供了很大的方便。 该设计方案结构简单,以单芯片实现了语音播放与识别以及拨打电话功能。家居多功能电话的控制采用语音控制和中断定时控制相结合,通过语音触发家居多功能电话的状态。 实验过程中现场环境噪声的干扰、家居多功能电话运行时信号噪音的干扰以及发音者距麦克风的有效距离等,都有可能影响到家居多功能电话的运动状态;软件的编程质量的优劣同样影响着家居多功能电话的智能性和机动性,为达到最佳的实验效果,我选择了无明显噪声的实验室环境,并且对训练程序进行了多次修改和验证。经反复试验,证明语音识别准确率高,控制效果好,得到了预期的结果,实现了家居多功能电话的预期功能。 但是由于时间的原因,本毕业设计仍存在许多不足。由于没有进行存储空间的外扩,所以本设计仅实现了可以存储五个电话号码的功能;由于手机模块的限制所以本设计仅实现了可以拨打手机号码的功能;由于时间的原因未将本设计集成到一块电路板上,随身携带性不够。 参 考 文 献 [1] 车爱静, 文环明, 张艳. 基于凌阳SPCE061A单片机的语音控制系统[J]. 电脑开发与应用, 20- 06,19(10): 49-50. [2] 李晶皎.嵌人式语音技术及凌阳16位单片机应用[M].北京:北京航空航天大学出版社,2003: 6-8. [3] 马忠梅,张凯.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2003.11. [4] 熊庆国.新型16位单片机SPCE061A及应用展望[J].现代电子技术,2003(8):55—56,59. [5] Silan Semiconductors.TX—2B/RX—2B[EB/OL].http://pdf.dzsc.com/88888/2006968573198 6.html,2002-03. [6] 凌阳科技教育推广中心. 毕业设计指导书[Z]. 凌阳科技公司, 2006. [7] 罗亚非.凌阳16位单片机应用基础[M].北京:北京航空航天大学出版社,2005:9-10. [8] 赵定远, 马洪江. 16位单片机及语音嵌入式系统[M]. 北京:中国水利水电出版社2003.2-7. [9] Sunplus Technology Co.SPCE061A[EB/OL].http://pdf.dzsc.com/88889/28284.pdf,20- 02-08. [10] 凌阳科技大学计划. 凌阳大学计划网站(www.unsp.com.cn)[Z].凌阳科技大学计划, 2005. [11] 张立科.单片机典型外围器件及应用实例北京:人民邮电出版社出版发行.2006 致 谢 在即将完成我的学业之际,我要向我的导师XX老师表示我真诚的感谢和崇高的敬意。他在我做毕业设计期间给了我很大的鼓励、指导和帮助。从家居多功能电话系统设计的基本理论到整个系统的整体架构完成,都离不开导师教诲和严格的要求。在导师的帮助下,我基本上完成了基于单片机的家居多功能电话系统的设计。导师渊博的学识,严谨的治学态度和工作作风将给我以后的学习和工作起模范和激励作用。在此对XX老师表示衷心的感谢。 也感谢信息学院为我提供良好的学习和实践环境。最后,真诚的感谢在过去的四年里每一位教导过我、帮助过我、激励过我的恩师们,是你们给了我知识这一生宝贵的财富和在社会立足的本领。 谢谢你们! |
|