带语音报时功能的万年历的设计 - 图文

更新时间:2024-03-27 05:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

北京化工大学北方学院毕业设计(论文)

诚信申明

本人申明:

我所呈交的本科毕业设计(论文)是本人在导师指导下对四年专业知识而进行的研究工作及全面的总结。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中创新处不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京化工大学或其它教育机构的学位或证书而已经使用过的材料。与我一同完成毕业设计(论文)的同学对本课题所做的任何贡献均已在文中做了明确的说明并表示了谢意。

若有不实之处,本人承担一切相关责任。

本人签名: 年 月 日

I

北京化工大学北方学院毕业设计(论文)

带语音报时功能的的万年历的设计

孟超

电子信息工程专业 0706班 学号070201161

指导教师 鲁小利讲师

摘 要

万年历是现代人类生活中必不可少的工具,带语音功能的万年历在电子万年历多功能化发展的今天更是必不可少的一个方向。语音万年历有突出的播报时间功能,它被广泛用在生活中的各种领域。本设计就是从日常生活着手,通过对语音万年历的设计,让我对单片机已经进入到我们生活的每个领域有了更深的了解。

本系统采用凌阳公司的SPCE061A单片机为控制核心;语音报时系统使用凌阳单片机本身具有的特色语言功能。本设计从语音万年历设计原理、设计方案着手,详细介绍了系统的硬件设计、软件设计和调试。在语音万年历的设计中,要处理好:语音的识别,D/A(数/模)的转换,人机接口,程序的设计。语音的识别技术和D/A(数/模)影响到时间的正确播报,播报时间和调整时间的关键是人机接口。

关键词:实时万年历 SPCE061A单片机 语音报时

II

北京化工大学北方学院毕业设计(论文)

The Design of the Speech Calendar

Abstract

Calendar is an essential tool to the modern human life. The calendar with speech function is an indispensable direction in the development of various functions of electronic calendar today. Speech calendar have prominent broadcasting time function, which is widely used in various fields of life. This design is starting from the daily life. Designing the speech calendar let me have a deeper understanding of SCM which has being coming to our every areas of life.

The system uses SPCE061A of the sunplus company as control core. Phonetic time systems use the characteristic speech function of sunplus microcontroller itself. The design is from the start that principle of design, design scheme of speech calendar to introduce in hardware design, software design and commissioning of the system in detail. In the design of speech calendar, we should deal with speech recognition, D/A (number/die) conversion, man-machine interface and the program design. Speech recognition technology and D/A (number/die) affect the correct time broadcasts, and the key of broadcast time and adjust time is man-machine interface.

Key words: Calendar SPCE061A Speech Function

III

北京化工大学北方学院毕业设计(论文)

目 录

前 言 .................................................. 1 第1章 课题研究价值....................................... 2 第1.1节 选题背景......................................... 2 第1.2节 本设计的工作安排 ................................. 2 第2章 语音电子万年历的原理和方案 ......................... 3 第2.1节 设计原理......................................... 3 第2.2节 设计方案......................................... 4 第3章 语音电子万年历的硬件设计 ........................... 5 第3.1节 系统硬件结构 ..................................... 5 第3.2节 系统硬件结构 ...................................... 7 第3.3节 程序下载区 ...................................... 16 第3.4节 音频模块........................................ 18 第3.5节 语音模块........................................ 18 第3.6节 数/模转换模块 ................................... 19 第3.7节 电源模块........................................ 19 第3.8节 SPLC501液晶显示模组 ............................. 20 第4章 语音电子万年历的软件设计 .......................... 23 第4.1节 IDE集成开发环境................................. 23 第4.2节 程序设计........................................ 28

IV

北京化工大学北方学院毕业设计(论文)

第5章 测试与调试 ....................................... 34 第5.1节 硬件的测试 ...................................... 34 第5.2节 61板的测试 ..................................... 35 第5.3节 程序的调试 ...................................... 36 附 录 ................................................. 40 参考文献 ................................................. 46 致 谢 ................................................. 47

V

北京化工大学北方学院毕业设计(论文)

前 言

单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。

单片机得到了蓬勃的发展,功能也日趋完善。它集成的资源越来越多,内部资源也存储的日益丰富,用户无需扩充资源即可完成项目的开发,小巧精美,开发简单,系统稳定性也越来越好。其抗干扰能力的不断加强,使之更适合工业领域的控制。具有了更广阔的市场前景。

随着人们对事物要求越来越高,单片机也发生了巨大的变化,尤其是应用软件技术上,从汇编语言到C语言开发,大大提高了语言的结构性、可读性,也方便了跨平台的移植操作。

1

北京化工大学北方学院毕业设计(论文)

第1章 课题研究价值

第1.1节 选题背景

近些年来我们的生活中广泛出现带语音功能的电子器件和电子设备。语音万年历是现在电子万年历发展的必然趋势,把语音加入到万年历中实现时间的语音播报功能。

本设计基于凌阳61A单片机的语音报时系统,利用凌阳61A板是一个本身带有语音识别、播放功能的单片机来进行时间播报。以及用SPLC501液晶显示器来显示当前时间、农历、日期、星期、闹铃开关。

单片机的应用能实现各种控制策略和算法。具有功耗低,体型小,低成本,功能好的特点,在国内受到广大用户的重视和广泛的应用。伴随着单片机集成化程度的提高,目前单片机已经具备了数字信号处理的功能。SPCE061A是由信号处理器芯片以及u’nSP TM16位微控制器组成内核的16位单片机,模块式集成结构,片内集成了2KB的 RAM 、32KB 的Flash、DAC、ADC 和并行 I/O等。

第1.2节 本设计的工作安排

本设计是基于凌阳单片机,系统设计是以单片机的语音电子万年历为基础。利用凌阳单片机的方便、处理速度快、具有语音功能等优点,结合了SPLC501的强大的显示功能,设计出的功能多、精度高的语音电子万年历。设计安排如下: 第一章提出设计原理和方案。

第二章按设计方案进行语音电子万年历的硬件设计,电路原理图的各模块利用Prote1199绘制。

