南航第八届校电赛 作品报告草稿 多功能语音万年历.docx

上传人:b****7 文档编号:9013454 上传时间:2023-02-02 格式:DOCX 页数:32 大小:614.86KB
下载 相关 举报
南航第八届校电赛 作品报告草稿 多功能语音万年历.docx_第1页
第1页 / 共32页
南航第八届校电赛 作品报告草稿 多功能语音万年历.docx_第2页
第2页 / 共32页
南航第八届校电赛 作品报告草稿 多功能语音万年历.docx_第3页
第3页 / 共32页
南航第八届校电赛 作品报告草稿 多功能语音万年历.docx_第4页
第4页 / 共32页
南航第八届校电赛 作品报告草稿 多功能语音万年历.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

南航第八届校电赛 作品报告草稿 多功能语音万年历.docx

《南航第八届校电赛 作品报告草稿 多功能语音万年历.docx》由会员分享,可在线阅读,更多相关《南航第八届校电赛 作品报告草稿 多功能语音万年历.docx(32页珍藏版)》请在冰豆网上搜索。

南航第八届校电赛 作品报告草稿 多功能语音万年历.docx

南航第八届校电赛作品报告草稿多功能语音万年历

编号

南京航空航天大学

作品设计报告

题目

多功能电子万年历

学生姓名

韩浩等

学号

学院

自动化学院

专业

电气工程与自动化

测控技术与仪器

班级

、207、301

指导教师

二〇一三年十一月

南京航空航天大学

本科设计作品报告(论文)诚信承诺书

本人郑重声明:

所呈交的电子电路设计报告(论文)(题目:

多功能电子万年历)是本人在导师的指导下独立进行研究所取得的成果。

尽本人所知,除了作品设计报告(论文)中特别加以标注引用的内容外,本作品设计报告(论文)不包含任何其他个人或集体已经发表或撰写的成果作品。

作者签名:

年月日

(学号):

草稿

尚未添加引用

尚未完成电路图

程序设计原理阐述省略

新添加的功能未写入报告

新功能具体见作品登记表

 

作品名称

多功能电子万年历

上报学院

自动化学院

参赛选手

学号

姓名

学院

联系方式

韩浩

自动化学院

惠琦

自动化学院

高伟

自动化学院

崔培林

自动化学院

候鑫鑫

自动化学院

作品介绍

(400字内)

作品为校电赛F题作品,是一种基于TIMSP430的万年历解决方案。

功能与特性包括:

1、控制核心采用MSP430F149,以LCD12864实现四行汉字显示;

2、实现公历年月日时分秒准确计时,支持星期的准确计算,并支持闰年补偿,能显示闰年;

3、能显示阴历年、月、日,能计算并显示节气;

4、能进行整点和半点语音报时;

5、具有掉电存储功能,可存储掉电前用户定时设置;

6、具有日程管理,可以设定指定日期的日程,可以设置日程的提醒时间,并可用语音进行提示;

7、能掉电保存36个(可增至6400条)日程设定,提供8种日程内容语音、8首歌曲供选择播放,提示音乐具有重复播放功能;

8、具有温度测量功能;

9、具有城市煤气报警功能;

10、具有智能声控小夜灯功能;

11、具有功能完善的多级菜单实现上述所有功能的设置,能对具有良好的人机交互性能;

12、系统代码采用EmbeddedC++与面向对象方法实现,编写了利用中断实现的分时调度、高优先级任务抢占调度的伪RTOS;

13、具有较低功耗特性,长期不操作自动关闭背光。

备注

多功能电子万年历设计

摘要

本作品为校电赛F题作品,是一种基于TIMSP430的万年历解决方案。

硬件方面,作品控制核心采用MSP430F149单片机,以LCD12864作为显示器,依赖DS1302提供实时时钟信息,通过IIC总线与AT24C256通信实现掉电后的数据保存,通过RS485总线与LMD102芯片通信实现智能语音播报,通过四个独立按键实现多级菜单切换及功能与日程设置等人机交互功能;作品同时实现了如智能小夜灯、城市煤气报警、温度测量等额外实用小功能。

