基于51单片机的温度控制系统的设计_第1页
基于51单片机的温度控制系统的设计_第2页
基于51单片机的温度控制系统的设计_第3页
基于51单片机的温度控制系统的设计_第4页
基于51单片机的温度控制系统的设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

基于51单片机的温度控制系统的设计基于51单片机的温度控制系统的设计基于51单片机的温度控制系统的设计基于单片机的温度控制系统设计1.设计要求要求设计一个温度丈量系统,在高出限制值的时候能进行声光报警。详细设计要求以下:①数码管或液晶显示屏显示室内当前的温度;②在不高出最高温度的状况下,可以经过按键设置想要的温度并显示;设有四个按键,分别是设置键、加1键、减1键和启动/复位键;DS18B20温度收集;④高出设置值的±5℃时发出超限报警,采纳声光报警,上限报警用红灯指示,下限报警用黄灯指示,正常用绿灯指示。2.方案论证依据设计要求,本次设计是基于单片机的课程设计,因为实现功能比较简单,我们学习中接触到的51系列单片机圆满可以实现上述功能,所以可以采纳AT89C51单片机。温度收集直接可以用设计要求中所要求的DS18B20。报警和指示模块中,可以采纳3种不同样样颜色的LED灯作为指示灯,报警鸣笛采纳蜂鸣器。显示模块有两种方案可供选择。方案一:使用LED数码管显示收集温度和设定温度;方案二:使用LCD液晶显示屏来显示收集温度和设定温度。LED数码管结构简单,使用方便,但在使用时,若用动向显示则需要不停更正位选和段选信号,且显示时数码管不停闪耀,令人眼简单疲倦;若采纳静态显示则又需要更多硬件支持。LCD显示屏可鉴别性较好,背光明度可调,并且比LED数码管显示更多字符,可是编程要求比LED数码管要高。综合考虑此后,我采纳了LCD显示屏作为温度显示器件,因为显示字符多,在进行上下限警戒值设准时相同可以收集并显示当前温度,可以直观的看到实质温度与警戒温度的比较。LCD显示模块可以采纳RT1602C。13.硬件设计依据设计要求,硬件系统主要包含6个部分,即单片机时钟电路、复位电路、键盘接口模块、温度收集模块、LCD显示模块、报警与指示模块。其互相联系以以下列图1所示:单片机时钟电路LCD显示模块复位电路单片机键盘接口模块报警与指示模块温度收集模块图1硬件电路设计框图单片机时钟电路形成单片机时钟信号的方式有内部时钟方式和外面时钟方式。本次设计采纳内部时钟方式,如图2所示。单片机内部有一个用于组成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为此放大器的输入端和输出端,其频率范围为~12MHz,经由片外晶图2单片机内部时钟方式电路体振荡器或陶瓷振荡器与两个般配电容一起形成了一个自激振荡电路,为单片机供给时钟源。复位电路复位是单片机的初始化操作,其作用是使CPU和系统中的其余部件都处于一个确立的初始状态,并从这个状态开始工作,以防备电源系统不牢固造成CPU工作不正常。在系统中,有时会出现工作不正常的状况,为了从异常状态中恢复,同图3单片机按键复位电路2时也为了系统调试方便,需要设计一个复位电路。单片机的复位电路有上电复位和按键复位两种形式,因为本次设计要求需要有启动/复位键,所以本次设计采纳按键复位,如图3。复位电路主要完成系统的上电复位和系统在运转时用户的按键复位功能。键盘接口模块本次设计需要的按键有4个,除去一个复位按键外,还有3个功能按键,所以选择独立式键盘。如图4,将键盘直接与单片机P1口的、、相连。3个键设计思路以下:当按下S1键时,系统进入上下限警戒值调整状态;当第一次按下S1键时,进行上限警戒值设定,图4键盘接口模块当第二次按下S1键时,进行下限警戒值设定,当第三次按下S1键时,回到正常工作状态。在警戒值调整状态下,按下S2键,上下限警戒值加1,按下S3键,上下限警戒值减1,正常工作状态下,按下S2和S3键无作用。温度收集模块本次设计中的温度传感器使用的是DALLAS公司的单总线数字温度传感器DS18B20,这是一种常用的温度传感器,拥有体积小、硬件开支低、抗搅乱能力强、精度高的特色。DS18B20采纳独到的一线接口,拥有只需要一条口线通讯多点的能力,简化了散布式温度传感觉用,无需外面元件。可用数据总线供电,电压范围为V至,丈量温度的范围为-55℃至+125℃,在-10℃至+85℃范围内精度为±℃。3温度传感器可编程的分辨率为9~12位,温度变换为12位数字格式最大值为毫秒,用户可定义的非易失性温度报警设置,应用范围包含恒温控制、工业系统、温度计、或任何热敏感系统。因为DS18B20是一条口线通讯,所以与DS18B20只有一个一条口线连接。因为每一个DS18B20的包含一个独到的序号,多个DS18B20可以同时存在于一条总线,这使得温度传感器放置在好多不同样样的地方。它的用途好多,包含空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。图5DS18B20封装及引脚DS18B20的核心功能是它的直接读数字的温度传感器。温度传感器的精度为用户可编程的9、10、11或12位,分别以℃,℃,℃和℃增量递加。在上电状态下默认的精度为12位。DS18B20启动后保持低功耗等待状态;当需要执行温度丈量和AD变换时,总线控制器必定发出[44h]命令。在那此后,产生的温度数据以两个字节的形式被积蓄到高速暂存器的温度寄存器中,DS18B20连续保持等待状态。当DS18B20由外面电源供电时,总线控制器在温度变换指令之后提议“读时序”,DS18B20正在温度变换中返回0,变换结束返回1。若是DS18B20由寄生电源供电,除非在进入温度变换时总线被一个强上拉拉高,否则将不会由返回值。在硬件上,DS18B20与单片机的连接有两种方法:一种是VDD接外面电源,GND接地,DQ与单片机的I/O口相连;另一种是用寄生电源供电,此时,VDD、GND接地,DQ接单片机的I/O口。无论是接外面电源仍是用内部寄生电源,I/O口线要接5kΩ左右的上拉电阻。本次设计中,采纳外面电源方式,其4连接方式如图6所示。单总线DQ端接单片机的口,DQ端接一个Ω的上拉电阻,这样单总线DQ在闲置状态时为高电平。图6DS18B20外面电源连接方式LCD显示模块在本次设计中,使用RT1602C字符型液晶显示模块(LCM)来设计当前温度和上下限警戒值的显示电路。RT1602C字符型液晶显示模块是16字×2行的采纳5×7点阵图形来显示字符的液晶显示器,采纳标准的16脚接口,其引脚定义如图7所示。引脚号引脚名说明引脚号引脚名说明1GND/Vss电源地7D02Vdd+5V电源8D13VL液晶显示偏压信号9D24RS数据/命令控制,H/L10D38位双向数据线5R/W读/写控制,H/L11D46E使能端12D515BLA背光源正极13D616BLK背光源负极14D7图7RT1602C的引脚定义RT1602C的内部结构可以分为3个部分:LCD控制器、LCD驱动器、LCD显示器,此中LCD控制器采纳的是HD44780。RT1602C与单片机的连线如图8所示。5图8RT1602C与单片机连线LCM的数据总线与单片机的P0口经过一个上拉电阻排相连,LCM的三条控制线RS、RW、EN分别与单片机的I/O口、、相连,第1、2引脚分别与地、电源相连,第3引脚使用一个10kΩ的可调电阻对显示屏的光明进行调整。报警与指示模块在本次设计中,采纳LED发光二极管作为系统指示灯,采纳蜂鸣器作为报警鸣笛。当温度高于上限警戒值时,点亮红色发光二极管,蜂鸣器发出响声;当温度低于下限警戒值时,点亮黄色发光二极管,蜂鸣器发出响声;温度在正常范围内时,图9报警与指示模块点亮黄色发光二极管。整个报警与指示电路如图9所示,此中绿、红、黄色指示灯分别接单片机、、口,电平拉低时点亮LED,蜂鸣器电路接单片机的口,电平拉高时蜂鸣器响。至此便完成了整个硬件电路的设计工作,整个系统的原理图见附录二,系统I/O分配表以下:6I/O口功能说明I/O口功能说明~LCM数据口LCM读/写控制~键盘输入LCM使能DS18B20温度收集~LED信号输出LCM数据/命令控制报警信号输出4.软件设计单片机应用系统的设计中,软件设计据有重要的地址。在本次设计中,依据功能要求,可以把系统程序划分为5个模块,即主程序模块、显示模块、温度测量模块、键盘扫描模块、其余子程序模块,如图10所示。主程序模块温键显度其盘示测它扫模量子描块模程模块序块图10软件设计框图主程序设计主程序的内容包含单片机初始化、相关部件初始化和一些其余子程序的调用等。主程序清单以下,程序流程图如图11所示。/主程序/开始voidmain(void)初始化单片机{P1=0xff;真剖析图15键盘扫描程序流程图初始化温度传感器开始开始开始图13图12显示程序流程图单总线命令序列图14温度丈量程序流程图7初始化显示模块初始化DS18B20定位显示地址初始化在本次的设计中,使用了Proteus仿真软件进行了功能测试,详细仿真步骤及剖析以下。(1)依据原理图,从Proteus元件库中找出对应元件,搭建硬件仿真电路,将程序烧写到单片机中,仿真图见附录三。(2)点击运转按钮开始仿真,初始上下限值为90℃和10℃,当前温度为25℃,当前模式为N正常工作,绿灯亮,蜂鸣器不响,如图16。图16正常模式下仿真图(3)按下S1键,进入上限警戒值设置模式H,此时按S2、S3键可以进行上限值设定,同时温度正常显示,设置上限值80℃,如图17。图17上限值设定仿真图键可以进行下(4)再次按下S1键,进入下限警戒值设置模式L,此时按S2、S38限值设定,同时温度正常显示,设置下限值20℃,如图18。图18下限值设定仿真图(5)再次按下S1键,返回正常模式N,调治DS18B20温度,丈量温度随之改变,降低温度,高出下限值5℃以下时,黄灯亮,蜂鸣器报警,如图19。图19下限报警仿真图(6)高升温度,高出上限值5℃以上时,黄灯亮,蜂鸣器报警,如图20。(7)按下S4键,单片机复位。图20上限报警仿真图在本次仿真中,可以看出,本次设计的硬件电路和软件程序均能成功仿真出来,设计要求的各种功能均已达到。96.总结本次课程设计为期一周,到此已所有结束。回想一周中的设计过程,我深深感觉收获良多。因为从前可是在理论上学习了单片机以及各种其余知识,即即是实验也可是依据实验指导书进行操作,并无实质的独立设计一个系统,所以在刚开始接触本次课程设计时,有一点无从下手的感觉。此后经过查阅相关资料,渐渐开始认识课程设计的一般过程,开始理解一些元器件的相关作用与编程实现方法,并在此时期经过不停深入的学习和锻炼,开始渐渐能熟练运用和熟练编程起来。10经过本次计算机控制技术的课程设计,我更深层次的把理论知识和实质设计结合在一起,锻炼了我的综合运用所学的专业基础知识和解决实质工程问题的能力。同时也提高了我查阅文件资料、设计手册、设计规范以及电脑制图等其余知识能力水平。对各种系统的适用条件,各种设备的采纳标准,各种管道的安装方式,我都是随着设计的不停深入而渐渐熟习并学会应用的。并且,经过对整体的掌控,对局部的弃取,对细节的商酌办理,以及绘图的技巧都使我在设计领域的能力获得了锻炼,获得了较丰富经验。最后,经过此次的课程设计,我也深刻地认识到,只有将书籍与详细的实践相结合,才会有真切的收获,才能牢固自己的所学,认识到自己的不足,同时我们也要有一种踊跃学习的态度,时代在进步我们也要随着时代前进,要不休学习,不停创新,用自己的知识与行动来证明自己的价值。本次课程设计以单片机为核心,介绍了用DS18B20温度传感器进行温度采集,并将其传输给AT89C51单片机进行办理再送到LCD显示屏显示。在此时期可以经过按键进行上下限警戒值设置,经过LED和蜂鸣器进行指示和报警。本文是采纳模块化的方式进行表达,对各模块的设计进行了比较详细地阐述,并着重剖析硬件搭建过程和系统软件的设计过程,使用单片机C语言进行程序没计。本次设计的基于DS18B20的温度丈量系统是一个散布式的温度丈量系统,它可以远程对温度实现丈量和监控,广泛应用于电力工业、煤矿、丛林、火灾、高层建筑等场合。本设计应用性比较强,可以应用在库房温度、大棚温度、机房温度、水池等的监控。自然,本次设计还存在一些不足,比方在本次设计中,因为时间较短,警戒值可是在1~99℃之间,没有可以扩展到负温度和100℃以上;在本次设计中可是用了4个独立按键,实现简单的上下限警戒值设定,操作较麻烦,若是可以设计出多按键的矩阵式键盘,则可以对温度进行很方便的设定。其余若是把本设计方案扩展为多点温度控制,加上上位机,则可以实现远程温度监控系统,将具有更大的应用价值。117.参照文件潘新民,王燕芳.微型计算机控制技术[M].北京:电子工业第一版社,2014王迎旭.单片机原理与应用[M].北京:机械工业第一版社,2013康华光.电子技术基础[M].北京:高等教育第一版社,2013周正华,唐宁RT1602C与FPGA接口技术[J].中国科技信息,2008(10)[5]廖琪梅,韩彬等.基于DS18B20的温度丈量仪[J].外国电子元器件,2008(2)12附录一:程序清单#include<>#include<>#include<>#defineucharunsignedchar#defineuintunsignedint#defineBUSY0x8013voidDelay(uint);voidinit_LCD(void);voidLCD_Command(uchar,uchar);voidLCD_Data(uchar);voidReadyLCD(void);voidDisplay_char(uchar,uchar,uchar);voidDisplay_str(uchar,uchar,ucharcode*Data);voidChange(void);voidDisplay(void);voidinit_18B20(void);ucharRead_18B20(void);voidWrite_18B20(uchar);voidRead_temp(void);voidDelay_us(uchari);voidKey_scan(void);voidKey_set(void);voidKey_inc(void);voidKey_dec(void);voidAlarm(void);sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EN=P2^2;sbitDQ=P1^7;sbitNormal=P2^4;sbitAlarm_H=P2^5;sbitAlarm_L=P2^6;sbitAlarm_BEEP=P2^7;14ucharSet_flag=0;ucharTemp_mea,Temp_set1,Temp_set2;ucharTemp_high_1,Temp_high_2;ucharTemp_low_1,Temp_low_2;ucharTemp_true_1,Temp_true_2;externucharcodestr0[]={"High:CLow:C"};externucharcodestr1[]={"Mode:Deg:C"};externucharcodestr2[]={"Hellow!!"};externucharcodestr3[]={"09"};externucharcodemode[]={"NHL"};/主程序/voidmain(void){P1=0xff;P2|=0x70;P2&=0x7f;Temp_set1=90;//上限报警温度初值90Temp_set2=10;//下限报警温度初值10Delay(500);//延时500ms启动init_LCD( );//LCD初始化init_18B20( );//DS18B20初始化Display_str(0,0,str2);//开机界面Display_str(0,1,str2);//开机界面Delay(2000);Display_str(0,0,str0);Display_str(0,1,str1);15while(1){Key_scan( );//扫描键盘Read_temp( );//读取温度Change( );Display( );//显示Alarm( );//指示灯与报警程序Delay(1000);}}/延时kms/voidDelay(uintk){uinti,j;for(i=0;i<k;i++){for(j=0;j<60;j++){;}}}/显示模块//LCD初始化/voidinit_LCD(void){P0=0;Delay(15);16LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,0);Delay(5);LCD_Command(0x38,1);//8位数据传达,2行显示,5*7字形LCD_Command(0x08,1);//关闭显示LCD_Command(0x01,1);//清屏LCD_Command(0x06,1);//显示光标右移设置LCD_Command(0x0c,1);//显示屏打开,光标不显示不闪耀}/写指令数据到LCD/voidLCD_Command(ucharLC,ucharBC){if(BC)ReadyLCD( );P0=LC;LCD_RS=0;//选中指令寄存器LCD_RW=0;//写模式LCD_EN=1;_nop_( );_nop_( );_nop_( );LCD_EN=0;}/写显示数据到LCD/voidLCD_Data(ucharLD)17{ReadyLCD( );P0=LD;LCD_RS=1;//选中数据寄存器LCD_RW=0;//写模式LCD_EN=1;_nop_( );_nop_( );_nop_( );LCD_EN=0;}/检测LCD忙状态/voidReadyLCD(void){P0=0xff;LCD_EN=1;LCD_RS=0;LCD_RW=1;_nop_( );while(P0&BUSY){LCD_EN=0;_nop_( );_nop_( );LCD_EN=1;_nop_( );_nop_( );}18LCD_EN=0;}/显示一个字符/voidDisplay_char(ucharX,ucharY,ucharData){Y&=0x01;X&=0x0f;if(Y)X|=0x40;X|=0x80;LCD_Command(X,0);LCD_Data(Data);}/显示一串字符/voidDisplay_str(ucharX,ucharY,ucharcode*Data){ucharList=0;Y&=0x01;X&=0x0f;while(X<16){Display_char(X,Y,Data[List]);List++;X++;}}/显示字型变换/19voidChange(void){Temp_high_1=Temp_set1/0;Temp_high_2=Temp_set1%10;Temp_low_1=Temp_set2/10;Temp_low_2=Temp_set2%10;Temp_true_1=Temp_mea/10;Temp_true_2=Temp_mea%10;}/显示子程序/voidDisplay(void){Display_char(5,0,str3[Temp_high_1]);Display_char(6,0,str3[Temp_high_2]);Display_char(13,0,str3[Temp_low_1]);Display_char(14,0,str3[Temp_low_2]);Display_char(5,1,mode[Set_flag]);Display_char(13,1,str3[Temp_true_1]);Display_char(14,1,str3[Temp_true_2]);}/温度丈量模块//DS18B20初始化/voidinit_18B20(void){ucharx=0;DQ=1;//DQ复位Delay_us(4);//延时20DQ=0;//将DQ拉低Delay_us(250);//精确延时大于480usDQ=1;//拉高总线Delay_us(40);x=DQ;Delay_us(20);}/从DS18B20读取一个字节数据/ucharRead_18B20(void){uchari=0;uchardat=0;for(i=8;i>0;i--){DQ=0;_nop_( );dat>>=1;DQ=1;Delay_us(1);if(DQ)dat|=0x80;Delay_us(10);}return(dat);}/向DS18B20写入一个字节数据/voidWrite_18B20(uchardat)21{uchari=0;for(i=8;i>0;i--){DQ=0;_nop_( );DQ=dat&0x01;Delay_us(10);DQ=1;dat>>=1;Delay_us(10);}}/从DS18B20读取温度/voidRead_temp(void){uchara=0;ucharb=0;uchart=0;init_18B20( );Write_18B20(0xcc);Write_18B20(0x44);init_18B20( );Write_18B20(0xcc);Write_18B20(0xbe);a=Read_18B20( );b=Read_18B20( );t=b;22t<<=8;t=t|a;Temp_mea=t*;}/精确延时/voidDelay_us(uchari){while(--i);}/键盘扫描程序/voidKey_scan(void){uchartemp;P1=0xff;if(P1!=0xff){Delay(20);//延时消抖if(P1!=0xff){temp=P1;switch(temp){case0xfe:Key_set( );break;//按下,功能选择case0xfd:Key_inc( );break;//按下,

温馨提示

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

评论

0/150

提交评论