基于C51单片机的数字温度报警器的设计.docx
《基于C51单片机的数字温度报警器的设计.docx》由会员分享,可在线阅读,更多相关《基于C51单片机的数字温度报警器的设计.docx(36页珍藏版)》请在冰豆网上搜索。
基于C51单片机的数字温度报警器的设计
中国地质大学(武汉)
——基于C51单片机的数字温度报警器的设计
指导老师:
姓名:
班级:
学号:
专业:
机械设计制造及其自动化
院系:
机电学院
日期:
2016.01.10
基于单片机的数字温度报警器的设计
摘要:
随着现代信息化技术的飞速发展和传统工业改造的逐步实现,能独立工作的温度检测系统已广泛应用于各种不同的领域。
本次课程设计是基于AT89C51单片机进行温度传测定及报警等功能的设计,利用数字温度传感器DS18B20的测温系统,通过LED数码管和LCD液晶显示屏同时显示实时温度和报警预设温度,报警指示通过蜂鸣器的声音和16X16点阵屏同时报警,并能采取降温措施(直流电动机启动)。
同时本次设计的报警温度采用键盘输入的方式,确保各种报警温度可以方便的设定和调节。
本次课程设计的系统电路简单、操作简便,能任意设定报警温度,系统具有可靠性高、成本低、功耗小等优点。
关键词:
单片机、温度检测、AT89C51、DS18B20
一、引言:
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。
数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。
其中数字温度计就是一个典型的例子。
数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。
其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C51单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LED数码管和LCD液晶屏实现温度值显示。
二、设计方案
1.基本要求
实现实时温度显示,测温范围-55℃~~+125℃。
报警通过扬声器和发光二极管显示。
2.扩展功能
任意设定设置温度报警,通过键盘直接设定温度,设定报警温度通过LCD液晶屏显示。
报警同时采取风扇降温措施。
3.方案选定
本次课程设计在实验室进行,基于现有的实验器材,本次选用DS18B20温度传感器作为温度测量传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。
另外DS18B20具有3引脚的小体积封装,测温范围为-55℃~+125℃摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。
4.总体设计方案
图:
总体设计
三、功能模块分析
1.复位电路
复位操作是为了完成单片机内部电路的初始化,使单片机从一种确定的状态开始运行。
当AT89C51单片机的复位引脚RST出现2个机器周期以上,单片机就完成了复位操作。
如果RST持续为高电平,单片机就处于循环复位状态[1]。
复位通常有2种基本形式:
上电复位和开关复位。
上电复位要求要求接通电源后,自动实现复位操作。
开关复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。
本次采用的是常用的上电且开关复位电路,电路如下图所示:
图:
复位电路
上电后,由于电容充电,使RST持续一段高电平时间。
当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。
通常选择C=10~30μF,R=10~1000Ω。
复位操作使单片机进入初始化过程,其中包括使程序计数器PC=0000H,P0~P3=FFH,SP=07H,其它寄存器处于零。
2.键盘电路
本次使用实验仪提供的一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的延时,防止键盘抖动。
地址中的X是由KEY/LEDCS决定,参见地址译码。
做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。
以便用相应的地址来访问。
例如将KEY/LEDCS信号接CS0上,则列扫描地址为08002H,行码地址为08001H。
列扫描码还可以分时用作LED的位选通信号。
键盘在由单片机控制的温度报警器系统中的主要作用是通过按键向单片机输入指令,其中主要是输入控制温度的上下限,是人工控制单片机的主要手段。
在此温度报警系统由于使用伟福试验箱进行设计,本次使用的伟福试验箱的键盘原理图如下所示:
图:
键盘扫描电路
3.DS18B20温度检测电路
使用美国Dallas半导体公司的数字化温度传感器DS1820,支持“一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小,DS18B20产品的特点:
(1)只要求一个端口即可实现通信。
(2)在DS18B20中的每个器件上都有独一无二的序列号。
(3)实际应用中不需要外部任何元器件即可实现测温。
(4)测量温度范围在-55。
C到+125。
C之间。
(5)数字温度计的分辨率用户可以从9位到12位选择。
(6)内部有温度上、下限告警设置。
DS18B20内部结构如图所示:
连线
连接孔1
连接孔2
2
P1.0
SD18B20端口
图:
DS18B20内部结构
由于DS18B20单线通信功能是分时完成的,所以有严格的时隙概念,读写时序很重要。
系统对DS18B20的各种操作必须按协议进行。
操作协议为:
初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
其电路简图如下图:
图:
温度检测电路
4.显示电路
(1)LED数码管显示电路
显示电路主要是用于显示时间。
采用LED数码管进行显示是因为LED数码管具有以下几个优点:
(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。
(2)发光响应时间极短(<0.1μs),高频特性好,单色性好,亮度高。
(3)体积小,重量轻,抗冲击性能好。
本次实验使用实验仪提供的6位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
当用PIC5X驱动八段管时,是用I/O方式驱动,所以,驱动方式开关拨到“外驱”方式,PB0~PB7接八段的A~H段,PC0~PC5接G0~G5。
当用LPC2103驱动时,用的是模拟总线方式,所以只需将八段管的KEY/LED_CS片选接到CS0即可。
实验仪中8位段码输出地址为0X004H,位码输出地址为0X002H。
此处X是由KEY/LEDCS决定,参见地址译码。
做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。
以便用相应的地址来访问。
例如,将KEY/LEDCS接到CS0上,则段码地址为08004H,位码地址为08002H。
LED显示电路如图所示:
连线
连接孔1
连接孔2
1
LED_CS
CS0
图:
LED显示电路
(2)LCD液晶显示电路
本次实验使用实验仪提供的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏的左右两半屏。
图形液晶显示模块有两种连接方式。
一种为直接访问方式,一种为间接控制方式。
本实验仪采用直接控制方式。
直接控制方式就是将液晶显示模块的接口作为存储器或I/O设备直接挂在计算机总线上。
计算机通过地址译码控制E1和E2的选通;读/写操作信号R/W由地址线A1控制;命令/数据寄存器选择信号AO由地址线A0控制。
实际电路如上图所示。
地址映射如下(地址中的X由LCDCS决定,可参见地址译码部分说明)
0X000H
0X001H
0X002H
0X003H
0X004H
0X005
0X006H
0X007H
写E1指令
写E1数据
读E1状态
读E1数据
写E2指令
写E2数据
读E2状态
读E2数据
间接控制方式是计算机通过自身的或系统的并行接口与液晶显示模块连接,如MCS51的P1口和P3口,8255等并行接口芯片。
计算机通过对该并行接口输出状态的编程操作,完成对液晶显示模块所需时序的操作和数据的传输。
这种间接控制方式的电路简单,控制时序通过编程来实现。
LCD液晶显示电路如下图:
连线
连接孔1
连接孔2
3
LCD_CS
CS1
图:
LCD液晶显示电路
(3)16x16点阵显示
16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。
每个行与每个列可以选中一个发光管,共有256个发光管,采用动态驱动方式。
每次显示一行,10ms后再显示下一行。
实验电路图如下:
连线
连接孔1
连接孔2
4
16x16_CS
CS3
图:
16x16点阵显示电路
(4)二极管指示灯
实验除采取上述三种显示方式外,还设置有二极管电路来显示程序运行状态和报警状态,其电路图比较简单,下表为二极管电路连接方式。
连线
连接孔1
连接孔2
5
二极管L0
P1.2
6
二极管L1
P1.4
5.报警电路
本次试验采用的报警装置是比较简单的一种直接使用P16端口输出讲题变化的高低电平,端口输出的方波经放大滤波后,驱动扬声器发声。
声音的频率由端口输出时延时控制。
实验电路图如图所示:
连线
连接孔1
连接孔2
7
P1.6
喇叭输入
图:
蜂鸣器电路图
6.降温风扇电路
实验中用到的直流电动机无法通过单片机IO口直接输出高电平控制,需要通过驱动电路将电压放大后才能驱动直流电动机运行。
直流电动机与驱动电路如下图:
连线
连接孔1
连接孔2
8
P1.2
驱动输入
9
驱动输出
直流电机电压输入
图:
直流电动机及驱动电路
四、软件设计分析
1.主函数模块
主程序模块主要负责将各个子程序调用并连接在一起,用过中断函数不断刷新读取温度并将数据送达显示模块进行显示,驱动数码管把实时温度值送出在LED数码管显示查询记录温度值子程序,将当前设定温度实时显示在液晶显示屏,温度超过设定温度上限,单片机驱动蜂鸣器报警,同时驱动二极管发光、点阵屏显示、直流电动机转动。
当温度再次低于设定温度上限,上述装置取消报警状态,程序恢复正常运行。
主函数部分程序框图如下:
图:
主函数框图
2.温度检测模块
DSl8B20必须严格按照单总线通信协议,以保证数据的完整性。
该协议定义了几种时隙类型:
初始化、应答、写1、写0、读1、读0。
除了应答时隙所有这些时隙都是有主机发出。
总线上所传输的所有命令和数据都是字节的低位在前。
图:
DS18B20温度检测框图
3.键盘扫描模块
键盘扫描通过检测按键状态,当有按键按下时,键盘扫描程序将按键转换成键值,将键值返回到主函数,并记录按键的数值,转换成设定温度。
键盘扫描按键为D时,进入温度设定状态,连续输入三个数字设定温度完成,通过这一程序实现报警温度的设定。
键盘扫描程序框图如下:
图:
键盘扫描程序框图
4.LCD液晶显示模块
LCD液晶显示屏初始化时就开始在第一页显示初始设定的文字(“设定报警温度”),当检测到程序进入温度设定程序时,每当输入一个数据,液晶显示屏同步显示到相应的位置,输入三个数字后液晶屏显示设定温度如“36.5℃”,达到设计的目的。
LCD液晶显示程序框图如下所示:
图:
LCD液晶屏显示程序框图
5.中断模块
中断采用T0方式1,初始值定时为1.842ms。
中断模块包含三部分内容,一是进行初始温度的转化,二是进行点阵屏的刷新,实时显示需要显示的内容,三是进行报警判断,根据需要使蜂鸣器报警或停止报警。
把这三个程序放模块在中断的原因是,不会因为调整报警温度或进行点阵屏显示值而停止更新温度值,更能使蜂鸣器报警时不停止其他程序的运行。
中断模块流程图:
五、课程设计体会
本设计是以温度采集及控制过程设计为总目标,以89C51单片机最小应用系统为总控制中心,辅助设计有温度采样电路、LED数码管动态串行显示、LCD液晶屏显示、16X16点阵屏显示,二极管发光显示,蜂鸣器报警等。
本设计的重点、难点是:
(1)要掌握温度传感器的原理、结构、应用等;
(2)考虑从非电量信号到电量信号的电路实现原理以及与单片机的接口;
(3)熟悉MCS-51编程的技术,实现单片机对温度的调节控制;
(4)整体电路的仿真调试。
经过十天的资料查找和设计,我已完成了计算机控制的课程设计。
本文设计了温度报警系统,介绍了温度检测等控制器的硬件电路设计到软件设计的一系列步骤。
本设计采用89C51单片机作为控制芯片,辅助键盘和显示,实现了温度检测和报警的功能。
纵观整个设计系统,我更加熟悉了对89C51单片机的了解与认识,深切的将课堂中所学的理论知识运用到实践中,这是一个非常好的机会,我也很看重,如果没有这次的课程设计,我对单片机的学习还是一直是课堂中的认识,无法真真实实的了解一个单片机的运行状况,这次课程设计对我以后也有很大的影响。
在论文完成之际,我要对各位老师和各位学长表示最真挚的谢意。
老师工作认真、严谨治学,学长耐心指导,无私奉献,在老师和学长的带领下,我们圆满的完成了这次课程设计,
参考文献:
【1】钟晓伟,宋哲存,基于单片机的实验是温湿度控制系统设计[A]林业机械与木工设备
【2】叶景,基于单片机的温度控制系统的设计经验与交流,2008
【3】李丹妮,单片机温度控制系统设计[J]九江学院报2005
【4】刘笃仁,韩保君,传感器原理及应用技术西安电子科技大学出版社,2008
【5】李建民.单片机在温度控制系统中的应用[N].湖北:
江汉大学学报,1996:
9.
【6】胡汉才.单片机原理及接口技术[M].北京:
清华大学出版社,1996:
5.
【7】邵敏权.单片机原理实验及应用[M].吉林:
吉林科学技术出版社,1995:
3.
【8】付家才.单片机控制工程实践技术[M].北京:
化学工业出版社,2004:
12.
【9】彭伟.单片机C语言程序设计实训100例[M].北京:
北京航空航天大学出版社,2010:
5.
附录:
#include
#include
#include
codeunsignedcharcod[6]={1,2,3,4,5,6};
unsignedcharcod1[6];
unsignedcharcod2[6]={0,0,0,0,0,0};
#definePD161//122/2分成左右两半屏(122x32)
unsignedcharColumn;
unsignedcharPage_;//页地址寄存器D1,DO:
页地址
unsignedcharCode_;//字符代码寄存器
unsignedcharCommand;//指令寄存器
unsignedcharLCDData;//数据寄存器
xdataunsignedcharCWADD1_at_0x9000;//写指令代码地址(E1)
xdataunsignedcharDWADD1_at_0x9001;//写显示数据地址(E1)
xdataunsignedcharCRADD1_at_0x9002;//读状态字地址(E1)
xdataunsignedcharDRADD1_at_0x9003;//读显示数据地址(E1)
xdataunsignedcharCWADD2_at_0x9004;//写指令代码地址(E2)
xdataunsignedcharDWADD2_at_0x9005;//写显示数进地址(E2)
xdataunsignedcharCRADD2_at_0x9006;//读状态字地址(E2)
xdataunsignedcharDRADD2_at_0x9007;//读显示数据地址(E2)
xdataunsignedcharRowLow_at_0xb002;//行低八位地址
xdataunsignedcharRowHigh_at_0xb003;//行高八位地址
xdataunsignedcharColLow_at_0xb000;//列低八位地址
xdataunsignedcharColHigh_at_0xb001;//列高八位地址
#defineucharunsignedchar
#defineuintunsignedint
unsignedintCurTemp;
sbitIN=P1^0;
sbitWarLed=P1^2;
sbitRUN=P1^4;
sbitWAR=P1^6;
unsignedintb;
unsignedinta;
unsignedintc;
unsignedcharw=1;
unsignedcharv=1;
unsignedintbitmask;
//********************************数码表**********************************//
unsignedcharLEDBUF[6]=
{0x00,0x00,0x00,0x00,0x00,0x00};
codeunsignedintLEDMAP[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
codeucharCRYSTALTAB[][32]={
/*--文字:
行--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x40,0x10,0xA0,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0xFC,0x11,0x02,0x14,0xFE,0x17,
0x00,0x90,0xF8,0x51,0x08,0x31,0xF8,0x11,0x00,0x10,0xFE,0x0B,0x20,0x0C,0x40,0x08,
/*--文字:
停--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=16x16--*/
0x40,0x10,0xA0,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x90,0x20,0x50,
0x20,0x30,0xFE,0x1B,0x00,0x0C,0x00,0x88,0x00,0x40,0xFC,0x31,0x00,0x1C,0x00,0x08,
};
//数字字库
codeunsignedcharNUMTAB[][16]={
/*--文字:
0--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},
/*--文字:
1--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},
/*--文字:
2--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},
/*--文字:
3--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},
/*--文字:
4--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},
/*--文字:
5--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},
/*--文字:
6--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},
/*--文字:
7--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},
/*--文字:
8--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},
/*--文字:
9--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x16--*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},