数字温度计报警系统(附加完整代码)..

合集下载

数字温度计显示报警系统设计

数字温度计显示报警系统设计

数字温度计显示报警系统设计【摘要】在现代化社会发展的驱使下,人们的生活步调日益加快,对于温度的利用与掌握变得尤为重要。

本文主要就是利用单片机技术设计一款数字温度计显示报警系统,以STC89C51单片机为核心,配备液晶显示、温度传感器等完善温度计显示的功能设置。

温度传感器采用DS18B20芯片,这个温度计显示系统可以随时设置温度上、下限值,进行温度范围设置,同时当检测到的温度超过设置的范围时,系统会自动报警。

【关键词】单片机;液晶显示;温度传感器文章的核心主要从硬件设计和软件设计两个大的方面阐述。

硬件电路设计从功能上划分成各个功能小电路,通过对这些功能小电路的具体设计并建立合理的电气连接关系完成系统的硬件设计。

软件用汇编语言来实现,主要包括主程序、显示与键盘设置子程序、温度测量子程序。

整个系统采用5V电源供电。

基于对单片机的进一步学习和掌握,由此开展了本文的设计,即基于单片机技术的一款“数字温度计显示报警系统”。

它不仅融合了大量的单片机技术,同时也需要各种电路设计基础,以及对各种功能芯片的认识。

本文主要就是利用单片机技术设计一款数字温度计显示报警系统,以STC89C51单片机为核心,配备液晶显示、温度传感器等完善温度计显示的功能设置。

温度传感器采用DS18B20芯片,这个温度计显示系统可以随时设置温度上、下限值,进行温度范围设置,同时当检测到的温度超过设置的范围时,系统会自动报警。

一、具体设计方案1.系统采用STC89C51单片机为核心器件,控制整个系统的运行。

2.系统的温度采集器件采用的是DS18B20温度传感器,与单片机直接相连,测量精度可以达到0.1℃,测量范围为-55℃~+125℃。

3.系统的显示器件采用的是RT12864M液晶显示器。

4.温度的上限、下限的设定是通过接入键盘电路来实现的。

系统共设计了8个按键,按键接入STC89C51芯片的P1口的8个引脚,由液晶显示芯片完成查询具体按键状态。

温度测量、报警系统 C程序

温度测量、报警系统  C程序

程序名称:DS18B20温度测量、报警系统简要说明:DS18B20温度计,温度测量范围0~99.9摄氏度可设置上限报警温度、下限报警温度即高于上限值或者低于下限值时蜂鸣器报警默认上限报警温度为38℃、默认下限报警温度为5℃报警值可设置范围:最低上限报警值等于当前下限报警值最高下限报警值等于当前上限报警值将下限报警值调为0时为关闭下限报警功能编写:最后更新:09/04/16晚于寝室******************************************************************/ #include <AT89X52.h>#include "DS18B20.h"#define uint unsigned int#define uchar unsigned char //宏定义#define SET P3_1 //定义调整键#define DEC P3_2 //定义减少键#define ADD P3_3 //定义增加键#define BEEP P3_7 //定义蜂鸣器bit shanshuo_st; //闪烁间隔标志bit beep_st; //蜂鸣器间隔标志sbit DIAN = P2^7; //小数点uchar x=0; //计数器signed char m; //温度值全局变量uchar n; //温度值全局变量uchar set_st=0; //状态标志signed char shangxian=38; //上限报警温度,默认值为38signed char xiaxian=5; //下限报警温度,默认值为38ucharcode LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x ff};/*****延时子程序*****/void Delay(uint num){while( --num );}/*****初始化定时器0*****/void InitTimer(void){TMOD=0x1;TH0=0x3c;TL0=0xb0; //50ms(晶振12M)}/*****定时器0中断服务程序*****/void timer0(void) interrupt 1{TH0=0x3c;TL0=0xb0;x++;}/*****外部中断0服务程序*****/void int0(void) interrupt 0{EX0=0; //关外部中断0if(DEC==0&&set_st==1){shangxian--;if(shangxian<xiaxian)shangxian=xiaxian; }else if(DEC==0&&set_st==2){xiaxian--;if(xiaxian<0)xiaxian=0;}}/*****外部中断1服务程序*****/void int1(void) interrupt 2{EX1=0; //关外部中断1if(ADD==0&&set_st==1){shangxian++;if(shangxian>99)shangxian=99;}else if(ADD==0&&set_st==2){xiaxian++;if(xiaxian>shangxian)xiaxian=shangxian; }}/*****读取温度*****/void check_wendu(void){uint a,b,c;c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差 a=c/100; //计算得到十位数字b=c/10-a*10; //计算得到个位数字m=c/10; //计算得到整数位n=c-a*100-b*10; //计算得到小数位if(m<0){m=0;n=0;} //设置温度显示上限if(m>99){m=99;n=9;} //设置温度显示上限}/*****显示开机初始化等待画面*****/Disp_init(){P2 = 0xbf; //显示-P1 = 0xf7;Delay(200);P1 = 0xfb;Delay(200);P1 = 0xfd;Delay(200);P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****显示温度子程序*****/Disp_Temperature() //显示温度{P2 =0xc6; //显示CP1 = 0xf7;Delay(300);P2 =LEDData[n]; //显示个位P1 = 0xfb;Delay(300);P2 =LEDData[m%10]; //显示十位DIAN = 0; //显示小数点P1 = 0xfd;Delay(300);P2 =LEDData[m/10]; //显示百位P1 = 0xfe;Delay(300);P1 = 0xff; //关闭显示}/*****显示报警温度子程序*****/Disp_alarm(uchar baojing){P2 =0xc6; //显示CP1 = 0xf7;Delay(200);P2 =LEDData[baojing%10]; //显示十位P1 = 0xfb;Delay(200);P2 =LEDData[baojing/10]; //显示百位P1 = 0xfd;Delay(200);if(set_st==1)P2 =0x89;else if(set_st==2)P2 =0xc7; //上限H、下限L标示P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****报警子程序*****/void Alarm(){if(x>=10){beep_st=~beep_st;x=0;}if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0; else BEEP=1;}/*****主函数*****/void main(void){uint z;InitTimer(); //初始化定时器EA=1; //全局中断开关TR0=1;ET0=1; //开启定时器0IT0=1;IT1=1;check_wendu();check_wendu();for(z=0;z<300;z++){Disp_init();}while(1){if(SET==0){Delay(2000);do{}while(SET==0);set_st++;x=0;shanshuo_st=1;if(set_st>2)set_st=0;}if(set_st==0){EX0=0; //关闭外部中断0EX1=0; //关闭外部中断1check_wendu();Disp_Temperature();Alarm(); //报警检测}else if(set_st==1){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(shangxian);} }else if(set_st==2){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(xiaxian);} }}}/*****END*****/DS18B20.h:#include <AT89X52.h>#define DQ P3_6 //定义DS18B20总线I/O/*****延时子程序*****/void Delay_DS18B20(int num){while(num--) ;}/*****初始化DS18B20*****/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位Delay_DS18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低Delay_DS18B20(80); //精确延时,大于480usDQ = 1; //拉高总线Delay_DS18B20(14);x = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay_DS18B20(20);}/*****读一个字节*****/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char 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(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat>>=1;}}/*****读取温度*****/unsigned int ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=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);}/*****END*****/。

