ImageVerifierCode 换一换
格式:DOC , 页数:31 ,大小:222.50KB ,
资源ID:2491016      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2491016.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机温度控制电路的设计与制作毕业论....doc)为本站会员(微传9988)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

基于单片机温度控制电路的设计与制作毕业论....doc

1、天津现代职业技术 学院毕 业 设 计题 目:单片机温度控制器的设计与调试学生姓名:李坤 学 号:17院 (系):电子系 专 业:应用电子技术班 级:2009 级指导老师姓名及职称:孔庆芳 讲师起止时间: 2010 年 9 月 2011 年 5 月摘 要基于单片机温度控制电路的设计与制作摘 要:本设计以 STC89C52RC 单片机为控制核心,由实时时钟芯片 DS1302 和数字温度传感器 DS18B20 构成了一个高温和低温时,分别对相应的器件进行控制的系统。详细地介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计,重点阐述了时钟模块、显示模块、温度检测模块及相关控制模块等的模块化设计

2、思路与制作。系统采用液晶LCD1602 作为显示器,具有实时时间显示、环境温度显示,显示系统连续工作前 24 小时整点的温度值。在本设计中,软件程序均采用 C 语言编写,便于移植与升级。关键词:STC89C52RC; 单片机; DS1302; LCD1602; 目 录i正 文1基于单片机温度控制电路的设计与制作专业班级: 电子系 G09-3+2指导教师: 孔庆芳1.1 意义基于单片机温度控制的测试控制系统,控制对象是温度。温度控制在日常生活及工业领域应用相当广泛,比如温室,水池,发酵缸,电源等场所的温度控制。而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。

3、1.2 设计任务与要求2.1.1 当传感器检测出的环境温度偏低时,控制继电器,实现电暖炉的开与关的状态。2.1.2 当传感器检测出的环境温度偏高时,随着温度的改变,控制电机的转速作出相应的改变。2.1.3 通过时钟芯片 DS1302 自动控制电机,使其在某个时间段不工作。2.1.4 当环境温度超出了设定值时,蜂鸣器发出声响报警。2温度传感器 信号放大 A/D 转换单片机键盘液晶显示蜂鸣器或门放大光耦可控硅电机过零触发电路220V图 1 方案一组成方框图方案二:采用数字式温度传感器 DS18B20,它能够将温度直接转换成数字信号,可以通过一根数据线与单片机进行通信,而且它不需要外部元件,在-10

4、0C85 0C 范围内可以精确到+0.5 0C。完全满足设计要求。这样设计就可以不使用 A/D 转换器,从而使系统的精度得以提高,也能够大大节省单片机得系统资源,所以我又加了 DS1302 时钟模块电路,使时间能够实时显示。方案组成方框图如图 2 所示:DS18B20键盘DS1302单片机STC89C525RCLCD 显示负载蜂鸣器图 2 方案二组成方框图正 文31 系统硬件设计1.3 总体电路框图本设计以 STC89C52RC 单片机为主控核心设计的一个温度控制系统,低温时可控制加热设备,高温时控制风扇,超出设定最高温度值时蜂鸣器发出声响报警。硬件方框图如图 3 所示:DS18B20温度检测

5、模块DS1302时钟模块键盘STC89C52RC单片机LCD 显示模块蜂鸣器继电器光耦可控硅加热设备风扇图 3 总体硬件方框图1.4 单元电路设计1.4.1 单片机模块STC89C52RC 单片机为 40 引脚双列直插芯片,有四个 I/O 口 P0,P1,P2,P3, MCS-51 单片机共有 4 个 8 位的 I/O 口(P0、P1、P2、P3) ,每一条 I/O 线都能独立地作输出或输入。单片机的最小系统如下图所示,18 引脚和 19 引脚接时钟电路,XTAL1 接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2 接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大

6、器的输出。第 9 引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20 引脚为接地端,40 引脚为4电源端。31 引脚接电源端 9-11,如图 4 所示:图 4 单片机电路2 系统软件设计2.1 总体软件框图总体软件框图如图 9 所示图 9 总体软件框图2.1.1 温度数据采集根据 DS18B20 的通讯协议,单片机控制 DS18B20 完成温度转换必须经过三个步骤:每一次读写之前都要对 DS18B20 进行复位操作,复位成功后发送一条ROM 指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作,复位要正 文5求单片机将数据线下拉 50 微秒,然后释放,当 DS18