第三章深入研究语音电子万年历的功能。画出各部分的程序流程图,据流程图编写源程序。

第四章硬件测试和软件调试。源程序调试通过集成开发环境IDE来进行。

第五章总结全文,写出设计体会和设计不足的地方。简述对本设计用途的前景。

2

北京化工大学北方学院毕业设计(论文)

第2章 语音电子万年历的原理和方案

第2.1节 设计原理

带语音的电子万年历要具备的以下功能:

(1)时间和日期的语音播报。

(2)日期、星期、时间、农历、闹钟可以在SPLC501液晶模组上面显示。 (3)能够整点报时。 (4)具备闹钟功能。

2.1.1万年历功能

万年历功能的设计利用SPCE061A芯片的定时/计数器和时钟频率。16位节后的微控制器能够为语音电子万年历提供一个频率稳定的方波信号(32768Hz),另外其特有的校正电容还可以进行温度补偿,来提高稳定度和频率精确度,保证了语音万年历的走时准确及稳定。系统工作时,整个系统的时基信号是秒信号产生器,秒信号器采用60进制计数,它能将标准秒信号送入秒信号器。每60秒发出一个分脉冲信号,该信号会作为分计数器的时钟脉冲。分计数器也采用60进制计数器,每60分钟,发出一个时脉冲信号,此信号会被送到时计数器。时计数器采用24进制计数器,能对一天24小时进行累计,每累计24小时发出一个天脉冲信号。周计数器采用7进制计时器,能对一周7天进行累计,每累计7天会发出一个周脉冲信号,该信号将被送到周计数器。由中断程序控制年计数器,年计数器用365进制或366进制计数,对年进行累计。显示电路将年、星期、时、分、秒计数器的输出状态发送到SPLC501液晶显示器来显示。

2.1.2语音输出功能

音频输出利用外接喇叭和SPY0030A芯片的语音输出功能进行。凌阳公司专门开发了SY0030A芯片用于语音信号放大。插针外接喇叭和语音输出接口J3,通过DAC输出引脚22或21经SPY0030A芯片语音集成放大器进行放大输出。

3

北京化工大学北方学院毕业设计(论文)

第2.2节 设计方案

经分析,本设计采用模块结构来实现。语音电子万年历的组成主要有:SPLC501

液晶模组、压缩编码模块和D/A(数/模)转换模块、语音输入与A/D(模/数)转换模块、输入按键信息模块、系统初始化模块。能够实现定时功能,调整和单独播报时、分和年、月、日,以及复位键对设定值的清零操作。

各模块的功能如下:

(1)SPLC501液晶模组:能够显示当前的时间、日期、农历、星期、闹钟。 (2)压缩编码模块:数字信号输入,进过压缩函数处理,压缩编码输出。 (3)D/A(数/模)转换模块:数字信号输入,D/A(数/模)转换,模拟信号输出。 (4)语音输入及A/D(模/数)转换模块:语音信号输入,A/D(模/数)转换,数字信号输出。

(5)输入按键信息模块:先进行输值,等待系统中断并做出中断处理,把调用相应的处理程序进行输出。

(6)系统初始化模块:输入子小模块和一些变量,赋初值处理,把模块的初始状态和变量输出。

4

北京化工大学北方学院毕业设计(论文)

第3章 语音电子万年历的硬件设计

第3.1节 系统硬件结构

3.1.1万年历功能

语音电子万年历的系统结构如下图,整个系统的控制中心是61板,它能负责液晶显示的驱动;年、月、日、星期以及时间的计算;控制键盘扫描;液晶显示模组能够显示:功能选择菜单和时间日期的调整菜单以及显示当前的时间、日期;播报当前的日期或者时间。

电源 61板 电源接口 KEY1KEY2KEY3 音频 I/O口 SPCE061A I/O 口 SPLC501A液晶显示模组 扬声器 图3.1 带语音功能电子万年历的系统结构图

硬件连接:

IOA的高八位以及IOB的4、5、6连接液晶模组。 还用到了语音输出模块以及三个按键。

5

北京化工大学北方学院毕业设计(论文)

DC4.5V电源 IOB4 IOB5 IOB6 + SPCE061A IOA8 精简开发板 IOA9 IOA10 IOA11 IOA12 IOA13 IOA14 IOA15 — AO R/W EP + DB0 SPLC501 DB1 液晶显示模组 DB2 DB3 DB4 DB5 DB6 DB7 —

喇叭

图3.2 带语音功能电子万年历的电路连接图

3.1.2 按键功能的描述

带语音功能的电子万年历的按键功能介绍如下: 首界面:

(1)按KEY1键:进入功能选择界面。 (2)按KEY2键:播报当前的时间。 (3)按KEY3键:播报当前的日期。

(4)KEY2、KEY3键同时按下:控制闹钟的开与关。

进入功能选择菜单,KEY1:确定键,KEY2:下翻键,KEY3:上翻键。 分别显示以下选项: (1)时间日期调整。

(KEY1:确定键,KEY2:加一键,KEY3:减一键,液晶显示器上闪烁的部分为正在

6

北京化工大学北方学院毕业设计(论文)

调整的选项,设置完成后,按KEY1自动退出设置界面。) (2)闹钟设置。

(KEY1:确定键,KEY2:加一键,KEY3:减一键,液晶显示器上闪烁的部分为正在调整的选项,设置完成后,按KEY1自动退出设置界面。)

(3)秒表功能。

(KEY1:退出键,KEY2:开始/暂停键,KEY3:清零键,秒表停止运行时KEY3有效。)

(4)返回。

(KEY1:确认键,按下后,系统回到显示界面。)

图3.3 按键功能结构图

第3.2节 系统硬件结构