数字温度计显示报警系统设计

数字温度计显示报警系统设计

数字温度计显示报警系统设计【摘要】在现代化社会发展的驱使下,人们的生活步调日益加快,对于温度的利用与掌握变得尤为重要。

本文主要就是利用单片机技术设计一款数字温度计显示报警系统,以STC89C51单片机为核心,配备液晶显示、温度传感器等完善温度计显示的功能设置。

温度传感器采用DS18B20芯片,这个温度计显示系统可以随时设置温度上、下限值,进行温度范围设置,同时当检测到的温度超过设置的范围时,系统会自动报警。

【关键词】单片机;液晶显示;温度传感器文章的核心主要从硬件设计和软件设计两个大的方面阐述。

硬件电路设计从功能上划分成各个功能小电路,通过对这些功能小电路的具体设计并建立合理的电气连接关系完成系统的硬件设计。

软件用汇编语言来实现,主要包括主程序、显示与键盘设置子程序、温度测量子程序。

整个系统采用5V电源供电。

基于对单片机的进一步学习和掌握,由此开展了本文的设计,即基于单片机技术的一款“数字温度计显示报警系统”。

它不仅融合了大量的单片机技术,同时也需要各种电路设计基础,以及对各种功能芯片的认识。

本文主要就是利用单片机技术设计一款数字温度计显示报警系统,以STC89C51单片机为核心,配备液晶显示、温度传感器等完善温度计显示的功能设置。

温度传感器采用DS18B20芯片,这个温度计显示系统可以随时设置温度上、下限值,进行温度范围设置,同时当检测到的温度超过设置的范围时,系统会自动报警。

一、具体设计方案1.系统采用STC89C51单片机为核心器件,控制整个系统的运行。

2.系统的温度采集器件采用的是DS18B20温度传感器,与单片机直接相连,测量精度可以达到0.1℃,测量范围为-55℃~+125℃。

3.系统的显示器件采用的是RT12864M液晶显示器。

4.温度的上限、下限的设定是通过接入键盘电路来实现的。

系统共设计了8个按键,按键接入STC89C51芯片的P1口的8个引脚,由液晶显示芯片完成查询具体按键状态。

单片机的数字温度计设计方案附代码及仿真

单片机的数字温度计设计方案附代码及仿真

单片机的数字温度计设计方案(附代码及仿真)基于STC89C52的数字温度计目录1、绪论………………………………………………………………… (3)2、方案选择2.1、主控芯片选择 (3)2.2、显示模块 (3)2.3、温度检测模块 (4)3、系统硬件设计3.1、51单片机最小系统设计 (4)3.2、电源供电电路设计 (5)3.3、LCD显示电路设计 (6)3.4、温度检测电路设计 (7)4、系统软件设计4.1、温度传感器数据读取流程图 (9)4.2、系统程序设计 (10)5、编程和仿真5.1、Keil编程软件 (1)15.2、proteus (11)5.3、仿真界面 (11)6、总结..................................................................................... .. (12)7、附录附录1、原理图………………………………………………………………………….12附录2、程序清单 (13)1、绪论在信息高速发展的21世纪,科学技术的发展日新月异,科技的进步带动了测量技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。

我们已经进入了高速发展的信息时代,测量技术也成为当今科技的一个主流,广泛地深入到研究和应用工程的各个领域。

温度和人们的生活息息相关,温度的测量也就变得很重要。

2、系统方案选择2.1 主控芯片选择方案一:STC89C52RCSTC89C52RC是采用8051核的ISP在线可编程芯片,最高工作时钟频率80MHz,片内含8KB的可反复擦写1000次的Flash只读存储器,器件兼容MCS-51指令系统及8051引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在线可编程特定,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。

STC89C52RC系列单片机是单时钟周期、高速、低功耗的新一代8051单片机。

基于STC89C52和DS18B20的温度显示报警系统

基于STC89C52和DS18B20的温度显示报警系统

基于STC89C52和DS18B20的温度显示报警系统【摘要】:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度低于或高于设置温度范围内时,可以报警。

本系统采用STC89C52单片机作为控制主芯片,DS18B20数字温度传感器作为温度采集器件,运用蜂鸣器作为报警器,LED灯作为闪烁指示灯,三位共阴数码数作为LED显示器件。

关键词:单片机STC89C52 温度传感器DS18B20 蜂鸣器显示器一、设计目的1、学习基本理论在实践综合运用的经验,掌握工程系统设计的基本方法、设计步骤,培养综合设计与调试能力。