7、B20 受到信号后等待1660 微秒左右,然后发出 60240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功。指令 约定代码 功能读 ROM 33H 读 DS1820 温度传感器 ROM 中的编码(即 64 位地址)符合 ROM 55H 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 BS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM OFOH 用于确定挂接在同一总线上 DS1820 的个数和识别 64位 ROM 地址。为操作各器件作好准备。跳过 ROM OCCH 忽略 64 位 ROM 地址,直接向 DS1820 发温度

8、变换命令。适用与单片工作。告警搜索命令OECH 执行后只有温度超过设定值上限或下限的片子才做出响应。指令 约定代码 功能温度变换 44H 启动 DS1820 进行温度转换 12 位转换时最厂为750ms(9 位为 93.75ms) 。结果存入内部 9 字节 RAM 中。读暂存器 OBEH 读内部 RAM 中 9 字节的内容。写暂存器 4EH 发出向内部 RAM 的 3、4 字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器 48H 将 RAM 中第 3、4 字节的内容复制到 EEPROM 中重调 EEPROM OB8H 将 EEPROM 中内容恢复到 RAM 中的第 3

9、、4 字节。读供电方式 OB4H 读 DS1820 的供电模式。寄生东佃时 DS1820 发送“0” ,外界电源供电 DS1820 发送“1” 。Comment 园园园园1: 不使用电容会有什么后果?Comment 园园园园2: 63 系统调试与测试3.1 硬件调试在本温度控制电路的设计调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:(1) 开始调试时发现时钟芯片 DS1302发热很厉害,后来发现电路没有给它加上拉电阻,加上上拉电阻后问题就解决了。(2) 双向可控硅 BTA12-600B高压部分电路,加 104电容时,发生击穿现象,导致光耦控制部分电路瘫痪,

10、原因是耐压值不够。解决的方法有两种,第一种是更换耐压值更高的电容;由于该电容的作用是吸收可控硅元件的残余电量,使得可控硅能够正常导通截止,而根据使用的负载(交流电机) ,去掉该电容后,该电路能够正常的工作,所以第二种是在电路可以运行的状况下去掉该 104电容相连的电路。我采取的是第二种方法。3.2 软件调试在软件调试时也出现了一些问题,其中主要的问题有以下两个方面:(1) 程序读取温度值时,出现的现象,造成风扇温度在判断时出现错误,使风扇经常性突快突慢变化,蜂鸣器也不断的蜂鸣报警。解决的方法是在读取温度判断时加延时,并且多次判断,防止跳变。(2) 调节系统参数时,液晶光标太快以致调节的时候观察

11、困难,原因是刷新液晶太快。解决的方法是在相应数据更该时,才开始刷新液晶内容。4 设计总结在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品,达到了预期的目的,完了最初的设想。但是在做板时由于之前考虑的不够周全,时钟芯片没有加到上拉电阻,由于是做好了板把元件焊上去才发现的,只能在板的后面把 3个上拉电阻焊上去,所以导致了整块板的看起来不是很美观。通过这一次的经验我意识到了对电路的设计、布局要先有一个好的构思,而且要认真仔细的检查各个功能模块正 文7的具体情况,确保不遗留什么元件,才做出美观、大方的电路板。程序编写中,先研究各个功能模块的程序,包括时钟模块

12、的程序,温度模块的程序,不懂的就通过查资料或者请教老师和同学来解决,然后再整理好这些程序,最终完成了能实现整个设计要求的程序。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,也练就了我们的耐心和细心,做什么事都要认真仔细,因为细节决定成败。总之,这次设计使我的能力得到了全方位的提高8参考文献910电路图附录 B:程序清单#include#include#include#define uchar unsigned char#define uint unsigned int#define LCD_dat P0 /定义 lcd 数据口sbit lcd_E=P27; /定义 lcd 控制口

13、sbit lcd_RW=P26; /定义 lcd 控制口sbit lcd_RS=P25; /定义 lcd 控制口sbit DS18B20_DQ =P15; /定义 DS18B20 通信端口sbit LED1=P12;sbit LED2=P13;sbit speaker=P11; /蜂鸣器接口sbit fan=P21;/风扇 pwm 输出控制口bit fan_flag=0;sbit key_model=P31;/模式键sbit key_set=P32;/设置键sbit key_add=P35;/加键sbit key_sub=P34;/减键sbit key_left=P30;/左移键sbit ke

