基于单片机的温度检测与控制系统设计.docx
《基于单片机的温度检测与控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度检测与控制系统设计.docx(48页珍藏版)》请在冰豆网上搜索。
基于单片机的温度检测与控制系统设计
第一部分:
温度的显示与控制系统设计
摘要:
本设计通过51单片机控制DS18B20芯片采集温度,并对采集温度进行分析,随后51单片机对不同温度范围进行判断并做出相应的措施,以此实现了一个温度检测与控制系统,本设计的一个创新就是可以通过矩阵键盘对所需正常温度进行自由设置,增加本设计系统的灵活性。
此外,本设计都是采用C语言编写的。
仿真软件PROTEUS与KeilµVision2开发环境介绍
1.1、PR0TEUS软件介绍
(一)、该软件的特点:
1、全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。
2、具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
3、目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
④支持大量的存储器和外围芯片。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,是其他任何一款软件不能相比的。
(二)、ISIS智能原理图输入系统
ISIS是Preoteus系统的中心,具有控制原理图画图的超强的设计环境。
ISIS有以下特性:
1、出版质量的原理图
ISIS提供给用户图形外观,包括线宽、填充类型、字符等的全部控制,使用尸能够生成如杂志上看到的精美的原理图,画完图可以以图形文件输出,画图的外形由风格模板定义。
2、良好的用户界面
IsIs有一个无连线方式,用户只需单击元件的引脚或者先前布好的线,就能实现布线
此外,摆放、编辑、移动和删除操作能够直接用鼠标实现.无需去单击菜单或图标。
3.自动走线
只要单击想要连接的两个引脚,就能简单地实现走线。
在特殊的位置需要布线时,使用者只需在中间的角落单击。
自动走线也能在元件移动的时候操作,自动解决相应连线。
节点能够自动布置和移除。
既节约了时间,又避免了其他可能的错误。
4.层次设计
ISIS支持层次图设计,模块可画成标准元件,特殊的元件能够定义为通过电路图表示的模块,能够任意设定层次,模块可画成标准元件,在使用中可放置和删除端口的子电路模块。
5、总线支持
ISIS提供的不仅是一根总线,还能用总线引脚定义元件和子电路。
因此,一个连线在处理器和存储器之间的32位的处理器总线可以用单一的线表示,节省绘图的时间和空间。
6.元件库
ISIS的元件库包含8000个元件,有标准符号、三极管、二极管、热离子管、TTL
CMOS、ECL、微处理器,以及存储器元件、PLD、模拟Ic和运算放大器。
7.可视封装工具
原理图和PCB库元件的匹配是由封装工具简化的。
在原理图部分的引脚旁边将显示
PCB的封装,并允许每个引脚名对应文本和图形的引脚号码。
8.复合元件
ISIS的元件库表达方式有很多种,无论是单个元件、同态复合元件、异态复合元件,还是连接器,都可以在原理图上以独立引脚来表达,不用所有线都连到一个独立元件上。
9、元件特性
设计中的每个元件都有一定数日的属性或特性。
某些特性控制软件的特定功能(如PCB
封装或仿真)用户也可以添加自己的特性。
一旦库建立,就能提供默认值及特性定义。
特性
定义提供大量的特性描述,当修改元件时,将显示在编辑区域内。
10、报告
ISIS支持许多第三方网表格式,因此能为其他软件所使使用.设置元件清单后可以添加用户所需的元件属性,也可设置属性列以挑选一定数目的属性。
ERC报告可列出可能的连线错误,如末连接的输入、矛盾的输出及未标注的网络标号。
(三)、Proteus6Professional界面简介
安装完Proteus后,运行ISIS6Professional,会出现以下窗口界面:
1.原理图编辑窗口(TheEditingWindow):
顾名思义,它是用来绘制原理图的。
蓝色方框内为可编辑区,元件要放到它里面。
注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。
2.预览窗口(TheOverviewWindow):
它可显示两个内容,一个是:
当你在元件列表中选择一个元件时,它会显示该元件的预览图;另一个是,当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口
中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。
3.模型选择工具栏(ModeSelectorToolbar):
主要模型(MainModes):
1*选择元件(components)(默认选择的)
2*放置连接点
3*放置标签(用总线时会用到)
4*放置文本
5*用于绘制总线
6*用于放置子电路
7*用于即时编辑元件参数(先单击该图标再单击要修改的元件
配件(Gadgets):
1*终端接口(terminals):
有VCC、地、输出、输入等接口
2*器件引脚:
用于绘制各种引脚
3*仿真图表(graph):
用于各种分析,如NoiseAnalysis
4*录音机
5*信号发生器(generators)
6*电压探针:
使用仿真图表时要用到
7*电流探针:
使用仿真图表时要用到
8*虚拟仪表:
有示波器等
2D图形(2DGraphics):
1*画各种直线
2*画各种方框
3*画各种圆
4*画各种圆弧
5*画各种多边形
6*画各种文本
7*画符号
8*画原点等
4.元件列表(TheObjectSelector):
用于挑选元件(components)、终端接口(terminals)、信号发生器(generators)、仿真图表(graph)等。
举例,当你选择“元件(components)”,单击“P”按钮会打开挑选元件对话框,选择了一个元件后(单击了“OK”后),该元件会在元件列表中显示,以后要用到该元件时,只需在元件列表中选择即可。
5.方向工具栏(OrientationToolbar):
旋转:
旋转角度只能是90的整数倍。
翻转:
完成水平翻转和垂直翻转。
使用方法:
先右键单击元件,再点击(左击)相应的旋转图标
6.仿真工具栏
仿真控制按钮
1*运行
2*单步运行
3*暂停
4*停止
(四)、操作简介
1、绘制原理图:
绘制原理图要在原理图编辑窗口中的蓝色方框内完成。
原理图编辑窗口的操作是不同于常用的WINDOWS应用程序的,正确的操作是:
用左键放置元件;右键选择元件;双击右键删除元件;右键拖选多个元件;先右键后左键编辑元件属性;先右键后左键拖动元件;连线用左键,删除用右键;改连接线:
先右击连线,再左键拖动;中键放缩原理图。
2、定制自己的元件:
有三个个实现途径,一是用PROTEUSVSMSDK开发仿真模型,并制作元件;另一个是在已有的元件基础上进行改造,比如把元件改为bus接口的;还有一个是利用已制作好(别人的)的元件,我们可以到网上下载一些新元件并把它们添加到自己的元件库里面。
由于我没有PROTEUSVSMSDK,所以我只介绍后两个。
3、Sub-Circuits应用:
用一个子电路可以把部分电路封装起来,这样可以节省原理图窗口的空间。
1.2、KeilµVision2软件介绍
Keil软件是目前最流行开发MCS-51系列单片机的软件。
Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境µVisiion2将这些部分组合在一起。
KeiluVision2是德国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。
KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。
C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision2IDE可为它们提供单一而灵活的开发环境。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keilc51来开发您的单片机应用程序。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
二、设计基本原理
本设计通过51单片机对DS18B20和LCD1602两款外设芯片进行驱动与控制,以此来实现系统功能。
、51单片机原理及管教功能
1、简介
89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2、结构特点
8位CPU;
片内振荡器和时钟电路;
32根I/O线;
外部存贮器寻址范围ROM、RAM64K;
2个16位的定时器/计数器;
5个中断源,两个中断优先级;
全双工串行口;
布尔处理器;
3、管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/
89C51引脚图
地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间为外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器读取外部ROM数据。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,单片机读取内部程序存储器。
(扩展有外部ROM时读取完内部ROM后自动读取外部ROM)。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
、DS18B20芯片读写原理
1、特性
独特的一线接口,只需要一条口线通信,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55°C至+125℃华氏相当于是-67°F到257华氏度-10°C至+85°C范围内精度为±0.5°C。
温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统。
2、引脚定义
(1)、DQ为数字信号输入/输出端;
(2)、GND为电源地;
(3)、VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
3、DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
4、DS18B20有4个主要的数据部件
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
表1:
DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
表2:
DS18B20温度数据表
(3)DS18B20温度传感器的存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
(4)配置寄存器该字节各位的意义如下:
表3:
配置寄存器结构
TM
R1
R0
1
1
1
1
1
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示:
(DS18B20出厂时被设置为12位)
表4:
温度分辨率设置表
R1
R0
分辨率
温度最大转换时间
0
0
9位
93.75ms
0
1
10位
187.5ms
1
0
11位
375ms
1
1
12位
750ms
4、高速暂存存储器高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。
对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
表2是对应的一部分温度值。
第九个字节是冗余检验字节。
表5:
DS18B20暂存寄存器分布
寄存器内容
字节地址
温度值低位(LSByte)
0
温度值高位(MSByte)
1
高温限值(TH)
2
低温限值(TL)
3
配置寄存器
4
保留
5
保留
6
保留
7
CRC校验值
8
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
表6:
ROM指令表
指令
约定代码
功能
读ROM
33H
读DS1820温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。
搜索ROM
0FOH
用于确定挂接在同一总线上DS1820的个数和识别64位ROM地址。
为操作各器件作好准备。
跳过ROM
0CCH
忽略64位ROM地址,直接向DS1820发温度变换命令。
适用于单片工作。
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应。
表6:
RAM指令表
指令
约定代码
功能
温度变换
44H
启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。
结果存入内部9字节RAM中。
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器
48H
将RAM中第3、4字节的内容复制到EEPROM中。
重调EEPROM
0B8H
将EEPROM中内容恢复到RAM中的第3、4字节。
读供电方式
0B4H
读DS1820的供电模式。
寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。
(三)、1602LCD特性
+5V电压,对比度可调
内含复位电路
提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能
有80字节显示数据存储器DDRAM
内建有160个5X7点阵的字型的字符发生器CGROM
8个可由用户自定义的5X7的字符发生器CGRAM
字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚)
图3、1602各引脚的定义
HD44780内置了DDRAM(显示数据存储RAM)、CGROM(字符存储ROM)和CGRAM(用户自定义RAM)。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:
也就是说想要在LCD1602屏幕的第一行第一列显示一个“A”字,就要向DDRAM的00H地址写入“A”的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会讲到的。
一行有40个地址在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:
DDRAM地址与显示位置的对应关系
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
图4、1602字符表
上表中的字符代码与我们PC中的字符代码是基本一致的。
因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。
PC在编译时就把“A”先转为41H代码了。
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组),就是CGRAM了。
对DDRAM的内容和地址操作,HD44780的指令集及其设置说明,共有11条指令:
基本操作时序:
读状态 输入:
RS=L,RW=H,E=H
输出:
DB0~DB7=状态字
写指令 输入:
RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码
输出:
无
读数据 输入:
RS=H,RW=H,E=H
输出:
D