2、学会以STC89C52为核心芯片的温度报警器的设计方法和性能指标测试方法。

3、培养实践技能,提高分析和解决实际问题的能力。

二、设计任务及要求1、设计并制作一个可用显示模块显示实时温度、报警温度,当环境温度超过或低于某个值时,实施报警。

主要技术指标要求:设计温度分辨率为0.1摄氏度2、设计电路结构,画出编程流程框图,选择电路元件,计算确定元件参数,画出实用原理电路图。

二. MCS-51单片机单片机SCM(Single Chip Microcomputer),即Microcontroller,是把微型计算机主要部分都集成在一个芯片上的单芯片微型计算机。

主要包括了微处理器(CPU)、存储器(ROM, RAM)、输入/输出口(I/O口)和定时器/计数器、中断系统等功能部件。

单片机自70年代出现以来,已经有了很大的发展,被广泛应用于机械、测量控制、工业自动化、智能接口和智能仪表等许多领域。

1.MCS-51单片机的引脚图:2. MCS-51单片机的内部结构图:(1)电源引脚Vcc和Vss:Vcc(40脚):电源端,+5伏Vss(20脚):接地端(2)时钟电路引脚XTAL1和XTAL2XTAL1(18脚)和XTAL2(19脚):接外部晶体和微调晶体。

温度检测+显示代码

