毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc

上传人:sccc 文档编号:4863118 上传时间:2023-05-20 格式:DOC 页数:25 大小:337.02KB
返回 下载 相关 举报
毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc_第1页
第1页 / 共25页
毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc_第2页
第2页 / 共25页
毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc_第3页
第3页 / 共25页
毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc_第4页
第4页 / 共25页
毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于STC89C51RC单片机语音电子时钟设计与实现.doc(25页珍藏版)》请在三一办公上搜索。

1、湖南工业科技职工大学毕业设计(论文)题 目 语音电子时钟 作 者 年 级 专 业 机电一体化 办学地点 指导老师 成 绩 年月日湖南工业科技职工大学毕业论文鉴定意见实际完成时间: 年 月 日至 年 月 日论文题目:语音电子时钟内容提要:世界上的东西都是为人服务的,所以所有产品都要更加人性化。此款语音电子钟是专为情侣设计的,它当你有什么话说不出口时,或是给对方造成伤害的拒绝都可以用这种方法,把要说的话录在语音芯片中然后把它当作礼物送给对方,同时给闹钟定时就可以了。上面所说的语音芯片是ISD4002-120,通过DS12C887的闹钟中断控制ISD4002放音。本来要选用录放时间更长的ISD400

2、4-16M,但程序调试过程中其音频输出引脚损坏,故改用已有的ISD4002,其中难点是ISD4002的地址输入控制程序的编写等。其次调试时尽量保证电路焊接正确,尤其是ISD4002的录音电路,DS12C887无外围芯片,故简单;显示用HG12864带字库的液晶,除正常时钟显示外还可以节日提提醒,录放音时间提示等。关键词:语音芯片ISD4002、时钟芯片DS12C887、HG12864液晶、LM386音频功放、STC89C51RC单片机。指 导 教 师 评 语 :指导教师(签字) 日期 答辩委员会(评审小组)意见:评 定 成 绩 答辩委员会主任 (评审小组组长) 日期: 年 月 日目 录一、 项

3、目实现的功能-第1页二、 所选各器件及介绍-第2页 (1)STC89C52RC-第2页 (2)DS12C887-第页 (3)ISD4002-120-第页 (4)HG1286412-B-第页 (5)音频功放LM386-第页 (6)电压转换芯片ht7133-A和LM78L05-第页 (7)电平转换芯片MAX232-第页三、硬件电路设计-第页(1)单片机和语音芯片电源设计-第页(2)单片机最小系统设计-第页(3)TTL到RS232的电平转换电路-第页(4)ISD4002电源设计-第页(5)ISD4002的录音电路设计-第页(6)ISD4002的放音电路(功放)- 第页(7)DS12C887电路设计-

4、第页(8)HG12864电路设计-第页(9)键盘电路设计-第页四、软件设计及调试-第页(1)头文件及引脚定义-第页(2)ISD4002控制程序-第页(3)HG12864控制程序-第页(4)DS12C887控制程序-第页(5)节日提醒程序-第页(6)闹钟和时间、日期的读取及显示-第页(7)图片显示-第页(8)按键扫描程序-第页(9)开机初始化程序-第页(10)主函数-第页已经有很多人做过电子时钟了,多说无义,学生就要从实践中获得经验,这既是自己的需要更是社会的需要,为此我们要多做一些自己感兴趣的实践项目来提高自己从而更加从容的成为社会需要的人才。一、 项目功能的实现(1) 在HG12864液晶上

5、显示年、月、日、时、分、秒、星期及节日提醒话语和录放音提示的相关操作。(2) 具有闹钟及到时响铃功能,报警响起时按除录放音及地址选择键时闹钟停止报警。(3) 设三个键调整闹钟,分别是时、分的加减和功能选择;另设三个录音、放音和录放音地址选择键。(4) 还可以设置按键音(但此程序没无此功能);利用DS12C887掉电可继续走时的特性,可实现断电不停,上电后仍可准确走时的功能。二、 所选各器件及介绍(1)STC89C52RC的介绍STC89C52RC是STC公生产的以8051为内核芯片的单片机:内部含有Flash E2PROM存储器;内部含有关8K的程序存储空间;内部RAM(随机读写存储器)为51

