语音闹钟及定时器(完整版附图)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计实习报告
课程名称:语音闹钟及定时器组员:** **
学号:******
专业班级:*****
指导老师:******
学院:信息科学与技术学院
完成时间:2011年7月30日
一、课程设计题目要求
1、自己焊接凌阳十六位单片机实验板;
2、利用实验板完成以下电路设计;
3、外围电路实现以下功能:
a、定时器功能:(1)、能设置定时时间并语音播报;(2)、外扩电路显示定时时间。
b、语音闹钟:在原有万年历程序基础上,修改程序使之具有如下功能:开机时间为当前日期和时间;设置闹钟时间;语音或音乐闹铃。
二、设计方案与论证
2.1系统原理框图
本课题是基于凌阳十六位单片机的语音闹钟定时器的开发,由于之前我们组员都未曾接触过单片机知识,我们首先通过查阅凌阳单片机的相关资料学习单片机相关知识。由于凌阳十六位单片机自带了语音录放功能,这在很大程度上减小了我们的课题难度,我们首先考虑到实现闹钟定时器功能分两个部分,即软件部分和硬件部分,通过编程可以实现对单片机外围接口的定义,将想要传送的内容(包括语音部分和显示部分)传输出去,而外围电路的设计包括语音部分、显示部分以及输入部分(键盘);由于要求只显示年月日时分秒,我们采用数码管即可实现显示功能。此外我们还要做的就是语音采集及时间显示和闹钟的切换。系统设计框图如下
图2.1.1、系统设计框图
SPCE061A最小系统框图:
图2.1.2 2.2主要电路设计与参数计算
61板硬件框图如图所示:
框图说明:
表2.2.2、框图说明61板接口说明图:
2.2.1基本参数
1、工作电压:4.5V(三节干电池);
2、时间采用24小时制;
3、采用六位数码管动态显示年月日/时分秒。
2.2.2所需元件及元件参数
1、凌阳十六位单片机组套;
2、三节1.5V干电池;
3、一片SR420561K四位数码管和两片SM420501K一位数码管;
4、20位插排、数据传输线、一些导线和焊锡。
2.2.3注意事项
1、将61板上的J5跳线选择3.3V;
2、在安装电池时注意正负极,否则容易烧坏芯片;
3、在印制电路板上的焊接元器件前要认真对照原理图,仔细查看印制电路板,找到对应的元器件功能区;
4、在电源测试期间请勿将单片机芯片插入座中,以免电源部分有问题造成芯片烧坏。
5、连接外接电路时一定要注意端口对应关系,以免连接错误不能正常显示;
6、在焊接外围电路时,要仔细认真,以免造成个别焊点焊接不良。
2.3输入/输出(I/O)接口
61板将SPCE061A的IOB端口引出,IOB的所有端口均设置为输出端口,IOA 的低八位端口设置为输入端口,其中IOA端口的IOA0~IOA2为默认的Key1、Key2、Key3按键接口,IOB端口的IOB7~IOB2设置为数码管的位选端口,高八位IOB15~IOB8设置为数码管的段选接口。
三、调试步骤
3.1 软件部分
3.1.1时间显示函数
题目要求我们在原有的万年历的基础上更改程序使之满足闹钟定时器功能,而原有万年历程序部分并未给出外围显示部分,因此我们小组在此基础上添加了时钟时间显示函数display(),程序如下:
//======================================================
// 文件名称: Clock_Display.c
// 功能描述:调整日期和时间的函数集
//======================================================
#include"spce061a.h"
#include "Key.h"
static int LED1[10] = {0xfcfb,0x60fb,0xdafb,0xf2fb,0x66fb,0xb6fb,0xbefb,0xe0fb,0xfefb,0xf6f b};
static int LED2[10] = {0xfcf7,0x60f7,0xdaf7,0xf2f7,0x66f7,0xb6f7,0xbef7,0xe0f7,0xfef7,0xf6f 7};
static int LED3[10] = {0xfdef,0x61ef,0xdbef,0xf3ef,0x67ef,0xb7ef,0xbfef,0xe1ef,0xffef,0xf7e f};
static int LED4[10] = {0xfcdf,0x60df,0xdadf,0xf27f,0x66df,0xb6df,0xbedf,0xe07f,0xfedf,0xf6d f};
static int LED5[10] = {0xfdbf,0x61bf,0xdbbf,0xf3bf,0x67bf,0xb7bf,0xbfbf,0xe1bf,0xffbf,0xf7b f};
static int LED6[10] = {0xfc7f,0x607f,0xda7f,0xf27f,0x667f,0xb67f,0xbe7f,0xe07f,0xfe7f,0xf67 f};
//IOB口的高八位接段选,低六位接位选
//共阴接法'0''1''2''3''4''5''6''7''8''9'的代码
void display(unsigned Hour,unsigned Min,unsigned Sec)
{
int i;
unsigned int Fir_hour;
unsigned int Sec_hour;
unsigned int Fir_min;
unsigned int Sec_min;
unsigned int Fir_sec;
unsigned int Sec_sec;
Fir_hour=Hour/10;//时钟十位要显示的数字
Sec_hour=Hour%10;//时钟个位要显示的数字
Fir_min=Min/10; //分钟十位要显示的数字
Sec_min=Min%10; //分钟个位要显示的数字
Fir_sec=Sec/10; //秒钟十位要显示的数字
Sec_sec=Sec%10; //秒钟个位要显示的数字
*P_IOB_Attrib = 0xffff; //初始化IOB0~IOB15带数据缓存的高电平输出口