数字电子时钟设计报告1250.docx

上传人:b****7 文档编号:10912064 上传时间:2023-02-23 格式:DOCX 页数:48 大小:313.65KB
下载 相关 举报
数字电子时钟设计报告1250.docx_第1页
第1页 / 共48页
数字电子时钟设计报告1250.docx_第2页
第2页 / 共48页
数字电子时钟设计报告1250.docx_第3页
第3页 / 共48页
数字电子时钟设计报告1250.docx_第4页
第4页 / 共48页
数字电子时钟设计报告1250.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

数字电子时钟设计报告1250.docx

《数字电子时钟设计报告1250.docx》由会员分享,可在线阅读,更多相关《数字电子时钟设计报告1250.docx(48页珍藏版)》请在冰豆网上搜索。

数字电子时钟设计报告1250.docx

数字电子时钟设计报告1250

 

数字电子时钟语音播报系统设计报告

 

学院:

电子工程学院

班级:

2010电子信息工程1班

姓名:

覃阳青

学号:

201012701250

指导老师:

蒋品群

时间:

2013-4-20

数字电子时钟语音播报系统

[摘要]

本文介绍了基于ISD4004的语音播报系统。

系统由STC89系列单片机为核心,控制整个系统的协调工作。

为了使用方便,本系统采用了两种的显示方式,LCD1602和上位机,LCD1602主要用于遥控调节时间时的显示,上位机的显示界面相当简洁,达到一目了然的效果。

语音播报核心芯片是ISD4004芯片,该芯片能够实现多电平保存,并且掉电不丢失等优点。

为了方便远距离调节时间,本系统使用按键作为时间调节的工具。

同时为了让系统时间运行精度更高,该系统采用了PCF8563作为时钟芯片,该芯片运行比较稳定,而且功耗低。

单片机先将时钟芯片进行初始化,然后将读回来的数据显示在液晶屏上,并通过ISD4004进行播报。

同时为了实时监测周围环境的温度,本系统采用DS18B20芯片作为温度采集器。

[关键词]单片机数字时钟DS18B20PCF856374HC595ISD4004语音播报

上位机无线遥控

一、系统整体设计方案

1.1系统整体功能

本系统采用时钟芯片PCF8563和语音芯片ISD4004实现数字语音数字时钟,采用74HC595驱动数码管实时显示。

1.2系统实现框图

二、各功能模块

时间、温度语音播报系统是用时间芯片PCF8563、温度芯片DS18B20、语音设置,停止,录音,播放芯片ISD4004、上下位机等器件和C语言软件一起形成的可以显示时间、温度语音播报的系统。

可以通过程序控制显示时间、温度语音的运用。

可以通过录入语音,得出语音播报。

可以用在很多的领域,是一个不可现代化不可或缺的工作。

有了时间、温度语音播报系统,很多的领域就可以变得很方便。

例如在银行、商场、学校等公众场所中,它方便了大家。

2.1主控电路

2.2电源模块

2.3键盘模块

2.4显示模块

2.5温度模块

2.6时钟模块

2.7串行口模块

三、软件设计

3.1主函数部分

/****************************************

*includefiles

****************************************/

#include

#include"Pre_define.h"

#include"display595.h"

#include"delay.h"

#include"PCF8563.h"

#include"DS18B20.h"

#include"ISD4004.h"

#include"uart.h"

sbitmenu=P1^0;

sbitkey_play=P1^1;

sbitkey_add=P1^2;

sbitkey_sub=P1^3;

unsignedcharyear=0x13,mon=0x03,day=0x27,hou=0x09,min=0x25,sec=0x16,week=0x03;

unsignedcharyear1,year0,mon1,mon0,week1,week0,day1,day0,hour1,hour0,min1,min0,sec1,sec0;

unsignedcharTempH,TempL,TD,j0,j1,TT1,TT0;//字符型变量,仅有八位

inttemp;//读温度数据暂时存放的变量,整型变量,有两个字节,共十六位

unsignedcharmenuflag;

voidInit_Timer0(void);//声明初始化定时器0函数

voidsettime(unsignedcharmf);

voidvoice_H(unsignedintm1);

voidvoice_L(unsignedintm0);

voiddisplay_week(unsignedintweek);

voidplayvoice();

/**************************************/

voidmain()

{

Init_Timer0();

initial();//串口初始化

Init_pcf8563();//初始化8563

write_time_8563();//向8563写时间

while

(1)

{

if(menuflag>0)

{

read_time_8563();

settime(menuflag);

}

if(0==menuflag)

{

temp=read_temperature();//读温度

TempH=temp/16;//高十二位,除掉小数部分,剩下整数部分

TT0=TempH%10;TT1=TempH/10;

TD=temp%16;//小数部分

TD=TD*625/100;//0.0625*100;小数转化为整数显示

j1=TD/10;j0=TD%10;

display595_d3(TT1,TT0,j1,j0);//数码管显示发送的数据

delay1s();delay1s();

read_time_8563();

display595(hou/10,hou%10,min/10,min%10);//数码管显示时间

uart_send();//通过串口向上位机发送数据(年月日,时分秒)

delay1s();delay1s();

if(0==key_play)

{playvoice();}

}

}

}