6、2位;具有可ISP可在线编程功能,不用买昂贵的编程器,只需搭建简单的TTLRS232的电平转换电路,很适合学无经济基础的毕业生,这里选用美信公司的MAX232芯片;DIP40封装。引脚定义参照其date sheet。(2)DS12C887介绍DS12C887时钟芯片能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部有世纪寄存器,从而利用硬件电路解决“千年”问题。DS12C887中自带锂电池,外部掉电时其内部信息还可以保持10年之久,这样就可以不用调整时,分、秒等一些参数,少一些按键。但各数据要在初始化时设置正确。对于一于内的时间记录有12小时制和24小时制两种模式。在12小时模式中用A

7、M和PM区分上午和下午。芯片内部的存储格式也有两种,一种用二进制表示一种是用BCD码表示。DS12C887的时钟芯片带有128位RAM,其中之11位用来存储时间信息;4位RAM用来存储DS12C887的控制信息,称为控制寄存器;113位RAM供用户使用。此外用户还对DS12C887编程实现多种方波的输出,并可对其内部的三路中断通过软件进行屏蔽。该芯片内部有一个精密的温度补偿电路,用来监视VCC的状态,如果检测到主电源的故障,该器件可以自动切换到备用电源供电。VBACKUP用于支持可充电电池或超级电容,内部包括一个始终有效的涓流充电器。DS12C887可以通过一个多路复用的单字节接口访问,该接口

8、支持Intel和Motorola模式。DS12C887将它自己与石英晶体和电池集成在一起。引脚定义及操作时序参照其date sheet。(3)ISD400X介绍ISD400X系列语音芯片工作电压3V,单片录放时间为816分钟,音质好,适用于移动电话及其他便携式电子产品。芯片采用CMOS技术,内含振荡器,防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存储阵列。芯片设计是基于所有操作基于微控制器控制,操作命令可通过串行通信接(SPI或Microwire)送入。芯片采用多电平直接模拟存储技术,每个采样值直接存储到片内闪烁存储器中,因此能够非常真实的自然的再现语音、音乐、音调等,避免

9、了一般固体录音电路因量化和压缩造成的量化造声和“金属声”,采样频率可为4.0KHz,5.3KHz,6.4KHz,8.0KHz,频率越低录放时间越长,而音质则有所下降,片内信息存于闪烁存储器中,在掉电的情况下保存一百年以上,可反复录音10万次以上。重点是对其寻址程序的编写,地址范围是0-600。引脚定义及操作时序参照其date sheet。(5) HG12864介绍本实验用的12864液晶使用ST7920控制器,5V电压驱动,带背光,内置8192个16*16点阵,128个字符(8*16点阵)及64*256点阵显示RAM(GDRAM),这样就可以为单片机节省很多系统资源。与外部CPU接口采用并行(

10、本实验采用并行操作时序)或串行两种控制方式。操作时序和控制码请参照date sheet。(6)音频功放LM386介绍该器件采用8引脚双列直插式封装开式,5V电压供电,该器件具有静态电流小,电源电压范围宽,失真度低,电压增益可调和失真度低等特点。适用于收音机、对讲机中作音频放大器。(7) 电压转换芯片7133-A和LM78L05图1.1 Lm78l05连接原理图图1.2 ht7133连接原理图 在本系统中使用7133A为ISD4002提供3.3V电压,输入电压为5V,使用LM78L05为单片机及整个系统提供电源。正常用工作时7805的输入输出电压差为23V,本系统采用12V输入电压,其次还要根据

11、输出电流的大小选择合适的散热器,否则会由于过热而无法达到额定工作电流。三、 硬件电路设计(1) 单片机电源设计图1.3单片机电源电路图1.3的左边为lm78l05组成的稳压电路,两个滤波电容的典型值请参照图1.2。但据实际经验采用0.1uf的电容。lm78l05输入端为12V,输入和输出接线时注意正负!图1.4 ISD4002电源电路需要注意的是:电源VCCD,VCCA是芯片内部数字电路电源正极引脚和模拟电源正极引脚。为使噪声减小,芯片的模拟和数字电路最好使用不同的电源供电,并且分别引到外封装的不同引脚上,模拟和数字电源端最好分别走线,尽可能在靠近供电端处相连,而去耦电容应尽量靠近器件。系统的