14、y_right=P33;/右移键附 录11sbit E_sw=P10;/继电器控制uchar sw_flag=0;/继电器自动手动切换标志uchar switch_flag=0;/继电器液晶设置切换标志int sw_open_temperature=100;/继电器开启的温度值设置 uchar restrict_hour=0;/设定时间风扇不能转uint temp=0; /温度缓存uint fan_count=0;/风扇计数bit fan_AUTO=0;/自动风扇自动或手动控制标志uchar model_flag=0; /总的模式标志uchar code num_to_char = “ABCD

15、EF“; /*定义数字跟 ASCII 码的关系*/uchar data lcd1602_line1= “ 2010/00/00 TUE “; /时间显示缓存数组uchar data lcd1602_line2= “00:00:00 00.0C “; /时间显示缓存数组uchar data lcd1602_line3= “00:00:00set time“; /时间设置缓存数组uchar idata temp_record_line1=“Temperature note“;/温度记录显示缓存数组uchar idata temp_record_line2=“time 00 T:00.0c “;/温

16、度记录显示缓存数组uchar xdata temp_highter_line1=“sw T on/off “;/继电器手动自动切换和自动时开启电压uchar xdata temp_highter_line2=“AUTO T=00.0C “;/继电器手动自动切换和自动时开启电压uchar xdata temp_time_unable_line1=“fan time unable“; /显示风扇禁止打开的时间段uchar xdata temp_time_unable_line2=“F:4 T:7 oclock“; /显示风扇禁止打开的时间段uchar code temp_AUTO_switch6=

17、“AUTO “,“Manuel“; /自动,手动切换值uchar idata temp_record=“; /保存每天对应钟点的温度值uchar code Weeks4=“SUN “,“MON “,“TUE “,“WED “,“THU “,“FRI “,“SAT “,“SUN “; /星期数组/时钟标志uint data year=0; /时间设置标志,数据uchar data set_time=0,time_flag=0,day_flag=0,hour=0,minute=0,second=0,day=0,month=0,week=0;/时间设置标志,数据uint speaker_count=

18、0; /喇叭蜂鸣计数uchar record_hour,record_minute,record_second,record_hour_count=0; /温度记录的时间设置/小延时程序void delay(uint x)while(x-);/*1MS 为单位的延时程序*/void delay_1ms(uint x)uchar j;while(x-)for(j=0;j0;i-)DS18B20_DQ = 0; / 给脉冲信号dat=1;DS18B20_DQ = 1; / 给脉冲信号if(DS18B20_DQ) dat|=0x80;delay(4);return(dat);/写一个字节void W

19、riteOneChar(uchar dat)uchar i=0;for (i=8; i0; i-)DS18B20_DQ = 0;DS18B20_DQ= datdelay(5);DS18B20_DQ = 1;dat=1;/读取温度ReadTemperature(void)uchar a=0;uchar b=0;uint t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作Writ