3.2按键模块

voidvoice_H(unsignedintm1)

{

switch(m1)

{

case0:

{Delay_20_us(5);break;}

case1:

{StartPlay_ISD4004(0xaa);//10

Delay_20_us(25000);break;}

case2:

{StartPlay_ISD4004(0x87);//2

Delay_20_us(18000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(18000);break;}

case3:

{StartPlay_ISD4004(0x8b);//3

Delay_20_us(18000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(25000);break;}

case4:

{StartPlay_ISD4004(0x90);//4

Delay_20_us(24000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(20000);break;}

case5:

{StartPlay_ISD4004(0x95);//5

Delay_20_us(22000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(20000);break;}

case6:

{StartPlay_ISD4004(0x99);//6

Delay_20_us(22000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(20000);break;}

case7:

{StartPlay_ISD4004(0x9c);//7

Delay_20_us(24000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(20000);break;}

case8:

{StartPlay_ISD4004(0xa1);//8

Delay_20_us(24000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(20000);break;}

case9:

{StartPlay_ISD4004(0xa5);//9

Delay_20_us(24000);

StartPlay_ISD4004(0xaa);//10

Delay_20_us(20000);break;}

case10:

{StartPlay_ISD4004(0xaa);//10

Delay_20_us(2000);break;}

default:

break;

}

}

voidvoice_L(unsignedintm0)

{

switch(m0)

{

case0:

{StartPlay_ISD4004(0x7d);//0

Delay_20_us(30000);break;}

case1:

{StartPlay_ISD4004(0x83);//1

Delay_20_us(25000);break;}

case2:

{StartPlay_ISD4004(0x87);//2

Delay_20_us(25000);break;}

case3:

{StartPlay_ISD4004(0x8b);//3

Delay_20_us(25000);break;}

case4:

{StartPlay_ISD4004(0x90);//4

Delay_20_us(25000);break;}

case5:

{StartPlay_ISD4004(0x95);//5

Delay_20_us(24000);break;}

case6:

{StartPlay_ISD4004(0x99);//6

Delay_20_us(25000);break;}

case7:

{StartPlay_ISD4004(0x9c);//7

Delay_20_us(30000);break;}

case8:

{StartPlay_ISD4004(0xa1);//8

Delay_20_us(25000);break;}

case9:

{StartPlay_ISD4004(0xa5);//9

Delay_20_us(32000);break;}

default:

{StartPlay_ISD4004(0xaa);//10

Delay_20_us(30000);break;}

}

}

voiddisplay_week(unsignedintweek)

{

switch(week)

{

case0:

{Delay_20_us(10);break;}

case1:

{StartPlay_ISD4004(0x2d);//星期一

Delay_20_us(38000);break;}

case2:

{StartPlay_ISD4004(0x32);//星期二

Delay_20_us(50000);break;}

case3:

{StartPlay_ISD4004(0x3a);//星期三

Delay_20_us(50000);break;}

case4:

{StartPlay_ISD4004(0x40);//星期四

Delay_20_us(50000);break;}

case5:

{StartPlay_ISD4004(0x47);//星期五

Delay_20_us(40000);break;}

case6:

{StartPlay_ISD4004(0x4d);//星期六

Delay_20_us(45000);break;}

case7:

{StartPlay_ISD4004(0x53);//星期天

Delay_20_us(40000);break;}

default:

break;

}

}

/*********************************

函数名称:

Init_Timer0

函数功能:

初始化定时器0

************************************/

voidInit_Timer0(void)

{

TMOD=0x01;//定时器0,16位定时器

TH0=0xDC;//装定时器0初值

TL0=0x00;//定时100us

EA=1;//开全局中断

ET0=1;//开定时器0中断

TR0=1;

}

voidplayvoice()

{

temp=read_temperature();//读温度

StartPlay_ISD4004(0x5a);//欢迎使用语音播报系统

Delay_20_us(45400);

Delay_20_us(45800);

Stop_ISD4004();

Delay_20_us(20000);

key_play=1;

read_time_8563();//某月某日

year1=year/10;year0=year%10;

StartPlay_ISD4004(0x78);//今天是

Delay_20_us(38000);

display595(2,0,year1,year0);//显示年

voice_L

(2);//2andread2

StartPlay_ISD4004(0x80);//0

Delay_20_us(20000);

voice_L(year1);voice_L(year0);

StartPlay_ISD4004(0x0f);//年

Delay_20_us(28000);

mon1=mon/10;mon0=mon%10;

display595(18,mon1,mon0,18);//显示月

if((mon1>0)&(mon0==0))

{voice_H(mon1);}

else

{voice_H(mon1);voice_L(mon0);}

StartPlay_ISD4004(0x14);//月

Delay_20_us(25000);

day1=day/10;day0=day%10;

display595(18,day1,day0,18);//显示日

if((day1>0)&(day0==0))

{voice_H(day1);}

else

{voice_H(day1);voice_L(day0);}

StartPlay_ISD4004(0x19);//日

Delay_20_us(30000);

Stop_ISD4004();

Delay_20_us(10000);

week0=week%10;

display595(18,18,week0,18);

display_week(week0);//星期

Stop_ISD4004();

Delay_20_us(20000);

StartPlay_ISD4004(0x67);//当前温度为

Delay_20_us(54000);//Stop_ISD4004();

temp=read_temperature();//读温度

TempH=temp/16;//高十二位,除掉小数部分,剩下整数部分

TT0=TempH%10;TT1=TempH/10;

TD=temp%16;//小数部分

TD=TD*625/100;//0.0625*100;小数转化为整数显示

j1=TD/10;0=TD%10;

display595_d3(TT1,TT0,j1,j0);//数码管显示发送的数据

if((TT1>0)&(TT0==0))

{voice_H(TT1);}

else

{voice_H(TT1);voice_L(TT0);}

StartPlay_ISD4004(0x05);//点

Delay_20_us(35000);

if((j1>0)&(j0==0))

{voice_H(j1);}

else

{voice_H(j1);voice_L(j0);}

StartPlay_ISD4004(0x0a);//摄氏度

Delay_20_us(42000);

Stop_ISD4004();

Delay_20_us(20000);

read_time_8563();//读时间

hour1=hou/10;

hour0=hou%10;

StartPlay_ISD4004(0x70);//当前时间为

Delay_20_us(58000);

display595(18,hour1,hour0,18);//显示时

if((hour1>0)&(hour0==0))

{voice_H(hour1);}

else

{voice_H(hour1);voice_L(hour0);}

StartPlay_ISD4004(0x05);//点

Delay_20_us(35000);

read_time_8563();//读时间

min1=min/10;min0=min%10;

display595(18,min1,min0,18);//显示分

if((min1>0)&(min0==0))

{voice_H(min1);}

else

{voice_H(min1);voice_L(min0);}

StartPlay_ISD4004(0x22);//分

Delay_20_us(30000);

read_time_8563();//读时间

sec1=sec/10;sec0=sec%10;

display595(18,sec1,sec0,18);//显示秒

if((sec1>0)&(sec0==0))

{voice_H(sec1);}

else

{voice_H(sec1);voice_L(sec0);}

StartPlay_ISD4004(0x27);//秒

Delay_20_us(30000);

Stop_ISD4004();

}

//定时中断服务函数

/*********************************

函数名称:

Timer0_Interrupt

************************************/

voidTimer0_Interrupt(void)interrupt1

{

TH0=0xDC;//装定时器0初值

TL0=0x00;//定时100Us

if(menu==0)

{

Delay_20_us(3000);

if(menu==1)

{

menuflag=(menuflag==5)?

0:

(menuflag+1);

}

}

if(key_add==0)//按下加

{

read_time_8563();

Delay_20_us(4000);

if(key_add==0)

{

switch(menuflag)

{

case1:

year+=1;

display595(2,0,year/10,year%10);

year=((year/10)<<4)+((year%10)&0x0F);

if(((year%4)==0)&((year%100)>0))

{week=(week==7)?

1:

(week+2);}

elseweek=(week==7)?

1:

(week+1);break;

case2:

mon=(mon<12)?

(mon+1):

1;//mon+1

display595(mon/10,mon%10,18,18);

mon=((mon/10)<<4)+((mon%10)&0x0F);

if(((year%4)==0)&((year%100)>0))//闰年

{

switch(mon)

{

case1:

week=(week==7)?

1:

(week+3);break;

case3:

week=(week==7)?

1:

(week+3);break;

case5:

week=(week==7)?

1:

(week+3);break;

case7:

week=(week==7)?

1:

(week+3);break;

case8:

week=(week==7)?

1:

(week+3);break;

case10:

week=(week==7)?

1:

(week+3);break;

case12:

week=(week==7)?

1:

(week+2);break;

case4:

week=(week==7)?

1:

(week+2);break;

case6:

week=(week==7)?

1:

(week+2);break;

case9:

week=(week==7)?

1:

(week+2);break;

case11:

week=(week==7

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

当前位置:首页 > 高等教育 > 历史学

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

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