12、模拟地和数字地也最好分别接地。(2)单片机最小系统设计图1.5 单片机最小系统主要完成对从时钟芯片读取信息并进行处理;控制语音芯片录放音及录放音的起始地址。刚开始时感觉这很神秘,可照电路图做出来后竟然可以工作,所以硬件不是很难,重要的是你得动手去做。图1.5是实验的单片机最小系统,和其他的单片机最小系统也是一样的。两个22pf的电容是从废旧的板子上的单片机系统电路拆下来的,但我拆的是贴片电容,并不知道具体的容量,晶振是11.0592MHZ。复位电路采用按键复位,这样复位时可以不用掉电。(3)TTL到RS232的电平转换电路前文忘记介绍MAX232了,因为它不是时钟的一部分,它与单片机及电脑的连

13、接如图1.6,但要注意硬件连线的正确,否则很难达到想要的效果将程序下载进去,一定要确定用的是什么样的串口下载线,是平行的还是交叉的。STC单片机是上电检测是否需要下载程序到用户程序区,所以下载时要断电然后下载程序再上电。图1.6 TTL到RS232的电平转换电路(4)ISD4002录音电路设计图1.7 ISD4002的录音电路主要完成对语音信号的采集,存储及输出。模拟信号的输入可以用单位端或差分驱动。此种电路用的ISD4002的差分驱动,录音信号的最大幅度为峰峰值16mV。话筒为驻极体话筒,驻极体话筒体积小,结构简单,电声性能好,价格低廉。还要注意驻极体话筒的正负极。(5)ISD4002放音电

14、路设计图1.8 ISD4002放音电路图1.8为LM386的语音放大电路,主要对语音芯片输出的语音信号进行放大处理。通过改变增益端的接法可以得到不同的电压增益,当脚1和8脚开路时电压增益为20,若在接一电容增益可达200,若串接电阻元件则增益可在20到200之间选取,电阻越小增益越大。(6) DS12C887电路设计图1.9 DS12C887电路主要完成对时间信息的生成,时钟电路是最简单的,不用连接多余的外围元件,只需接电源即可。复位电路为上电复位,通信方式选Intel模式。(7) HG12864液晶电路设计图2.0 HG12864液晶电路主要完成对时时时间信息的显示,年、月、日、时、分、秒等

15、,尽量让一些功能有可见提示。本来Vo端要接调节电位器的,但难以在现有的材料中找到,故实际电路中让它直接与电源相连,复位路也是上电复位,RST端直接接高电平。(8)键盘电路设计采用独立式键盘,根据时钟要完成的功能设7个按键,分别是闹钟的时和分的调查整选择,时和分的加减,录音地址的选择,放音,录音及停止键。连接方式如图2.1。图2.1 键盘电路四、 软件设计(1)头文件及引脚定义#include#define uchar unsigned char#define uint unsigned intuchar hh=0,mm=0,ss=0,year=0,month=0,day=0,week=1,a=

16、0,nhh=0,nmm=0,n=0;uchar max,min,d,flag1=0,ad=0,i=0,f=0,g=0,go;uint c=0,e=0;bit w=0,flag=0;void xiao();sbit dscs=P20;/各sbit dsrw=P22;/芯sbit dsas=P21;/片sbit dsds=P23;/的sbit lcdrw=P25;/引sbit lcden=P26;/脚sbit lcdrs=P24;sbit beep=P27;sbit s1=P10;/位置选择。sbit s2=P11; /按键加。sbit s3=P12;/按键减。sbit s4=P13;sbit s

17、5=P14;/录音sbit s6=P15;/放音sbit s7=P16;sbit ssisd=P17;sbit mosisd=P30;sbit misoisd=P31;sbit sclkisd=P33;sbit intisd=P35;sbit racisd=P34;void lcd_ss();/函数声明void delay(uint z)/延时程序uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);(2)ISD4002控制程序/为什么输入的命令全是16位的,因为单片机模拟SPI输入端一次输入就是16位,所以和地址相与也必须是16位的命令。void writeisd_