温度检测+显示代码
{
tab[0]='S';
tab[1]='E';
tab[2]='T';
tab[3]=' ';
tab[4]='T';
tab[5]='E';
tab[6]='M';
tab[7]='=';
tab[8]=(szwd/100)|0x30;
tab[9]=(szwd/10)%10|0x30;
tab[10]=(szwd%10)|0x30; //设定值的转换
szwd=25;
tab[15]=0x0d;
PCON = 0x80;
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xfa;
IE=0x90;
TR1=1;
Rn=0 ;
init();
while(k1==1){}
init_lcd();
while(1)
{
szwdzh(szwd);
xs(2,0); //显示设定温度
#include<reg51.h>
#include<stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define L_data P2
sbit E=P3^4;
sbit RW=P3^3;
sbit RS=P3^2;
Rn++;
if(SBUF==0x0d){Rn=0;RXB=1;}
if(Rn>=10){Rn=0;}

基于at89c51的数字温度报警系统

基于at89c51的数字温度报警系统

数字温度报警器附proteus仿真文件当温度在-20和70之间时:当温度大于70(71度)度时:当温度在小于-20(-30度)度时:C 程序源代码:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P1^4; //ds18b20与单片机连接口sbit BG=P1^3;unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; //共阴数码管字码表unsigned char code str1[]={0x0bf,0x86,0x0db,0x0cf,0x0e6,0x0ed,0x0fd,0x87,0x0ff,0x0ef}; //个位带小数点字码表unsigned char code wei[]={0x0fe,0x0fd,0x0fb,0x0f7}; uchar data disdata[5];uint tvalue; //温度值uchar tflag; //温度正负标志/**********ds1820程序************/void delay_18B20(unsigned int i) //延时1微秒{while(i--);}void ds1820rst() /*ds1820复位*/{unsigned char x=0;DQ = 1; //DQ复位delay_18B20(4); //延时DQ = 0; //DQ拉低delay_18B20(100); //精确延时大于480usDQ = 1; //拉高delay_18B20(40);}uchar ds1820rd() /*读数据*/{unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; //给脉冲信号dat>>=1;DQ = 1; //给脉冲信号if(DQ) dat|=0x80;delay_18B20(10);}return(dat);}void ds1820wr(uchar wdata) /*写数据*/{unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1;}read_temp() /*读取温度值并转换*/{uchar a,b;ds1820rst();ds1820wr(0xcc); // 跳过读序列号ds1820wr(0x44); // 启动温度转换ds1820rst();ds1820wr(0xcc); // 跳过读序列号ds1820wr(0xbe); // 读取温度a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0x0fff)tflag=0;else{tvalue=~tvalue+2; tflag=1; //负温度}tvalue=tvalue*(0.625); //温度值扩大10倍,精确到1位小数return(tvalue);}/*********************************/void ds1820disp() //温度值显示{uchar i;disdata[0]=tvalue/1000; //百位数disdata[1]=tvalue%1000/100; //十位数disdata[2]=tvalue%100/10; //个位数disdata[3]=tvalue%10; //小数位if(tflag==0){if(disdata[0]==0x00){disdata[0]=0x0a; //百位数位为0不显示if(disdata[1]==0x00) disdata[1]=0x0a; //十位数位为0不显示}}else //负温度{disdata[0]=0x0b; //负温度百位显示负号:- if(disdata[1]==0x00) disdata[1]=0x0a; //十位数位为0不显示for(i=0;i<150;i++){P2=wei[0];P0=str[disdata[3]];delay_18B20(20);P0=0;P2=wei[1];P0=str1[disdata[2]];delay_18B20(20);P0=0;P2=wei[2];P0=str[disdata[1]];delay_18B20(20);P0=0;P2=wei[3];P0=str[disdata[0]];delay_18B20(20);P0=0;}}/************主程序**********/void main(){int t;ds1820rst(); //初始化显示while(1){t=read_temp();read_temp(); //读取温度ds1820disp(); //显示if(t>700||((tflag==1)&t>200))BG=0;elseBG=1;}}下载地址:/s/1bnvm4hT。

温度监测报警系统设计报告

温度监测报警系统设计报告

目录一、设计任务与设计要求 (1)二、设计原理 (1)2.1 主要硬件介绍 (1)2.1.1 DS18B20数字温度传感器 (1)2.1.2 AT89C51单片机芯片 (3)2.2 系统原理结构 (3)三、设计方案 (4)3.1 硬件部分 (4)3.1.1 温度测量模块 (4)3.1.2 LED数码管显示模块 (4)3.1.3 按键模块 (5)3.1.4 系统整体结构仿真图 (5)3.2 软件部分 (5)3.2.1DS18B20传感器程序 (5)3.2.2键盘读取及确认程序 (7)3.2.3DS18B20操作流程图 (8)四、调试与性能分析 (9)4.1 proteus仿真结果 (9)4.2实物测试 (9)4.2.1正常情况 (9)4.2.2报警状态 (10)五、心得体会 (10)六、成品展示 (11)七、附录部分 (12)附件一、电路设计原理图 (12)附件二、系统设计原始代码程序 (13)一、设计任务与设计要求本设计主要利用单片机AT89C51 芯片和以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20相结合来实现装置周围温度的采集,其中以单片机AT89C51 芯片为核心,辅以温度传感器DS18B20和LED数码管及必要的外围电路,构成一个结构简单、测温准确、具有一定控制功能的温度监视警报装系统。

功能要求:添加温度报警功能,通过4个按键来设置温度的上下限值,当用DS18B20测得的温度不在所设置的温度范围内,蜂鸣器开始鸣报。

二、设计原理2.1 主要硬件介绍2.1.1 DS18B20数字温度传感器DS18B20 数字温度传感器提供9~12 位摄氏温度的测量,拥有非易失性用户可编程最高与最低触发点告警功能。

DS18B20 通过单总线实现通信,单总线通常是DS18B20连接到中央微控制器的一条数据线(和地)。

它能够感应温度的范围为-55℃~+125℃,在-10℃~+85℃的测量的精度是±0.5℃,而且DS18B20 可以直接从数据线上获取供电(寄生电源)而不需要一个额外的外部电源。

数字温度报警器说明书(重)

数字温度报警器说明书(重)

数字温度报警器说明书正面效果图一、概述:本数字温度报警器是基于51单片机及温度传感器(DS18B20)来设计的,主要实现:实时温度测量及显示,温度范围上下限设定,超出温度范围报警等功能。

温度测量范围0~99.9摄氏度,精度为0.1摄氏度。

可设置上限报警温度、下限报警温度(即高于上限值或者低于下限值时报警灯闪烁),默认上限报警温度为38℃、默认下限报警温度为5℃。

报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报警值等于当前上限报警值。

将下限报警值调为0时为关闭下限报警功能。

二、使用说明:1、开机:打开电源,机器进入初始化状态,此时数码管显示- - - -;片刻即开始显示当前温度。

2、查看当前上下限温度范围:按下【SET】键(左边键),数码管显示HXXX,并以1S的频率闪烁显示,H表示上限温度,再次按下【SET】键,数码管显示LXXX,并以1S的频率闪烁显示,L表示下限温度。

再按【SET】时退出设置,数码管显示当前实时温度。

3、重新设定上下限温度范围:当需要设置上限温度时,按下【SET】键一次,数码管显示HXXX前闪烁时,此时,如果需要提高上限温度,按【ADD】键(右边键),可以看到随着按键温度数字在增加,最大值不超过99摄氏度;如果需要降低上限温度值,按【DEC】键(中间键),可以看到随着按键,温度显示值在减小。

最小值不低于当前下限温度值;当需要设置下限温度时,再一次按下【SET】键,数码管显示LXXX,然后即可设置下限温度,下限温度设定方法与之相同,不再详述。

4、报警:当检测到当前实时温度高于上限温度值,或者低于下限温度值,系统会自动发出报警,报警为红灯一直闪烁。

除非重设上下限温度范围,否则报警一直持续。

51单片机设计数字温度计(流程图+源码+实物图片)

51单片机设计数字温度计(流程图+源码+实物图片)

DS18B20获取温度程序流程图DS18B20的读字节,写字节,获取温度的程序流程图如图所示。

DS18B20初始化程序流程图DS18B20读字节程序流程图DS18B20写字节程序流程图DS18B20获取温度程序流程图图3-4 DS18B20程序流程图显示程序设计显示电路是由四位一体的数码管来实现的。

由于单片机的I/O 口有限,所以数码管采用动态扫描的方式来进行显示。

程序流程图如图所示。

图显示程序流程图按键程序设计按键是用来设定上下限报警温度的。

具体的程序流程图如图所示。

N图按键程序流程图附1 源程序代码/********************************************************************* 程序名; 基于DS18B20的测温系统* 功能:实时测量温度,超过上下限报警,报警温度可手动调整。

K1是用来* 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限* 调节模式。

在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动* 退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除* 按键音,再按一下启动按键音。

在调节上下限温度模式下,K2是实现加1功能,* K1是实现减1功能,K3是用来设定上下限温度正负的。

* 编程者:ZPZ* 编程时间:2009/10/2*********************************************************************/#include<AT89X52.h> //将AT89X52.h头文件包含到主程序#include<intrins.h> //将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时)#define uint unsigned int //变量类型宏定义,用uint表示无符号整形(16位)#define uchar unsigned char //变量类型宏定义,用uchar表示无符号字符型(8位)uchar max=0x00,min=0x00; //max是上限报警温度,min是下限报警温度bit s=0; //s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右bit s1=0; //s1标志位用于上下限查看时的显示void display1(uint z); //声明display1()函数#include"ds18b20.h" //将ds18b20.h头文件包含到主程序#include"keyscan.h" //将keyscan.h头文件包含到主程序#include"display.h" //将display.h头文件包含到主程序/***********************主函数************************/void main(){beer=1; //关闭蜂鸣器led=1; //关闭LED灯timer1_init(0); //初始化定时器1(未启动定时器1)get_temperature(1); //首次启动DS18B20获取温度(DS18B20上点后自动将EEPROM中的上下限温度复制到TH和TL寄存器)while(1) //主循环{keyscan(); //按键扫描函数get_temperature(0); //获取温度函数keyscan(); //按键扫描函数display(temp,temp_d*0.625);//显示函数alarm(); //报警函数keyscan(); //按键扫描函数}}/********************************************************************* 程序名; __ds18b20_h__* 功能:DS18B20的c51编程头文件* 编程者:ZPZ* 编程时间:2009/10/2* 说明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d* (测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度”‘1’表* 示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表* 示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度”、‘1’表* 示“负温度”),标志位w(报警标志位‘1’启动报警‘0’关闭报警)。

一段完整可用的单片机温度计C++代码

一段完整可用的单片机温度计C++代码
delay(6); //66 us
}
DQ=1;
return(value);
}
//读出温度函数//
read_temp()
{
ow_reset();
delay(200);
write_byte(0xcc);
write_byte(0x44);
ow_reset();
delay(1);
write_byte(0xcc);
//延时电路程序//
void delay(uint t)
{
for (;t>0;t--);
}
void scan()
{
int j;
for(j=0;j<4;j++)
{
switch (j)
{
case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshu
{
uchar n=0;
if(tem>6348) //温度值正负判断
{tem=65536-tem;n=1;} //负温度求补码,标志位置1
display[4]=tem&0x0f; //取小数部分的值
display[0]=ditab[display[4]]; //存入小数部分显示值
display[4]=tem>>4; //取中间八位,即整数部分的值
uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uchar data temp_data[2]={0x00,0x00};
uchar data display[5]={0x00,0x00,0x00,0x00,0x00};

数字温度计显示报警系统设计

数字温度计显示报警系统设计
训练计划项 目 ( 项 目编 号 :2 0 1 3 1 0 4 4 8 0 3 2 )。
图 4 程 序 主 系 统 流 程 图
4 . 结 论
作者 简介 :刘鹏 飞 ( 1 9 9 2 一) ,男,山东平原人
我 们通 过 对 车刀 测 量 目标 的 分析 , 确 静 态 调 试 中 ,对 系 统 硬 件 进 行 了初 步 调 试 , 只是 排 除 了一些 明显 的静 态 故障 。 系 统在 的硬 件故 障 主 要是 靠 联机 在线 仿 真 来 排 除 的 。 在 断 电 情 况 下 ,插 上 所 有 元 器 件 , 并把 在线 仿 真 器与 系 统相 连 ,打 开 系 统 电源 ,启动 在 线 仿真 器 后开 始在 线 仿 真 调 试 。 再 进 行 软 件 设 计 、 调 试 的 过 程 , 分 为 以 下几 步进 行 :第 一 步 ,建 立用 户 源程 序 。按 照 单 片机 汇 编程 序 所要 求 的格 式 、 语 法规 定 ,把 源 程序 输 入 到编 程 软件 中 , 并 保存 ;第二 步 , 在编 程 软件 中,对 输入 的源 程 序 进行 编 译 ,直 至 语法 错 误全 部 纠 正 为止 。如无 语 法错 误 ,则进 行 下一 个 步 骤 ;第 三 步 ,动 态在 线 调 试 。这 一步 是对 源 程序 进 行调 试 。必须 要 有在 线 仿真 器 配 合 ,才 能 对源 程 序进 行 调 试 ;第 四步 ,将 调 试 完 毕 的用 户 程 序 通 过 E P R O M 编程器, 固化 在E P R O M 中。从 实质 上讲 ,系统 软件 的 调 试 是对 软硬 件 的 综合 调 试 ,一 方面 要 排 除 软件 错 误 , 同时 进一 步 解决 硬件 部分 的 遗 留 故障 。对 系 统 硬软 件 的综 合 调试 是完 成 系统 功 能 的最 后 一步 调试 ,也就 是 系 统 功 能实 现 的调 试 。通 过 上两 大 块 的调 试 , 系 统 的一 些 明显 故 障 已经被 排 除 ,但 这还 不 能保 证 系统 在 使用 中就 能够 正常 工 作 , 实现 理 想 功能 ,所 以这 一 步 的调试 是 至 关 重要 的, 需要 十 分丰 富 的调 试 经验 ,要根 据 系统 实 现 的结 果 ,能够 仔 细 分辩 故 障部 位 ,这样才 能保证我 们调 试的准确 性 。 五 、总结 本 文 所 设 计 的 这 款 “数 字 温 度 计 显 示 系统 ”,从 构 思到 设 计功 能 上具 有 很 强

STM32温度报警传感器代码

STM32温度报警传感器代码

主函数、main.c#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"#include "ds18b20.h"#include "key.h"#include <string.h>#include <stdio.h>#include <stdlib.h>int temp_low = 22;int temp_high = 32;int zanshi_low=0;int zanshi_hign=0;void TIM3_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值计数到5000为500msTIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_ITConfig( //使能或者失能指定的TIM中断TIM3, //TIM2TIM_IT_Update ,ENABLE //使能);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx外设}u8 flag=0;int main(void){u8 t = 0;u8 shuzu[20];u8 keyvalue=0;u8 gaibianshui=0;short temperature;delay_init(); //延时函数初始化uart_init(9600); //串口初始化为9600NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2LED_Init(); //初始化与LED连接的硬件接口TIM3_Int_Init(9999,7199);//10Khz的计数频率.计数到5000为500msLCD_Init();POINT_COLOR = RED; //设置字体为红色LCD_ShowString(0, 50, 200, 16, 16, "STM32 test");LCD_ShowString(0, 70, 200, 16, 16, "name: zhang qi qi ");//LCD_ShowString(0,90,200,16,16,"Max 32 C Min 26 C");memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low); LCD_ShowString(0, 90, 200, 16, 16, shuzu);while (DS18B20_Init()) //DS18B20初始化{LCD_ShowString(0, 130, 200, 16, 16, "DS18B20 Error");delay_ms(200);LCD_Fill(0, 130, 239, 130 + 16, WHITE);delay_ms(200);}POINT_COLOR = BLUE; //设置字体为蓝色LCD_ShowString(0, 110, 260, 16, 16, "The temperature is: . C now ");LCD_ShowChar(0+25*8,110,',',16,0);LCD_ShowChar(0+29*8,110,'!',16,0);while (1){POINT_COLOR = BLUE; //设置字体为蓝色if (t % 10 == 0) //每100ms读取一次{t = 0;temperature = DS18B20_Get_Temp();if (temperature < 0){LCD_ShowChar(0 + 40, 150, '-', 16, 0); //显示负号temperature = -temperature; //转为正数}elseLCD_ShowChar(0 + 40, 150, ' ', 16, 0); //去掉负号memset(shuzu, 0, 20);sprintf(shuzu, "The temperature is:%3d.%1dC", temperature / 10, temperature % 10);LCD_ShowString(0, 110, 200, 16, 16, shuzu);}delay_ms(10);//判断温度zanshi_low=temp_low*10;zanshi_hign=temp_high*10;if((temperature<zanshi_low)||(temperature>zanshi_hign)){if(temperature<zanshi_low){flag=1;printf("chaoxiaxian");}if(temperature>zanshi_hign){flag=2;printf("chaoshangxian");}}else{flag=0;LED0=1; //正常情况灯不亮LED1=1;}//获取温度时间控制tt++;//浏览开关KEY_Init();delay_ms(10);keyvalue=KEY_Scan(0);if(keyvalue!=0){if(keyvalue==3){gaibianshui=(gaibianshui+1)%3;}if(gaibianshui==1) //改变上限{if(keyvalue==2) //key1按下{temp_high++;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Minis %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}if(keyvalue==1) //key0按下{temp_high--;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}}if(gaibianshui==2) //改变上限{if(keyvalue==2) //key1按下{temp_low++;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}if(keyvalue==1) //key0按下{temp_low--;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}}keyvalue=0;}}}void TIM3_IRQHandler(void) //TIM3中断{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM 中断发生与否:TIM 中断源{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx 的中断待处理位:TIM 中断源//温度不正常处理灯if(flag==1){LED0 = !LED0;}if(flag==2){LED1 = !LED1;}}}LED 函数led.c#include "led.h"void LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//LED0-->PA.8 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.8GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//LED1-->PD.2 端口配置, 推挽输出GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出 .IO口速度为50MHzGPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 输出高}温度代码 s18b20.c#include "ds18b20.h"#include "delay.h"void DS18B20_Rst(void){DS18B20_IO_OUT(); //SET PA0 OUTPUTDS18B20_DQ_OUT=0; //拉低DQdelay_us(750); //拉低750usDS18B20_DQ_OUT=1; //DQ=1delay_us(15); //15US}//等待DS18B20的回应//返回1:未检测到DS18B20的存在//返回0:存在u8 DS18B20_Check(void){u8 retry=0;DS18B20_IO_IN();//SET PA0 INPUTwhile (DS18B20_DQ_IN&&retry<200){retry++;delay_us(1);};if(retry>=200)return 1;else retry=0;while (!DS18B20_DQ_IN&&retry<240){retry++;delay_us(1);};if(retry>=240)return 1;return 0;}//从DS18B20读取一个位//返回值:1/0u8 DS18B20_Read_Bit(void) // read one bit{u8 data;DS18B20_IO_OUT();//SET PA0 OUTPUTDS18B20_DQ_OUT=0;delay_us(2);DS18B20_DQ_OUT=1;DS18B20_IO_IN();//SET PA0 INPUTdelay_us(12);if(DS18B20_DQ_IN)data=1;else data=0;delay_us(50);return data;}//从DS18B20读取一个字节//返回值:读到的数据u8 DS18B20_Read_Byte(void) // read one byte{u8 i,j,dat;dat=0;for (i=1;i<=8;i++){j=DS18B20_Read_Bit();dat=(j<<7)|(dat>>1);}return dat;}//写一个字节到DS18B20//dat:要写入的字节void DS18B20_Write_Byte(u8 dat){u8 j;u8 testb;DS18B20_IO_OUT();//SET PA0 OUTPUT;for (j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if (testb){DS18B20_DQ_OUT=0;// Write 1delay_us(2); DS18B20_DQ_OUT=1;delay_us(60);}else{DS18B20_DQ_OUT=0;// Write 0delay_us(60);DS18B20_DQ_OUT=1;delay_us(2);}}}//开始温度转换void DS18B20_Start(void)// ds1820 start convert{DS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc);// skip romDS18B20_Write_Byte(0x44);// convert}//初始化DS18B20的IO口 DQ 同时检测DS的存在//返回1:不存在//返回0:存在u8 DS18B20_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PORTA口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PORTA0 推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_2); //输出1DS18B20_Rst();return DS18B20_Check();}//从ds18b20得到温度值//精度:0.1C//返回值:温度值(-550~1250)short DS18B20_Get_Temp(void){u8 temp;u8 TL,TH;short tem;DS18B20_Start (); // ds1820 start convertDS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc);// skip romDS18B20_Write_Byte(0xbe);// convertTL=DS18B20_Read_Byte(); // LSBTH=DS18B20_Read_Byte(); // MSBif(TH>7){TH=~TH;TL=~TL;temp=0;//温度为负}else temp=1;//温度为正tem=TH; //获得高八位tem<<=8;tem+=TL;//获得底八位tem=(float)tem*0.625;//转换if(temp)return tem; //返回温度值else return -tem;}键盘代码key.c#include "key.h"#include "delay.h"//按键初始化函数//PA15和PC5 设置成输入void KEY_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag.使能SWD.可以用SWD模式调试GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PA15GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PC5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入.默认下拉GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0}//按键处理函数//返回按键值//mode:0,不支持连续按;1,支持连续按;//返回值://0.没有任何按键按下//KEY0_PRES.KEY0按下//KEY1_PRES.KEY1按下//WKUP_PRES.WK_UP按下//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!u8 KEY_Scan(u8 mode){static u8 key_up=1;//按键按松开标志if(mode)key_up=1; //支持连按if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)){delay_ms(10);//去抖动key_up=0;if(KEY0==0)return KEY0_PRES;else if(KEY1==0)return KEY1_PRES;else if(WK_UP==1)return WKUP_PRES;}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;return 0;// 无按键按下}. .。

温度计报警系统

温度计报警系统

单片机课程设计设计题目单片机设计的温度报警器学院名称电气学院指导教师班级学号学生姓名摘要随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于STC89C52单片机的温度报警系统,详细描述了利用温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度控制,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。

DS18B20与STC89C52结合实现最简温度控制系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度的控制,有广泛的应用前景。

关键词:单片机,温度报警,STC89C52,DS18B20目录一.引言 (1)二.设计内容及性能指标 (1)三.系统器件的选择 (1)3.1主控制器模块 (1)3.2温度测量 (2)3.3设置温度 (3)3.4显示设置 (3)3.5电源选取 (4)四.硬件实现及单元电路设计 (4)4.1主控制模块 (4)4.2显示模块电路 (4)4.3数码管显示驱动电路 (5)4.4温度传感器电路 (5)4.5 蜂鸣器和发光二极管报警电路 (6)五.系统软件设计 (6)5.1程序结构分析 (6)5.2系统程序流程图 (6)六.系统的安装与调试 (8)七.结论 (8)八.参考文献 (8)九.附录 (9)单片机设计的温度报警器一.引言随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数就需要受制于现代信息基础的发展水平。

在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和温度报警装置具有重要的意义。

数字温度显示报警系统

数字温度显示报警系统

数字温度显示报警系统工学院毕业设计(论文)题目:数字温度显示报警系统专业:电子信息工程班级:06(2)班姓名:曹乾坤学号:2006654212指导教师:叶爱芹日期:2010年6月5日目录引言 (2)2. 设计要求 (3)2.1基本功能 (3)2.2扩展功能 (3)3. 总体设计方案 (3)3.1数字温度计设计方案论证 (3)3.1.1 方案一 (3)3.1.2 方案二 (3)3.2 总体设计框图 (4)3.3单片机的选择 (4)3.4 温度传感器的选择 (6)3.4.1 DS18B20的介绍 (6)3.5 显示模块选择 (9)3.5.1数码管的分类 (9)3.5.2数码管驱动原理 (10)4. 系统硬件电路设计 (11)4.1系统整体电路图 (11)4.2 单片机最小系统 (11)4.3 温度传感器系统 (12)4.3.1 DS18B20的测温原理 (12)4.4 报警电路设计 (15)4.5 显示电路设计 (15)4.6电源电路设计 (16)5. 系统软件设计 (17)5.1主程序 (17)5.2读出温度子程序 (18)5.3温度转换命令子程序 (18)5.4 计算温度子程序 (18)5.4 键盘扫描流程图 (20)6. 测试与结果分析 (20)6.1仿真软件介绍 (20)6.2 仿真结果 (21)6.2.1 用Keil进行程序编译 (21)6.2.2 在Proteus中仿真 (22)7. 总结与致谢 (25)参考文献: (26)英文摘要: (28)附录:源程序 (30)数字温度显示报警系统摘要:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,利用单片机AT89S52设计了一种数字温度计,它由单片机、DS18B20传感器以及LED 数码管等部件组成,本温度计属于多功能温度计,功能较强,可以设置上下限报警温度,且测量准确、误差小。

智能数字式温度测量报警系统设计

智能数字式温度测量报警系统设计

智能数字式温度测量报警系统温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。

随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。

系统硬件构成及原理系统组成框图如图1所示。

系统由4个外接的温度传感器及一个内部温度传感器、多通道温度传感器控制芯片、显示器、键盘电路、报警电路、抗干扰电路、单片机、通信接口及上位机组成。

将温度传感器转为电信号后,经过温度控制电路交微处理器处理,最后将温度值显示并存储出来。

通过键盘可以控制数据的回放,且可以通过接口与上位机进行通信。

系统具有超温报警功能。

(1)多通道智能温度传感器控制芯片。

本系统采用AD7417型5通道精密智能温度传感器集成电路,AD7417采用16引脚SOIC或TSSOP封装。

AD7417内部包括几个部分:1)内置温度传感器,它是单片带隙式,可将被测温度转换成电压信号,再经过基于电荷分配DAC的10位逐次逼近式A/D转换器转换成数字量。

2)2.5V基准电压源UREF,本系统采用外基准时,MCl403为2.5V外基准电压源。

3)多路转换器,它完成对5路信号的5选1工作。

4)逐次逼近型A/D转换器 (包括取样电容、电荷平衡比较器、时钟振荡器、控制逻辑和电荷分配式DAC)。

在对模拟信号取样时,UIN经过SW2对取样电容C 进行充电,C上储存电荷。

在对该电荷进行取样时,末位数值为1/2LSB。

(1LSB的大小等于UREF/1024=2.5/1024=2.44mV)A/D的转换以CONVST信号上升沿开始,以CONVST 的下降沿结束。

在自动转换模式下,读、写操作时会自动启动A/D的转换;操作结束后,跟踪/保持电路经过3μs后进入保持模式,并开始下次转换。

跟踪/保持时间为400μs。

A/D的转换时间由内部提供,不需外部时钟。

5)内基准转换开关(Sw1)完成内、外基准的转换。

