ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:313.65KB ,
资源ID:10912064      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10912064.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字电子时钟设计报告1250.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、数字电子时钟设计报告1250数字电子时钟语音播报系统设计报告 学 院:电子工程学院班 级:2010电子信息工程1班姓 名:覃阳青学 号:201012701250指导老师:蒋 品 群时 间:2013-4-20数字电子时钟语音播报系统摘要 本文介绍了基于ISD4004的语音播报系统。系统由STC89系列单片机为核心,控制整个系统的协调工作。为了使用方便,本系统采用了两种的显示方式,LCD1602和上位机,LCD1602主要用于遥控调节时间时的显示,上位机的显示界面相当简洁,达到一目了然的效果。语音播报核心芯片是ISD4004芯片,该芯片能够实现多电平保存,并且掉电不丢失等优点。为了方便远距离调节时

2、间,本系统使用按键作为时间调节的工具。同时为了让系统时间运行精度更高,该系统采用了PCF8563作为时钟芯片,该芯片运行比较稳定,而且功耗低。单片机先将时钟芯片进行初始化,然后将读回来的数据显示在液晶屏上,并通过ISD4004进行播报。同时为了实时监测周围环境的温度,本系统采用DS18B20芯片作为温度采集器。关键词 单片机 数字时钟 DS18B20 PCF8563 74HC595 ISD4004语音播报 上位机 无线遥控 一、 系统整体设计方案1.1 系统整体功能本系统采用时钟芯片PCF8563和语音芯片ISD4004实现数字语音数字时钟,采用74HC595驱动数码管实时显示。1.2 系统实

3、现框图二、 各功能模块时间、温度语音播报系统是用时间芯片PCF8563、温度芯片DS18B20、语音设置,停止,录音,播放芯片ISD4004 、上下位机等器件和C语言软件一起形成的可以显示时间、温度语音播报的系统。可以通过程序控制显示时间、温度语音的运用。可以通过录入语音,得出语音播报。可以用在很多的领域,是一个不可现代化不可或缺的工作。有了时间、温度语音播报系统,很多的领域就可以变得很方便。例如在银行、商场、学校等公众场所中,它方便了大家。2.1 主控电路2.2 电源模块2.3 键盘模块2.4 显示模块2.5 温度模块2.6 时钟模块2.7 串行口模块三、 软件设计3.1 主函数部分/* i

4、nclude files*/#include #include Pre_define.h#include display595.h#include delay.h#include PCF8563.h#include DS18B20.h#include ISD4004.h#include uart.hsbit menu = P10;sbit key_play = P11;sbit key_add = P12;sbit key_sub = P13;unsigned char year=0x13,mon=0x03,day=0x27,hou=0x09,min=0x25,sec=0x16,week=0x