软件方面,系统代码采用EmbeddedC++编写,采用面向对象设计方法实现,设计了利用中断实现的支持多任务时间片轮转调度、高优先级任务抢占调度的伪RTOS;设计了功能完善的多级菜单,具有良好的人机交互性能;设计了基于Zeller公式与紫金历数据表的万年历算法,能显示判断闰年并自动调整日期。

总体而言,系统具有良好的可靠性与较低功耗。

 

关键词:

万年历,多功能,语音播报

ADesignofMulti-functionalChineseCalendar

Abstract

ThefollowingdesignisasolutiontoNO.Fproblemin2013NUAAElectricalCircuitDesignCompetition.ThearticledescribesacalendarsolutionbasedonTIMSP430MCU.Intermsofhardware,MSP430F149microcontrollerisusedascontrolcenter,LCD12864isusedasmainmonitor,andDS1302ischosenasRTC.Thedesignachievedpower-offdatastorefunctionbyIICbususingAT24C256.IntelligentvoicebroadcastisachievedviaRS485bususingLMD102.Usercanusefourindependenttogglebuttonstocontrolmulti-levelmenuandachieveotherhuman-computerinteractionfunctionssuchasagendasettinganduserconfigurationsetup.Thedesignalsoincludessomeadditionalfeaturessuchsmartnightlight,citygasalarmandtemperaturemeasurement.Intermsofsoftware,systemcodewaswrittenwithEmbeddedC++languageusingobject-orienteddesignmethod.Systemsupportsthemultitaskinground-robinschedulingandhigh-prioritytaskpreemptiveschedulingbyusinginterruptimplementation.Systemalsoincludesamulti-levelmenu,whichhasagoodinteractiveperformance.ThemainalgorithmsarebasedonZellerformulaandaZiJincalendarmap.Overall,thesystemhasgoodreliabilityandlowpowerconsumption.

KeyWords:

Calendar,Multi-functional,Voice-broadcast

摘要ⅰ

Abstractⅱ

第一章系统方案1

1.1比较与选择1

1.1.1控制核心1

1.1.2实时时钟1

1.1.3语音模块2

1.1.4掉电存储2

1.1.5人机交互2

1.1.6其他硬件2

1.1.7程序开发语言3

1.1.8操作系统3

1.1.9算法选择3

1.2方案描述4

第二章理论分析与计算4

2.1逻辑控制电路设计4

2.2日程设定和日期计算方法5

第三章电路与程序设计6

3.1电路设计6

3.1.1控制核心MCU部分6

3.1.2实时时钟模块7

3.1.3语音播报模块7

3.1.4独立按键7

3,1,5LCD128648

3.1.6E2PROM8

3.1.7其他硬件9

3.2程序设计10

3.2.1主程序设计与框架10

3.2.2各硬件模块程序设计12

3.2.3时间/日程功能设计18

第四章测试方案与测试结果20

4.1测试方案及测试条件20

4.2测试结果完整性20

4.3测试结果分析20

第五章总结与展望21

参考文献21

致谢22

附录23

第一章系统方案

1.1比较与选择

本节简述作品设计阶段各关键芯片的选型及软件开发方法的选择原因。

1.1.1控制核心

依据题目要求,作品采用德州仪器TexasInstrument公司的混合信号处理器MSP430系列单片机作为控制核心。

该芯片以惊人的低功耗性能著称,是一款基于RISC指令集的16位MCU,在实现超低功耗的前提下达到较高的性能,是绝对适合本题设计要求(超低功耗、高运算性能、相对低廉价格、相对较低的开发成本)的单片机。

考虑到万年历并非高级电子设备,成本不能过高,控制核心单片机一般在低端的MSP430FX1XX系列或MSP430G2XX系列中选择。

我们最终选择了PM封装的MSP430F149芯片作为控制核心,并向TI公司索取了两片样片最终完成开发,原因如下:

1、MSP430F149是TI公司MSP430系列单片机中最为广泛采用的芯片,在开发阶段可以直接向TI公司索取样片,有效降低了开发成本;2、MSP430F149片内存储空间高达60KB,足够存储外年历的控制程序(最终控制程序编译完成后达16KB),而Launchpad所采用的G2553芯片存储空间为4K;3、F149管脚资源丰富,能满足设计中各模块对管脚资源的要求,且能有效利用管脚第二功能简化开发(如直接利用管脚的UART功能进行485通信),相比之下G2553仅有20管脚,如果用于开发将不得不设计较为复杂的程序实现管脚的分时复用,大大加重编程人员的负担。

