科技创新6-第08大组测温子系统设计报告_第1页
科技创新6-第08大组测温子系统设计报告_第2页
科技创新6-第08大组测温子系统设计报告_第3页
科技创新6-第08大组测温子系统设计报告_第4页
科技创新6-第08大组测温子系统设计报告_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

FFFADF摘要:热敏电阻、温度过冲、红外通:Detectthewatertemperaturebythermistor,toshowthecurrenttemperature.Controltheheater'scondition(on/off)byrelay,torealizethefunctionofcontrollingthetemperatureandkeethetemperature.Designthesoftwaretogetridofstaticerroranddynamicerror,torealizehighaccuracytemperaturecontrol.:thermistor,thermalovershoot,Infrared 概 编写说 名词定 相关文 系统总 系统功能描 系统组成结 温度测量模 温度控制模 液晶显示模 温度测量模块的硬件设 电路图 设计原 实验中遇到的问 过程中遇到的计 温度控制部分的硬件设 电路 设计原 实验中遇到的问 液晶显示模 电路 设计原 由于AD已经占用了I/O端口,所以需要用8255进行拓展接口 实验中遇到的问 系统各部分软件设 单片机简 单片机子系统概 重要的全局变 温度测 温度控 液晶显 测量结果和分 测量方 水温控制模块软件设 独立模式工作情 温控精度测 液晶状态正确显 分 学习心得体会和建 致 参考文 附录 开发环 硬件开发工 软件开发工 附录 软件程序.................................................................................对应AD的程 对应DS18B20的程 附录 使用说 系统功能介绍 系统性能指 水温控制指标 水温检测指标 系统按键及接线示意图 系统操作与显 概了解电子技术基础知识,对单片机的应用有所了解的电子技 者、在校师生或工程技术PN结为基础结构,能够自发辐射红外信号的半导体设备。科技创新[6]总体设计报告科技创新[6]全局主系统设计报告.doc科技创新[6]本系统设计报告科技创新[6]超声测距子系统设计报告.doc科技创新[6]电机测速子系统设计报告系统总2-1通过热敏电阻阻值变化,通过变换电路,以电压形式将信号传给AD,AD温度测量模块的硬件设 10 ADC08047VDB6VDB11DB216 239DB DB DB DB DB INTRCLK 3015 2.15 103-1通过运算放大器放大,作为AD的输入,AD的另一个输入由稳定的标准参考电压给定。ADR4Vin()minVin()VV VVin()maxVin()V温度控制部分的硬件设4-15V(约300VcVEVB0.74.3VIBIE0.43A

IEVE/RERoVo/IB液晶显示模5-1ADI/O82555-2Vcc5V,Vss接地,15,16脚的LED+LED-5V和地。Vee0~5VLCD对比度相关的。IDC26是单片机与ADC080626AD0~AD7接ADC08061所示。6-1IDC26引脚定义6-274HC373结构图6-374HC02结构图(4)6-4MM74HC138结构图8位二进制数传给单片机。单片机将此二进制数与事先存好的数组进行比较,从目标温度目标温度YN6-56-1unsignedADunsignedAD_table自控和的切tADunsignedADNADAD5ADC0804进行一次A/D8A/D转换得到的数值有可能产生误差,因此设置了一个大小为20A/D20A/D8位二进A/D转换得A/D转换得到的数如果不在第一个数组中,则将其统一定为数组中前一个数1度。本程序中的AD值的采用了利用5ms的中断一次发读的指令,一次的方法。这样没有delay,让程序更紧凑,更高效[9]20个值然后取平均的方法。if{}{}

