欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    基于单片机的温度控制器附程序代码.doc

    • 资源ID:23125       资源大小:119.06KB        全文页数:22页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的温度控制器附程序代码.doc

    生产实习报告书报告名称基于单片机的温度控制系统设计姓 名学 号院、系、部专 业指导教师年 月 日目录1.引言12.设计要求13.设计思路14.方案论证24.1方案一24.2方案二25.工作原理26.硬件设计26.1单片机模块26.2 数字温度传感器模块46.2.1 DS18B20性能46.2.2 DS18B20外形及引脚说明56.2.3 DS18B20接线原理图56.3按键模块66.4声光报警模块66.5数码管显示模块77.程序设计87.1主程序模块87.2 读温度值模块8读温度值模块流程图:97.2.2 DS18B20写字节和读字节子程序流程图:107.3 中断模块107.4 温度设定、报警模块108.实物效果图129.实习总结14附录15基于单片机的温度控制系统设计1.引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否认的,各种数字系统的应用也使人们的生活更加舒适。数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。其中数字温控器就是一个典型的例子。数字温控器具有读数方便、测温围广、测温准确、功能多样话等优点。其主要用于对测温要求准确度比拟高的场所,或科研实验室使用,该设计使用STC12C5A60S2单片机作控制器,数字温度传感器DS18B20测量温度,单片机承受传感器输出,经处理用LED数码管实现温度值显示,并能任意设定报警温度的温度围,实现声光报警。在我们的实习过程中,我们首先要根据原理图焊接一个STC12C5A60S2单片机的开发板,经测试准确无误后,编写程序实现上面所说的数字温度控制器。2.设计要求1. 控制温箱温度2. 加热:电炉丝,这里改成发光二极管3. 冷却:自然or风冷4. 温度目标区间:-50-1005. 运行环境:常温6. 供电:+5v7. 控制精度:±2 8. 温度可设定,如果下限超过上限,显示错误。9. 温度可显示10. 超温报警3.设计思路设计一个单片机测控系统,一般可分为四个步骤:1需求分析,方案论证和总体设计需求分析:被测控参数的形式电量、非电量、模拟量、数字量等、被测控参数的围、性能指标、系统功能、工作环境、显示、报警、打印要求等。方案论证:根据要求,设计出符合现场条件的软硬件方案,又要使系统简单、经济、可靠,这是进展方案论证与总体设计一贯坚持的原则。2器件选择,电路设计制作,数据处理算法,软件的编制阶段。3系统调试与性能测定。4文件编制。文件包括:任务描述、设计的指导思想及设计方案论证、性能测定及现场试用报告与说明、使用指南、软件资料流程图、子程序使用说明、地址分配、程序清单、硬件资料电原理图、元件布置图及接线图、接插件引脚图、线路板图、考前须知。文件不仅是设计工作的结果,而且是以后使用、维修以及进一步再设计的依据。因此,一定要精心编写,描述清楚,使数据及资料齐全。 4.方案论证4.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进展A/D转换后就可以用单片机进展数据处理,实现温度显示。这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比拟困难。4.2方案二考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统构造简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。另外DS18B20具有3引脚的小体积封装,测温围为-55+125摄氏度,测温分辨率可达0.0625摄氏度,其测量围与精度都能符合设计要求。以上两种方案相比拟,第二种方案的电路、软件设计更简单,此方案设计的系统在功耗、测量精度、围等方面都能很好地到达要求,故本设计采用方案二。5.工作原理温度传感器 DS18B20 从设备环境的不同位置采集温度,单片机 AT89S51 获取采集的温度值,经处理后得到当前环境中一个比拟稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进展调整。当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备 (压缩制冷器) ,并通过三极管驱动扬声器发出警笛声。当采集的温度经处理后低于设定温度的下时 , 单片机通过三极管驱动继电器开启升温设备 (加热器) ,并通过三极管驱动扬声器发出警笛声。 6.硬件设计6.1单片机模块STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。部集成MA*810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。1.增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;2.工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V5V单片机STC12LE5A60S2系列工作电压:3.6V-2.2V3V单片机;3.工作频率围:0 - 35MHz,相当于普通8051的 0420MHz;4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节;5.片上集成1280字节RAM;6.通用I/O口36/40/44个,复位后为:准双向口/弱上拉普通8051传统I/O口,可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可到达20mA,但整个芯片最大不要超过55Ma;7. ISP在系统可编程/IAP在应用可编程,无需专用编程器,无需专用仿真器 可通过串口P3.0/P3.1直接下载用户程序,数秒即可完成一片;8.有EEPROM功能(STC12C5A62S2/AD/PWM无部EEPROM);9. 看门狗;10.部集成MA*810专用复位电路外部晶体12M以下时,复位脚可直接1K电阻到地;11.外部掉电检测电路:在P4.6口有一个低压门槛比拟器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%;12.时钟源:外部高精度晶体/时钟,部R/C振荡器(温漂为+/-5%到+/-10%以) 1用户在下载用户程序时,可选择是使用部R/C振荡器还是外部晶体/时钟,常温下部R/C振荡器频率为:5.0V单片机为:11MHz15.5MHz,3.3V单片机为:8MHz12MHz,精度要求不高时,可选择使用部时钟,但因为有制造误差和温漂,以实际测试为准;13.共4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器 做串行通讯的波特率发生器 再加上2路PCA模块可再实现2个16位定时器;14. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟;15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块, Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, R*D/P3.0,CCP0/P1.3(也可通过存放器设置到P4.2 ), CCP1/P1.4 (也可通过存放器设置到P4.3);16. PWM(2路/PCA可编程计数器阵列,2路:也可用来当2路D/A使用也可用来再实现2个定时器也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);17.A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口;19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,R*D2/P1.2(可通过存放器设置到P4.2),T*D2/P1.3(可通过存放器设置到P4.3);20.工作温度围:-40 - +85(工业级) / 0 - 75(商业级)21.封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接 74HC164/165/595均可级联来扩展I/O口, 还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。图6-1 STC12C5A60S2管脚图6.2 数字温度传感器模块6.2.1 DS18B20性能l 独特的单线接口仅需一个端口引脚进展通信l 简单的多点分布应用l 无需外部器件l 可通过数据线供电l 零待机功耗l 测温围-55+125,以0.5递增l 可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625l 温度数字量转换时间200ms,12位分辨率时最多在750ms把温度转换为数字l 应用包括温度控制、工业系统、消费品、温度计和任何热感测系统l 负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作6.2.2 DS18B20外形及引脚说明图6.2.2 DS18B20外形及引脚l GND:地l DQ:单线运用的数据输入/输出引脚l VD:可选的电源引脚6.2.3 DS18B20接线原理图单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。图6.2.3 DS18B20接线原理图6.3按键模块单片机应用系统中按键或键盘都是以开关状态来设置控制功能或输入数据。 键开关状态的可靠输入 :为了去抖动采用软件方法,它是在检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍保持闭合状态电平,如保持闭合状态电平则确认为真正键按下状态,从而消除了抖动影响键盘共有3个按键,用于方便设定温度。图6.3 DS18B20接线原理图INT1 , 转换,用于转换设置最高或最低温度限度值;INT2增加,用于增加最高或最低温度限度值;TI 减少,用于减少最高或最低温度限度值6.4声光报警模块当采集的温度经处理后超过规定温度围时,蜂鸣器报警。当超过温度下限时,二极管报警。具体电路连接如下图。图6.4左图低温,二极管报警。右图超出围,蜂鸣器报警。6.5数码管显示模块本局部电路主要使用七段数码管,单片机通过P0口将要显示的数据信号传送到数码管显示,另外通过P1口的*几位,通过741LS38译码器,将要显示的位送到片选信号。具体见实际连线图如图6-5。图6-5数码管连接图7.程序设计7.1主程序模块主程序调用了4个子程序,分别是数码管显示程序、键盘扫描及按键处理程、温度值获取程序、延时程序。程序开场的时候先设置定时器0初始化,然后进展键盘扫描接着就判断按键是否被按下,按下就进展按键处理。然后获取温度值并经行处理判断是否为负温度,以及进展分位,得到温度的十位、个位和十分位。并判断但前温度与所设置上下限温度关系,大于上限温度或小于下限温度则报警,否则继续向下执行,并开场循环。其中显示程序在中断中进展。7.2 读温度值模块对温度传感器送过来的数据进展读取,读温度值模块需要调用4个子程序,分别为:a) DS18B20初始化子程序:让单片机知道DS18B20在总线上且已准备好操作b) DS18B20写字节子程序:对DS18B20发出命令c) DS18B20读字节子程序:读取DS18B20存储器的数据d) 延时子程序:对DS18B20操作时的时序控制7.2.1读温度值模块流程图:7.2.2 DS18B20写字节和读字节子程序流程图:7.3 中断模块中断采用T0方式1,初始值定时为2ms。中断入口定时器重置初值计数值加1数码管显示程序中断返回7.4 温度设定、报警模块进入模块界面后,按选择上下限键,选择改变上限还是下限,按加减键分别上调和下调设定报警温度值,当实时温度值超过设定值时驱动蜂鸣器发声,8.实物效果图温度处于设定围,不做任何反响。设定温度下限度值为28.5,当前温度为28.1,蜂鸣器报警,二极管报警。温度最高上限值为32,当前温度为33.6,蜂鸣器报警,二极管不报警。当设定温度下限超过上限时,显示ERRO,并声光报警。9.实习总结温度控制系统广泛应用于社会生活的各个领域 ,如家电、汽车、材料、电力电子等 ,常用的控制电路根据应用场合和所要求的性能指标有所不同 , 在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。本次实习是基于STC12C5A60S2单片机,采用数字温度传感器DS18B20,直接进展温度采集显示,报警的数字温度计设计。包括传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。利用STC12C5A60S2单片机和数字温度传感器DS18B20设计的温度控制系统能够实现的温度围是-55-100,其精度是0.1,可以在数码管上显示实时温度,并且可以实现温度上限和下限的设置,超出上下限后单片机系统发出报警。在实习的过程中,主要分三个局部进展,分别是硬件电路板的焊接、软件的编写、实习报告的总结。在这三个局部中,王康康主要负责硬件电路的焊接,王会要负责程序的编写,我王乐乐主要负责实习报告的总结。在这次实习中我们发现了很多问题,如,对元器件不熟悉,焊接元件不结实,程序编写无从下手,不熟练,程序编写层次不太清晰,合作存在问题等。但是这些问题在我们的共同努力下,摸索下最终解决。通过这次生产实习我们加深了对元器件的认识,提高了程序编写能力,学会了通过自己去查找资料,更学会了合作。在这样的磕磕碰碰中我们完成了本次生产实习任务,虽然仍存在着这样那样的问题,但是我们的收获无疑是巨大的。这次生产实习将对我们今后的学习工作产生巨大的影响。附录1.主程序/*- 名称:DS18b20数码管显示 论坛: 编写:shifang 日期:2021.5 修改:无 容:显示格式 符号 *.* C 可以显示负温度-*/*include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能存放器的定义*include "18b20.h"*include <intrins.h>sbit gaowenjingdeng=P27;/高于温度设定上限,做出反响sbit zuidizuigaojian=P32;/选择上限还是下限sbit zengjia=P33;/温度增加按键sbit jianshao=P34;/ 温度减少按键sbit baojing=P36;/ 报警标志sbit LAIDI=P35;/拉低电平,为了使数码管显示unsigned int temp0=1;/作为一个设定上限还是下限的标志位。unsigned int temp1=2;unsigned int temp2=8;unsigned int temp3=0;/设定温度下限初值28.0摄氏度unsigned int temp4=3;unsigned int temp5=2;unsigned int temp6=0;/设定温度上限初值38.0摄氏度unsigned int temp7=0;unsigned int temp8=0;unsigned int temp9=0;/设定三个中间变量,来比拟环境温度和设定温度之间的关系e*tern DelayMsUs2*(unsigned char t);e*tern DelayMs(unsigned char t);/引用外部延时函数。*define DataPort P0 /定义段数据端口 程序中遇到DataPort 则用P0 替换*define SegPort P1 /定义位数据端口,用以点亮数码相应数码管。unsigned char code dofly_DuanMa=0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f,0*40,0*ff;/ 显示段码值01234567unsigned char code dofly_WeiMa=0*ff,0*ef,0*df,0*cf,0*f0,0*e0,0*d0,0*c0;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量void Keys_Scan();/键盘扫描函数声明void Display(void);/数码管显示函数声明void Init_Timer0(void);/定时器初始化函数声明/*- 主函数-*/void main (void) unsigned int TempL,TempH; inttemp ;Init_Timer0(); /定时器初始化while (1) /主循环 LAIDI=0;/拉低74LS138电平 Keys_Scan();/键盘扫描函数if(temp0%2=1)TempData0=0*38; TempData1=dofly_DuanMatemp1; TempData2=dofly_DuanMatemp2|0*80; TempData3=dofly_DuanMatemp3;/把设定的初值转化为相应的段码 else if (temp0%2=0) TempData0=0*76;/判断按键设定上限还是下限 TempData1=dofly_DuanMatemp4; TempData2=dofly_DuanMatemp5|0*80; TempData3=dofly_DuanMatemp6;/把设定的初值转化为相应的段码 if( (temp1*100+temp2*10+temp3)>=(temp4*100+temp5*10+temp6) TempData0=0*79; TempData1=0*70; TempData2=0*70; TempData3=0*3f;/如果在调节过程中,温度下限超过上限,显示ERRO temp=ReadTemperature();/转换温度 if(temp&0*8000) TempData4=0*40;/负号标志 temp=temp; / 取反加1 temp +=1; else TempData4=0; TempH=temp>>4; TempL=temp&0*0F; TempL=TempL*625/1000;/小数近似处理 TempData5=dofly_DuanMa(TempH%100)/10; /十位温度 TempData6=dofly_DuanMa(TempH%100)%10|0*80; /个位温度,带小数点 TempData7=dofly_DuanMaTempL; temp7=temp1*100+temp2*10+temp3; temp8=TempH*10+TempL; temp9=temp4*100+temp5*10+temp6; if(temp9>=temp8)&&(temp8>=temp7)baojing=1; gaowenjingdeng=0; else if(temp8<=temp9) baojing=0; gaowenjingdeng=1; else baojing=0; gaowenjingdeng=0; /*- 显示函数,用于动态扫描数码管 -*/void Display(void) static unsigned char i=0; DataPort=0; /清空数据,防止有交替重影 DataPort=TempDatai; /取显示数据,SegPort=dofly_WeiMai; /取位码 段码 i+; if(i>=8) i=0;/*- 定时器初始化子程序-*/void Init_Timer0(void) TMOD |= 0*01; /使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; EA=1; /总中断翻开 ET0=1; /定时器中断翻开 TR0=1; /定时器开关翻开/*- 定时器中断子程序-*/void Timer0_isr(void) interrupt 1 TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display(); / 调用显示函数 void Keys_Scan()if(zuidizuigaojian=0)/检测是否有按键按下 DelayMs(10); /软件去抖动if(zuidizuigaojian=0)/再次检测按键是否按下dengdai1:if(zuidizuigaojian=0)goto dengdai1;/等待释放按键elsetemp0=temp0+1;goto fanhui; /如果是此键按下,就不可能是下面按键按下if(zengjia=0) DelayMs(10);if(zengjia=0)dengdai2:if(zengjia=0)goto dengdai2;elseif(temp0%2=1)/对下限增加 if(temp3<9)temp3=temp3+1;goto fanhui; elsetemp3=0; if(temp2<9)temp2=temp2+1;goto fanhui; else temp2=0; if (temp1<9) temp1=temp1+1; goto fanhui; else /对上限增加 if(temp6<9)temp6=temp6+1;goto fanhui; elsetemp6=0; if(temp5<9)temp5=temp5+1;goto fanhui; else temp5=0; if (temp4<9) temp4=temp4+1; goto fanhui; if(jianshao=0) DelayMs(10);if(jianshao=0)dengdai3:if(jianshao=0)goto dengdai3;else if(temp0%2=1)/对下限减少 if(temp3>0)temp3=temp3-1;goto fanhui; elsetemp3=9; if(temp2>0)temp2=temp2-1;goto fanhui; else temp2=9; if (temp1>0) temp1=temp1-1; goto fanhui; else if(temp6>0)temp6=temp6-1;goto fanhui; elsetemp6=9; if(temp5>0)temp5=temp5-1;goto fanhui; else temp5=9; if (temp4>0) temp4=temp4-1; goto fanhui; fanhui:;2.读温度值程序/*- 名称:18B20温度传感器 : 编写:shifang 日期:2021.5 修改:无 容:18B20单线温度检测的应用样例程序-*/*include"delay.h"*include"18b20.h"*define NOP() _nop_() /* 定义空指令 */*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0; DQ = 1; /DQ复位_nop_();_nop_(); /稍做延时 DQ = 0; /单片机将DQ拉低TempDelay(800); /准确延时 大于 480us 小于960usDQ = 1; /拉高总线TempDelay(50); /1560us 后 接收60-240us的存在脉冲 dat=DQ; /如果*=0则初始化成功, *=1则初始化失败 TempDelay(230); while(!dat)dat=DQ; return dat;/*- 读取一个字节-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; / 给脉冲信号 dat>>=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0*80; /DelayUs2*(25);TempDelay (24); return(dat);/*- 写入一个字节-*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0;_nop_();_nop_(); DQ = dat&0*01; TempDelay(36); /delay 45 uS /5 DQ = 1; dat>>=1; DelayUs2*(50);/*- 读取温度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0*CC); / 跳过读序号列号的操作WriteOneChar(0*44); / 启动温度转换DelayMs(10);Init_DS18B20();WriteOneChar(0*CC); /跳过读序号列号的操作 WriteOneChar(0*BE); /读取温度存放器等共可读9个存放器 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b<<=8;t=a+b;return(t);3.延时程序*include "delay.h"/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的围是 0255 这里使用晶振12M,准确延时请使用汇编,大致延时 长度如下 T=t*2+5 uS -*/void DelayUs2*(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的围是 0255 这里使用晶振12M,准确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2*(245); DelayUs2*(245); void TempDelay (unsigned int idata us)while(us-);注意:在DS18B20的头文件中, 端口定义-*/sbit DQ=P37;/ds18b20 端口

    注意事项

    本文(基于单片机的温度控制器附程序代码.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开