SPCE061A芯片内部集成了FLASH(闪存)、SRAM(静态内存)、ICE(在线实时仿真/出错器)、通用I/O端口、ADC(模拟数字转换器)、DAC(数字模拟转换器)输出、定时器/计数器、CPU时钟锁相环(PLL)中断控制、SIO(串行输入输出接口)、UART(同步串行输入输出接口)、低电压监测/低电压复位模块。u`nSP的核心由总线、寄存器组、ALU算数逻辑运算单元、堆栈及中断系统等组成。 3.2.1 SPCE061A的性能简介

(1)工作电压为3.0-3.6V,VDDH为3.0-5.5V。

(2)16位微处理器。

7

北京化工大学北方学院毕业设计(论文)

(3)CPU时钟:0.32-49.152MHz. (4)内置32K FLASH。 (5)内置2K SRAM。 (6)晶体振荡器。 (7)可编程音频处理。

(8)32位通用可编程输出、输入通道。 (9)两个10位DAC输出通道。 (10)可播放压缩的语音资源。

(11)内置麦克风放大器,并有自动增益控制功能 (12)内置在线仿真电路接口。

3.2.2 SPCE061A

的引脚

实物图如下:

图3.4 SPCE061A的实物图

结构图如下:

8

北京化工大学北方学院毕业设计(论文)

图3.5 SPCE061A的引脚图

3.2.3 SPCE061A内核的结构

SPCE061A内核由总线、寄存器组、算数逻辑运算单元(ALU)、中断体统和堆栈等组成。ALU功能特色:(1)16位基本算数逻辑运算。(2)带移位操作的16位算数逻辑运算。3.16*16位的乘法运算和内积运算。

(1)算数逻辑运算器

ALU前面串接一个SHIFTER移位器,可以使操作数先进行移位处理,再经ALU进行逻辑运算。移位包括:算数右移、逻辑右移、逻辑左移、循环右移以及循环左移。因此,SPCE061A指令系统里有一组能完成移位和逻辑运算操作两项功能的复合式移位算术逻辑操作指令。

(2)片内存储器结构

2K的SRAM,地址范围:0x0000-0x07FF,其中0x0000-0x003F地址可直接寻址,速度为2个时钟周期,0x0040-0x07FF速度为3个时钟周期。

堆栈是RAM按照“先进后出”原则存储数据的工作方式。用于中断处理断电的保护及返回和子程序调用及返回,最大容量为2K。注意,系统复位,SP初始化:0x07FF,每执行PUSH一次,SP指针减一。

32K闪存容量的SPCE061A是一个用闪存代替ROM的MTP芯片。可用闪存存储程序。用户通过向P-Flash-Ctrl单元写入0xAAAA;激活闪存存取功能,进而访问闪存。向

9

北京化工大学北方学院毕业设计(论文)

P-Flash-Ctrl单元写入0xAAAA擦除页的内容。而写入0x5533,对闪存变成。中断、ICE的单步跟踪等任何其他程序都不能打断。闪存控制器必须让闪存处于编程状态。。若其他进程插到当前执行队伍,闪存状态改变,编程和擦除页操作不能继续进行。另外,用户必须在编程前擦除页内容。第一页地址范围为:0x8000-0x80FF,最后一页地址范围为:0xFF00-0xFFFF.页大小0x100。系统保留0xFC00-0xFFFF范围内的地址,用户不要用此范围内地址。32K内嵌式闪存划分成128页,CPU运行正常时均可通过程序写入或擦除。上电后,芯片就处于读存储单元状态,操作与SRAM相同。

(3)输入/输出接口

输入端口从外界接收键盘信号、检测信号等开关量信号。输出端口向外界输送产生的处理结果、控制命令、显示信息、驱动信号等。u`nSP内有串行和并行两种方式的I/O口。串行口传输速率较低但可以节省大量的电路成本,与串行口相比,并行口线路成本高,但传输速率也高。SPCE061A有A口和B口两个16位通用并行I/O口,他们每一位都可以通过编程单独定义为输入口或输出口。A口的I0A0-I0A7当输入口时有唤醒功能,当输入电平变化时CPU中断。CPU的睡眠模式可以降低功耗,需要时按键唤醒,使之进入工作状态,广泛用于电池供电、低耗能的场合。

SPCE061A的I/O口每一位都可以被单独定义,用于输入、输出数据。对某一位设定包括三个基本项:数据向量、属性向量、方向控制向量。三个端口内每个对应的组位合起来形成一个控制字,来定义输入状态和方式。每个对应的状态下,I/O端口性质电路都是内置的,实际电路中不需再接。 P_IOA/B_Buffer(读) 上拉 P_IOA/B_Dater(写) 数据寄存P_IOA/B_Buffer (写) 器和逻辑 P_IOA/B_Dir(读/写) 控制 P_IOA/B_Attrib (读/写) P_IOA/B_Buffer(读)

图3.6 I\\O端口的结构

10

北京化工大学北方学院毕业设计(论文)

表3.1 I\\O组合控制设置表 方向 属性 数据 功能 是否有唤醒功能 0 0 0 0 1 1 1 1 注: *:默认带下拉电阻的输入管脚。 **:控制字是000,001,010时,才有唤醒功能。 ***:ADC IOA(0—6)输入。 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 下拉* 上拉 悬浮 悬浮 高电平输出 高电平输出 高电平输出 高电平输出 是** 是** 是** 否 否 否 否 否 带下拉电阻的输入管脚 带下拉电阻的输入管脚 悬浮式输出管脚 悬浮式输出管脚*** 带数据反相器的高电平输出 带数据反相器的高电平输出 带数据缓存器的低电平输出 带数据缓存器的低电平输出 功能描述

3.2.4 时钟电路

系统的时钟是由时间基准信号、锁相环、时钟发生器组成的。

(1)首先由实时时钟(32768Hz)经过PLL倍频电路产生了系统时钟频率,系统时钟频率再经过分频得到CPU时钟频率,它可通过对P-SystemClock单元编程来控制。系统时钟频率和时钟频率分别为24.576MHz和Fosc/8.可以通过对P-SystemClock单元编程来完成对系统时钟以及CPU时钟频率定义。

11

北京化工大学北方学院毕业设计(论文)

20pf 20pf

