资源描述
单片机课程设计报告书
(基于单片机的温度控制系统)
学院(系): 电子与信息工程学院
年级专业: 电子信息工程
学 号: 201215256101
学生姓名: 张 三
指导教师: 罗 刚
教师职称: 教 授
成 绩:
制作日期 2014 年 12月 20 日
目录
摘要................................................................1
引言................................................................2
第一章系统设计......................................................2
1.1 设计任务.....................................................2
1.2 设计目的.....................................................2
1.3 设计思路.....................................................2
第二章 硬件系统设计.................................................4
2.1系统方框图.....................................................4
2.2各部分及其实现的功能..........................................4
第三章软件设计.....................................................16
3.1程序流程图....................................................16
3.2 温度传感器流程图程图.........................................17
第四章仿真与调试...................................................18
4.1 软件电路故障与解决办法.......................................18
4.2 软件调试方法.................................................18
4.3 仿真后,部分显示成果.........................................19
第五章设计总结.....................................................22
第六章 参考文献....................................................23
附录一.............................................................24
附录二.............................................................25
附录三.............................................................36
基于单片机STC89C51的温度显示系统的设计
重庆三峡学院电子与信息工程学院 12电子信息工程(职教师资)
摘要:
以AT89C51单片机为核心,的数字温度测量及自动控制系统的设计,该温度控制器可以实时显示和设定温度,实现对温度的自动控制。其组成部分为:AT89S51单片机、DS18B20智能数字温度传感器、键盘与显示电路、温度控制电路。高精度的DS18B20温度传感器作为温度检测元件,LED数码管并行动态显示作为显示电路,单片机通过对信号进行相应处理,从而实现对所测温度进行控制。当温度比设定温度小时,当温度大于等于设定温度时,控制器断开电加热设备。此外,文中还介绍了该温度控制器的软件设计部分,主要模块包括:数码管显示程序、按键处理程序、温度信号处理程序。主程序通过调用各个上述子程序来完成所有的温度控制器功能。在此基础上本文还提出了系统软硬件抗干扰措施和系统软硬件及整机调试方案。
该温度控制器具有控制方便、简单的特点,可以实现对温度的高精度控制,并且可以提高被控系统的技术指标。
关键词:单片机 ;温度传感器 ;寄存器;
引言
随着电子技术,特别是随大规模集成电路的产生而出现的微型计算机技术的飞速发展,人类生活发生了根本性的改变。如果说微型计算机的出现使现代科学研究得到了质的飞跃,那么可以毫不夸张地说,单片机技术的出现则是给现代工业测控领域带来了一次新的技术革命。目前,单片机以其体积小、重量轻、抗干扰能力强、对环境要求不高、高可靠性、高性能价格比、开发较为容易,在工业控制系统、数据采集系统、智能化仪器仪表、办公自动化等诸多领域得到极为广泛的应用,并已走人家庭,从洗衣机、微波炉到音响、汽车,到处都可见到单片机的踪影。因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。本课题研究的内容就是以单片机AT89c51为主要控制元件,通过温度传感器DS18B20实现对温度的测量,并通过数码管直接显示所测温度。
第1章 系统设计
1.1 设计任务
(1)、采用DS18B20作为温度传感器进行温度检测。
(2)、对采集温度进行显示(显示温度分辨率0.1℃);采集温度数值应采用数字滤波措施,保证显示数据稳定。
(3)、设计相应的温度控制电路,根据测得的温度情况对加热器进行控制,将温度保持在设定温度。
(4)、通过按键设置温度上下限,超限通过LED、蜂鸣器报警。
1.2 设计目的
(1)、通过课程设计,使我们能够深入理解单片机系统的工作原理,接口电路的设计及调试方法,培养综合运用所学理论知识分析和解决实际问题的能力。
(2)、使用单片机AT89c51为主要控制元件,通过温度传感器DS18B20实现对温度的测量,并通过LCD1602直接显示所测温度。
(3)、用keil软件进行编程与调试,利用Proteus 7 Professional软件进行绘制硬件电路图且进行仿真。
1.3 设计思路
(1) 方案论证
本温度控制系统的设计是使用单片机来控制,温度传感器DS18B20实现对温度的测量,数码管直接显示实现。而选择这一方法后还要进行各个芯片的选择。以下是我在这次设计中所用的方案。
(2) 芯片的选择
采用AT89C51芯片,其为高性能CMOS 8位单片机,该芯片内含有4k bytes的可反复擦写的只读程序存储器(PEROM)、128 bytes的随机存取数据存储器(RAM)、 32位可编程I/O口线、2个16位定时/计数器、6个中断源、可编程串行UART通道及低功耗空闲和掉电模式。因此,我们选用AT89C51。
(3) 温度传感器模块的选择方案和论证
采用温度传感器DS18B20实现对温度的测量。
(4) 升温模块和降温模块的选择和论证
(5) 最终方案
综上方案所述,对此次温度控制系统的方案选定为: 以基于51单片机控制,将DS18b20温度传感器实时温度转化,并通过数码管对温度实行实时显示,将设定温度,通过按键调节温度报警区域,实现对温度在0℃-128℃控制的自动化。实验结果表明此结构完全可行,温度偏差可达0.1℃以内。
第2章 硬件系统的设计
2.1 系统方框图,见图2.1。
根据需求,我们将系统分为六个模块,信息处理模块,温度采集模块、功能按键模块、报警电路模块,LED温度显示模,存储模块。
图2.1 系统方框图
2.2各部分及其实现的功能
(1)中央控制芯片STC89C51
STC89C51是一种低功耗、高性能的片内含有4KB快闪可编程/擦除只读存储器(FPEROM-Flash Programmable and Eraseable Read Only Memory)的8位CMOS微控制器,使用高密度、非易失存储技术制造,并且与80C51引脚和指令系统完全兼容。主要性能:
与MCS-51 微控制器产品系列兼容。 片内有4KB可在线重复编程的快闪擦写存储器 ;存储数据保存时间为10年 ;宽工作电压范围:Vcc可为2.7V到6V ;全静态工作:可从0Hz至16MHz ;程序存储器具有3级加密保护 ;128*8位内部RAM ;32条可编程I/O线 ,两个16位定时器/计数器 ;中断结构具有5个中断源和2个优先级 ,可编程全双工串行通道 ,空闲状态维持低功耗和掉电状态保存存储内容。
MCS-51的主要特点为:
◆CPU为8位;
◆片内带振荡器,频率范围为1.2~12MHz;
◆片内带128字节的数据存储器;(RAM)
◆片内带4KB的Flash程序存储器;(ROM)
◆程序存储器的寻址空间为64KB;(需要扩展ROM)
◆片外数据存储器的寻址空间为64KB;(需要扩展RAM)
◆128位(16字节)用户位寻址空间;(在128个字节中)
◆18个字节特殊功能寄存器SFR(MCS————52子系列为21个);
◆4个8位的并行I/O接口:P0、P1、P2、P3;
◆2个优先级别的个优先级别的5个中断源;(高、低2个)
◆有较强的位处理能力
(2)温度传感器DS18B20:
1.DS18B20的性能特点:
①、采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换,直接输出被测温度值(9位二进制数,含符号位)。
②、测温范围为-55℃-+125℃,测量分辨率为0.0625℃
③、内含64位经过激光修正的只读存储器ROM
④、适配各种单片机或系统机
⑤、用户可分别设定各路温度的上、下限
⑥内含寄生电源。口较少,可节省大量的引线和逻辑电路。
2.DS18B20的内部结构
DS18B20内部结构如图2.2.1所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图2.2.2所示,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
图2.2.
图2.3 DS18B20的管脚排列
3、温度值高字节
高低温报警触发器TH和TL、配置寄存器均由一个字节的EEPROM组成,使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器的格式如下:
R1、R0决定温度转换的精度位数:R1R0=“00”,9位精度,最大转换时间为93.75ms;R1R0=“01”,10位精度,最大转换时间为187.5ms;R1R0=“10”,11位精度,最大转换时间为375ms;R1R0=“11”,12位精度,最大转换时间为750ms;未编程时默认为12位精度。
高速暂存器是一个9字节的存储器。开始两个字节包含被测温度的数字量信息;第3、4、5字节分别是TH、TL、配置寄存器的临时拷贝,每一次上电复位时被刷新;第6、7、8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。
4.DS18B20的工作时序
DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序,如图2.2.3(a)(b)(c)所示。
(a)初始化时序
(b)写时序
(c)读时序
图2.4 DS18B20的工作时序图
5.DS18B20高速暂存器共9个存储单元,如表所示:
序号
寄存器名称
作 用
序号
寄存器名称
0
温度低字节
以16位补码形式存放
4
配置寄存器
1
温度高字节
5、6、7
保留
2
TH/用户字节1
存放温度上限
8
CRC
3
HL/用户字节2
存放温度下限
4.1 以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在18B20的两个高低两个8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。
高8位
S
S
S
S
S
26
25
24
低8位
23
22
21
20
2-1
2-2
2-3
2-4
4.2 DS18B20有六条控制命令,如表所示:
指 令
约定代码
操 作 说 明
温度转换
44H
启动DS18B20进行温度转换
读暂存器
BEH
读暂存器9个字节内容
写暂存器
4EH
将数据写入暂存器的TH、TL字节
复制暂存器
48H
把暂存器的TH、TL字节写到E2RAM中
重新调E2RAM
B8H
把E2RAM中的TH、TL字节写到暂存器TH、TL字节
读电源供电方式
B4H
启动DS18B20发送电源供电方式的信号给主CPU
2.3 主要电路及功能
1.单片机的复位电路及时钟电路
单片机的时钟电路有1个12M 的晶振和两个20PF 的小电容组成,它们决定了单片机的工作时间精度为1 微秒。AT89C51单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。该单片机为51系列增强型8位单片机,它有32个I/O口,片内含4K FLASH工艺的程序存储器,便于用电的方式瞬间擦除和改写,而且价格便宜,其外部晶振为12MHz,一个指令周期为1μS。使用该单片机完全可以完成设计任务,其最小系统主要包括:复位电路、震荡电路。
图2.5单片机模块
2.显示电路
四位数码管有8位控码和4个段控码。数码管分共阴极和共阳极。而我们采用的是共阳极的数码管作为温度控制器的显示电路。则需要将阳极接在电源上。
图2.6 显示电路
3.温度传感器电路
温度检测控制模拟电路图DS18B20原件及其连线如图温度此传感器上显示的温度同步显示到液晶显示器上,并有加温,减温按钮。
图2.7温度检测控制模拟电路
4. 存储器AT24C02
(1)AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个8字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。
(2) 功能描述
AT24C02支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,由于A0、A1和A2可以组成000~111八种情况,即通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上,通过进行不同的配置进行选择器件。
图2.8 AT24c02
5. 温度上下限调节系统
通过按键控制键选着调节对象,通过上升下降调节值大小,控制开关,升温开关,降温开关,设置开关分别为,k1,k2,k3,开始显示的是当前温度,K1开关,用来控制进入温度上限,下限的调节界面。按k1,一次进入三个界面。按K2为加1开关,按一下,加1,k3减1开关,按一下,减1。
图2.9 上下限调节电路
7. 报警电路系统
通过LED指示灯的闪烁以及蜂鸣器的鸣叫实现报警,如果温度超过上限高温指示灯亮,蜂鸣器鸣叫,低于下限低温指示灯亮,蜂鸣器鸣叫。
图2.10报警电路
第三章 软件系统的设计
3.1程序流程图
温度低于低温下限,低温报警
3.2、AT24C02存取数据流程图
3.3 温度传感器流程图
第四章 仿真与调试
4.1 软件电路故障与解决办法
1.以断点或连续方式运行时,目标测试系统没有按照规定的功能进行操作或什么结果也没有,可能是由于程序转移到意外之处或在某处死循环所造成的。
2.不响应中断Cpu不响应中断或者是不响应某一个中断这种错误的现象是连续运行时不执行中断程序的操作。当断点在中断入口或者中断服务程序中时碰不到断点。错误可能由中断寄存器(IE、IP)的初值设置不当,使CPU没有开放中断或者不许某个中断源请求,或者对片内的定时器、串行口等特殊功能的寄存器和I/O接口程序有错误,造成中断没有被激活。又或者某一中断程序不是RET指令作为返回主程序的指令,CPU虽然已经返回到主程序但内部中断状态寄存器没有被消除,从而不影响中断,或者外部中断源的硬件故障使得外部中断请求无效。
4.2 软件调试方法
软件调试所使用的方法有:计算程序的调试方法、I/O处理程序的调试法、综合调试法等。
1、计算程序的调试方法:
计算程序的错误是一种静态的固定的错误,因此主要用单拍或者断点运行方法来调试。根据计算程序的功能,事先准备好一组测试数据。调试时,用仿真器写命令。将命令数据写入计算程序的缓冲单元,然后从计算程序开始运行到结束,运行结果与计算的正确数据做比较,如果对有的测试数据进行测试没有发现错误,则该计算程序调试成功。如果发现结果不正确,改用单步运行的方法找出错误所在。如果是计算错误,则需要修改重新设计程序,如果是局部的指令错误,修改局部程序就可以了。如果是用于测试的数据没有全部覆盖实际计算的原始数据的类型,调试没有发现错误可能在系统运行中暴露出来。
2、I/O接口处理程序的调试:
对于A/D转换器一类的I/O接口处理程序是实时处理程序,因此一般用全速断点运行方式或连续运行方法进行调试。
3.综合调试:
在完成了各个程序模块的调试工作之后,就可以进行系统的综合调试。综合调试采用全速运行或断点运行方式,这个阶段的主要工作是检测系统里面遗留的错误以及提高系统的动态性能和精度。在综合调试阶段,应该注意系统的晶振频率工作,使系统全速运行目标程序,实现预定功能技术指标之后,就可以将软件固化,然后在运行固化的目标程序,成功后目标系统就可以脱机运行。
4.3 仿真后,部分显示成果:
图4.3调节温度上下限
4.1 调节温度上线
4.2 调节温度下线
图4.3. 显示当前温度
图4.4 温度高于温度上限,高温报警灯亮,蜂鸣器鸣叫
图4.5 温度低于低温下限,低温报警灯亮,蜂鸣器鸣叫
第五章 设计总结
这种温度报警器结构简单。工作时,温度测量范围为0~250ºC。当温度达到预定值时,立刻发出报警信号,从而防止因温度升高或过低而带来的不必要的损失。 通过本次工程设计,又使我学到了许多书本上无法学到的知识,也使也深该体会到单片机技术应用领域的广泛,不仅使我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。在做本次工程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机工程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:AT89C51单片机及其引脚说明、ADC0808引脚图及其引脚功能等,为本次工程设计提供了一定的资料。经过这次的设计,为我们以后毕业设计的制作也奠定了一定的基础
第六章 参考文献
[1]谢辉主编.单片机原理及应用.化学工业出版社.2010年8月,第一版
[2]曹巧媛主编.单片机原理及应用(第二版).北京电子工业出版社,2002
[3]何力民编.单片机高级教程.北京航空大学出版社,2000
[4]陈强等.传感器技术与应用.高等教育出版社,2010
[5]王锦标,方崇智.过程计算机控制.清华大学出版社,1997:36~40
[6]胡寿松.自动控制原理,北京:国防工业出版社,2000:103—124
[7]刘伯春.智能PID调节器的设计及应用、电子自动化,1995:(3):20~25
[8]周景润,张丽娜.基于proteus的电路及单片机系统设计与仿真[M].北京:航空航天大学出版社,2006
[9]王忠飞,胥芳.MCS—51单片机原理及嵌入式系统应用[M].西安:西安电子科技大学出版社,2007
[10]赵娜,赵刚,于珍珠等.基于51单片机的温度测量系统[J].微计算机信息,2007,1—2
附录:
附录一
系统整体流程图:
附录二
程序代码:
;-------------------------------------------------
#include<reg52.h>
#define ui unsigned int
#define uc unsigned char //宏定义
sbit SET=P3^1; //定义调整键
sbit DEC=P3^2; //定义减少键
sbit ADD=P3^3; //定义增加键
sbit BEEP=P3^6; //定义蜂鸣器
sbit ALAM=P1^2; //定义灯光报警
sbit DQ =P3^7; //定义DS18B20总线I/O
sbit SCL=P1^6;
sbit SDA=P1^7;
sbit DIAN=P0^5; //小数点
bit bdata shanshuo_st; //闪烁间隔标志
bit bdata beep_st; //蜂鸣器间隔标志
uc x=0; //计数器
ui bai,shi,ge;
uc set_st=0; //状态标志
char shangxian,xiaxian;
//uc code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
uc code LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};
//============================================================================================
//====================================DS18B20=================================================
//============================================================================================
/*****延时子程序*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
void delay()//5微秒延时函数
{ ;; }
void start() //开始信号
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
void stop() //终止信号
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
void respons() //应答
{
uc i;
SCL=1;
delay();
while((SDA==1)&&(i<250))i++;//如果SDA为低应答有效,或者超过一定时间默认应答有效
SCL=0;
delay();
}
void init24c04()//I2C总线初始化
{
SDA=1;
delay();
SCL=1;
delay();
}
void write_byte(uc date)//写操作
{
uc i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
uc read_byte()//读操作
{
uc i,k;
SCL=0;
delay();
SDA=1;
delay();
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;
SCL=0;
delay();
}
return k;
}
void write_add(uc address,uc date)//往任意地址存数据
{
start();
write_byte(0xa0);//0xa0代表写入
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uc read_add(uc address)//读随意地址内容
{
uc date;
start();
write_byte(0xa0);//0xa0代表写入
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);//0xa1代表读出
respons();
date=read_byte();
stop();
return date;//返回值
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
uc w=0;
DQ = 1; //DQ复位
Delay_DS18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay_DS18B20(78); //精确延时,大于480us
DQ = 1; //拉高总线
Delay_DS18B20(14);
w = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
Delay_DS18B20(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
uc i=0;
uc dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
/*****写一个字节*****/
void WriteOneChar(uc dat)
{
uc i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}
/*****读取温度*****/
ui ReadTemperature(void)
{
ui b=0;
ui t=0;
ui a=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t=tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}
//=====================================================================================
//=================================
展开阅读全文