if(d_ptr>=N)for(j=0;j<N;

6-6(2)2度<(设定温度值-实际温度值)<924245秒5155秒9521秒,停4目标YN1142156-7))//{reachflag=0;flag=}// {reachflag=0;}{reachflag=0;flag=SlowHeat;{}else{}}{reachflag=flag=SlowestHeat;{}else{}}//1s{reachflag=flag=SlowestHeat;{}else{}}elseif{if(current_temp==aim_temp)reachflag=1;reachflag=flag=KeepWarm;heat=1;}} 4秒为周期进行温度显示和状态显示的切换。if(flag2==1{if(m==0flag2=}DS18B20是可组网数字温度传感器封装而成,具有耐磨耐碰,体积小,使用方便,封装形table。但是由于DS18B20高度集成,并且所有令完全是由单线时序。导致我们没有办法很好[30,99].3数码管正确显示目标水温与实际水温30℃(最低温度)、99℃(最高温度)、任一温度([30,99]℃);9℃以上,(2,9]℃,比当前实际水温高(0,2]度2s液晶每2s在温度显示与状态显示之间自行切换7-1绝对误差(温度计示数-目000水温测控范围此外,AD0.5度。如果时间充裕的话,我们会选择一个更大范围(12位)AD。组员6需要防止温度过冲,所以要有很多情况的讨论。尤其是到了最后关头,发现由于 组员,,组员组长致 参考文DS18B20Data74HC37374HC02MM74HC138LCD1602附录 开发环Keilc51附录 软件程AD#include<absacc.h>#include<reg52.h>#include"sio.h"#include"lcd.h" 常量定 /*#defineV_TH0 0xee ~5ms*/#defineV_TL0 #defineV_TH10x4c#defineV_TL1/*#define /*数码管位驱动和指示灯驱动寄存器地址*/#defineADDR_SEL //AD#define #defineFrame_Max23#defineMASTER0x00#defineSLAVE0x01/*sbitKEY1=P1^0;sbitKEY2=P1^1;sbitKEY3=P1^2;sbitKEY4=sbit //加热信号1为加热,0sbittest=P1^4;sbitW_EN=P3^2;//voltageinADinclosemodeunsignedintxdataAD_table[74]= ,21,25,28,32,35,39,42,46,50,54,58,62,65,69,73,77,81,85,,101,105,108,112,116,120,123,127,130,134,138,141,149,152,155,158,161,164,168,170,174,177,180,183,188,191,194,196,199,202,204,206,209,211,213,216,219,222,225,227,229,230,232,234,236,237,240unsignedintxdatatemp_table[74]{29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,60,61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,78,80,81,82,83,84,85,86,87,88,90,91,92,93,94,95,96,97,98, 变量定 /**/unsignedcharbdataoutput_sel;sbitled_1=output_sel^5;sbitled_2=output_sel^6;sbitled_3=output_sel^7;sbitled_4=/*数码管扫描驱动指针,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi_scaner;/*测试用计数值十进制表示,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi[4];intflag;液晶显示状态intcnt=0;//液晶计数intm0;中断里显示的状态intflag2=0;intmode intreachflag=0;//0为未达到目标温度intoffflag=1; //0为强制关闭电源unsignedintcnt2s;/*秒数的计数变量*/unsignedintcnt4s;unsignedintcnt5s;unsignedintcnt1s;unsignedintcnt11s;unsignedintunsignedintwait2s;*秒数的控制变量*/unsignedintwait4s;unsignedintwait5s;unsignedintwait1s;unsignedintwait11s;unsignedintwait35s;intindex;//judgeturningontheconverterorreadingstatusintt=0;//arraytostoreADvalueintj1=0;unsignedintxdataint//thenumberweneedtogetaverageintN=20;//pointerint//ADintAD_data=unsignedchardatatime=0;ucharxdataSendData[Frame_Max];ucharxdataReceiveData[Frame_Max];uintj;uintSCount;uintRCount;ucharstate;ucharsending;ucharread_state;ucharMessage;ucharrec_end;RS_422tosend;RS_422received;ucharerror;uchartemp;ucharxdata 函数intget_temp(AD_data){inti=for(i=0;AD_table[i]<=AD_data;i++);index=i;}voidW5S()/*5秒函数{{}}voidW4S()/*4秒函数{}}voidW2S()/*2秒函数{}}voidW1S()/*1秒函数{{}}voidW11S()/*1秒函数{{}}voidW35S()/*1秒函数{{}}void值unsignedcharNUMTOSEG7(unsignedchar7//参数:DATA//7D7~0PGFEDCBA 函数定 /****7段数码显示译码DATA7D7~0PGFEDCBAunsignedcharNUMTOSEG7(unsignedchar{unsignedcharAA;switch(DATA){case0:AA=0xc0;break;/*‘0’*/case1:AA=0xf9;break;/*‘1’*/case2:AA=0xa4;break;*‘2’*/case3:AA=0xb0;break;*‘3’*/case4:AA=0x99;break;*‘4’*/case5:AA=0x92;break;*‘5’*/case6:AA=0x82;break;*‘6’*/case7:AA=0xf8;break;/*‘7’*/case8:AA=0x80;break;*‘8’*/case9:AA=0x90;break;*‘9’*/case10:AA=0x88;break;*‘A’*/case11:AA=0x83;break;*‘B’*/case12:AA=0xc6;break;*‘C’*/case13:AA=0xa1;break;*‘D’*/case14:AA=0x86;break;*‘E’*/case15:AA=0x8e;break;/*‘F’*/caseAA=0xbf;break;*case_':AA=0xf7;break;*下划线*/case'':AA=0xff;break;/*消隐*/default:AA=0xff;}}voidsend_buff(RS_422{SendData[0]=rs.SOI;for(j=0;j<rs.LENGTH;j++){SendData[11+j*2]=transH(rs.INFO[j]);SendData[12+j*2]=}}uchar{if(received.CMD1_RSPD==0x01)}return}voidreceive_check{received.SOI=received.VER=unite(ReceiveData[1],ReceiveData[2]);received.ADDR=unite(ReceiveData[3],ReceiveData[4]);received.CMD1_RSPD=unite(ReceiveData[5],ReceiveData[6]);received.CMD2_RTN=unite(ReceiveData[7],ReceiveData[8]);received.LENGTH=unite(ReceiveData[9],ReceiveData[10]);for(j=0;j<RCount-13;j+=2)received.INFO[j/2]=unite(ReceiveData[11+j],ReceiveData[j+12]);if(received.VER!=VERSION)error=0x01;else{if(temp%256!=0)error=0x02;else{if((received.CMD2_RTN!=0&&received.CMD1_RSPD!=1)||(received.CMD1_RSPD&&received.CMD2_RTN>1)||received.CMD1_RSPD>4)error=0x03;elseif(received.LENGTH*2!=RCount-13)error=0x04;else{if(infocheck())error=0x05;else}}}}}voidreset()typedefstructunsignedcharrstcode[27];intaddr;}resetstruct;resetstructcode0xc0,0xe0,0x32},}/****T05mstimer0()interrupt1using{//TR1= /**/output_sel0xf0;*初值,令数码管驱动位无效,指示灯全灭*/led_1=mode;led_2=(reachflag)?0:1;led_3=(offflag)?0:1;Keyboard();/*145ms间隔对一个数码管进行驱动,20ms一个*/if(++digi_scaner>=5)digi_scaner=1;switch(digi_scaner){case1:**/output_sel|=0x01;case2:**/output_sel|=0x02;ADDR_8SEGNUMTOSEG7(digi[1*U5*/case3:**/output_sel|=0x04;ADDR_8SEGNUMTOSEG7(digi[2*U5*/case4:**/output_sel|=0x08;ADDR_8SEGNUMTOSEG7(digi[3*U5*/}ADDR_SEL=output_sel; /*U6(在电路图中找)*/if(t==0){}{}