6)数据比较器、数据输出电路、I2C接口、故障排队计数器电路,完成数据传输、处理等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.绪论目前,单片机已经在测控领域中获得了广泛的应用,它除了可以测量电信以外,还可以用于温度、湿度等非电信号的测量,能独立工作的单片机温度检测、温度控制系统已经广泛应用很多领域。

单片机是一种特殊的计算机,它是在一块半导体的芯片上集成了CPU,存储器,RAM,ROM,及输入与输出接口电路,这种芯片称为:单片机。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便的优点,使它迅速的得到了推广应用,目前已成为测量控制系统中的优选机种和新电子产品中的关键部件。

单片机已不仅仅局限于小系统的概念,现已广泛应用于家用电器,机电产品,办公自动化用品,机器人,儿童玩具,航天器等领域。

本次课程设计,就是用单片机实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。

本次采用DS18B20数字温度传感器来实现基于51单片机的数字温度计的设计。

传统的温度计有反应速度慢、读数麻烦、测量精度不高、误差大等缺点而下面利用集成温度传感器AD590设计并制作了一款基于AT89C51的4位数码管显示的数字温度计,其电路简单,软硬件结构模块化,易于实现。

该数字温度计利用AD590集成温度传感器及其接口电路完成温度的测量并转换成模拟电压信号,经由模数转换器ADC0804转换成单片机能够处理的数字信号,然后送到单片机AT89C51中进行处理变换,最后将温度值显示在D4、D3、D2、D1共4位七段码LED显示器上。