图3.7 时钟电路图 RTC振荡器的工作方式有两种:自动弱振模式和强振模式。当处于自动弱振模式,系统会在上电复位后的前7.5s内处于强振模式,之后由于需要降低功耗会自动切换到弱振模式。当处于强振模式,RTC振荡器就会始终的运行于高耗能状态下。当CPU被唤醒,此时默认的始终频率是Fosc/8,可以根据需要进行调整。唤醒进过32个时钟周期的缓冲后再进行其他操作。

(2)锁相环PLL振荡器,系统默认的PLL自激震荡频率是24.576MHz。PLL电路可以将实时时钟的基频进行倍频,调节为20.480MHz、24.576MHz、 32.768MHz、40.96MHz、 49.152MHz。

(3)时间基准信号,简称为时基信号,它的选频逻辑TMB1为中断源系统提供中断信号并为TimerA的时钟源提供各种频率选择信号。另外,时基信号发生器还可以为中断系统提供各种实施中断源信号。 (4)定时器/计数器

两个16位定时/计数器分别是:TimerA通用计数器和TimerB多功能计数器。TimerB的时钟源仅为时钟源A,而TimerA的时钟源是由时钟源A和B进行与操作形成的。

12

SPCE061A X1/R X0 北京化工大学北方学院毕业设计(论文)

定时器溢出后产生溢出信号。(1)它作为4位计数器计数的时钟源信号,会输出一个4位可调脉宽调制占空比输出信号,调控马达或其他设备的速度。(2)它会传输给CPU中断系统。(3)可用于DAC输出的数据锁存和触发ADC输出的自动转换过程。 在向定时器的P-TimerA-Data单元或P-TimerB-Data单元写入计数值N后,选择合适时钟源,定时/计数器在所选时钟频率下以递增方式计数。当达到0xFFFF后溢出,产生中断请求信号,CPU响应,送入中断控制器处理。同时,N被重新载入定时/计数器重新计数。

通过写入P-TimerA-Ctrl单元的6-9位,可以选择设置APWMO的输出波形脉宽占空比;同理适合P-TimerB-Ctrl.

时钟源A来自带锁相环的晶体振荡器输出Fosc,是高频时钟源;而时钟源B则来自时钟系统,可以作为精确计数器。

3.2.5 中断系统

SPCE061A单片机可提供14个中断源,有两个中断优先级,能实现两级中断嵌套功能。用户可用开中断指令使CPU接受中断请求,也可以用关中断指令屏蔽所有中断请求。每个中断源可用软件独立控制开或关中断状态,但中断级别不能用软件设置。 中断类型:异常中断、软件中断和事件中断。 (1)异常中断

异常中断(复位)一旦发生,CPU立即进行处理。异常中断可由三种情况引起:上电、系统电源低于电压底线以及看门狗计数器溢出。无论哪种情况引起复位,复位引脚的电位都会变低,程序指针PC由复位向量所指的系统复位程序入口地址。 (2)软件中断

软件中断是由软件指令产生的中断,向量地址为FFF5H (3)事件中断

此中断的禁止或开通,由相应的FIQ或IRQ总使能控制和相应的独立使能控制 。事件中断产生于外设中断输入引脚引入的某事件或片内设部件。中断采用两种方式:FIQ快速中断请求和IRQ中断请求,他,他们都有相应的总使能。

SPCE061A设有9个中断向量,分别为IRQ0-IRQ6、FIQ、UART以及IRQ。他们可安置14个中断源使用。其中四个可安置在IRQ0-IRQ2中,其他十个安置在IRQ3-IRQ6中。14个中断源分为两个外部中断、两个定时器溢出中断、一个串行口中断、一个触键唤醒中断、PWM音频输出中断和7个时基信号中断。

13

北京化工大学北方学院毕业设计(论文)

其中,快速中断高于普通中断优先级,IRQ中断中IRQ1优先级高于IRQ2,IRQ2高于IRQ3,序号越高中断优先级越低,中断优先级最低的是UART。IRQ中,中断查询有先后,但不能进行中断嵌套。在同中断向量中,中断源中断优先级相同。

中断响应的过程

中断发生到被响应再到执行中断服务程序是一个复杂的过程。此过程都是在CPU控制下有序完成的。 (1)中断的查询

61板会把所有中断请求汇集到P-INT-Ctrl和P-UART-Command2寄存器中。其中音频输出中断、定时中断、串行异步中断、触键唤醒、时基中断的请求因为发生在内部,可直接去置位P-INT-Ctrl和P-UART-Command2中各自的中断请求来标着,没有采样问题,而外中断需要采样将中断请求锁定在P-TNT-Ctrl寄存器的相应标志位。中。查询就是CPU分别测试P-INT-Ctrl和P-UART-Command2中各自的标志位状态,以确定中断请求是否发生以及是哪个,中断请求的汇集是查询变得更加简单,只需对两个寄存器分别查询。每一个指令周期结束后中断查询开始发生,按中断优先级查询,即先查询FIQ高级中断在查询IRQ低级中断,IRQ0-IRQ1-IRQQ3-IRQ4IRQ5-IRQ6-UART顺序查询。若有标志位为“1”,则有中断请求发生。中断请求随即发生,CPU无法预知,所以在每个指令结束后需不停的进行。 (2)中断响应

中断响应就是中断查询后CPU检测到有效中断请求,接收中断请求并进行中断响应。主要内容为硬件自动生成的一条格式为CALL addR16(中断入口,由系统设定)的调用指令。中断响应并不是查询到中断请求都能立即响应,当存在以下情况,中断响应会被封锁:CPU处在高级或同级的中断服务中。

中断响应的时间由两部分组成,即中断信号出现到CPU响应和CPU响应到进入中断程序所用的时间之和。

中断响应后,P-INT-Ctrl和P-UART-Command2中中断请求标志需立即清除,否则会造成重复查询和响应。

14

北京化工大学北方学院毕业设计(论文)

中断入口 清中断标志位 图3.8 中断流程图 中断源判断 中断返回 进入相应中断处理 关中断 现场恢复 现场保护 开中断 3.2.6 最小体统和开发方法 (1) 图3.9 最小系统电路图

15

北京化工大学北方学院毕业设计(论文)

