《基于51单片机的温度控制系统的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的温度控制系统的设计.docx(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于单片机得温度控制系统设计1、设计要求要求设计一个温度测量系统,在超过限制值得时候能进行声光报警。具体设计要求如下:数码管或液晶显示屏显示室内当前得温度;在不超过最高温度得情况下,能够通过按键设置想要得温度并显示 ;设有四个按键,分别就是设置键、加键、减键与启动复位键;DS8B0 温度采集;超过设置值得5时发出超限报警,采用声光报警,上限报警用红灯指示,下限报警用黄灯指示,正常用绿灯指示。2、方案论证根据设计要求,本次设计就是基于单片机得课程设计,由于实现功能比较简单,我们学习中接触到得 1 系列单片机完全可以实现上述功能,因此可以选用AT8C1 单片机。温度采集直接可以用设计要求中所要求得
2、 DS18B。报警与指示模块中,可以选用3 种不同颜色得 LE灯作为指示灯,报警鸣笛采用蜂鸣器。显示模块有两种方案可供选择.方案一:使用 LED 数码管显示采集温度与设定温度;方案二:使用 LC液晶显示屏来显示采集温度与设定温度。LED 数码管结构简单,使用方便,但在使用时,若用动态显示则需要不断更改位选与段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态显示则又需要更多硬件支持。LC显示屏可识别性较好,背光亮度可调,而且比 LED 数码管显示更多字符,但就是编程要求比 LED 数码管要高综合考虑之后,我选用了D 显示屏作为温度显示器件,由于显示字符多,在进行上下限警戒值设定时同样可
3、以采集并显示当前温度,可以直观得瞧到实际温度与警戒温度得对比。LD 显示模块可以选用 RT1602C。3、硬件设计根据设计要求,硬件系统主要包含 6 个部分,即单片机时钟电路、复位电路、键盘接口模块、温度采集模块、LCD 显示模块、报警与指示模块。其相互联系如下图 1 所示:单片机时钟电路3、1 单片机时复钟位电电路路图 1硬件电路设计框图单 片 机LCD 显示模块形成单片机时钟信号得方式有内部键盘接口模块时钟方式与外部时钟方式。本次设计采用内部时钟方式,如图 2 所示温度采集模块单片机内部有一个用于构成振荡器得高增益反相放大器,引脚XT与X A2 分别为此放大器得输入端与输出端,其频率范围为
4、 1、21H,经由片外晶体振荡器或陶瓷振荡器与两个匹报警与指示模块图 2单片机内部时钟方式电路配电容一起形成了一个自激振荡电路,为单片机提供时钟源.3、2 复位电路复位就是单片机得初始化操作 ,其作用就是使 CPU 与系统中得其她部件都处于一个确定得初始状态 ,并从这个状态开始工作,以防止电源系统不稳定造成 U 工作不正常。在系统中,有时会出现工作不正常得情况,为了从异常状态中恢复 ,图 3单片机按键复位电路同时也为了系统调试方便,需要设计一个复位电路单片机得复位电路有上电复位与按键复位两种形式,因为本次设计要求需要有启动/复位键,因此本次设计采用按键复位,如图 3。复位电路主要完成系统得上电
5、复位与系统在运行时用户得按键复位功能。本次设计需要得按键有个 ,除去一个复位按键外,还有个功能按键 , 因此选择独立式键盘。如图4,将键盘直接与单片机口得 1、0、P1、1、3、3 键盘接口模块图 4键盘接口模块P1、相连。3 个键设计思路如下:当按下键时,系统进入上下限警戒值调整状态;当第一次按下 S键时,进行上限警戒值设定,当第二次按下1 键时,进行下限警戒值设定,当第三次按下 S1 键时,回到正常工作状态。在警戒值调整状态下,按下 S2 键,上下限警戒值加,按下 S3 键,上下限警戒值减 1,正常工作状态下,按下 S2 与 S3 键无作用。3、4 温度采集模块本次设计中得温度传感器使用得
6、就是DALAS 公司得单总线数字温度传感器 D1820,这就是一种常用得温度传感器,具有体积小、硬件开销低、抗干扰能力强、精度高得特点。S18B2采用独特得一线接口,具有只需要一条口线通信多点得能力,简化了分布式温度传感应用,无需外部元件。可用数据总线供电,电压范围为 3、0 至 5、V,测量温度得范围为5至+125 ,在10至+8范围内精度为、5。温度传感器可编程得分辨率为位,温度转换为位数字格式最大值为0 毫秒,用户可定义得非易失性温度报警设置,应用范围包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统.由于 DS18B20 就是一条口线通信,所以中央微处理器与DS18B20 只
7、有一个一条口线连接。因为每一个DS18B0 得包含一个独特得序号,多个D180 可以同时存在于一条总线, 这使得温度传感器放置在许多不同得地方.它得用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测与控制图 5DS80 封装及引脚DS8B20 得核心功能就是它得直接读数字得温度传感器 .温度传感器得精度为用户可编程得 9、0、1或 12 位,分别以 0、5,0、2,、125与0、625增量递增。在上电状态下默认得精度为 12 位。DS18B0 启动后保持低功耗等待状态;当需要执行温度测量与D 转换时,总线控制器必须发出44 命令。在那之后,产生得温度数据以两个字节得形式被存储
8、到高速暂存器得温度寄存器中,8B20 继续保持等待状态当S18B20 由外部电源供电时, 总线控制器在温度转换指令之后发起“读时序”,DS18B0 正在温度转换中返回 0,转换结束返回 1。如果 DS18B20 由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,否则将不会由返回值VD、GND 接地,DQ 接单片机得 I/O口无论就是接外部电源还就是用内部寄生电源,I/O 口线要接 5k 左右得上拉电阻。本次设计中,采用外部电源方式,其连接方式如图 6 所示。单总线DQ 端接单片机得1、7 口,DQ 端接一个 4、7 得上拉电阻,这样单总线D在闲置状态时在硬件上,S8B20 与单片机得连
9、接有两种方法:一种就是DD 接外部电源,ND 接地,D与单片机得 I/口相连;另一种就是用寄生电源供电,此时,为高电平。接方式3、 LD 显示模块图 6DS18B0 外部电源连在本次设计中,使用 RT162C 字符型液晶显示模块(LCM)来设计当前温度与上下限警戒值得显示电路。RT6C 字符型液晶显示模块就是 16 字2 行得采用 5点阵图形来显示字符得液晶显示器,采用标准得脚接口,其引脚定义如图 7 所示。引脚号引脚名说明引脚号引脚名说明1GN/电源地702sVd5电源8D8 位双向数据线VL液晶显示偏压信号9D4S数据/命令控制,H/L10D35/W读写控制,H/L11D6E使能端12D5
10、5BLA背光源正极1D66K背光源负极14D7图 7T102得引脚定义RT102C 得内部结构可以分为 3 个部分:LCD 控制器、LCD 驱动器、LCD 显示器,其中 LD 控制器采用得就是D4470。R1602C 与单片机得连线如图 8 所示图 RT102C 与单片机连线相连,第 3 引脚使用一个 k 得可调电阻对显示屏得明亮进行调整。3、报警与指示模块在本次设计中, 采用M 得数据总线与单片机得 P0 口通过一个上拉电阻排相连,LC得三条控制线S、W、EN 分别与单片机得 I/口 P、0、P、1、P2、2 相连, 第 1、2 引脚分别与地、电源图 9报警与指示模块LED 发光二极管作为系
11、统指示灯,采用蜂鸣器作为报警鸣笛。当温度高于上限警戒值时,点亮红色发光二极管,蜂鸣器发出响声;当温度低于下限警戒值时,点亮黄色发光二极管,蜂鸣器发出响声;温度在正常范围内时,点亮黄色发光二极管。整个报警与指示电路如图 9 所示,其中绿、红、黄色指示灯分别接单片机 P2、0、P、1、P2、2 口,电平拉低时点亮D,蜂鸣器电路接单片机得 P2、7 口,电平拉高时蜂鸣器响。至此便完成了整个硬件电路得设计工作,整个系统得原理图见附录二,系统 IO 分配表如下:I/O 口功能说明I口功能说明、0P、7CM 数据口P、1LM 读/写控制P1、0P1、3键盘输入P、2LCM 使能P1、7DS80 温度采集、
12、P2、LE信号输出P、0LCM 数据/命令控制P2、7报警信号输出、软件设计主程序模块其它子程序单片机应用系统得设计中,软件设计占有重要得位置。在本次设计中,根据功能要求,可以把系统程序划分为个模块,即主程序模块、显示模块、温度测量模块、键盘扫描模块、其它子程序模块,如图 10 所示。温键显度盘示测扫模量描块模模块块4、1 主程序设计图 10软件设计框图主程序得内容包括单片机初始化、相关部件初始化与一些其它子程序得调用开始初始化单片机等。主程序清单如下,程序流程图如图 1所示。*主程序*/ vod min(void) P1=0xf;/初始化 P1 口以便读入P2|0x0; 2&=0x7;Tem
13、_set=90;/上限报警温度初值 90Tmp_s=10;/下限报警温度初值 1 Deay(500);/延时00m启动 ntLCD();/LC初始化init18B20();/8B20 初始化Dislay_str(0,0,str2);/开机界面 Dilay_str(0,,tr2);/开机界面 ela(200);Displysr(0,0,str0); Dslystr(0,1,tr); while(1) Key_scan();/扫描键盘 Readtemp();/读取温度 Can(); Dsplay();/显示 Alarm();/指示灯与报警程序图 11主程序流程图elay(1000); 4、2 显示
14、模块显示程序主要完成得功能就是模式、上下限警戒值与测量温度值得显示 ,模块中包含CD 初始化、显示单个字符子函数、显示一个字符串子函数。程序流程图如图2 所示,CD 初始化程序如下,其它子函数程序详见附录一。*LCD 初始化*/void iit_D(oid)0=; elay(15);L_mand(0x8,0); (5); LCD_man(0x38,0); el(); LCD_mand(0x38,0); Delay(5);开始图 12显示程序流程图定位显示位置写显示命令 写显示字符 结束显示 C_mad(0x,1);/位数据传送,2 行显示,5*字形 LCD_mand(0x08,);/关闭显示
15、LCD_mnd(001,);/清屏LC_mad(0x06,);/显示光标右移设置LCD_mad(0x0c,1);/显示屏打开,光标不显示不闪烁、3 温度测量模块温度测量程序主要功能就是读出数字温度传感器得温度值要正确地读出温度值必须严格遵守单总线器件得命令序列,否则单总线器件不会响应主机单总线器件得命令序列如图所示。温度测量模块程序流程图如图 14 所示,DS18B20 初始化程序如下,其它子程序详见附录一/*DS18B0 初始化*/ voi iit_18B0(void) uchar =0; DQ=;/Q 复位Delyus();/延时DQ=0;/将 D拉低开始初始化 DS18B20Delaus
16、(250);/精确延时大于 48usD=1;/拉高总线Delay_(40); x=Q; elay_u(2);读 DS18B20 序列号DS18B20N存在?开始Y发跳过 ROM 指令块单总线命令序列4、4 键盘扫图描1模3初始化图 14温度测量程序流程图本次设计中使用了 4 个按键,除了个复位键还温有度3转个换功能键,具体功能前发 ROM 指令面已介绍。键盘扫描程序如下,其它子程序详见附录一,相关流程图如图 1所示。读取温度*发*功能键指盘令扫描*void Kysa(oid)结束返回uharemp; P1=0ff; if(P1!=0xff)开始初始化 DS18B20有键按下?NY延时去抖动有键
17、按下?NY读取键值Dela(2);/延时消抖f(1!=0xff)tmP1;sch(tem)ae xfe:Key_se();beak;/1、0 按下,功能选择case xfd:Key_ic();break;/P1、1 按下,数字加一se xfb:Kec();reak;/P、按下,数字减一delt:ra;图 15键盘扫描程序流程图4、5 其它子程序程序中使用得其它子程序,包括延时子程序、显示字符转换子程序等,具体详见附录一。5、仿真分析在本次得设计中,使用了roteus 仿真软件进行了功能测试,具体仿真步骤及分析如下。(1)按照原理图,从otes 元件库中找出对应元件,搭建硬件仿真电路,将程序烧写
18、到单片机中,仿真图见附录三。(2)点击运行按钮开始仿真,初始上下限值为 90与 1,当前温度为 2, 当前模式为正常工作,绿灯亮,蜂鸣器不响,如图 16.图 16正常模式下仿真图()按下1 键,进入上限警戒值设置模式 H,此时按2、S键可以进行上限值设定,同时温度正常显示,设置上限值 80,如图 17.进入下限警戒值设置模式 L,此时按图 17上限值设定仿真图(4)再次按下键,S2、3 键可以进行下限值设定,同时温度正常显示,设置下限值 20,如图 18。图 18下限值设定仿真图(5)再次按下 S1 键,返回正常模式 N,调节S180 温度,测量温度随之改变,降低温度,超过下限值 5以下时,黄
19、灯亮,蜂鸣器报警,如图 19。图 19下限报警仿真图图 20上限报警仿真图()升高温度,超过上限值 5以上时,黄灯亮,蜂鸣器报警,如图 2。(7)按下 S键,单片机复位。在本次仿真中,可以瞧出,本次设计得硬件电路与软件程序均能成功仿真出来,设计要求得各种功能均已达到。、总结本次课程设计为期一周,到此已全部结束。回想一周中得设计过程,我深深感觉收获良多。由于从前只就是在理论上学习了单片机以及各种其它知识 ,即使就是实验也只就是按照实验指导书进行操作,并没有实际得独立设计一个系统,因此在刚开始接触本次课程设计时,有一点无从下手得感觉.后来通过查阅相关资料, 渐渐开始了解课程设计得一般过程,开始明白
20、一些元器件得相关作用与编程实现方法,并在此期间通过不断深入得学习与锻炼,开始渐渐能熟练运用与熟练编程起来通过本次计算机控制技术得课程设计,我更深层次得把理论知识与实际设计结合在一起,锻炼了我得综合运用所学得专业基础知识与解决实际工程问题得能力。同时也提升了我查阅文献资料、设计手册、设计规范以及电脑制图等其她知识能力水平。对各种系统得适用条件,各种设备得选用标准,各种管道得安装方式, 我都就是随着设计得不断深入而逐渐熟悉并学会应用得。并且 ,通过对整体得掌控,对局部得取舍,对细节得斟酌处理,以及绘图得技巧都使我在设计领域得能力得到了锻炼,得到了较丰富经验. 最后,通过这次得课程设计,我也深刻地认
21、识到, 只有将书本与具体得实践相结合 ,才会有真正得收获,才能巩固自己得所学,认识到自己得不足,同时我们也要有一种积极学习得态度 ,时代在进步我们也要跟着时代前进,要不断学习,不断创新,用自己得知识与行动来证明自己得价值。本次课程设计以单片机为核心,介绍了用 DS18B2温度传感器进行温度采集,并将其传输给 A9C1 单片机进行处理再送到 LD 显示屏显示在此期间可以通过按键进行上下限警戒值设置,通过LED 与蜂鸣器进行指示与报警.本文就是采用模块化得方式进行叙述,对各模块得设计进行了比较详细地阐述,并着重分析硬件搭建过程与系统软件得设计过程,使用单片机语言进行程序没计 . 本次设计得基于 D
22、1820 得温度测量系统就是一个分布式得温度测量系统,它可以远程对温度实现测量与监控,广泛应用于电力工业、煤矿、森林、火灾、高层建筑等场合。本设计应用性比较强,可以应用在仓库温度、大棚温度、机房温度、水池等得监控.当然,本次设计还存在一些不足,例如在本次设计中,由于时间较短,警戒值只就是在 19之间,没有能够扩展到负温度与 100以上;在本次设计中只就是用了个独立按键,实现简单得上下限警戒值设定,操作较麻烦,如果能够设计出多按键得矩阵式键盘,则能够对温度进行很方便得设定。此外如果把本设计方案扩展为多点温度控制,加上上位机,则可以实现远程温度监控系统,将具有更大得应用价值。7、参考文献 潘新民,
23、王燕芳、 微型计算机控制技术 、 北京:电子工业出版社,2014 王迎旭、单片机原理与应用 M、 北京:机械工业出版社,013 康华光、 电子技术基础 、 北京:高等教育出版社,20134 周正华,唐宁 RT160C 与 FPGA 接口技术 J、 中国科技信息,2()5 廖琪梅,韩彬等、基于 D1B得温度测量仪 J、 国外电子元器件,2008(2)附录一:程序清单#icluderg51、h#incluntis、hcldeabsac、#denecarunsigned chrefne untunsigndin #deie US0oi Dely(uint);od initCD(voi);od LDm
24、and(uchr,uchar); voi LCD_ata(uca);vid ReCD(vod);void Dipy_char(uhar,uhr,uhar);od Display_st(ha,ur,ucharde *Data); voiChane(void);oid splay(vi);void it_18B20(vi); ucharRead_8B2(vd);voidWrte182(ca); voi Rea_temp(oi);oiDeay_us(uchar); voidKey_scan(id);voi _se(vid); od Key_nc(vo); void ey_dec(void); vd
25、Aar(void); bitLD_SP2; sbit LCD_RWP1; bt CD_EN=P22; sbit DQP1;bitNmal=P24; bit Alrm_H=P25;sbit rm_=P6; sb arm_EEPP7; uharet_fa;ucar Temp_ma,Temp_st1,Temp_se2; uchrephigh_1,Temp_hgh_2; chaTem_lw1,Tmp_lo2; uh ep_rue_,emp_tue_;exern ucar code str=Hgh:CLow:C;externuchar code str1o:Deg:;exter hacdestr2=”H
26、ellow!!”;xternuharcoe str3023456789”; etern char codem=L”;/*主程序*/ void main(vo) P1=0xff; 2=0x7;P2&07f;emset1=9;/上限报警温度初值 90Tep_et2=10;/下限报警温度初值 10Dla(500);/延时 50m启动init_D();/LD 初始化 ini18B2();/DS18B20 初始化 isplay_str(0,0,str);/开机界面 Dspla_str(0,,sr2);/开机界面 elay(00); Disa_r(0,str0); Dspla_st(0,1,tr1); w
27、hle(1)Key_scan();/扫描键盘edtem();/读取温度 Change();Dispy();/显示larm();/指示灯与报警程序 e(1000);/*延时 km*/void Dely(unt )uint i,j; for(=0;ik;i+)r(j=;j=1; DQ=1; l_us(1);(DQ) da|=08; Deay_us(10); etur(dat);*向S18B0 写入一个字节数据*/ voidWrite_18B20(har d)uchar i; fo(i=8;0;i-) Q=0;_no_(); DQ=at&x01; elay_us(0); Q=1;dat=1;Dela
28、y_s(1);/*从S18B读取温度*/o Rea_ep(od)chr =0; uhar b0; uart=0; init_8B2(); Write_180(0x); riteB20(044); nit1820(); Write82(xcc); rt_18B20(0xbe); a=Read_182(); b=Read_8B2(); tb; t=a;Tempmea=t*(、65);/*精确延时*/ void elay_us(uch i)whle(-i);*键盘扫描程序*/ void Key_scan(void)ucar temp; 10x; f(P1!0xf) Dely(0);/延时消抖 i(P
29、1!=0) ep=P; sitch(tmp) case 0f:Ky_s();reak;/P1、0 按下,功能选择 e0xfd:ey_i();break; /P1、1 按下,数字加一case0xf:e_de();eak; /P1、2 按下,数字减一 dful:reak; *工作模式子程序*/ voi Kyt(oi)Set_lag+; i(et_fa=3)Seflag1,设定上限值Set_lag0;/Set_fg2,设定下限值*按键加一子程序*/ voiKeyinc(vod)switch(Selag) cae 1:Te_se+;i(Temp_s199) emp_set1=9;brak; ce 2:Tem_st+; f(emp_set2=Tem_s1) Tem_et2=Tmpse1;brea; defaut:brea;/*按键减一子程序*/ vid ey_dec(void) Dela(15); swich(S_fla) case1:Te_se1;if(emp_setHigh) orml=1; m; Alarm_=1;Alrm_BEP=1;elsei(Temp_maLo) Noral=; Alar_H=1; Alam_=0;Alr_EEP=1; else Nomal=; Alarm_H=1;Aar_=1; Alarm_BEE0;附录二:硬件设计原理图附录三:程序仿真图
限制150内