系统以AT89C51单片机为控制核心,加上AD590测温电路、ADC模数转换电路、4位温度数据显示电路以及外围电源、时钟电路等组成。

2.设计任务及要求2.1 设计任务现代社会生活中,多功能的数字温度计可以给我们的生活带来很大的方便;支持“一线总线”接口的温度传感器简化了数字温度计的设计,降低了成本;以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20为核心,以ATMEL公司的AT89S52为控制器设计的DS18B20温度控制器结构简单、测温准确、具有一定控制功能的智能温度控制器。

此次课程设计,就是用单片机[1]实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。

本次采用DS18B20数字温度传感器来实现基于51单片机的数字温度计的设计。

该数字温度计将外界的模拟信号转换成单片机能够处理的数字信号,然后送到单片机AT89C51中进行处理变换,最后将温度值显示在D6 ,D5,D4、D3、D2、D1共8位七段码LED显示器上。

系统以AT89C51单片机为控制核心,加上 6位温度数据显示电路以及外围电源、时钟电路等组成。

2.2 设计要求设计一个基于单片机的DS18B20数字温度计。

课程设计要求:(1)5V供电;(2)温度采集采用DS18B20;(3)6位LED显示;(4)4个按键,分别是显示当前温度,显示报警温度,报警温度加一,报警温度减一;(5)当温度达到报警温度值时,蜂鸣器进行报警;(6)设计温度控制器原理图;(7)学习用PROTEL画出该原理图;设计和绘制软件流程图,用C语言进行程序编写;焊接硬件电路,进行调试。