5、03;unsigned char year1,year0,mon1,mon0,week1,week0,day1,day0,hour1,hour0,min1,min0,sec1,sec0;unsigned char TempH,TempL,TD,j0,j1,TT1,TT0; /字符型变量,仅有八位int temp;/读温度数据暂时存放的变量,整型变量,有两个字节,共十六位unsigned char menuflag;void Init_Timer0(void);/声明初始化定时器0函数void settime(unsigned char mf);void voice_H(unsigned int

6、 m1);void voice_L(unsigned int m0);void display_week(unsigned int week);void playvoice();/*/void main() 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();/读温度

7、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();/通过串口向

8、上位机发送数据(年月日,时分秒) delay1s(); delay1s(); if(0 = key_play) playvoice(); 3.2 按键模块 void voice_H(unsigned int m1) switch(m1) case 0: Delay_20_us(5);break; case 1: StartPlay_ISD4004(0xaa); /10 Delay_20_us(25000); break; case 2: StartPlay_ISD4004(0x87); /2 Delay_20_us(18000); StartPlay_ISD4004(0xaa); /10 De

9、lay_20_us(18000); break; case 3: StartPlay_ISD4004(0x8b); /3 Delay_20_us(18000); StartPlay_ISD4004(0xaa); /10 Delay_20_us(25000); break; case 4: StartPlay_ISD4004(0x90); /4 Delay_20_us(24000); StartPlay_ISD4004(0xaa); /10 Delay_20_us(20000); break; case 5: StartPlay_ISD4004(0x95); /5 Delay_20_us(220

10、00); StartPlay_ISD4004(0xaa); /10 Delay_20_us(20000); break; case 6: StartPlay_ISD4004(0x99); /6 Delay_20_us(22000); StartPlay_ISD4004(0xaa); /10 Delay_20_us(20000); break; case 7: StartPlay_ISD4004(0x9c); /7 Delay_20_us(24000); StartPlay_ISD4004(0xaa); /10 Delay_20_us(20000); break; case 8: StartPl

11、ay_ISD4004(0xa1); /8 Delay_20_us(24000); StartPlay_ISD4004(0xaa); /10 Delay_20_us(20000); break; case 9: StartPlay_ISD4004(0xa5); /9 Delay_20_us(24000); StartPlay_ISD4004(0xaa); /10 Delay_20_us(20000); break; case 10: StartPlay_ISD4004(0xaa); /10 Delay_20_us(2000); break; default : break; void voice

12、_L(unsigned int m0) switch(m0) case 0: StartPlay_ISD4004(0x7d);/0 Delay_20_us(30000); break; case 1: StartPlay_ISD4004(0x83); /1 Delay_20_us(25000); break; case 2: StartPlay_ISD4004(0x87); /2 Delay_20_us(25000); break; case 3: StartPlay_ISD4004(0x8b); /3 Delay_20_us(25000); break; case 4: StartPlay_

13、ISD4004(0x90); /4 Delay_20_us(25000); break; case 5: StartPlay_ISD4004(0x95); /5 Delay_20_us(24000); break; case 6: StartPlay_ISD4004(0x99); /6 Delay_20_us(25000); break; case 7: StartPlay_ISD4004(0x9c); /7 Delay_20_us(30000); break; case 8: StartPlay_ISD4004(0xa1); /8 Delay_20_us(25000); break; cas

14、e 9: StartPlay_ISD4004(0xa5); /9 Delay_20_us(32000); break; default: StartPlay_ISD4004(0xaa); /10 Delay_20_us(30000); break; void display_week(unsigned int week) switch(week) case 0:Delay_20_us(10); break; case 1: StartPlay_ISD4004(0x2d); /星期一 Delay_20_us(38000); break; case 2: StartPlay_ISD4004(0x3

15、2); /星期二 Delay_20_us(50000); break; case 3: StartPlay_ISD4004(0x3a); /星期三 Delay_20_us(50000); break; case 4: StartPlay_ISD4004(0x40); /星期四 Delay_20_us(50000); break; case 5: StartPlay_ISD4004(0x47); /星期五 Delay_20_us(40000); break; case 6: StartPlay_ISD4004(0x4d); /星期六 Delay_20_us(45000); break; case

16、 7: StartPlay_ISD4004(0x53); /星期天 Delay_20_us(40000); break; default:break; /*函数名称:Init_Timer0函数功能:初始化定时器0*/void Init_Timer0(void) TMOD = 0x01;/定时器0,16位定时器 TH0 = 0xDC;/装定时器0初值 TL0 = 0x00;/定时100us EA = 1;/开全局中断 ET0 = 1;/开定时器0中断 TR0 = 1;void playvoice() temp = read_temperature();/读温度 StartPlay_ISD4004

17、(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);/2 and read 2 StartPlay_ISD4004(0x80);

18、/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(mon10) & (mon0=0) voice_H(mon1); else voice_H(mon1); voice_L(mon0); StartPlay_ISD4004(0x14); /月 Delay_20_us(25000); day1 = day/10;

19、day0 = day%10; display595(18,day1,day0,18);/显示日 if(day10) & (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

20、(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);/数码管显示发送的数据

21、 if(TT10) & (TT0=0) voice_H(TT1); else voice_H(TT1); voice_L(TT0); StartPlay_ISD4004(0x05); /点 Delay_20_us(35000); if(j10) & (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;

22、 hour0 = hou%10; StartPlay_ISD4004(0x70); /当前时间为 Delay_20_us(58000); display595(18,hour1,hour0,18);/显示时 if(hour10) & (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,m

23、in0,18);/显示分 if(min10) & (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(sec10) & (sec0=0) voice_H(sec1); else voice_H(sec1); voice_L(sec0); StartPlay_IS

24、D4004(0x27); /秒 Delay_20_us(30000); Stop_ISD4004(); /定时中断服务函数/*函数名称:Timer0_Interrupt*/void Timer0_Interrupt(void) interrupt 1 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_

25、us(4000); if(key_add = 0) switch (menuflag) case 1: year += 1; display595(2,0,year/10,year%10); year = (year/10) 0) week = (week=7)?1:(week+2); else week = (week=7)?1:(week+1); break; case 2: mon = (mon12)?(mon+1):1; /mon+1 display595(mon/10,mon%10,18,18); mon = (mon/10) 0) /闰年 switch(mon) case 1: w

26、eek = (week=7)?1:(week+3); break; case 3: week = (week=7)?1:(week+3); break; case 5: week = (week=7)?1:(week+3); break; case 7: week = (week=7)?1:(week+3); break; case 8: week = (week=7)?1:(week+3); break; case 10:week = (week=7)?1:(week+3); break; case 12:week = (week=7)?1:(week+2); break; case 4: week = (week=7)?1:(week+2); break; case 6: week = (week=7)?1:(week+2); break; case 9: week = (week=7)?1:(week+2); break; case 11:week = (week=7

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

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