最小系统如上图所示,晶振和谐振电容连接在OSC0、OSC1上,锁相环压控振荡器的阻容输入端上接对应的电容电阻。地端和不用的电容接上0.1uF的去耦电容,用以提高抗干扰能力。

(2)开发方法

调试器RPOBE是一个编程器也是一个实时在线调试器,开发就是通过它来实现的。它可以代替硬件在线实时仿真器和程序烧写器,利用了凌阳公司的在线串行编程技术和内置在线仿真电路。PROBE在IDE集成开发环境软件包下工作,它的5芯仿真头直接插到目标电路板上61的相应管脚,可以直接在目标电路CPU-SPCE061A上调试,运行编程。PROBE的另一头可直接连到计算机打印口和上位机通讯,是标准的25针PC接口,在IED集成开发环境软件包下,进行调试功能。

图3.10 开发调试下载图

第3.3节 程序下载区

ICE的运行是通过ICE伪指令和控制clock方式,来控制缓存器资料和内存资料的存取以及控制CPU的运行。所以要控制目前CPU的动作必须通过控制设定缓存器的值。61板上的74HC244是在程序下载时起缓存作用和选择SDA是用作数据下载还是数据回送。

程序下载电路如图所示:

16

北京化工大学北方学院毕业设计(论文)

图3.11 程序下载图

图3.12 芯片引脚线路图

17

北京化工大学北方学院毕业设计(论文)

第3.4节 音频模块

音频模块是通过MICROPHONE输入我们要求的语音信息,再由61板处理采集的语音信号,提出特征参数,与储存在外扩Flash内特征参数模板匹配。

图3.13 音频模块电路图

第3.5节 语音模块

SPY0030A是专门用于语音信号放大的芯片,与LM386相比优势是:输出功率高、工作电压低、低失真。

语音模块电路图如下:

18

北京化工大学北方学院毕业设计(论文)

图3.14 语音模块电路图

第3.6节 数/模转换模块

音频输入就是把声音信号通过SPCE061A芯片中的模/数采集、处理后又通过数/模转换还原后,由功率放大电路把声音播出。SPCE061A提供了DAC1和DAC2两条通道,并且有7个10位ADC通道,一个用于语音输入,其余6个通道引脚共享,可将模拟信号转换成数字信号。0V-AVdd是模/数转换的范围。超过VDD+0.3V或低于VSS-0.3V会影响转换电路从而影响AD性能。

第3.7节 电源模块

61板需要由J10接入3节5号电池供电,为去偶滤波,使其供给芯片更平滑,前后要接两组电容。加入三端稳压器可获得标准3.3V电压。为防止误将电源接反,加两个二极管。后面零电阻和不同的几路电源为减少电磁干扰。

电源电路图如下:

19

北京化工大学北方学院毕业设计(论文)

图3.15 电路原理图

第3.8节 SPLC501液晶显示模组

3.8.1 SPLC501的组成

SPLC501液晶显示模组由复位键、液晶显示器、模组接口及跳线和电源指示灯

接口引脚名 CS1 RES AO R\\W EP DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 VR C86 PS

表3.2 接口引脚说明 说明 片选,低有效 复位脚 数据命令选择脚 6800系列MPU的读\\写信号 8080系列MPU的时钟信号 6800系列MPU时钟信号使能脚 8080系列MPU的读信号 8位数据总线 端口输出电压 C86=L 选择8080MPU系列 C86=H 选择8080MPU系列 串、并行时序选择 20

北京化工大学北方学院毕业设计(论文)

电路原理图如下:

图3.16 显示器电路原理图

图3.17 显示器电路原理图

21

北京化工大学北方学院毕业设计(论文)

3.8.2 SPLC501驱动控制芯片

SPLC501为液晶显示控制驱动器,采用SPLC501A芯片为驱动控制芯片,集成控制器和列驱动器。可直接连于其他微控制器接口总线。通过串行接口和8位数据总线,微控制器将显示数据写到SPLC501的显存中。

SPLC501采用先进的COG技术和GPG12063YS3 LCD模块,将芯片嵌在LCD玻璃上,如图所示: 128﹡64 0—127 SPLC501C 图3.18 SPLC501结构图 3.8.3 SPLC501的显示RAM区映射 显示器上的显示点与缓存RAM是一一对应的;显示器的显示点阵为64X128,而SPLC501A芯片有65X132个位,所以有用的显示RAM区为64X128。按Byte划分,分8个page,每个为8行,每行128位。在驱动控制芯片显示RAM区对应屏幕上点的排列方式:低位在上高位在下,纵向排列。

3.8.4 SPLC501行和列地址

要点亮LCD屏上的某点,需确定该点所处的行地址、列地址,并对其进行置1操作;每个page有8行,列地址表示该点横坐标,从左到右排,每Byte对应一列,达128列。据此控制LCD显示屏显示。芯片上每个page的RAM前4个byte没有对应点。

22

北京化工大学北方学院毕业设计(论文)

第4章 语音电子万年历的软件设计

第4.1节 IDE集成开发环境

IDE开发环境,能够完成编译、编辑、连接、调试和仿真等功能。 IDE开发界面如图:

图4.1 u'nSP IDE的开发界面

多窗口操作是u'nSP IDE 的一大特色,程序可由多文件组成,采用建立项目对其管理,用户可随意删除、添加程序文件。窗口切换只需单击鼠标左键,主界面里还提供工具栏和下拉菜单等。

U'nSP IDE有两种状态:1. 编辑状态,用户对工程进行设置操作、文件删增、程序编写。2. 仿真状态,运行编译程序,验证程序正确性,或下载在线调试。

23

北京化工大学北方学院毕业设计(论文)

U'nSP IDE仿真调试可分为软件仿真和在线调试。仿真不需要下载线、开发板或在线调试;而在线调试时,需要下载线、开发板连接好,开发板供电。

4.1.1 IDE的工作操作

(1)工程内各类文件

①资源文件:扩展名为“re”的文件包括此时工程的所有信息。

②工程文件:扩展名为“spj”的工程文件包括各种创建一个工程所需的信息。 ③Make File文件 ④C语言文件