3.总体设计方案及器件分析3.1 设计总体方案提及到温度的检测,我们首先会考虑传统的测温元件有热电偶和热电阻,而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试也复杂,制作成本高。

因此,本数字温度计设计采用智能温度传感器DS18B20作为检测元件,测温范围为-55°C至+125°C,最大分辨率可达0.0625°C。

DS18B20可以直接读出被测量的温度值,而采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。

按照系统设计功能的要求,确定系统由三个模块组成:主控制器STC89C51,温度传感器DS18B20,驱动显示电路,报警电路,复位电路以及按键输入电路。

总体电路框如下图3.1所示:图3.1 总体电路框图3.2 单片机AT89S52由于已经学过单片机课程,这里对该单片机只作简单介绍。

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash 存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8 位微控制器 8K 字节在系统可编程 Flash AT89S523.3 温度传感器DS18B20DALLAS 最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。

DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。

温度测量范围为-55~+125 摄氏度,可编程为9位~12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。

被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3 根或2 根线上,CPU只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

DS18B20 的性能特点如下:1.独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯2.DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温3.DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内4.适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电5.温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃6.零待机功耗7.可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温以上特点使DS18B20非常适用与多点、远距离温度检测系统。

DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18B20的管脚排列、各种封装形式如图3.2所示,DQ 为数据输入/输出引脚。

