语音温度计设计_第1页
语音温度计设计_第2页
语音温度计设计_第3页
语音温度计设计_第4页
语音温度计设计_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目:语音温度计设计[29]。语音子程序的流程图如图所示:图4-5语音子程序流程图第5章实物制作与调试5.1实物制作具体步骤如下:准备实物所需要的器件:AT89C51单片机、20pf的电容2个、发光二极管1个、LCD1602液晶显示屏1个、9012型的三极管1个、2K的电阻3个、1个蜂鸣器1个、按键4个、电源开关1个、防水型DS18B20温度传感器1个、10uf的电容1个、频率为12M的晶振1个、WT588D语音芯片1个、扬声器1个、万用板以及导线若干。准备好所有器件后,检查单个器件有无损坏等,检查完毕准备焊接工作,按照所画的原理图进行焊接,焊接过程中需对引脚与引脚之间对应关系防止焊接错误,且在焊接过程中需注意发光二极管和蜂鸣器的长脚都接正极,短脚都接负极。焊接好的实物图如下图所示:图5-1实物背面图图5-2实物正面图5.2实物调试运行与分析在完成电路的焊接之后,需结合程序一起调试,调试步骤如下:首先将程序烧录进单片机,采用编程器进行程序的烧录。当烧录完毕后,联接电源的USB线,按下电源键。先观察二极管是否短暂发光,蜂鸣器是否叫一声。观察显示器是否显示,是否出现乱码。测试按下设置按键,按下加减键对温度上限值进行设置,再次按下设置键对低温就行设置。实物调试:(1)当调试步骤准备好,首先对液晶显示进行调试,液晶显示可以正常的显示。液晶显示调试图如图所示:图5-3液晶显示调试图报警功能的调试:先将温度上限值设定比实际所测得温度值低,发出高温报警;再将温度下限值设置比实际温度高,发出低温报警。高低温报警演示图如下:图5-4高温报警调试图图5-5低温报警调试图分析:实物调试时,设定按键接地端调试时,发现按键接地引脚与单片机的接地引脚没有接通,上网查询资料后,原因是断路或错接,又与电路图作比较,排查出原因是按键的接地引脚错接,然后重新焊接,再次调试解决了这个问题。在调试液晶显示器时,发现有时液晶显示器正常显示,有时液晶显示器不显示,我网上查阅相关资料和询问老师后,排查出原因,是假焊,然后在对其重新焊接后,再无这些情况出现。虽然调试过程中发现了一些问题,但是在解决这些问题后,此次语音温度计的设计基本符合设计任务书的要求。语音功能、声光报警功能、显示功能都能实现以及使用键盘设置温度上下限值都能基本实现。第6章总结与展望随着人们对于健康的越来越重视,温度计已经成为人家日常生活中的必备品。但是现在市面上的温度计大多为数字或者刻度值的温度计,然而这些温度计对于老年人或者盲人这样的特殊人群使用极不方便,所以此次设计的灵感来源于生活。此次设计是在传统温度计上增加一个语音功能以及数字显示。此次毕业设计,从选定题目,到查阅资料,再到方案的确定,然后器材的选定,硬件电路设计,程序的设计,实物的制作以及系统调试。方案确定过程中对于控制器的选定时,在单片机与可编程逻辑器件CPLD中选择时出现了迷茫,在老师的帮助以及结合自己查阅相关资料,最后选定单片机作为核心控制。在实物调试过程中,出现了按键与单片机未接通,在老师的帮助与指导下发现时错接了,然后进行重新焊接。还出现了液晶显示器在通电时有时显示有时不显示的问题,为排查这个问题,我咨询老师,然后自己在查阅相关的资料,排查出是出现了假焊,然后重新对电路进行焊接解决问题。此次设计的难点在于程序的设计,其中液晶显示的程序设计是一个难点。由于只学过基础的c语言,且学习时间过久,导致设计中很多的不熟练,再加上液晶显示需要去查阅液晶的字符使用手册,所以在对于液晶程序设计时,遇到了很多的困难。在起初的程序总体流程设计时也出现了很多错误,然后自己查阅相关资料以及老师帮助下,完成了程序流程图的设计。在程序设计完,对程序进行仿真测试时,出现了很多的问题,然后又逐步排查出问题,查阅资料解决相关的问题。此次设计的一个小小的新颖点在于开机时系统提示的设计,开机时单片机给报警电路一个低电平信号,使报警电路短暂工作,用于提示使用者整个系统已开启。此次设计中的不足:由于要求实现温度值的显示与温度上下限值的显示,所以设计只进行了简单的设计,没有加入时钟芯片,不能在液晶显示器上对时间进行显示,也不能实现整点播报语音温度。因为这是一款环境温度测量温度计,所以有可能在嘈杂的环境中进行,因为只进行了简单的语音播报设计,所以语音播报的声音以及声光报警的声音无法调节大小。此次设计中由于只需语音播报的功能的实现,为了调试与检验的方便,所以设计中将播报的循环时间间隔很短。设计中只是对系统自动语音播报进行了设计,而在系统不进行播报时,不能手动按下报温键进行温度值的播报。改进:如果增加一个外部时钟电路,就能更好的实现温度的整点播报以及显示器也可以显示出时间等;如果增加一个报温按键,就不需要把播报的循环时间间隔设置的很短。如果WT588D采用MP3控制模式,就能实现音量的大小的控制。通过本次设计我学会了许多其他方面的知识。比如单片机的知识,明白了单片机的运行原理,以及单片机的运行条件。掌握了很多以前不熟练的东西,也让我学会了一些在以后工作与学习上可以用到的道理,在确定设计方案时,需要从多个方面入手去准备,一定需要准备齐全。也对WT588D芯片有了一定的了解,以及液晶显示器的相关知识,学会了相关软件的操做。随着以后温度计、温度检测技术与集成化的发展,以后温度计的设计也将会越来越智能化,越来越集成化。不仅可以实现语音功能,还可以实现其他更多的功能,也使得那些特殊人群能自己使用温度计。参考文献张克,张哲,杨莉.采用高精度数字温度计替代标准水银温度计的探讨[J].计量学报,2007(9):99-102.陈雪小.数字显示温度计系统设计[J].计算机产品与流通,2019(07):120.杨杰,陈丽蓉.玻璃液体温度计的正确选用及示值误差的修正[J].计量与测试技术,2015,42(02):37-38.周之光.数字显示温度控制器的设计[C].中国电工技术学会.湖南省电工技术学会第七次会员代表大会暨2004学术年会论文集.中国电工技术学会:中国电工技术学会,2004:93-96.任睿,石洁.接触式数字体温计的概念设计[J].设计,2020,33(05):31-33.罗萍.基于SPCE061A单片机的语音播报温度计的设计[J].惠州学院学报(自然科学版),2009,29(06):66-68.唐永红.史贤俊.刘陵顺.飞机发动机转速实时检测与显示系统的设计[J].自动化仪表.2012:84-86.MaxtechInternationalInc,NewMarketResearchontheWorldMarketforCommercialandDual-UseInfraredImagingandInfraredThermometryEquipmentVol,IRW-CbyMaxtechInternational,IncJournalofTransportation[J],2020(75):12-17.FatemiSeyedAbolghsem,ElliottKatieElaineCollins,BelloAbiodun,DurojayeOluwaseunAyobami,ZhangHai-Jun,PeeblesEdgarDavid.TheeffectsofinovoinjectedvitaminD3sourcesontheeggshelltemperatureandearlyposthatchperformanceofRoss708broilers[J],Poultryscience,2020,99(3),45-50.Liu,C.Voicethermometerbasedblindorasthenopiapeople,hasboxbodywhosesideisprovidedwithchargingportandpowerswitch,andsinglechipmicrocomputerconnectedwithvoicesynthesizingmodulethatisconnectedwithloudspeaker[P].CN210346945-U,CN210346945-U17Apr2020G01K-013/00202038.Shwetlana,M.Pourmand,S.V.Boriskina,etal.Enhancedlightfocusinginself-assembledoptoplasmonicclusterswithsubwavelengthdimensions[J].AdvancedMaterials,2013,25(1):115-119深圳理思科技有限公司.语音温度计:CN201821078427.3[P].2019-02-05.郭源生.人体红外测温传感器大有可为,中国电子报,2020(8),26-29.汪桂珍.基于C51的万年历语音温度计的设计[J].福建电脑,2010,26(11):164,150.杨效春.基于MSP430F427单片机高精度智能语音数字温度计的设计[J].机电信息,2010(30):134-136.叶富邦.基于MLX90614红外传感器的机床测温系统设计,安徽职业技术学院学报,2019,18(03):24-27.王磊.基于辐射测温理论的比色测温仪的研究,哈尔滨理工大学,2019,13(5):78.杨志巍,张朝龙,刁书成,江善和,李彦梅.基于单片机的红外测温装置设计,电脑知识与技术,2019,15(13):278-280.类延强,张丽萍,类延法.基于单片机的可编程红外温度传感器设计,工业控制计算机,2019,32(04):125-126.连全塔.基于语音合成的非接触式红外温度计,电子质量,2019(04):3-7.杨贤聪.基于单片机的光电循迹小车设计,电子技术与软件工程,2019(02):246.考其祎,赵娟.基于单片机的红外体温测量仪的设计,南方农机,2018,49(23):181+190.强大壮,李宁,王瑛,王阳.基于Arduino的变电站自动巡线测温车模型设计,辽宁师专学报(自然科学版),2018,20(03):73-75.王帅.基于红外辐射的电厂锅炉温度检测与温度场重建,太原理工大学,2018,15:136-137.许璇,郎朝先,邱达,彭兴河,张勇.基于单片机的奶牛生理状态监测系统,现代信息科技,2018,2(03):195-196.袁媛,李秋,颜翠翠.智能测温仪的设计,科技资讯,2018,16(07):108-109.王明杨.基于单片机的电力设备在线监测系统研究,电脑迷,2017,3(11):91.韩斗.机车轮箍车载监测报警装置的研究,西南交通大学,2017,45,12-17.江楚炎.浅谈电气设备红外测温技术的应用,中国高新区,2017,14(20):123.余国卫.基于单片机的非接触式测温系统,电脑知识与技术,2017,13(24):206-207.李毅丰,毛晓波,杨怡航,朱枫.非接触式红外测温灶具防干烧系统设计,郑州大学学报(工学版),2017,38(05):18-22致谢经过几个月的努力,毕业设计也来到了终点。大学四年也到了终点,在这里也感谢那些教过我的老师,他(她)们教会了我们知识,还教会了我们许多的道理。此次毕业设计能顺利的完成,感谢指导老师雷莉萍老师的细心指导。尽管此次设计受疫情的影响使得我们只能在家里完成,但是有什么问题咨询雷莉萍老师时,她都耐心细心给讲解。我在改写论文时,看见一个批注,批注显示的时间是凌晨1点,雷莉萍老师的这种负责的精神,值得我学习。这里诚挚的感谢雷莉萍老师在我的毕业设计过程中提供的帮助!同时也感谢在答辩过程中对于我不设计不足提出宝贵意见的老师!附录程序:#include<reg51.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535#include<intrins.h>sbitdq=P1^5; //18b20IO口的定义sbitbeep=P1^4;//蜂鸣器IO口定义uinttemperature;//bitflag_300ms;bitflag_lj_en; //按键连加使能bitflag_lj_3_en; //按键连3次连加后使能加的数就越大了ucharkey_time,key_value;//用做连加的中间变量bitkey_500ms;ucharcodetable_num[]="0123456789abcdefg";sbitrs=P1^0; //寄存器选择信号H:数据寄存器 L:指令寄存器sbitrw=P1^1; //寄存器选择信号H:数据寄存器 L:指令寄存器sbite=P1^2; //片选信号下降沿触发ucharmenu_1;//菜单设计的变量uintt_high=350,t_low=100;sbitVBUSY=P2^0; sbitVSDA=P2^1;sbitVCS=P2^2;sbitVSCL=P2^3;sbitVRST=P2^4;ucharyujing[3];/***********************1ms延时函数*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<110;j++);}voiddelay_us(unsignedintus){ while(us--) { _nop_(); }}/**********************语音子程序************************/voidSend_threelines(unsignedcharaddr){unsignedchari; VRST=0; delay_1ms(5); VRST=1; delay_1ms(20);/*复位拉高20ms*/ VCS=0; delay_1ms(5);/*片选拉低5ms*/for(i=0;i<8;i++) { VSCL=0; if(addr&0x01) { VSDA=1; } else VSDA=0; addr>>=1; delay_us(150);/*150us*/ VSCL=1; delay_us(150);/*150us*/ } VCS=1; delay_1ms(150); while(VBUSY==0); //忙等待}/*********************************************************************名称:delay_uint()*功能:小延时。*输入:无*输出:无***********************************************************************/voiddelay_uint(uintq){ while(q--);}/*********************************************************************名称:write_com(ucharcom)*功能:1602命令函数*输入:输入的命令值*输出:无***********************************************************************/voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0;}/*********************************************************************名称:write_data(uchardat)*功能:1602写数据函数*输入:需要写入1602的数据*输出:无***********************************************************************/voidwrite_data(uchardat){ e=0; rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; }/*********************************************************************名称:write_string(ucharhang,ucharadd,uchar*p)*功能:改变液晶中某位的值,如果要让第一行,第五个字符开始显示"abcdef",调用该函数如下 write_string(1,5,"abcdef;")*输入:行,列,需要输入1602的数据*输出:无***********************************************************************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }/***********************lcd1602上显示特定的字符************************/voidwrite_zifu(ucharhang,ucharadd,uchardate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(date); }/***********************lcd1602上显示两位十进制数************************/voidwrite_sfm3_18B20(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/100%10); write_data(0x30+date/10%10); write_data('.'); write_data(0x30+date%10); }/***********************lcd1602初始化设置************************/voidinit_1602(){ write_com(0x38); // write_com(0x0c); write_com(0x06); delay_uint(1000); write_string(1,0,"temp:."); write_string(2,0,"H:.L:."); write_zifu(1,12,0xdf);//显示度 write_zifu(2,6,0xdf);//显示度 write_zifu(2,14,0xdf);//显示度}/***********************18b20初始化函数*****************************/voidinit_18b20(){ bitq; dq=1; //把总线拿高 delay_uint(1); dq=0; //给复位脉冲 delay_uint(80); dq=1; //把总线拿高等待 delay_uint(10); q=dq; //读取18b20初始化信号 delay_uint(20); dq=1; //把总线拿高释放总线}/*************写18b20内的数据***************/voidwrite_18b20(uchardat){ uchari; for(i=0;i<8;i++) { //写数据是低位开始 dq=0; //把总线拿低写时间隙开始 dq=dat&0x01;//向18b20总线写数据了 delay_uint(5); dq=1; //释放总线 dat>>=1; } }/*************读取18b20内的数据***************/ucharread_18b20(){ uchari,value; for(i=0;i<8;i++) { dq=0; //把总线拿低读时间隙开始 value>>=1; //读数据是低位开始 dq=1; //释放总线 if(dq==1) //开始读写数据 value|=0x80; delay_uint(5); } returnvalue; //返回数据}/*************读取温度的值读出来的是小数***************/uintread_temp(){ uintvalue; ucharlow; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳过64位ROM write_18b20(0x44); //启动一次温度转换命令 delay_uint(50); init_18b20(); //初始化18b20 EA=0; write_18b20(0xcc); //跳过64位ROM write_18b20(0xbe); //发出读取暂存器命令 EA=1; low=read_18b20(); //读温度低字节 value=read_18b20();//读温度高字节 value<<=8; //把温度的高位左移8位 value|=low; //把读出的温度低位放到value的低八位中 value*=0.625; //转换到温度值小数 returnvalue; //返回读出的温度带小数}/*************定时器0初始化程序***************/voidtime_init() { EA=1; //开总中断 TMOD=0X01; //定时器0、定时器1工作方式1 ET0=1; //开定时器0中断 TR0=1; //允许定时器0定时}/********************独立按键程序*****************/ucharkey_can; //按键值voidkey() //独立按键程序{ staticucharkey_new; key_can=0;//按键值还原 P3|=0xf0; if(key_500ms==1) //连加 { key_500ms=0; key_new=1; } if((P3&0xf0)!=0xf0) //按键按下 { delay_1ms(1); //按键消抖动 if(((P3&0xf0)!=0xf0)&&(key_new==1)) { //确认是按键按下 key_new=0; switch(P3&0xf0) { case0xd0:key_can=3;break; //得到k1键值 case0xb0:key_can=2;break; //得到K2键值 case0x70:key_can=1;break; //得到k3键值 } flag_lj_en=1; //连加使能 } } else { if(key_new==0) { key_new=1; flag_lj_en=0; //关闭连加使能 flag_lj_3_en=0; //关闭3秒后使能 key_value=0; //清零 key_time=0; } } }/****************按键显示函数***************/voidkey_with(){ if(key_can==1) //设置键 { menu_1++; if(menu_1>=3) { menu_1=0; } if(menu_1==0) { write_com(0x0c);//关闭光标 } } if(menu_1==1) //设置高温报警 { if(key_can==2) { if(flag_lj_3_en==0) t_high++; //按键按下未松开自动加三次 else t_high+=10; //按键按下未松开自动加三次之后每次自动加10 if(t_high>990) t_high=990; } if(key_can==3) { if(flag_lj_3_en==0) t_high--; //按键按下未松开自动减三次 else t_high-=10; //按键按下未松开自动减三次之后每次自动减10 if(t_high<=t_low) t_high=t_low+1; } write_sfm3_18B20(2,2,t_high); write_com(0x80+0x40+2);//将光标移动到秒个位 write_com(0x0f);//显示光标并且闪烁 } if(menu_1==2) //设置低温报警 { if(key_can==2) { if(flag_lj_3_en==0) t_low++; //按键按下未松开自动加三次 else t_low+=10; //按键按下未松开自动加三次之后每次自动加10 if(t_low>=t_high) t_low=t_high-1; } if(key_can==3) { if(flag_lj_3_en==0) t_low--; //按键按下未松开自动减三次 else t_low-=10; //按键按下未松开自动加三次之后每次自动加10 if(t_low<=10) t_low=10; } write_sfm3_18B20(2,10,t_low); write_com(0x80+0x40+10);//将光标移动到秒个位 write_com(0x0f);//显示光标并且闪烁 } }/********************菜单对应的处理函数***********************/voidmenu_dispaly(){ if((menu_1==1)) //对光标不处理,要不然光标不会显示在正确的位置 { write_com(0x80+0x42);//将光标移动到 write_com(0x0f);//显示光标并且闪烁 }elseif((menu_1==2)) { write_com(0x80+0x4a);//将光标移动到 write_com(0x0f); //显示光标并且闪烁 }}/****************报警函数***************/voidclock_h_l(){ if((temperature<=t_low)||(temperature>=t_high)) { beep=~beep; //蜂鸣器报警 } else { beep=1; } }/****************主函数***************/voidmain(){ staticucharvalue; beep=0; //开机叫一声 temperature=read_temp(); //先读出温度的值 delay_1ms(150); P0=P1=P2=P3=0xff; init_1602();//1602初始化 write_sfm3_18B20(2,2,t_high); write_sfm3_18B20(2,10,t_low); delay_1ms(750); temperature=read_temp(); //先读出温度的值 write_sfm3_18B20(1,8,temperature); time_init();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论