资源描述
摘要:3温度控制系统设计题 目: 基于51单片机的温度控制系统设计 姓 名: 应连兄 吕伟 学 院: 工学院 专 业: 自动化 班 级: 自动化121、122 学 号: 32212110 32212206 指导教师: 胡飞 吕成绪 职称: 讲师 2019年 10月 29 日南京农业大学教务处制一、系统设计41.1 项目概要41.2设计任务和要求:4二、 硬件设计52.1 硬件设计概要52.2 信息处理模块52.3 温度调节模块62.3.1传感器DS18b20简介62.3.2实验模拟电路图72.3.3程序流程图8 2.3.4仿真图模型. 82.4报警电路模块92.4.1信号灯92.4.2蜂鸣器报警102.5电机旋转模块12 2.6 秒表和时模块.12 2.7显示模块.12三、仿真后,部分显示成果13四、两周实习总结15五、参考文献17六、附录176.1原理图17 6.2参考程序.17摘要: 随着社会发展的脚步,在各行各业追求经济效益已成为首要任务。在工农业以原始的运行方式逐步发展为自动化的过程中,无论是在哪个阶段对影响生产效率的某一因素如温度,时间,湿度实现定量的控制,直观的显示会大大提高人类劳动力的价值,增加经济效益。本次实习设计是基于51单片机控制,将DS18b20温度传感器实时温度转化,通过1602液晶对本程序设计的温度高温40摄氏度,低温30摄氏度实行实时显示,由MP28GA步进电机的顺时针转动(温度高于40摄氏度)与逆时针旋转(温度低于30摄氏度)直观的、动态的显示,并由高温、低温报警信号灯以和蜂鸣器对温度实现进一步的显示,以达到对温度的自动控制。实验结果显示,此设计能达到效果并将温度作进一步的精确。关键字: 51单片机;DS18b20传感器;LCD1602液晶;MP28GA步进电机Abstract: Withthe pace of social development,the pursuit of economicbenefitsin all walks of lifehas become a task of top priority.In industry and agricultureto runthe original way ofthe progressive development ofautomationin the process,whether it isthe stage at whichinfluence on theproduction efficiencyof a certainfactors such as temperature,time,humidity control- - - - - -to achievequantitative,intuitive displaywill greatly enhance thevalueof humanlabor,increase economic benefits.Thepracticeof designis based on 51 MCU control,DS18b20temperature sensorreal time temperaturetransformation,through the 1602 liquid crystalonthe program designof temperature,temperature 40 degrees Celsius,low temperatureof 30 degrees Celsiusto implementreal-time display,by themotortorotate clockwise(temperature above 40degrees Celsius)andcounterclockwise(temperaturebelow 30degrees Celsius)intuitive,dynamic display,and by thehigh temperature,low temperature alarmsignallamp andbuzzerachieve furtherdisplayoftemperature,in order to achievethe automatic control of temperature.Experimental results show thatthis designcan achieve the resultand the temperaturefurtherprecise.Key word: monolithic integrated circuit ; Sensors; DS18b20;LCD1602 LCD;MP28GA stepper motor 一、系统设计1.1 项目概要 在工农业生产过程以和日常生活中温度控制系统起着非常重要的作用。在构建资源节约型,环境友好型的社会进程中,保证资源的不浪费是至关重要的,就温度来说,温度的过高过低不仅会影响生产效率,带来资源的浪费,而且会给工作人员的安全带来一定的隐患。为了在各方面收到令人满意的效果,本次的基于AT89S52的单片机温度控制系统具有很多优点,能通过步进电机的正传反转直观的显示系统是处于高温状态还是低温状态,能通过LCD液晶上的显示时间知道温度过高过低的持续时间,具有很好的应用价值与应用前景。1.2设计任务和要求:(1) 采用DS18B20作为温度传感器进行温度检测(本设计中采用手动调节温度的高低);(2) 在LCD上显示温度;(3) 用步进电机的正传、反转对应所设计的高温、低温;(4) 在LCD上显示秒表以检测从系统开始时温度达到高温、低温时所用时间,计算出系统超过高低温的时间;(5) 在所设温度上下限的前提下超过最高温度或低于最低温度时通过LED、蜂鸣器报警。二、 硬件设计2.1 硬件设计概要根据应用、设计、项目需求,将此系统分为以下几个模块,分别是信息处理模块,温度调节模块、报警电路模块、电机旋转模块、秒表计时模块,显示模块。2.2 信息处理模块 AT89S52是ATMEL公司的以8031核构成的8位Flash单片机系列。这个系列单片机的最大特点就是在片内含有Flash存储器,AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB可在线编程闪存。该器件采用Atmel公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI串行口改写或用同用的非易失性存储器改写。通过把通用的8位CPU与可在线下载的Flash集成在一个芯片上,AT89S52便成为一个高效的微型计算机。它的应用范围广,可用于解决复杂的控制问题,且成本较低。单片机模块如图(1) 所示。 图(1)单片机模块2.3 温度调节模块 2.3.1传感器DS18b20简介DALLAS最新单线数字温度传感器DS18b20简介新的“一线器件”,体积更小、适用电压更宽、更经济。Dallas半导体公司的数字化温度传感器DS18b20是世界上第一片支持“一线总线”接口温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新的概念。DS18b20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18b20也支持“一线总线”接口,测量温度范围为-55 +125,在-10 +85范围内,精度为0.5。DS18b20的精度较差为2。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测量类消费电子产品等。与前一代产品不同,新的产品支持3V 5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。DS18b20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18b20的实验板原理接线图如图(2):图(2) DS18b20的实验板接线图 其中:DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)2.3.2实验模拟电路图温度检测控制模拟电路图ds18b20原件和其连线如图(3)温度此传感器上显示的温度同步显示到LED显示器上,并有加温,减温按钮。图(3)温度检测控制模拟电路图2.3.3程序流程图 图(4)主程序流程图2.3.4仿真图模型化: 图(5)仿真模型图2.4报警电路模块2.4.1.信号灯:根据所设温度的不同,当LCD显示的温度超过所设的最高温度40摄氏度时led灯D1闪烁,当LCD显示的温度低于所设的最低温度30摄氏度时led灯D2闪烁,已达到警示温度的效果。 图(6) LED报警灯2.4.2.蜂鸣器报警根据所设温度,当LCD显示的温度超过所设的最高温度40摄氏度或低于最低温度30摄氏度时,蜂鸣器都会响,以达到高温或低温的报警效果,有助于保护工作人员的人身安全,保护机器设备,减少不必要的损失。 图(7) 蜂鸣器 2.5电机旋转模块 根据所设温度的不同,当LCD显示的温度超过所设的最高温度40摄氏度时,步进电机顺时针转动(程序里所设);当LCD显示的温度低于所设的最低温度30摄氏度时,步进电机逆时针旋转,当LCD显示的温度在30至40摄氏度(程序所设)时,步进电机停止转动。图(8)电机旋转图2.6秒表计时模块 程序开始执行后,LCD先显示组员的学号与姓名,随后在LCD的第一行显示温度,第二行显示时间,程序所设初始时间是23:59:56,由此时间开始秒表的显示,目的是知道程序开始运行后经过多长时间温度达到了最高值,并计算出达到最高温度后所经过的时间,以提示相关工作人员注意温度的调节,节省电,从而达到节约资源与能源的效果。 图(9)秒表显示图2.7显示模块。 通过采集ds18b20的温度,以和程序所设的温度值,将采集到的温度同步显示到LED显示器上,精确到小数点后第一位。如下图 图(10)显示电路三、仿真后,部分显示成果 图(11) 启动时显示学号和姓名拼音的缩写 图(12) 随后显示温度(精确到小数点后一位)以和时钟功能 图(13)温度达到40度时,高温报警启动,D1亮,蜂鸣器鸣叫,同时步进电机正转 图(14)温度达到30度时,低温报警启动,D2亮,蜂鸣器鸣叫,同时步进电机反转图(15)当温度在30与40度之间时,仅仅显示温度与时间,报警灯不亮,步进电机不转,蜂鸣器也不响四、两周实习总结 这次单片机实习我们的题目是温度检测。老师一共给出了三个题目,我们通过抽签抽到了这个题目。起初刚拿到这个题目时真的是一点儿头绪都没有,虽然上学期学了单片机,但这个温度传感器DS18B20却是一点都不了解,感觉无从下手。好在老师给了很多资料,无奈之下,只有一点一点的看,一点一点的学,还有不会的就去网上找视频看。前两三天几乎都没动手开始做,等到弄得差不多懂了的时候才开始动手设计。我们刚开始是先做最简单的功能即显示温度。虽然简单但也遇到了一些问题,但都是一些变量定义的问题,所以还是解决掉了。接着我们就开始往上加功能,我们加了一个时钟和电机,显示温度时显示时间,高温报警时,电机正传,低温报警时,电机反转。其中让我印象最深刻的就是画仿真图时,把两个芯片的引脚直接接在了一起,在仿真时不管怎么弄电机就是不转,我们也是很困惑。后来发现引脚端的电平没变化,一直是灰的,才意识到两个芯片根本没有连好。另一个问题就是时钟模块时间总是走不准,通过向大神的请教才知道是电机程序的循环占了一定的执行时间导致定时器的定时不准。通过整个实习,我们遇到过很多问题,但通过我们的努力我们还是一个个的解决掉了,整个项目完成时,没有感觉到累,反而是特别的激动,感觉很有成就感。通过这个实习,学到了很多,也收获了很多。虽然说单片机实习结束了,但觉得它对我们以后的就业确实有很大帮助,就这次实习过程中所了解的,虽然上位机没有做成功,但的的确确感受到了单片机的强大,也感受到了单片机的作用,以前虽然学过单片机的课程但“上位机”三个字听都没听过,别说自己揣摩着作,这次还是从别的同学那里听到的,自己也着手做了一点,但由于时间原因没有做成功,这一点感到非常的遗憾,不过以后还是有时间的,可以在接下来的时间里好好琢磨单片机的相关知识,希望在以后的工作与学习中以和生活中用到,真真做到学以致用。这次的实习相比以往有很多不同的地方,首先是分组的情况,以前一般都是和自己熟悉的或学号挨着比较近的学生一个小组,但这次我和二班的同学一组,虽然说我们都不是学霸,但我们没有放弃,仍然以自己的进度来完成本次实习,虽然说在学习的过程中遇到了许多问题,如程序报错,仿真电路图有错,步进电机不转等等,这些问题我们先解决,如果是在解决不了就找其他同学帮忙调解然后明白自己错在了哪里,这样一步步的下来确实学到了不少东西。以前觉得非常难的单片机经过这次的实习也没觉得很难,即使单片机的只是很丰富。总的来说自己对这次的实习还是可以的,获得了许多书本上的知识,获得了许多实践的知识,获得了许多无法在课堂上学到的东西。本次实习也算是大学的最后一次是实习,我们小组一起讨论过,思考过,也为了一个小问题苦恼过,如LED灯不亮,蜂鸣器不响,步进电机不转,LCD上温度显示不稳定,秒表显示不出来等等,两周下来,看自己做的设计虽然说没有达到自己非常想要的结果,但还是令人欣喜的,因为我们解决了遇到的种种问题,虽然说有些问题不是我们自己解决的,但还是突破了障碍,做到了最后一步,还是非常感谢这次实习的机会,能够综合的锻炼我们的能力,提高自己的动手能力,设计思维,总结能力,这给我们今后的工作带来了一定的好处。通过做上位机真切的感受到了单片机,VC的强大,在知识的海洋里我们永远是渺小的,饥渴的,还有很多知识等待我们去学习,还有很多惊喜等着我们自己去挖掘,学习才有收获,实践才能锤炼知识,多学习,多实践,多收获。五、参考文献1 郭天祥.新概念51单片机C语音教程入门提高开发拓展攻略M.北 京:北京:电子工业出版社,2009.2 韩广兴.电子元器件与实用电路基础M.北京:电子工业出版社,2019.3 方大千,朱丽.电子控制系统装置制作入门M.北京:国防出版社,2019.4 刘向举,刘丽娜. 基于单片机的智能温度测控系统的设计J. 齐齐哈尔大 学学报(自然科学版). 2019(03)5 黄文力,邓小磊. DS18B20数字温度传感器接口程序的时序J. 仪器仪表 用户. 2019(06)6 黄晓林. 一种实用型智能恒温控制系统设计J. 自动化技术与应用. 2019(11)7 王文,王直. 基于ARM和DS18B20的温度监测系统J. 电子设计工程. 2019(20)8 陈锡华,贾磊磊. 温度传感器DS18B20序列号批量搜索算法J. 单片机与 嵌入式系统应用. 2019(09)六、附录 6.1原理图6.2参考程序6.2.1 main.c:#include #include #include #include lcd.h#include temp.h#define _Nop() _nop_() /定义空指令#define uchar unsigned char#define uint unsigned intunsigned char date=32212206 lvwei;unsigned char date1=32212110 ylx;unsigned char time= TIME 23:59:55 ;uchar DateTime7;unsigned char int_time;unsigned char second=55,minute=59,hour=23;uint tvalue;uchar i=0;sbit SPK=P17; 设置LCD位置 void SET_LCD_POS(uchar p)Write_LCD_com(p|0x80); LCD写程序 void LCD_string(uchar p,uchar *s)uchar i;SET_LCD_POS(p);for(i=0;i16;i+)Write_LCD_Data(si);DelayMs(5); void format_datetime(uchar d,uchar *a)a0=d/10+0;a1=d%10+0;void display2(int temp) format_datetime(DateTime3,LCD_DSY_BUFFER1+10);TEM_BCD(GET_TEMP();LCD_string(0x00,LCD_DSY_BUFFER1); 设置电机unsigned char code FFW8= 0xf1, 0xf3, 0xf2, 0xf6, 0xf4, 0xfc, 0xf8, 0xf9 ;unsigned char code REV8= 0xf9, 0xf8, 0xfc, 0xf4, 0xf6, 0xf2, 0xf3, 0xf1 ;char code reserve3_at_ 0x3b; /保留0x3b开始的3个字节 电机正传void motor_ffw(unsigned int n) unsigned char i; unsigned int j; for (i = 0; i 8; i+) /一个周期转30度 P1 = FFWi; /取数据 DelayMs(8); /调节转速 P1 = 0xf0; /使步进电机掉电 步进电机反转(转n*30度)void motor_rev(unsigned int n) unsigned char i; unsigned int j; for (j = 0; j n; j+) /转n*30度 for (i = 0; i 8; i+) /一个周期转30度 P1 = REVi; /取数据 DelayMs(8); /调节转速 P1 = 0xf0; /使步进电机掉电 钟表显示 void clock_write(unsigned int s,unsigned int m,unsigned int h)write_sfm(0x48,h);write_sfm(0x4b,m);write_sfm(0x4e,s); 主函数void main() LCD_Init(); write_string(0x80,date); write_string(0xC0,date1); DelayMs(500);TMOD = 0x10; TH1 = 0x4C; TL1 = 0x00; EA = 1; ET1 = 1; TR1 = 1; int_time=0;while(1) if(i=0) Write_LCD_com(0x01);while(i=0) display2(); if(htvaluetemp=1) motor_ffw(12); /电机正转360度HT=0; SPK=1; else HT=1; SPK=0; if(ltvaluetemp=1) motor_rev(6); /电机反转180度 LT=0; SPK=1; else LT=1; SPK=0; void T0_interserve(void) interrupt 3int_time+;if(int_time=20)int_time=0;second+;clock_write(second,minute,hour);if(second=60)second=0;minute+;if(minute=60)minute=0;hour+;if(hour=24)hour=0;TH1 = 0x4C; TL1 = 0x00;6.2.2 LCD.h#include#define uchar unsigned char#define uint unsigned intsbit RS = P02; sbit RW = P01;sbit EN = P00;char code reserve3_at_ 0x3b; /保留0x3b开始的3个字节void delay(uint z) /延时函数,此处使用晶振为11.0592MHz uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);/* LCD1602程序模块 */ void DelayMs(uint t)uint i,j;for(i=t;i0;i-)for(j=246;j0;j-); 读LCD状态 uchar Read_LCD_State()uchar state;RS=0;RW=1;EN=1;DelayMs(1);state=P0;EN=0;DelayMs(1);return state; 忙则等待 void LCD_Busy_Wait()while(Read_LCD_State()&0x80)=0x80);DelayMs(5); LCD写数据 void Write_LCD_Data(uchar dat)LCD_Busy_Wait();RS=1;RW=0;EN=0;P2=dat;EN=1;DelayMs(1);EN=0; LCD写指令 void Write_LCD_com(uchar i)LCD_Busy_Wait();RS=0;RW=0;EN=0;P2=i;EN=1;DelayMs(1);EN=0; LCD初始化 void LCD_Init(void) Write_LCD_com(0x38); /显示模式设置 DelayMs(1); Write_LCD_com(0x38); DelayMs(1); Write_LCD_com(0x38); DelayMs(1); Write_LCD_com(0x38); Write_LCD_com(0x08); /显示关闭 Write_LCD_com(0x01); /显示清屏 Write_LCD_com(0x06); /显示光标移动设置 DelayMs(1); Write_LCD_com(0x0C); /显示开和光标设置void write_string(uchar addr,uchar *p)/采用指针的方法输入字符,n为字符数目 Write_LCD_com(addr); while(*p!=0) Write_LCD_Data(*p+);void write_sfm(uchar addr,uchar dat)/向指定地址写入数据uchar shi,ge;shi=dat/10;ge=dat%10;Write_LCD_com(0x80+addr);Write_LCD_Data(0+shi);Write_LCD_Data(0+ge);6.2.3 TEMP.Hsbit DQ =P37;/DS18B20温度sbit HT=P03; /高温报警sbit LT=P04; /低温报警#define uchar unsigned char#define uint unsigned intbit flag;uint tvalue;extern uchar htvaluetemp=0,ltvaluetemp=0;extern uchar LCD_DSY_BUFFER1=temperature: ;/LCD显示缓冲void DelayUs(uchar us)while(us-); ds1820复位uchar ds1820rst() unsigned char x=0;DQ = 1; /DQ复位DelayUs(8); /延时DQ = 0; /DQ拉低DelayUs(100);/精确延时大于480usDQ = 1; /拉高DelayUs(8); x=DQ;DelayUs(100);DQ=1;return x; 18B20读数据uchar ds1820rd() unsigned char i;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; /给脉冲信号 dat=1; DQ = 1; /给脉冲信号_nop_();_nop_(); if(DQ) dat|=0x80; DelayUs(30);DQ=1;return(dat); 18B20写指令void ds1820wr(uchar wdata)uchar i;for (i=8; i0; i-)DQ = 0;DQ = wdata&0x01;DelayUs(5);DQ = 1;wdata=1;/*读取温度值并转换*/uint GET_TEMP()uchar a,b;if(ds1820rst()=0) ds1820wr(0xCC);/跳过读序列号ds1820wr(0x44);/启动温度转换ds1820rst(); ds1820wr(0xCC);/跳过读序列号 ds1820wr(0xBE);/读取温度a=ds1820rd();b=ds1820rd();tvalue=b;tvalue=8;tvalue=tvalue|a;if(tvalue=400) htvaluetemp=1; if(tvalue=300) ltvaluetemp=1;return(tvalue); 温度BCD转换void TEM_BCD(uint i)uint a,b,c;a=i/100;b=i%100/10;c=i%10;LCD_DSY_BUFFER111=a+0;LCD_DSY_BUFFER112=b+0;LCD_DSY_BUFFER113=.;LCD_DSY_BUFFER114=c+0;LCD_DSY_BUFFER115=C;第 15 页
展开阅读全文