if(d_ptr>=N)for(j1=0;j1<N;j1++)//current_temp=get_temp//current_temp=//current_temp=if(wait2s==1)cnt2s++;if(wait4s==1)cnt4s++;if(wait1s==1)cnt1s++; if(wait5s==1)cnt5s++; if(m=={if(cnt>={flag2=cnt=0;m=}}{

if(cnt>={flag2=cnt=0;m=}} //TR1=}timer1()interrupt{} ()interrupt4using{{switch{case0:if{}case1:if(Message==0x7e)RCount=0;elseif{if(Message==0x0d){if(RCount>=13&&RCount%2==1)rec_end=1;elseread_state=1;}}}}

elseread_state=0;void{iftime==50)//{if {if(mode==0mode=elseif(mode==1)mode=0;}elseif {if(mode==0{if(aim_temp<aim_temp=aim_temp+}}elseif {if{if(aim_temp>aim_temp=aim_temp-}}elseif{if{if(aim_temp>aim_temp=aim_temp-}}}}

time/****int{/**//****//****//**SCON=0x50;/*SCOMMODE1(8BITUARTVARBR)*//*8255LCD*//****//**0**/TR1= {for(j1=0;j1<N;j1++)current_temp=get_temp(AD_data);if(offflag==0){heat=1;flag=Off;}elseif(offflag){))//{reachflag=0;flag=}// {reachflag=0;}{reachflag=0;flag=SlowHeat;{}else{}}{reachflag=flag=SlowestHeat;{}else{}}//1s{reachflag=flag=SlowestHeat;{}else{}}elseif{if(current_temp==aim_temp)reachflag=1;reachflag=flag=KeepWarm;heat=1;}}if(current_temp=={digi[2]='-';//current_temp/10;received.ADDR;digi[3]='-';//current_temp%10;SLAVE;}elseif(current_temp=={}{}