基于以上讨论,作品最终采用MSP439F149PM芯片作为控制核心。

1.1.2实时时钟

由于MSP430F149片内没有实时时钟RTC模块,作品采用外扩实时时钟的方式完成计时功能。

不同厂商生产的RTC芯片有许多,性能、价格上相差甚远。

出于性价比考虑,Dallas公司的DS1302芯片足以满足万年历的计时要求。

该芯片具有涓细电流充电能力,利用普通手表晶振实现低功耗运行,利用备用电源(纽扣电池)实现断电计时功能,操作简单,性价比极高,精度足以满足题目要求。

基于以上讨论,作品最终采用DallasDS1302芯片作为实时时钟模块的核心。

1.1.3语音模块

各厂商生产的语音模块功能各不相同,如能实现录放功能的ISD1730,能实现SD卡内文件读取的WTV020,能实现TTS功能的科大讯飞语音模块等。

考虑到低功耗、能利用单片机有效控制、编程实现简单、外围电路简单的要求,作品采用LMD102模块作为语音模块。

该模块价格极低,抗干扰能力好,片内自带功率放大,且单片机可以利用RS485总线协议能实现的播放控制。

片内存储容量为32M,足以实现题目要求的语音播报功能。

1.1.4掉电存储

掉电存储实现方式较多。

在不利用备用电源的情况下,一般可以考虑直接对MSP430片内存储FlashROM读写或外连电可擦写可编程EEPROM实现。

单片机FlashROM的擦写次数有限,而单片机作为控制核心在万年历系统中有至关重要的作用,不应因频繁擦写而报废,因此采用片内存储并不可取。

另外,对于片内存储器的写入必须按Segment擦除,操作上并不方便。

EEPROM采用IIC总线协议与单片机进行通信,能实现简单可靠的随机存储,掉电后保持数据能力极好,成本极低,且电路连接方便,易于损坏后更换,因此作品最终采用Atmel公司的AT24C256作为掉电存储模块。

1.1.5人机交互

根据题目要求,作品采用LCD12864作为主显示器,显示公历的年月日、时分秒及闰年情况,同时实现农历年月日的汉字输出,同时实现温度等数据以及全中文菜单的显示。

根据题目要求,作品采用四枚独立按键分别作为上、下、确认、菜单功能按键,足以满足多级菜单间的切换与相应时间、功能、日程安排的设置。

1.1.6其他硬件

作品充分利用管脚,作品实现了以下功能:

1、声控智能小夜灯:

采用多片锁存器与数十枚LED实现能指示时间的环状灯,利用声控开关实现夜间人声自动亮灯。

2、城市煤气报警:

采用MQ2气敏传感器实现包括城市煤气在内的多种气体的测量与报警。

3、温度测量:

采用DallasDS18B20温度传感器实现温度测量。

1.1.7程序开发语言

MSP430单片机开发采用C语言较多。

但由于开发时间极短、开发人数极少、课业压力大、任务较重,作品采用IEEE制定的EmbeddedC++语言开发,且充分利用了面向对象编程的思想,大大简化了程序设计的过程,也较大程度地提高了代码的复用性(且代码具有很高的可重用性)。

代码也适当地利用了IARElectricWorkbenchforMSP430开发环境对C++泛型编程开发的良好支持,使用了标准模板库STL中的部分函数简化部分算法和数据结构的设计开发工作。

由于C++编译的程序将比C效率低,为保证程序仍具有较高效率,编程时充分考虑MSP430内部结构,遵循C430编程规范,尽量避免使用不适合MSP430架构执行的代码段。

为保持较好的可移植性,几乎没有使用EmbeddedC++语言不支持的特性。

1.1.8操作系统

万年历对于实时响应的要求不高,一般不需要移植实时操作系统如uC/OS-II来实现相应的任务调度与进程管理,而简单采用永循环内各模块工作的主程序框架有时无法达成很快的实时响应。

基于以上讨论,作品采用了独立编写的基于时间片轮转思想设计的、依靠定时器中断实现的伪RTOS作为操作系统,同时,对于优先级较低的任务实现智能放权,对于优先级较高或需要实时响应的任务(如菜单按键按下后显示菜单、煤气报警、日程报警等)支持抢占式调度。