18、4002(uint data16)/通过SPI总线向4002写16位数据 ssisd=1;ssisd=0;/使能4002 sclkisd=0; /时钟线拉高 for(i=0;i=1; /数据移位 ssisd=1;/禁止4002void record4002(uint addr)/录音,addr为地址,key键保持按下时录音持续 writeisd_4002(0x2000); delay(25); writeisd_4002(0x2000); delay(50); writeisd_4002(addr|0xa000);/设置录音起始地址 writeisd_4002(0xb000);/录音命令voi

19、d fangyin(uint addr)/放音,addr为地址,del为放音等待时间(试听决定) writeisd_4002(0x2000); delay(25); writeisd_4002(addr|0xe000); /设置放音起始地址 writeisd_4002(0xf000);/放音命令(3)HG12864液晶控制程序void write_com(uchar com)/写LCD命令!lcdrs=0;lcdrw=0;lcden=0;P0=com;lcden=1;delay(5);lcden=0;void write_dat(uint dat)/写LCD数据。lcdrs=1;lcdrw=0

20、;lcden=0;P0=dat;lcden=1;delay(5);lcden=0;void lcd_pos(uchar x,uchar y)/变换显示地址。uchar pos; if(x=0)x=0x80;else if(x=1)x=0x90;else if(x=2)x=0x88;else if(x=3)x=0x98;pos=x+y;write_com(pos);void lcd_init()/LCD初始化 write_com(0x30); /基本指令操作 delay(5);write_com(0x0c); /显示开,关光标 delay(5); write_com(0x01);/清除LCD的显

21、示内容delay(5);void write_word(uchar *str)/向LCD中写入字符串while(*str!=0)/检测字符串结束标志write_dat(*str);str+;(4)DS12C887控制程序void write_ds(uchar add,uchar dat)/写DS12C887数据,写数据时要先发送地址。dsds=1;dsas=1;dsrw=1;dscs=0;P0=add;dsas=0;dsrw=0;P0=dat;dsas=1;dsrw=1;dscs=1; uchar read_ds(uchar add)/读取DS12C887,时,分,秒,也要先写地址。uchar

22、 dat;dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;dsas=0;dsds=0;P0=0xff;dat=P0;dsas=1;dsds=1;dscs=1;return dat;(5)节日提醒程序void warning()lcd_pos(3,0);switch (month)case 1: if(day= 1) write_word(Happy New Year);if(day=28) write_word( 世界麻风日 );break;case 2: if(day=02) write_word( 世界湿地日 ); else if(day=13) write_word

23、( 明天情人节 ); else if(day=14) write_word( 该死的情人节 ); break;case 3: if(day= 1) write_word( 国际海豹日 ); else if(day= 3) write_word( 全国爱耳日 ); else if(day= 8) write_word( 三八妇女节 ); else if(day=12) write_word( 植树节 ); else if(day=14) write_word( 国际警察日 ); else if(day=15) write_word(消费者权益保护日); else if(day=17) write

24、_word( 国际航海日 ); else if(day=21) write_word( 世界森林日 ); else if(day=22) write_word( 世界水日 ); break;case 4: if(day= 1) write_word( 禺人节 ); else if(day= 5) write_word( 清明 ); else if(day= 8) write_word( 复活节 ); else if(day=13) write_word( 黑色星期五 ); break;case 5: if(day= 6) write_word( 国际劳动节 ); else if(day= 4)

25、 write_word( 青年节 ); else if(day= 8) write_word( 世界红十字日); else if(day=12) write_word( 国际护士节 ); else if(day15)&week=2) write_word( 近日母亲节 ); else if(day=15) write_word( 国际家庭日 ); else if(day=31) write_word( 世界无烟日 ); break;case 6: if(day= 1) write_word(国际六一儿童节); else if(day= 5) write_word( 世界环境日 ); else

26、if(day= 6) write_word( 全国爱眼日 ); else if(day=13) write_word( 近日父亲节 ); else if(day=15) write_word(祝父亲们节日快乐); else if(day=26) write_word( 国际禁毒日 ); break;case 7: if(day= 1) write_word( 共产党诞生 ); else if(day= 7) write_word( 纪念七七事变 ); else if(day=11) write_word( 世界人口日 ); break;case 8: if(day= 1) write_word

27、( 八一建军节 ); else if(day= 8) write_word( 中国男子节 ); else if(day=15) write_word( 抗日战争胜利 );break;case 9: if(day=10) write_word( 中国教师节 ); else if(day=18) write_word(纪念九一八事变); else if(day=20) write_word( 国际爱牙日 ); else if(day=27) write_word( 世界旅游日 ); break;case 10:if(day= 1) write_word( 国庆 ); else if(day= 4)

28、 write_word( 世界动物日 ); else if(day=13) write_word( 国际教师节 ); else if(day=24) write_word( 联合国日 ); break;case 11:if(day=10) write_word( 世界青年节 ); if(day=17) write_word( 世界学生节 ); break;case 12:if(day= 1) write_word( 世界艾滋病日 ); else if(day=23) write_word( 明晚平安夜 ); else if(day=24) write_word( 今晚平安夜 ); else i