20、eOneChar(0xBE); /读取温度寄存器等(共可读 9 个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t230temp=ReadTemperature(); /防止跳变干扰,再读一次温度delay_1ms(5000); /防止跳变干扰,再读一次温度if(temp400)TR1=1; /防止跳变干扰,再读一次温度if(fan_flag=1) /这部分作为 PWM 控制程序 /这部分作为 PWM 控制程序fan=1; /这部分作为 PWM 控制程序delay_1ms(fan_count);/控制风扇关闭的时间,以达到控制风扇转速的目的fa

21、n=0; /这部分作为 PWM 控制程序if(fan_AUTO=1)/手动LED1=0; /灭灯说明是手动控制fan=0; /表示风扇一直开着/以上是温度高时处理程序/以下是温度低时处理程序void temp_low(void) if(sw_flag=0) /自动的时候继电器根据温度值判断开启LED2=1; /亮灯说明是自动控制if(temp=4else if(day28)day=1;break;case 3:if(day=32)day=1;break;case 4:if(day=31)day=1;break;case 5:if(day=32)day=1;break;case 6:if(day

22、=31)day=1;break;case 7:if(day=32)day=1;break;case 8:if(day=32)day=1;break;case 9:if(day=31)day=1;break;case 10:if(day=32)day=1;break;case 11:if(day=31)day=1;break;case 12:if(day=32)day=1;break;default:break;if(key_sub=0) /日减delay_1ms(20);while(key_sub=0);dis_flag=1;day-;switch(month)case 1:if(day=0)

23、day=31; break;case 2:if (year % 100 != 0) else if(day=0)day=28;break;case 3:if(day=0)day=31;break;case 4:if(day=0)day=30;break;附 录21case 5:if(day=0)day=31;break;case 6:if(day=0)day=30;break;case 7:if(day=0)day=31;break;case 8:if(day=0)day=31;break;case 9:if(day=0)day=30;break;case 10:if(day=0)day=31

24、;break;case 11:if(day=0)day=30;break;case 12:if(day=0)day=31;break;default:break;if(dis_flag=1) /显示和保存修改值time_data_buff3=(day/10)*0x10+day%10;write_instruction(0x89);write_data(num_to_charday/10);write_data(num_to_charday%10);write_instruction(0x89);dis_flag=0;if(time_flag=5while(key_add=0);month+;i

25、f(month=13)month=1;dis_flag=1;if(key_sub=0) /月减delay_1ms(20);while(key_sub=0);month-;if(month=0)month=12;dis_flag=1;if(dis_flag=1) /显示和保存修改值time_data_buff4=(month/10)*0x10+month%10;write_instruction(0x86);write_data(num_to_charmonth/10);write_data(num_to_charmonth%10);write_instruction(0x86);dis_fla

26、g=0;if(time_flag=6while(key_add=0);year+;dis_flag=1;if(year=2100)year=2010;if(key_sub=0) /年减delay_1ms(20);while(key_sub=0);year-;dis_flag=1;22if(year=2009)year=2099;if(dis_flag=1) /显示和保存修改值time_data_buff6=year%1000%100/10*0x10+year%1000%100%10;write_instruction(0x81);write_data(num_to_char2);write_d

27、ata(num_to_char0);write_data(num_to_char(year%1000)%100)/10);write_data(num_to_char(year%1000)%100)%10);write_instruction(0x83);dis_flag=0;/以下是保存设置的时间if(set_time=2)write_instruction(0x0c);Set1302(time_data_buff);set_time=0;time_flag=0;/以上设置时间/以下是用于查看一天的温度记录if(model_flag=2)if(key_add=0)while(key_add=

28、0);record_hour_count+;if(record_hour_count=24)record_hour_count=0;if(key_sub=0)while(key_sub=0);record_hour_count-;if(record_hour_count=-1)record_hour_count=23;switch(record_hour_count)case 0:deal_record_dis(0);break; case 1:deal_record_dis(1);break;case 2:deal_record_dis(2);break; case 3:deal_recor

29、d_dis(3);break;case 4:deal_record_dis(4);break; case 5:deal_record_dis(5);break;case 6:deal_record_dis(6);break; case 7:deal_record_dis(7);break;case 8:deal_record_dis(8);break; case 9:deal_record_dis(9);break;case 10:deal_record_dis(10);break; case 11:deal_record_dis(11);break;case 12:deal_record_d

30、is(12);break; case 13:deal_record_dis(13);break;case 14:deal_record_dis(14);break; case 15:deal_record_dis(15);break;case 16:deal_record_dis(16);break; case 17:deal_record_dis(17);break;case 18:deal_record_dis(18);break; case 19:deal_record_dis(19);break;case 20:deal_record_dis(20);break; case 21:de

31、al_record_dis(21);break;case 22:deal_record_dis(22);break; case 23:deal_record_dis(23);break;default:break; write_string(0x80,temp_record_line1);write_string(0xc0,temp_record_line2); /以上是用于查看一天的温度记录附 录23/以下是用于设置继电器的开启状态if(model_flag=3)if(key_left=0)while(key_left=0);switch_flag+;if(switch_flag=2)swi

32、tch_flag=0;dis_flag=1;if(key_right=0)while(key_right=0);switch_flag-;if(switch_flag=-1)switch_flag=1;dis_flag=1;if(switch_flag=0)if(key_add=0)while(key_add=0);dis_flag=1;sw_flag+;if(sw_flag=2)sw_flag=0;if(key_sub=0)while(key_sub=0);dis_flag=1;sw_flag-;if(sw_flag=-1)sw_flag=1;write_instruction(0xc0);if(dis_flag=1)for(i=0;i=1000)sw_open_temperature=0;dis_flag=1;if(key_sub=0)while(key_sub=0);sw_open_temperature=sw_open_temperature-10;if(sw_open_temperature#include #include #ifndef uchar#define uchar unsigned char#endif#ifndef uint#define uint unsigned int#endif#define _Nop() _nop_()

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报