1.1.9算法选择

万年历主要涉及的算法为公历年月日(涉及闰年补偿)及星期的算法、公历与农历的高效转换算法。

基于1.1.2的讨论,作品采用了外连RTC模块的设计方案,而DS1302具有闰年补偿功能,能实现较完整的公历年月日计算,因此只需设计星期的计算方法。

作品采用了基于Zeller公式的星期计算方法,时间复杂度仅为O

(1)。

由于中国农历计算依赖于天象等不确定量,无特定算法。

因此作品内建了公农历映射表实现公农历间转换。

此外,作品在菜单设计部分还利用到了递归算法的思想,在日程设计方面利用了STL提供的快速排序算法。

1.2方案描述

基于1.1部分的比较分析,作品最终的方案描述如下:

作品提供了一种基于MSP430与DS1302的万年历解决方案。

硬件方面,作品控制核心采用MSP430F149单片机,以LCD12864作为显示器,依赖DS1302提供实时时钟信息,通过IIC总线与AT24C256通信实现掉电后的数据保存,通过RS485总线与LMD102芯片通信实现智能语音播报,通过四个独立按键实现多级菜单切换及功能与日程设置等人机交互功能;作品同时实现了其他小功能,利用多片锁存器与声控开关实现了智能小夜灯,利用MQ2气敏传感器实现了城市煤气报警,利用DS18B20实现了温度测量。

软件方面,系统代码采用EmbeddedC++编写,采用面向对象设计方法实现,设计了利用中断实现的支持多任务时间片轮转调度、高优先级任务抢占调度的伪RTOS;设计了功能完善的多级菜单,具有良好的人机交互性能;设计了基于Zeller公式与紫金历数据表的万年历算法,能显示判断闰年并自动调整日期。

功能与特性包括以下几点:

1、控制核心采用MSP430F149,以LCD12864实现四行汉字显示;2、实现公历年月日时分秒准确计时,支持星期的准确计算,并支持闰年补偿,能显示闰年;3、能显示阴历年、月、日,能计算并显示节气;4、能进行整点和半点语音报时;5、具有掉电存储功能,可存储掉电前用户定时设置;6、具有日程管理,可以设定指定日期的日程,可以设置日程的提醒时间,并可用语音进行提示;7、能掉电保存36个(可增至6400条)日程设,提供8种日程内容语音、8首歌曲供选择播放,提示音乐具有重复播放功能;8、具有温度测量功能;9、具有城市煤气报警功能;10、具有智能声控小夜灯功能;11、具有功能完善的多级菜单实现上述所有功能的设置,能对具有良好的人机交互性能;12、系统代码采用EmbeddedC++与面向对象方法实现,编写了利用中断实现的分时调度、高优先级任务抢占调度的伪RTOS;13、具有较低功耗特性。

第二章理论分析与计算

2.1逻辑控制电路设计

众所周知,单片机系统发展的趋势是片内集成,通过片上链路实现各类信息的处理转换,利用单片机自身的其他资源实现各类控制。

然而由于设计者相关知识与经验的匮乏,作品依然采用了8086时代以单片机为核心、外扩各类模块实现所需功能的设计方法。

逻辑控制电路均以单片机管脚为出发点设计,各模块直接或者通过各类总线连接方式连接到相应管脚。

具体参见第三章电路设计部分。

2.2日程设定和日期计算方法

公历的计算方法:

由于硬件选择的原因,公历方面不需考虑年月日计算、闰年补偿,只需设计星期算法:

最著名也最有效的公历星期算法为Zeller公式:

[1]

公式都是基于公历的置闰规则来考虑。

公式中的符号含义如下:

w:

星期(计算所得的数值对应的星期:

0-星期日;1-星期一;2-星期二;3-星期三;4-星期四;5-星期五;6-星期六)[1]

c:

年份前两位数

y:

年份后两位数

m:

月(m的取值范围为3至14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)

d:

[ ]:

称作高斯符号,代表向下取整,即,取不大于原数的最大整数。

mod:

‎‎同余‎(这里代表括号里的答案除以7后的余数)

实际编程时考虑C++语言特性,采用了以下修正公式代替Zeller公式:

其中各变量与Zeller公式定义一致,只是采用了char(编译时默认为unsignedchar)类型作为各变量的数据类型,利用C++语言特性可以实现取整。

农历算法:

由于中国农历是直接利用天体位置定义的历法(区别于利用固定的天体时间平周期定义的历法,如格里历,回历等),它是现今世界上为数不多的天文年历性质的历法,它和一些重要天象是一一对应的[2],因此不存在确切的算法。

程序内建了一张紫金历与公历的映射表实现了公农历间的转换。

见附录。

第三章电路与程序设计

3.1电路设计

3.1.1控制核心MCU部分

3.1.2实时时钟模块

3.1.3语音播报模块

3.1.4独立按键

3.1.5LCD12864

3.1.6E2PROM

3.1.7其他硬件

小夜灯的声控模块:

温度传感器:

城市煤气报警模块:

3.2程序设计

3.2.1主程序设计与框架

主程序包含系统初始化与任务调度功能,包含了一套精简的基于时间片轮转思想、依靠定时器中断实现的伪RTOS作为操作系统。

系统对于优先级较低的任务实现智能放权,对于优先级较高或需要实时响应的任务(如菜单按键按下后显示菜单、煤气报警、日程报警等)支持抢占式调度。

程序主框架如下:

(类C风格伪代码)

Intmain()

{

LCD\E2PROM初始化;

读取用户设置信息(如果有);

RTC初始化;

设置并开启TA中断;

while

(1)

{

Switch(任务安排特征码)

{

Case特征1:

执行任务1,非紧急如果执行完毕,更新任务特征码;

Break;

Case特征2:

执行任务1,需要实时响应,重复执行,直到系统更新任务特征码;

Break;

………………………………

Case特征n-1:

执行任务n-1,非紧急若执行完毕,更新任务特征码;

Break;

Case特征n:

执行任务n,需要实时响应,重复执行,直到系统更新任务特征码;

Break;

}

}

}

中断服务程序:

{

更新任务特征码;

如果需要响应最高级任务,无视任务特征码,直接响应。

}

3.2.2各硬件模块程序设计

RTC模块类声明:

classDS1302

{

private:

voidByteWrite(chard);//RTC写入一字节(内部函数)

charByteRead(void);//RTC读取一字节(内部函数)

voidwrite(charAddr,charData);//对地址写数据

charread(charAddr);//对地址读数据

voidautoSetWeekDay(char_y,char_m,char_d);//基于Zeller公式的星期计算函数

public:

voidsetProtect(charflag);//写/清保护接口

voidsetTime(charAddress,charValue);//设置时间函数

voidsetTime(timeClass&t);//调用timeClass对象设置时间函数(重载)

voidgetTime(timeClass&t);//获得时间并存入timeClass对象

voidinit(timeClass&t);//初次使用的初始化

};

E2PROM掉电存储模块类声明:

classAT24C256

{

private:

//private部分均为I2C总线操作内部函数

voidI2C_delay();

voidI2C_start(void);

voidI2C_stop(void);

voidI2C_init(void);

voidI2C_ack(void);

voidI2C_NoAck(void);

charI2C_TestAck(void);

voidI2C_SendByte(chardata_);

charI2C_ReceiveByte(void);

public:

voidinit();//初始化

charwriteByte(chardata_,unsignedintaddr_);//对地址写1字节

charwritePage(chardata_[],unsignedintaddr_);//对页写入

charreadCurrentByte(char*p);//对当前地址读1字节

voidwriteNByte(char*data,charn,unsignedintaddr_);//对地址写N字节

voidreadNByte(char*data,charn,unsignedintaddr_);//对地址写N字节

charreadByte(char*p,unsignedintaddr_);//对地址读1字节

charreadByte(unsignedintaddr_);//对地址读一字节直接返回(重载)

charreadCurrentData(chardata_[],unsignedintcount_);//对当前地址批量读出

charreadData(chardata_[],unsignedintcount_,unsignedintaddr_);//对页读出

charhaveData();//检测是否已经被用户写入过信息(检测已写入标志)

voidrestoreUserConfig();//恢复用户设置

voidsaveUserConfig();//保存用户设置

voidwipe();//清除片内信息

voidsetWritten()//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1