开漏单总线接口引脚。

当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。

当工作于寄生电源时,此引脚必须接地。

其电路图 3.3所示.。

图 3.2 外部封装形式图3.3传感器电路图3.3.1 DS18B20注意事项DS18B20 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:1.DS18B20 从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。

2.在实际使用中发现,应使电源电压保持在5V 左右,若电源电压过低,会使所测得的温度精度降低。

3.效果。

在使用PL/M、C等高级语言进行的硬件开销需要相对复杂的软件进行补偿.3.3.2 DS18B20 内部结图为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM 单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。

DS18B20采用3脚PR-35 封装或8脚SOIC封装,其内部结构框图如图 3.4所示图 3.4 DS18B20内部结构框图64 b 闪速ROM 的结构如下:MSBLSBMSBLSBMSBLSB开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48 位,最后8位是前面56 位的CRC 检验码,这也是多个DS18B20 可以采用一线进行通信的原因。

温度报警触发器TH 和TL ,可通过软件写入户报警上下限。

主机操作ROM 的命令有五种,如表3.1所列表3.1DS18B20温度传感器的内部存储器还包括一个高速暂存RAM 和一个非易失性的可电擦除的EERAM 。

高速暂存RAM 的结构为8字节的存储器,结构如图3.5所示。

便笺是存储器(上电状态)Byte 0Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6Byte 7Byte 8图 3.5 高速暂存RAM 结构图指 令 说 明读ROM (33H ) 读DS1820的序列号匹配ROM (55H ) 继读完64位序列号的一个命令,跳过ROM (CCH ) 此命令执行后的存储器操作将搜ROM (F0H ) 识别总线上各器件的编码,为操报警搜索(ECH )仅温度越限的器件对此命令作前2个字节包含测得的温度信息,第3和第4字节TH 和TL 的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

LSBMSB当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.062 5 ℃/LSB 形式表示。

温度值格式如下:MSBLSBMSBLSB这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM 中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

相关文档
最新文档