digi[2]='-';//current_temp/10;received.ADDR;digi[3]='-';//current_temp%10;SLAVE;digi[2]=current_temp/10;//current_temp/10;received.ADDR;digi[3]=current_temp%10;//current_temp%10;SLAVE;//digi[0]=AD_data///digi[1]=(AD_data%100)///digi[2]=(AD_data%100)%//digi[3]=0;switch(state){caseif(rec_end)if((received.ADDR==SLAVE)&&(mode==1))if(error)tosend=init_rs422(MASTER,3,error,0,NULL);else{switch{casecase1:offflag=(received.CMD2_RTN)?1:0;caseINFO[0]=(reachflag)?0x01:0x00;casecase}}}{}}case1:switchcasecase2:}default:break;}//TR1=0;if(sending==1){if(SendData[SCount]==0x0d){}}if(flag2==1{if(m==0flag2=}}}#ifndef#define#defineVERSION0x10#defineucharunsignedchar#defineuintunsignedint#include/*定义串行通行协议 {uchar /*uchar /*uchar /*uchar /*1/uchar /*2/ucharLENGTH; /*数据段字节长度*/ucharINFO[4]; /*数据段*/ucharCHKSUM; /*校验和*/ucharEOI; /*结束标志*/typedef /*初始化RS_422 uchartransH(uchar{uintucharj=(m-if(j>9)mchar=(unsignedchar)(j+48);returnmchar;}uchartransL(uchar{uintucharmchar;j=m%16;if(j>9)mchar=(unsignedchar)(j+48);returnmchar;}ucharunite(ucharh,ucharl){ucharmchar;mchar=(unsignedchar)(h*16+l);returnmchar;}RS_422init_rs422(ucharADDR,ucharCMD1,ucharCMD2,ucharLENGTH,uchar*{RS_422rs;uintj;ucharmchar;rs.SOI=0x7e;rs.VER=VERSION;rs.ADDR=ADDR;rs.CMD1_RSPD=CMD1;rs.CMD2_RTN=CMD2;rs.LENGTH=LENGTH;rs.EOI=mchar=for(j=0;j<rs.LENGTH;j++)mchar+=rs.INFO[j];rs.CHKSUM=(unsignedchar)(~(mchar%256)+1);returnrs;}#ifndefLCD_CHAR_1602_2005_4_9#defineLCD_CHAR_1602_2005_4_9#include<intrins.h> #define#define#define#define#define#define eAdjust//#define //#define /*unsignedcharcurrent_temp=/*unsignedcharaim_temp=voidDelay1ms(unsignedint{unsignedinti,j;}#define #define sbit/*8255*/voidINIT_8255(){RST8255=0;//8255工作CTRL8255=0x80;//0,ABC三口输出Delay1ms(4040ms8255写入控制字}//PortDefinitions**********************************************************sbitLcdRs =P3^5;sbitLcdRw =P3^4;sbitLcdEn =P3^3; unsignedcharLCD_Wait(void){ return}//向LCD写入命令或数据************************************************************ //Command#defineLCD_DATA //Data#defineLCD_CLEAR_SCREEN0x01 //清屏#define //voidLCD_Write(bitstyle,unsignedchar{ }#define#define#define#define#define#definevoidLCD_SetDisplay(unsignedchar{ MAND,}#defineLCD_AC_UP #defineLCD_AC_DOWN //default#defineLCD_MOVE //画面可平移#defineLCD_NO_MOVE voidLCD_SetInput(unsignedcharInputMode){ MAND,}voidLCD_Initial() //8位数据端口,2行显示,5*7 //开启显示, // //AC递增,}/**voidGotoXY(unsignedcharx,unsignedchar{ }/**LCDvoidPrint(unsignedchar{{}}unsignedcharxdata/**intstringvoidIntToStr(unsignedchart,unsignedchar*str,unsignedchar{unsignedchara[3];chari,j; for(i=0;i<3; //转成ASCIIfor(i=0;a[i]=='0'&&i<=3;for(j=3-n;j<i {*str=''; str++;}for(;i<3;i++)*str=a[istr }/*LCD显示的信息voidLCD_Disp(unsignedchar{switch{casePrint("currentstate: etoPrint("ByDRSLLPY Print("currentstate: FastHeat Print("currentstate: SlowHeat caseSlowestHeat:// Print("currentstate: SlowestHeat case if(current_temp==29){Print("unreachthirty}elseif(current_temp==100{}{

Print("overnintyninePrint("cur

温馨提示

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

评论

0/150

提交评论