⑤资源表文件和资源表头文件 (2)创建工程

①在File中选择New打开,选择project标签。 ②输入工程名。 ③输入工程文件路径。

④在Select Body Here中选择Probe。 ⑤单击OK。

此时,生成新工程,显示在Workspace窗口中,若没有窗口,通过在View中选择Workspace点击打开窗口。

图4.2 创建工程图

24

北京化工大学北方学院毕业设计(论文)

(3)生成源文件

①在File中选择New打开对话框。 ②在File页中选择SP IDE C File。 ③把源文件名称输入File框中。 ④点击OK。

(4)把资料和文件添加到工程中 有两种添加方式,分别是:

①在Project中选择Add to Project,点击File\\Resource,来激活对话框。 ②鼠标右击工程窗口的文件夹,选择 Add File To Folder,激活对话框。 在对话框内选择文件后,单击Open,添加文件。

图4.3 源文件的生成图示

25

北京化工大学北方学院毕业设计(论文)

图4.4 添加资料和文件 (5)打开工程 从Recent Project菜单中打开工程。 ①在File中选择Open单击打开。 ②Type中点击Project Files(*spj)。 ③选择工程,点击Open。 4.1.2 IDE的在线仿真 SPCE061A的开发系统是由编程器、软件开发、下载线和仿真器结合而成的,无需插拔芯片、电源、电缆等连线和操作,极大的提高了开发和学习的效率。其片内整合了可在线编程控制的模块,配合下载线就可以轻松的下载编译代码到开发系统上进行演示和验证。整个流程只需利用操作鼠标即可。 流程如下: 程序下载 程序运行 程序打断 图4.5 在线仿真流程图

26

北京化工大学北方学院毕业设计(论文)

4.1.3 IDE的软件仿真

软件仿真模拟硬件部分功能无需连接仿真版,通过窗口可观察程序运行情况。其可实现PWM和I\\O状态的仿真功能。 (1)PWM仿真

在工具栏中单击Body,弹出对话框中选择PWM。出现PWM Wave窗口数字示波器,可以将数字信号转换模拟信号,再通过PWM输出声音数据显示在窗口上。程序运行,即可看到PWM波形的占空比,如图所示:

图4.6 PWM软件仿真

(2)状态仿真

在工具栏中单击Body,弹出对话框中选择PortIO。运行程序可见I\\O现象。若0-f为灰,表示输出状态,若为黑,小时输入状态。按下键表示输入高电平,此时I\\O对应灯亮,不亮表示输出低电平,如图:

图4.7 I\\O状态仿真

27

北京化工大学北方学院毕业设计(论文)

第4.2节 程序设计 编程过程中,运用了两大类程序模块分别是:程序接口和程序。通过接口高级程序模块能调用本级模块定义的全局变量,或者是本级程序模块的函数或子程序。 模块代码的调用需遵循调用协议,调用协议就是:让不同子程序汇聚,并完成定义子程序返回值和调用,以及两个子程序的参数传递和控制的常规规则。 调用协议包含要素: (1)子程序的返回值。 (2)参数传递。 (3)中间寄存器。 协议具体内容: (1)参数的传递 参数被反相压入栈中。若调用发生于声明前,则参数不进行数据转换,若发生在声明后,参数转换成原型被声明的数据类型。 (2)堆栈的排列和维护 切忌程序返回时弹出调用程序压进栈中的参数。 (3)返回值 32位返回值存入R1、R2寄存器中,16位返回值存入R1寄存器中;高字在R2,低字在R1中。返回结构需放指针到R1中。 4.2.1 软件的结构 结合IDE程序设计规则和开发环境,可设计以下软件结构如图: Main.c System.c Key.c 图4.8 软件的结构图

28

Speak.c Isr.asm 北京化工大学北方学院毕业设计(论文)

功能描述:

(1)main.c能够实现开机画面的显示,系统初始化,语音报时以及键盘扫描。 (2)system.c包含大部分功能函数,了时间日期调整,显示界面,秒表的调整和闹钟时间设定等。

(3)key.c实现了查询方式的键盘扫描,定义了延时函数和扫描键盘函数。 (4)speak.c播报语音函数实现语音播报时间,日期和闹钟。 (5)isr.asm实现秒表,时间、日期修改以及语音解码。 4.2.2 主程序

主程序初始化了液晶显示模块以及整个工程所用的变量。主程序调用扫描键盘程序,进行对I\\O口第三位的扫描,若有键按下,相应键值存入变量,通过主程序判断并执行功能。按下KYE1键,进入选择功能菜单,这时候KEY1是确定键,KEY2是向下翻,KEY3是向上翻;按下KYE2键,播报时间;按下KEY3键,播报此时日期;若同时按下KEY2键和KEY3键,控制闹钟开关。

29

北京化工大学北方学院毕业设计(论文)

开始 初始化各种变量, 初始化液晶 显示开机画面 打开2HZ中断 闹钟到 Y 播放乐曲 N Y 整点到 报时 N 键盘扫描 有键按下? Y 判断按键执行相应功能 图4.9 主程序的流程图 N 清看门狗 30

北京化工大学北方学院毕业设计(论文)

时间日期流程模块用到2Hz时基中断,实现日期更新和计时。通过查表实现农历的查询。 N N 天=当月天数 2HZ中断两次 Y Y 秒加1 天清0,月加1 N 秒=60? 查表确定农历当月天数 Y N 秒清0,分加1 天=当月天数 N Y 分=60? Y 天清0,月加1 分清0,时加1 N 月=12? N 时=24? Y 月清0,年加1 Y 时清0,天加1 N 年=2100? Y 由平/闰年确定 年=2001 当月天数 返回 开始 图4.10 时间日期模块的流程图

31

北京化工大学北方学院毕业设计(论文)

4.2.3 中断服务程序

三个中断服务程序分别是:用于播放语音的FIQ中断服务程序,用于秒表计时的中断服务程序,用于计时的中断服务程序。

图4.11 FIQ中断程序的流程图

32

北京化工大学北方学院毕业设计(论文)