29、f(day=25) write_word( 圣诞快乐 ); else if(day=31) write_word( 新年快乐 );break;(6)闹钟和时间、日期的读取及显示void lcd_nz_h()/读闹钟时并显示nhh=read_ds(5); lcd_pos(1,3); write_dat(nhh/10+0x30);write_dat(nhh%10+0x30); void lcd_nz_m()/读闹钟分并显示nmm=read_ds(3);lcd_pos(1,4); write_dat(0x3a); write_dat(nmm/10+0x30);write_dat(nmm%10+0x3

30、0);void lcd_hh()/时显示hh=read_ds(4);lcd_pos(1,0);write_dat(hh/10+0x30);write_dat(hh%10+0x30);void lcd_mm()/分显示mm=read_ds(2);lcd_pos(1,1);write_dat(0x30+0x0a);write_dat(mm/10+0x30);write_dat(mm%10+0x30);write_dat(0x30+0x0a);void lcd_year()/年显示year=read_ds(9);lcd_pos(0,2);write_dat(year/10+0x30);write_d

31、at(year%10+0x30);void lcd_month()/月显示month=read_ds(8);lcd_pos(0,3);write_dat(0x20+0x0d);write_dat(month/10+0x30);write_dat(month%10+0x30);write_dat(0x20+0x0d);void lcd_day()/日显示/f=day;day=read_ds(7);lcd_pos(0,5);write_dat(day/10+0x30);write_dat(day%10+0x30);warning();void lcd_week()/星期显示week=read_ds

32、(0x06);lcd_pos(1,4);write_word(星期);if(week=1) write_word(一);if(week=2) write_word(二);if(week=3) write_word(三);if(week=4) write_word(四);if(week=5) write_word(五);if(week=6) write_word(六);if(week=7) write_word(日);void lcd_ss()/秒显示a=ss;/录放音,及笑脸和心形显示标志ss=read_ds(0);lcd_pos(1,3);write_dat(ss/10+0x30);writ

33、e_dat(ss%10+0x30);xiao();/更新LCD显示void update_lcd()lcd_hh();/时lcd_mm();/分lcd_ss();/秒lcd_year();/年lcd_month();/月lcd_day();/日lcd_week();/星期(7)图片显示void xiao()/利用HG12864液晶内自带的图象字库循环显示一些图片 uchar i;if(a!=ss)if(flag1=0)i+;/i不会和writeisd4002中的I有冲突switch (i)case 1:lcd_pos(0,0);write_dat(0x20); write_dat(0x02);

34、 break;case 2: lcd_pos(0,0);write_dat(0x03); write_dat(0x20); break;case 3: lcd_pos(0,0);write_dat(0x20); write_dat(0x05); break;case 4: lcd_pos(0,0); write_dat(0x06); write_dat(0x20); i=0; break; default : i=0;break; else if(flag1=1)lcd_pos(0,0);write_word(录);/录放音显示及相应时间提示e+;/录音时间lcd_pos(0,6);write

35、_dat(0x20);write_dat(e/100+0x30);write_dat(e%100/10+0x30);write_dat(e%100%10+0x30);else if(flag1=2)lcd_pos(0,0);write_word(放);e+;/放音时间lcd_pos(0,6);write_dat(0x20);write_dat(e/100+0x30);write_dat(e%100/10+0x30);write_dat(e%100%10+0x30);void set_time()/闹钟时主,分相关参数及显示switch (n)case 1: w=1;write_com(0x01

36、); lcd_nz_h(); lcd_nz_m(); break;case 2:go=nmm;ad=3; max=59;min=0; lcd_pos(1,6); write_word(调分);break;case 3:go=nhh;ad=5; max=23;min=0; lcd_pos(1,1); write_word(调时); lcd_pos(1,6); write_dat(0x20); write_dat(0x20);write_dat(0x20);write_dat(0x20);break;(8)按键扫描程序keyscan()uchar i;if(flag=1)&(n=0)/关停闹钟(S1S7任意键)if(s1=0)|(s2=0)|(s3=0)|(s4=0)|(s5=0)|(s6=0)|(s7=0)delay(10);if(s1=0)|(s2=0)|(s3=0)|(s4=0)|(s5=0)|(s6=0)|(s7=0)while(!s1|!s2|!s3|!s4|!s5|!s6|!s7);writeisd_4002(0x3000);delay(10);flag=0;if(s1=0)&(flag=0)/闹钟调整选择delay(10);if(s1=0)while(!s1);n+;set_time();if(n=4) n=0;w=0;

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号