寄存器入栈 判断是否为2HZ中断 Y 调整时间和日期的修改函数 N 清4HZ中断标志 清2HZ中断标志 寄存器出栈 中断返回 图4.12 IRQ时基中断的流程图 寄存器入栈 Y 判断是否1KHZ中断 N 修改秒表数据 Y 判断是否为 2KHZ中断 N 清1KHZ中断标志 清4KHZ 中断标志 清2KHZ中断标志 寄存器出栈 中断返回 图4.13 IRQ时基中断的流程图

33

北京化工大学北方学院毕业设计(论文)

第5章 测试与调试

第5.1节 硬件的测试

5.1.1 引脚测试内容

(1)电源电压:5V左右。

(2)VDD、VDDH引脚电压分别为:3V、3.5V。

5.1.2 电源测试内容

用万用表测试板子左上角电源部分的12个点的电压。

调试1:

条件:电源断开把电池盒拔掉,用跳线帽将J5的2、3脚短接。 目的:测试电源是否与地短路。 步骤:测量J10两脚电阻。

现象:(1)电阻为零,有短路,需排查电源。 (2)电阻大于300,电源电路正常。 调试2:

条件:电池盒与J10接通,打开电池盒。 目的:测试电源器件是否正常。 现象:(1)D1亮,器件正常。 (2)D1不亮,需排查器件。 调试3:

条件:把S5的1、2脚用跳线帽短接。 目的:测试各器件电源是否供电正常。

步骤:测试U1第7脚电压是否3.3V左右,J4第一脚电压是否3.3V左右,U4第20脚电压是否3.3V左右,U2第7、8脚电压是否4.5V左右,J6、7、8“+”端电压是否4.5V左右。

现象:(1)电压正常。

(2)电压不正常,需排查。

34

北京化工大学北方学院毕业设计(论文)

5.1.3 键盘测试内容

条件:不在U1、U2、U3芯片座插任何元件,接通电源,万用表选电压档,负极接地,正极测试IOA0、IOA1、IOA2。 目的:测试键盘是否能否正确输入。

步骤:万用表正端接IOA0,按KEY1键,读取并记录电压值,同理测试KEY2、KEY3。 现象:(1)电压不为零,正常。

(2)电压为零,需更新按键。

第5.2节 61板的测试

5.2.1测试内容

(1)I\\O端口。 (2)睡眠功能。 (3)模\\数转换功能。

(4)语音输出和MIC输入功能。 5.2.2自检的具体步骤

(1)接通电源,红色二极管发光,同时语音会提示“欢迎进入自检模式”,之后提示“I\\O测试失败”,原因是还未连线。把IOA低8位用排线和IOB低8位连接,同理高8位相连,接着按RESET复位键,程序重新执行,并提示“欢迎进入自检模式”之后“I\\O测试成功”。

(2)按下K1键,测试睡眠功能。绿色二极管发光,并提示“睡眠测试成功”,表示测试成功,否则失败。

(3)按K2键,测试模\\数转换功能。提示“模\\数测试成功”表示测试成功,否则失败。

(4)拔掉测试1时的排线,按K3测试模\\数转换和MIC输入是否正常,轻拍几下MIC,若有声音输出则模\\数转换和MIC输入正常。

35

北京化工大学北方学院毕业设计(论文)

第5.3节 程序的调试 5.3.1 u 'nSP IDE调试工具: 表5.1 调试工具的功能简介 内容 下载 作用 将程序文件编译、连接,生成可执行文件 复位 停止调试 中断 运行 单步进入 单步跳跃 单步跳出 运行到光标处 调试模式下,重新运行 退出调试模式 停止运行程序 调试模式下,程序运行 单步运行,进入子程序 单步运行,不进入子程序 单步运行,跳出子程序 调试模式,程序运行至光标处停止 Shift+Ctrl+F5 Shift+F5 Ctrl+Break F5 F11 F10 Shift+F11 Ctrl+F10 热键 F8

5.3.2 Memory窗口介绍

在View中选择Debug windows打开Memory窗口,如下图5.1所示。

Memory窗口以十六进制的存储单元显示,可直接改动内容,在Address文本框中输入内存地址,可迅速查到内容。Memory窗口双击鼠标激活Go to Address,在文本框中输入地址,便能够显示连续内存单元的值

36

北京化工大学北方学院毕业设计(论文)

图5.1 memory的窗口

图5.2 go to address的窗口

5.3.3 Register窗口介绍

调试过程中,在View中选择Debug Windws点击Register window打开Register窗口。如图5.3所示。窗口显示特殊寄存器和通用寄存器内容,可改动中断标志位的值、各寄存器的值,查看指令执行周期数和控制中断响应。按Update键更新,通过Reset让CPU复位。

图5.3 Register的窗口

5.3.4 Command的窗口介绍

37

北京化工大学北方学院毕业设计(论文)

调试过程中,在View中选择Debug Windws点击Command Windws打开command窗口。如图5.4所示。H输入文本框中就可以看到所有命令和使用方法。

图5.4 Command的窗口

5.3.5BreakPoint的窗口介绍

调试过程中,在View中选择Debug Windws点击BreakPoints Windws打开BreakPoint窗口。如图5.5所示.断点信息是不可缺少的,用户可自行改动断点。 Addr:预设断点地址。

Output Only:仿真运行时,程序运行到断点后,会发出一个脉冲信号于指定管脚。 Triggle on Data:数据过滤器。 Bitmask:屏蔽断电地址内数据。

Triggle on Write&Read:存储数据时,出发中断。

38

北京化工大学北方学院毕业设计(论文)

图5.5 BreakPoints的窗口

5.3.6 Watch的窗口介绍

调试过程中,在View中选择Debug Windws点击BreakPoints Windws打开BreakPoint窗口。如图5.5所示.用数据表显示变量值。

图5.6 Watch的窗口

39

北京化工大学北方学院毕业设计(论文)

附 录

程序代码

#include \#include \#include \#define ring1 17 #define ring2 18 Extern void display();

Extern void playrespond(unsigned int Result); Extern void keyscan(); Extern void nextdisplay(); Extern void setday(); Extern void set_ring(); Extern void speaktime(); Extern void speakday(); Extern void keyinitial(); Unsigned int keyflag1=0; Unsigned int keyflag2=0; Unsigned int keyflag3=0; Unsigned int keyflag4=0; Unsigned int keyflag5=0; Unsigned int keyflag6=0; Unsigned int keyflag7=0; Unsigned int ringflag=0; Unsigned int keyvalue=0; Unsigned int runflag=0; Unsigned int num=0;

40

北京化工大学北方学院毕业设计(论文)

Unsigned int hour=0; Unsigned int min=0; Unsigned int sec=0; Unsigned int year=2006; Unsigned int gmonth=8; Unsigned int gday=1; Unsigned int xqvalue=0; Unsigned int nmonth=7; Unsigned int nday=8;

Unsigned int runxq[]={3,6,0,3,5,1,3,6,2,4,0,2}; Unsigned int pingxq[]={4,0,0,3,5,1,3,6,2,4,0,2}; Unsigned int mouse[]={1,17,32,48}; Unsigned int nhour=12; Unsigned int nmin=0; Unsigned int mbmin=0; Unsigned int mbsec=0; Unsigned int mmsec=0; Unsigned int mbnum=0; Unsigned int onoff=0; Unsigned int int2hz; Unsigned int ringonoff;

Char number[]={'0','1','2','3','4','5','6','7','8','9'}; Unsigned int clockset[]={11,31,51}; Unsigned int counter=0; Unsigned int mapcounter1=0; Unsigned int mapcounter2=0; Const int glunarmonthday[]= {

0xd954,0xd4a0,0xda50,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5,0xa950,0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930,0x7954,0x6aa0,0xad50,0x5b52,0x4b60,

41

北京化工大学北方学院毕业设计(论文)

0xa6e6,0xa4e0,0xd260,0xea65,0xd530,0x5aa0,0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45,0xb5a0,0x56d0,0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0,0x4b63,0x937f,0x49f8,0x4970,0x64b0,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef,0x92e0,0xd2e3,0xc960,0xd577,0xda50,0x5dd5,0x56a0,0xa6d0,0x55d4,0x52d0,0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0xb273,0x6930,0x7337,0x6aa0,0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260,0xe968,0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0,0xd150,0xf252,0x520 };

Const unsigned int* BMP_Cartoon[]=

{ (unsigned int*)encoding_00,(unsigned int*)encoding_01,(unsigned int*)encoding_02,

(unsigned int*)encoding_03,(unsigned int*)encoding_04,(unsigned int*)encoding_05,

(unsigned int*)encoding_06,(unsigned int*)encoding_07,(unsigned int*)encoding_08,

(unsigned int*)encoding_sunplus,

(unsigned int*)encoding_08,(unsigned int*)encoding_07,(unsigned int*)encoding_06,

(unsigned int*)encoding_05,(unsigned int*)encoding_04,(unsigned int*)encoding_03,

(unsigned int*)encoding_02,(unsigned int*)encoding_01,(unsigned int*)encoding_00,

(unsigned int*)encoding_sunplus,

(unsigned int*)encoding_00,(unsigned int*)encoding_01,(unsigned int*)encoding_02,

(unsigned int*)encoding_03,(unsigned int*)encoding_04,(unsigned int*)encoding_05,

(unsigned int*)encoding_06,(unsigned int*)encoding_07,(unsigned int*)encoding_08,

(unsigned int*)encoding_sunplus,

42

北京化工大学北方学院毕业设计(论文)

(unsigned int*)encoding_08,(unsigned int*)encoding_07,(unsigned int*)encoding_06,

(unsigned int*)encoding_05,(unsigned int*)encoding_04,(unsigned int*)encoding_03,

(unsigned int*)encoding_02,(unsigned int*)encoding_01,(unsigned int*)encoding_00,

(unsigned int*)encoding_sunplus };

Int main(void) { keyinitial(); LCD501_Init(0);

LCD501_Circle(64,32,15,1); LCD501_ClrScreen(0); LCD501_FontSet(0);

*P_INT_Ctrl_New = *P_INT_Ctrl_NEW_/ 0x0004; _asm(\ While(1) { int i=0; Display();

While(hour==nhour && min==nmin && onoff==0) { keyscan(); If(keyvalue!=0) Onoff=1;

Else if(ringflag==0) PlayRespond(ring1); Else

PlayRespond(ring2); } If(min==0 && sec=0) { speaktime();} Keyscan();

43

北京化工大学北方学院毕业设计(论文)

*P_Watchdog_Clear=0x001; If(keyvalue==0x0001) { keyflag1=1;

LCD501_ClrScreen(0) ; While(keyflag1=1) { nextdisplay();

LCD501_Bitmap(15,mouse[i],(unsigned int*)encoding_mouse); Keyscan();

*P_Watchdog_Clear=0x0001; Switch(keyvalue) { case 0x0001; { switch(i) { case 0;

{ setday() } Break; Case 1;

{ set_ring();} Break; Case 2;

{ setsecond(); } Case 3;

{ LCD501_ClrScreen(0);keyflag1=0 } Break; } } Break; Case 0x0002;

{ LCD501_Bitmap(15,mouse[i],(unsignedint*)encoding_empty); If(i=3) I=0; Else I=++i;

44

北京化工大学北方学院毕业设计(论文)

LCD501_Bitmap(15,mouse[i],(unsigned int*)encoding_mouse); } Break;

Case 0x0004;

{ LCD501_Bitmap(15,mouse[i],(unsigned int*)encoding_empty) If(i=0) I=3; Else I= - -1;

LCD501_Bitmap(15,mouse[i],(unsigned int*)encoding_mouse); }

Break; } } } Else if(keyvalue= =0x002) { speaktime();

Else if(keyvalue= =0x0004) { speakday(); } Else if(keyvalue= =0x006) { switch(onoff) { case 0; Onoff=1; Break; Case 1; Onoff=0;

Break; } } Else

*P_Watchdog_Clear=0x001; } }

45

本文来源:https://www.bwwdw.com/article/0r9r.html

Top