基于单片机AT89C51的温度自动检测系统代码及软件模拟

温度自定检测系统1. delay .h#ifndef _DELAY_H#define _DELAY_Hvoid delay_ms(uint timer);void delay_us(uchar timer);#endif2.delay .c#include "main.h"void delay_ms(uint timer) //延时1ms { uchar j = 0;while(timer--){ for(j = 124; j>0; j--){ ; }}}void delay_us(uchar timer) //延时约9us*timer + 6um { for( ; timer>0; timer--){ _nop_(); }}******************************************************************************************3.ds1302.h#ifndef _DS1302_H#define _DS1302_H#include "main.h"//DS1302 控制字(地址/命令)#define DS1302_SEC 0x80#define DS1302_MIN 0x82#define DS1302_HOUR 0x84#define DS1302_DATE 0x86#define DS1302_MONTH 0x88#define DS1302_DAY 0x8A#define DS1302_YEAR 0x8C#define DS1302_WRITE 0x8E#define DS1302_POWER 0x90//DS1302 写保护#define DS1302_ENABLE 0x00 //写使能#define DS1302_DI SABLE 0x80 //写保护void ds1302_init(void);void write_ds1302(uchar addr , uchar dat);uchar read_ds1302(uchar addr);SYSTEM_TIME read_time(void);void set_time(SYSTEM_TIME str_time);#endif4.ds1302.c#include "main.h"#include "ds1302.h"//DS1302 的引脚定义sbit DS_RST = P1^2; //RST 管脚sbit DS_SCLK = P1^3; //SCLK 管脚sbit DS_IO = P1^4; //IO 管脚#define BCD2DEC(X) (((X&0x70)>>4)*10 + (X&0x0F)) //用于将BCD 码转成十进制#define DEC2BCD(X) ((X/10)<<4 | (X%10)) //用于将十进制转成BCD 码void ds1302_init(void) //初始化DS1302 的引脚{ DS_RST = 0;DS_SCLK = 0;DS_IO = 0;} void write_byte(uchar dat) //写单字节到DS1302{ uchar i = 0;for(i=0;i<8; i++){ DS_IO = (dat&1);DS_SCLK = 0;_nop_();_nop_();DS_SCLK = 1; //上升沿发出数据_nop_();_nop_();dat >>= 1;}}uchar read_byte(void) //从DS1302 读单字节{ uchar i = 0;uchar dat = 0;uchar tmp = 0;for(i=0;i<8; i++){ DS_SCLK = 1;_nop_();_nop_();DS_SCLK = 0; //下降沿读出数据_nop_();_nop_();tmp = DS_IO;dat >>= 1; //先读的是低位,移位为低位dat |= (tmp<<7);}dat = BCD2DEC(dat); //BCD 转换return(dat);}uchar read_ds1302(uchar addr) //从DS1302 的指定位置读数据{ uchar tmp;DS_RST = 0;DS_SCLK = 0;DS_RST = 1;write_byte(addr);tmp = read_byte();DS_RST = 0;DS_SCLK = 1;return(tmp);}void write_ds1302(uchar addr , uchar dat) //写数据到DS1302 的指定位置{ uchar tmp = 0;tmp = DEC2BCD(dat);DS_RST = 0;DS_SCLK = 0;DS_RST = 1;write_byte(addr);write_byte(tmp);DS_RST = 0;DS_SCLK = 1;}SYSTEM_TIME read_time(void) //读取年、月、日、时、分、秒、星期{ SYSTEM_TIME str_time;str_time.year = read_ds1302(DS1302_YEAR|0x01);str_time.month = read_ds1302(DS1302_MONTH|0x01);str_time.date = read_ds1302(DS1302_DATE|0x01);str_time.hour = read_ds1302(DS1302_HOUR|0x01);str_time.min = read_ds1302(DS1302_MIN|0x01);str_time.sec = read_ds1302(DS1302_SEC|0x01);str_time.day = read_ds1302(DS1302_DAY|0x01);return(str_time);}void set_time(SYSTEM_TIME str_time) //置DS1302 的年、月、日、时、分、秒、星期{ write_ds1302(DS1302_YEAR, str_time.year);write_ds1302(DS1302_MONTH, str_time.month);write_ds1302(DS1302_DATE, str_time.date);write_ds1302(DS1302_HOUR, str_time.hour);write_ds1302(DS1302_MIN, str_time.min);write_ds1302(DS1302_SEC, str_time.sec);write_ds1302(DS1302_DAY , str_time.day);}******************************************************************************************5.DS18B20.h#ifndef _DS18B20_H#define _DS18B20_Hvoid read_temper(uchar *pbuff);void temper_convert(void);#endif6.DS18B20.c#include "main.h"#include "delay.h"sbit DQ = P1^5; // 数据通信线DQvoid master_reset(void) //初始化DS18B20(产生复位脉冲、等待应答信号){ uint i = 0;DQ = 1;DQ = 0;delay_us(80); //拉低480~960us,这里大该80*9+8us//for(i=100; i>0; i--);DQ = 1; // 产生上升沿i = 20;while(DQ == 1) //上升沿,等待应答信号(15~60us){ if(i-- == 0)break;}i = 100;while(DQ == 0) //应答信号60~240us{ if(i-- == 0)break;}delay_us(1); //短暂延时} bit sing_read_bit(void) //读取数据的一个位(足读时隙要求){ bit b = 0;DQ = 0; //把总线拉低,低电平延时大于1us_nop_();DQ = 1; //释放低电平,等待DS18B20 输出数据delay_us(1); //延时15us 以上,读时隙下降沿后15us,DS18B20 输出数据才有效b = DQ;delay_us(5); //延时大于45us(5*9+8us)return (b);}uchar sing_read_byte(void) //读取数据的一个字节{ uchar i,j,b;i = 0;for (i=1; i<=8; i++){ j = sing_read_bit();b = (j<<7)|(b>>1);}return(b);}void sing_write_byte(uchar b) //写一个字节数据(注意写0 和写1 的时序){ uint i = 0;uchar j = 0;bit bTmp = 0;for(j=1;j<=8;j++){ bTmp = b&0x01;b = b>>1; //取下一位(由低位向高位)if (bTmp){ DQ = 0; //写1i++;i++; //延时,使得15us 以内拉高DQ = 1;i = 8;while(i>0) i--; //整个写1 时限不低于60us }else{ DQ = 0; //写i = 8;while(i>0) i--; //保持低电平在60us 到120us 之间DQ = 1;i++;i++;}}}void temper_convert(void) //启动温度转换{ EA = 0;master_reset(); //初始化DS18B20(产生复位脉冲、等待应答信号)sing_write_byte(0xCC); // skip rom 命令sing_write_byte(0x44); // convert T 命令EA = 1;}void read_temper(uchar *pbuff) //读取温度值{ uchar tplsb,tpmsb;EA = 0;master_reset(); //初始化DS18B20(产生复位脉冲、等待应答信号)sing_write_byte(0xCC); // skip rom 命令sing_write_byte(0xBE); // read scratchpad 命令tplsb = sing_read_byte(); // 温度值低位字节(其中低4 位为二进制的“小数”部分)tpmsb = sing_read_byte(); // 高位值高位字节(其中高5 位为符号位)EA = 1;*pbuff = (tpmsb<<4)|(tplsb>>4);*(pbuff+1) = (tplsb&0x0F);}******************************************************************************************7.iic.h#ifndef _IIC_H#define _IIC_H#include "main.h"void init_IIC(void);void write_IIC(uchar add,uchar dat);uchar read_IIC(uchar add);#endif8.iic.c#include "main.h"sbit SDA = P1^1; //SDA 管脚sbit SCL = P1^0; //SCL 管脚void delay(void) //短暂延时函数,大概12um { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();// _nop_();_nop_();}void init_IIC(void) //初始化II C{ SDA = 1;delay();SCL = 1;delay();}void start(void) // IIC 起始信号{ SDA = 1;delay();SCL = 1;delay();SDA = 0;delay();}void stop(void) // IIC 终止信号{ SDA = 0;delay();SCL = 1;delay();SDA = 1;delay();}void ack(void) // II C ACK 应答信号{ uchar i=0;SCL = 1;delay();while((SDA==1)&&(i<250)){ i++; }SCL = 0;delay();}void noack(void) // II C NOACK 应答信号{ SDA = 1;delay();SCL = 1;delay();SCL = 0;delay();}void IIC_write_byte(uchar dat) // II C写数据{ uchar i,tmp;tmp = dat;for(i=0;i<8;i++){ SCL = 0;delay();if(tmp&0x80){ SDA = 1; }else{ SDA = 0; }tmp =tmp<<1;delay();SCL = 1;delay();}SCL = 0;delay();SDA = 1;delay();}uchar IIC_read_byte(void) // II C 读数据{ uchar i,dat;SCL = 0;delay();SDA = 1;delay();for(i=0;i<8;i++){ SCL = 1;delay();dat = dat<<1;if(SDA){ dat++; }SCL = 0;delay();}return dat;}void write_IIC(uchar addr , uchar dat) //指定地址写数据{ start();IIC_write_byte(0xa0);ack();IIC_write_byte(addr);ack();IIC_write_byte(dat);ack();stop();}uchar read_IIC(uchar add) //指定地址读数据{ uchar temp;start();IIC_write_byte(0xa0);ack();IIC_write_byte(add);ack();start();IIC_write_byte(0xa1);ack();temp = IIC_read_byte();noack();stop();return temp;}******************************************************************************************9.ks0108.h#ifndef _KS0108_H#define _KS0108_Hvoid ks0108_init(void);void show_time(SYSTEM_TIME str_time);void show_temperature(uchar int_temper , uchar dec_temper , uchar state);void show_area(uchar down_temper , uchar up_temper);#endif 10.KS0108.c#include "main.h"#define DATA P0 //LCD12864 数据线sbit RS = P3^7; // 数据\ 指令选择sbit RW = P3^6; // 读\写选择sbit EN = P2^0; // 读\写使能sbit CS1 = P1^6; // 片选1sbit CS2 = P1^7; // 片选2/************************************************************** 定义中文字库* 宋体、小四(12),点阵为:宽x 高=16x16,纵向取模、字节倒序**************************************************************/uchar code PIC1616[]={0x00,0x02,0x07,0xE7,0xFA,0x1C,0x06,0x02,0x02,0x02,0x02,0x02,0x06,0x1E,0x1E,0x00, //℃0x00,0x00,0x00,0x07,0x1F ,0x38,0x60,0x40,0x40,0x40,0x40,0x40,0x60,0x38,0x18,0x00,0x00,0x00,0x40,0x42,0x5E,0x5C,0x48,0x40,0x7F ,0x7F ,0x50,0x5E,0x4E,0xC4,0xC0,0x00, //当0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F ,0x7F ,0x00,0x08,0x08,0xE8,0xE8,0xA9,0xAF ,0xEE,0xEA,0x08,0xC8,0xCC,0x0F ,0xEB,0xEA,0x08,0x08, //前0x00,0x00,0x7F ,0x7F ,0x24,0x64,0x7F ,0x3F ,0x00,0x1F ,0x5F ,0xC0,0xFF ,0x7F ,0x00,0x00,0x00,0x02,0x02,0xC2,0xC2,0x02,0x02,0x02,0xFE,0xFE,0x82,0x82,0x82,0x82,0x82,0x02, //正0x20,0x20,0x20,0x3F ,0x3F ,0x20,0x20,0x20,0x3F ,0x3F ,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x18,0x09,0xEF ,0xEE,0xAA,0xAF ,0xAF ,0xA8,0xEC,0xEF ,0x2B,0x3A,0x18,0x08, //常0x00,0x00,0x3E,0x3E,0x02,0x02,0x02,0xFF ,0xFF ,0x02,0x12,0x32,0x3E,0x1E,0x00,0x00,0x40,0x48,0x48,0x48,0xFF ,0xFF ,0x48,0xCA,0xC2,0xFE,0xBE,0xA2,0xE2,0xFE,0xBE,0x00, //超0x60,0x7F ,0x3F ,0x60,0x7F ,0x7F ,0x42,0x42,0x5F ,0x5F ,0x48,0x48,0x48,0x5F ,0x5F ,0x40,0x10,0x31,0xA7,0xF6,0x70,0x7E,0x7E,0x4A,0x4A,0x4A,0x4A,0x7E,0x7E,0x00,0x00,0x00, //温0x02,0xFE,0xFF ,0x41,0x7F ,0x7F ,0x41,0x7F ,0x7F ,0x41,0x7F ,0x7F ,0x41,0x7F ,0x7F ,0x40,};/************************************************************** 定义数字、符号点阵* 宋体、小四(12),点阵为:宽x 高=8x16;* 纵向取模、字节倒序(逆向、列行式)**************************************************************/uchar code PIC0816[]={0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x0F ,0x1F ,0x30,0x20,0x30,0x1F ,0x0F , //00x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x20,0x20,0x3F ,0x3F ,0x20,0x20,0x00, //10x00,0x70,0x78,0x08,0x08,0x88,0xF8,0x70,0x00,0x30,0x38,0x2C,0x26,0x23,0x31,0x30, //20x00,0x30,0x38,0x88,0x88,0xC8,0x78,0x30,0x00,0x18,0x38,0x20,0x20,0x31,0x1F ,0x0E, //30x00,0x00,0xC0,0xE0,0x30,0xF8,0xF8,0x00,0x00,0x07,0x07,0x24,0x24,0x3F ,0x3F ,0x24, //40x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x19,0x39,0x21,0x20,0x31,0x1F ,0x0E, //50x00,0xE0,0xF0,0x98,0x88,0x98,0x18,0x00,0x00,0x0F ,0x1F ,0x31,0x20,0x31,0x1F ,0x0E, //60x00,0x38,0x38,0x08,0xC8,0xF8,0x38,0x08,0x00,0x00,0x00,0x3F ,0x3F ,0x00,0x00,0x00, //70x00,0x70,0xF8,0x88,0x08,0x88,0xF8,0x70,0x00,0x1C,0x3E,0x23,0x21,0x23,0x3E,0x1C, //80x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x00,0x31,0x33,0x22,0x33,0x1F ,0x0F , //9//up0x40,0x70,0x7C,0xFF ,0xFF ,0x7C,0x70,0x40,0x00,0x00,0x00,0x7F ,0x7F ,0x00,0x00,0x00, //10//down0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,0x00,0x02,0x0E,0x3E,0xFF ,0xFF ,0x3E,0x0E,0x02, //11//-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, //12//+0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x01,0x01,0x01,0x1F ,0x1F ,0x01,0x01,0x01, //13//:0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00, //14//.0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00,0x00,0x00,0x00, //15};uchar check_state(void) //检查LCD 状态,是否忙{ uchar i = 0;uchar tmp = 0; //状态信息(判断是否忙)RS = 0; //数据\指令选择,D/I (RS)=“L”,表示DB7~DB0 为显示数据RW = 1; //R/W=“H”,E=“H”数据被读到DB7~DB0for(i=0;i<6; i++){ DATA = 0x00;EN = 1; //拉高EN 管脚为高电平_nop_(); //一个时钟延时tmp = DATA;EN = 0;tmp = 0x80 &tmp; //仅当第7 位为0 时才可操作(判别busy 信号)if(tmp == 0){ break; }}return(tmp);}void write_cmd(uchar cmd) //写命令到LCD{ uchar stat = 0;stat = check_state(); //状态检查,LCD 是否忙- 15 -RS = 0; //向LCD 发送命令。

合集下载

基于at89c51单片机的水温控制系统的设计文献综述

基于at89c51单片机的水温控制系统的设计文献综述

基于at89c51单片机的水温控制系统的设计文献综述基于AT89C51单片机的水温控制系统的设计文献综述一、引言水温控制系统在工业、家电、农业等领域有着广泛的应用。

随着科技的发展,单片机作为微控制器在控制系统中的应用越来越广泛。

AT89C51单片机作为一种常用的单片机,具有性能稳定、价格低廉等优点,被广泛应用于水温控制系统的设计中。

本文将对基于AT89C51单片机的水温控制系统的设计进行文献综述。

二、AT89C51单片机简介AT89C51是一种常用的8位单片机,由美国ATMEL公司生产。

它具有4K字节的Flash 存储器、128字节的RAM、32位I/O端口、两个16位定时器/计数器、一个5向量两级中断结构、一个全双工串行通信口等功能。

AT89C51单片机适用于各种控制领域,如温度、湿度、压力等。

三、水温控制系统设计水温控制系统主要由温度传感器、单片机控制器、执行器等组成。

传感器负责采集水温信息,并将信息传递给单片机控制器。

单片机控制器根据设定的温度值与实际水温的差值,通过执行器调节加热元件的工作状态,从而实现水温的自动控制。

在基于AT89C51单片机的水温控制系统中,常用的温度传感器有热敏电阻、热电偶等。

执行器则可以选择继电器、可控硅等设备,用于控制加热元件的工作状态。

为了实现精确的温度控制,可以采用模糊控制、PID控制等控制算法。

四、AT89C51单片机在水温控制系统中的应用AT89C51单片机在水温控制系统中主要负责温度信号的采集、处理和控制输出。

通过编程实现温度信号的采集和转换,并根据设定值与实际水温的差值,通过执行器调节加热元件的工作状态,从而实现水温的自动控制。

此外,AT89C51单片机还可以实现报警、显示等功能,提高系统的智能化程度。

五、总结与展望基于AT89C51单片机的水温控制系统具有结构简单、成本低廉、易于实现等优点,被广泛应用于各个领域的温度控制中。

随着科技的发展,人们对水温控制系统的精度和智能化程度的要求越来越高。

基于单片机的水温控制系统设计

基于单片机的水温控制系统设计

基于单片机的水温控制系统设计引言在能源日益紧张的今天,电热水器,饮水机,电饭煲之类的家用电器在保温时,由于其简单的温控系统,利用温敏电阻来实现温控,因而会造成很大的能源浪费浪费。

利用 AT89C51 单片机为核心,配合温度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。

单片机可将温度传感器检测到的水温模拟量转换成数字量,显示于LED 显示器上。

该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

本设计任务和主要内容设计并制作一个水温自动控制系统,控制对象为1升净水,容器为搪瓷器皿。

水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保持设定的温度基本不变。

本设计主要内容如下:(1)温度设定范围为40~90℃,最小区分度为1℃,标定温度≤1℃。

(2)环境温度降低时温度控制的静态误差≤1℃。

(3)用十进制数码管显示水的实际温度。

(4)采用适当的控制方法,当设定温度突变(由40℃提高到60℃)时,减小系统的调节时间和超调量。

(5)温度控制的静态误差≤0.2℃。

系统主要硬件电路设计单片机控制系统原理框图温度采样电路选用传感器AD590。

其测量范围在-50℃--+150℃,满刻度范围误差为±0.3℃,当电源电压在5—10V之间,稳定度为1﹪时,误差只有±0.01℃。

此器件具有体积小、质量轻、线形度好、性能稳定等优点。

系统的信号采集电路主要由温度传感器(AD590)、基准电压(7812)及A/D转换电路(ADC0804)三部分组成。

信号采集电路温度控制电路此部分电路主要由光电耦合器MOC3041和双向可控硅BTA12组成。

MOC3041光电耦合器的耐压值为400v,它的输出级由过零触发的双向可控硅构成,它控制着主电路双向可控硅的导通和关闭。

100Ω电阻与0.01uF 电容组成双向可控硅保护电路。

部分控制电路系统主程序设计主程序流程图。

at89c51最简单的应用电路及其程序编写

at89c51最简单的应用电路及其程序编写

at89c51最简单的应用电路及其程序编写文章标题:AT89C51最简单的应用电路及其程序编写主题词:AT89C51、应用电路、程序编写导语:AT89C51是一款经典的单片机芯片,具有广泛的应用领域。

本文将深入探讨AT89C51的最简单应用电路及其程序编写,旨在帮助读者全面、深入地理解这一主题。

一、AT89C51概述AT89C51是一款8位微控制器,由恩智浦(NXP)公司生产。

它采用MCS-51指令集架构,具有4KB的闪存和128字节的RAM,以及 32 个I/O 引脚,适用于各种嵌入式系统设计。

作为一款经典产品,AT89C51在工业控制、汽车电子、家用电器等领域都有着重要的应用。

二、AT89C51的最简单应用电路针对AT89C51的最简单应用电路,我们选取了典型的晶振外部工作方式,以便展示AT89C51的基本工作原理。

该电路包括AT89C51芯片、12MHz晶振、液晶显示模块、热敏电阻和数码管等元件。

通过连接这些元件,我们可以实现一个简单的温度检测系统,并通过数码管显示温度数值。

三、程序编写在进行AT89C51程序编写时,我们需要首先了解MCS-51指令集的基本结构和指令格式。

根据我们设计的应用功能,编写相应的C语言程序,并通过Keil C51等IDE软件进行编译和下载。

在程序编写的过程中,我们需要充分考虑AT89C51的资源限制和时钟频率,以确保程序的稳定性和高效性。

四、个人观点和理解作为一款经典的单片机芯片,AT89C51在嵌入式系统设计中具有重要的地位。

通过设计简单的应用电路和进行程序编写,我们可以更好地认识和理解AT89C51的工作原理和应用特点。

AT89C51也可以作为学习嵌入式系统的良好教学工具,帮助学习者快速掌握单片机的设计和编程技能。

总结通过本文的探讨,我们详细介绍了AT89C51的最简单应用电路及其程序编写。

通过这一过程,我们对AT89C51的工作原理和应用有了更深入的了解,也为后续的单片机设计和编程打下了坚实的基础。

综合课程设计--温度测量系统

综合课程设计--温度测量系统

基于AT89c51单片机温度测量系统目录一、研究意义 (2)二、系统设计要求、目的 (2)2.1、设计任务与要求 (2)2.2、实验目的 (2)三、系统设计方案 (3)3.1、总系统电路图 (3)3.2、各模块设计思想和电路原理图................................................................3-7四、系统工作基本流程 (7)五、软件设计程序代码.............................................................................................8-9六、实验数据对比与效果分析 (10)6.1、系统输入 (10)6.2、实验效果分析..........................................................................................10-12七、输入—输出结果分析 (12)八、参考资料 (13)一、研究意义在现代化的工农业生产和日常生活中,温度、电流、电压、压力、流量、流速和开关量都是常用的主要被控参数。

例如:在冶金工业、化工生产、电力工程、造纸行业、农业生产、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉、锅炉和温室中的温度进行检测,来达到有效的测量、控制和调节作用。

而在变电所、银行、温室等场所,需要一个非常明显的显示装置可以显示出现在的具体时间、安全运行天数、现场的温度、湿度值等。

这样可以给人们的生活生产带来很大的方便。

随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。

单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。

因此,基于单片机的温度测量系统的研究具有重大意义。

基于AT89C51的温度控制系统设计

基于AT89C51的温度控制系统设计

基于AT89C51的温度控制系统设计冯晓锋西安翻译学院实验中心摘要:本系统是基于AT89C51单片机和DS18B20数字温度传感器的智能温度控制系统,根据要求可进行最高和最低温度的设定,通过RS-485总线标准实现与PC机的远程通信,实现PC机对采集温度的存储、处理、打印等功能。

关键字:AT89C51 数字温度传感器温度控制系统一、系统总体结构设计根据设计要求对某指定地点的温度进行实时的监测与控制,采用了分布式系统的控制方式,即在测控点配置能独立工作的从机,从机由主机进行监控管理,上下采用主从式监控管理形式,系统总体结构如图1所示。

图1 系统总体结构系统的各个部分功能和关系如下:①主机为管理机,完成参数设置、数据存储、处理及管理及打印功能。

②从机为控制机,采用单片机AT89C51,直接实现各个模块的控制功能,并能在主机关机的条件下实现所有的控制功能。

③通讯转换芯片MAX485实现RS-232信号和RS-485信号的转换,主机通过其向从机发送控制参数,从机将现场采集数据通过其传给主机。

④数据采集实现对传感器及运行设备的检测。

⑤输入输出部分包括输入模块和输出模块,输入模块将采集的信号转换后输入到从机,输出模块将系统的控制信号输出到控制器及其设备。

二、系统工作方式系统以温度监控为核心,温度参数和设备运行状态由主机根据用户要求定时向从机查询,各控制模块的设置参数修改时,将新的参数发送到从机。

主机可以对从机进行参数设置及控制,从机也可以独立工作。

从机通过温度传感器不间断地采集温度数据,根据控制模块的设置参数做出控制决策,驱动设备运行,并随时准备接受主机的指令,当受到询问时,将各项数据编码通过串行通信方式传输到主机。

主机接收到数据后,进行数据处理,在监控界面上显示当前的状态信息,并将此信息实时地存储到数据库中,为用户维护和管理准备数据。

对数据可以进行查询,也可以将一段时期的数据信息汇集成报表,报表包括各项统计数据,还可以将数据处理绘制成图形曲线,实现对数据的分析与管理。

基于89C51单片机的粮食水分温度综合检测仪

基于89C51单片机的粮食水分温度综合检测仪

目录摘要ABSTRACT第一章绪论 (4)1.1研究背景 (4)1.2温湿度综合检测系统 (5)1.2.1 温度和湿度检测 (5)1.2.2 温湿度检测的国内外研究动态 (7)1.2.3 温湿度检测技术的发展方向 (9)1.3课题研究内容和意义 (11)第二章温湿度综合检测仪的整体设计 (12)2.1系统方框图 (12)2.2温湿度检测仪的整体设计过程 (12)2.2.1 温湿度 (12)2.2.2 数字式温度传感器DS18B20 (15)2.2.3 单片机AT89C51 (19)2.2.4 共阴极显示驱动MAX7219 (22)2.3软件语言的选取 (24)第三章温湿度检测仪主要硬件电路设计 (25)3.1.1 时钟电路 (25)3.1.2 复位电路 (26)3.21-W IRE单总线技术 (27)3.3显示电路 (30)第四章温湿度检测仪软件设计 (35)4.1系统软件设计 (35)4.1.1 系统流程图 (35)4.1.2 系统主程序 (35)4.2DS18B20温度数据采集 (37)4.2.1 数据采集流程图 (37)4.2.2 数据采集子程序 (37)4.3MAX7219驱动8位以下LED显示器: (40)4.3.1 MAX7219工作流程图 (40)4. 3. 2 MAX7219工作子程序 (41)第五章系统的调试、可靠性和抗干扰技术 (44)5.1系统的调试 (44)5.2可靠性设计 (45)5.3抗干扰技术 (46)5.3.2 软件抗干扰 (47)5.4 本系统对干扰的预防 (48)结束语 (49)致谢词 (50)参考文献 (52)附录 (54)第一章绪论1.1 研究背景粮食储藏是国家为防备战争、灾荒及其它突发性事件而采取的有效措施,因此,粮食的安全储藏具有重要意义。

目前,我国地方及垦区的各种大型粮库都还存在着程度不同的粮食储存变质问题。

根据国家粮食保护法规定,必须定期抽样检查粮库各点的粮食温度和湿度,以便及时采取相应的措施。

基于单片机的温度控制系统设计

基于51单片机的水温自动控制系统沈统摘要:在现代化的工业生产中,温度是常用的测量机被控参数。

本水温控制系统采用AT89C51为核心控制器件,实现对水温在30℃到96℃的自动控制。

由精密摄氏温度传感器LM35D构成前置信号采集和调理电路,过零检测双向可控硅输出光电耦合器MOC3041构成后向控制电路,由74LS164和LED数码管构成两位静态显示用于显示实时温度值。

关键词:89C51单片机;LM35D温度传感器;ADC0809;MOC3041光电藕耦合器;水温自动控制0 引言在现代的各种工业生产中 ,很多地方都需要用到温度控制系统。

而智能化的控制系统成为一种发展的趋势。

本文所阐述的就是一种基于89C51单片机的温度控制系统。

本温控系统可应用于温度范围30℃到96℃。

1 设计任务、要求和技术指标1.1任务设计并制作一水温自动控制系统,可以在一定范围(30℃到96℃)内自动调节温度,使水温保持在一定的范围(30℃到96℃)内。

1.2要求(1)利用模拟温度传感器检测温度,要求检测电路尽可能简单。

(2)当液位低于某一值时,停止加热。

(3)用AD转换器把采集到的模拟温度值送入单片机。

(4)无竞争-冒险,无抖动。

1.3技术指标(1)温度显示误差不超过1℃。

(2)温度显示范围为0℃—99℃。

(3)程序部分用PID算法实现温度自动控制。

(4)检测信号为电压信号。

2 方案分析与论证2.1主控系统分析与论证根据设计要求和所学的专业知识,采用AT89C51为本系统的核心控制器件。

AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器。

其引脚图如图1所示。

2.2显示系统分析与论证显示模块主要用于显示时间,由于显示范围为0~99℃,因此可采用两个共阴的数码管作为显示元件。

在显示驱动电路中拟订了两种设计方案:方案一:采用静态显示的方案采用三片移位寄存器74LS164作为显示电路,其优点在于占用主控系统的I/O口少,编程简单且静态显示的内容无闪烁,但电路消耗的电流较大。

温湿度检测系统设计——at89c51单片机和dht11温湿度传感器(可编辑)

摘要此次设计主要是通过使用AT89C51单片机和DHT11温湿度传感器来实现的检测系统。

此次设计主要是针对两个方面的设计:硬件电路方面的设计和系统软件方面的设计。

硬件电路是通过单片机、温湿度传感器、显示器、报警器和键盘等组合在一起的,系统显示器通过DHT11温湿度传感器和LCD1620字符型液晶模块构成。

本次设计使用的电路相对而言比较简单、工作状态比较稳定、并且具有相对较高的集成度和测量误差较小的特点。

另外,此设计方便使用者进行调试,具有一定的使用价值和实用价值。

使用者可以先设定自己想预订的数值,一旦检测实际的结果比预设的数值高时,蜂鸣器就会发出报警信号,测试电路主要将温湿度传感器检测的实际值和预先的设定数值进行比较、然后通过报警电路实现的。

软件方面主要由主程序、显示模块的程序、检测温湿度程序组成。

此次设计主要通过使用DHT11传感器和AT89C51单片机来实现。

DHT11温湿度传感器具有专用的数字模块采集技术和温湿度传感技术,使得产品有极高的稳定性和可靠性;它是主要由一个电阻式感湿元件和一个NTC测温元件构成的,它通过与一个高性能8位单片机相连接来工作;因而DHT11传感器具备抗干扰能力强、响应快、以及性价比很高的优点。

由于AT89C51单片机是一种高性能、低消耗CMOS8位单片机,因此在许多领域都使用它。

【关键词】温度测量湿度测量AT89C51 DHT11ABSTRACTThis design is mainly the detection system is realized by using AT89C51 MCU and DHT11 temperature and humidity sensor. This design is mainly aimed at two aspects of design: design and system design aspects of the hardware circuit.The hardware circuit is through the micro controller, temperature and humidity sensor, display, alarm and keyboard combination together, display system through DHT11 temperature and humidity sensor and the LCD1620 character LCD module. Characteristics of circuits using this design is relatively simple, the work of relatively stable state, and has a relatively high degree of integration and less measurement error. In addition, this design is convenient for a user to debug, has certain use value and practical value. The user can set you want to book value, once the actual testing results than numerical is preset, the buzzer will alarm signal, test circuit is mainly the actual temperature and humidity sensor detection and numerical preset values were compared, then through the alarm circuit realization. The software is composed of main program, display module of the program, the temperature and humidity testing program.The design is mainly through the use of DHT11 sensor and AT89C51 single chip to achieve. DHT11 temperature and humidity sensor has a special digital module acquisition technology and the temperature and humidity sensing technology, the product has high stability and reliability; it is mainly composed of a resistance type humidity sensitive element and a NTC temperature components, it is connected with a high performance 8 bit MCU to work; so this DHT11 sensor have strong anti-interference ability, fast response, and high cost performance.Since the AT89C51 is a high performance, low consumption CMOS8microcontroller, so use it in many areas.【Key words】Temperature measurement Humidity measurement AT89C51 DHT11前言现在在人类的生活中温度已成为非常重要的数据,人们的许多行业都离不开对温度的检测。

基于AT89C51单片机的温度计设计

引言概述:AT89C51单片机是一种常用的单片机型号,广泛应用于各种数字电子设备中。

本文将基于AT89C51单片机,设计一款温度计,用于测量环境温度。

通过该设计,可以实时监测环境温度,并将温度值以数字形式显示在屏幕上,提供给用户参考。

正文内容:1. 硬件设计1.1 传感器选择首先,需要选择适合的传感器来测量环境温度。

常见的温度传感器有热敏电阻、温度传感器模块等。

在本设计中,选择了DS18B20温度传感器模块,该传感器具有精度高、体积小等特点,适合本温度计的设计需求。

1.2 电路连接在硬件设计中,需要将DS18B20温度传感器模块与AT89C51单片机相连。

具体步骤如下:1) 将DS18B20传感器的VCC引脚连接至单片机的VCC引脚,将GND引脚连接至单片机的GND引脚,将DQ引脚连接至单片机的P1口,通过电阻和电容设置硬件复位电路。

2) 设置单片机的相应引脚为输入或输出引脚,使其与传感器的引脚相对应,并根据需要设置引脚的电平状态。

3) 根据DS18B20传感器的通信协议,使用单片机的串口通信功能与传感器进行通信,获取温度值。

2. 软件设计2.1 程序框架在软件设计中,需要设计相应的程序框架,以实现温度的测量与显示。

整体的程序框架如下:1) 初始化单片机的串口通信功能,设置波特率等参数。

2) 初始化DS18B20传感器,包括设定分辨率、温度精度等参数。

3) 循环读取传感器的温度数值,并进行必要的温度转换处理。

4) 将处理好的温度数值通过单片机的数码管显示出来。

2.2 温度转换在软件设计中,需要对从传感器获取的温度数值进行转换处理,以得到真实的温度值。

具体的转换公式如下:1) 首先,读取传感器内部存储器中的原始温度数据。

2) 根据DS18B20传感器的配置,进行温度计算。

3) 最后,将计算得到的温度值转换为摄氏度或华氏度,并存储到相应的变量中,以便后续显示。

3. 测试与调试在进行实际应用之前,需要对设计的温度计进行测试与调试,确保其功能正常。

单片机(基于AT89C51的温度采集与显示系统设计)

基于AT89C51的温度采集与显示系统设计摘要:以AT89C51单片机为核心控制元件介绍了与DS18B20和MAX7219显示驱动组成的温度采集系统的设计方案利用单片机空余I/O口以及上述元件的特性,构成该系统。

通过Proteus进行仿真。

关键词:温度采集,AT89C51,DS18B20,MAX7219目录1、系统概述……………………………………………………………….2、硬件介绍……………………………………………………………….3、软件设计……………………………………………………………….4、仿真结果……………………………………………………………….5、小结…………………………………………………………………….6、参考文献……………………………………………………………….1、系统概述温度传感器选用目前常用的数字温度传感器DS18B20,采用数码LED显示,显示驱动为MAX7219,首先设计系统的总体原理图如下:系统可以简单地分为为5个模块,由外部提供8V-24V直流电源供电。

电源模块将输入8-24V的电源电压转换为5V,为系统中的芯片供电,可以使用7805等常用的三端稳压器芯片;温度传感器采集温度信号,温度传感器有模拟输出和数字输出两种形式,这里选择具有数字输出的DS18B20;单片机是系统的核心,选用AT89C51;系统采用LED数码显示器显示温度值,LED显示屏采用独立的显示驱动芯片MAX7219,单片机将待显示的字符写入MAX7219后,MAX7219将会动态的刷新显示内容,无需占用单片机过多的资源。

尽管DS18B20的分辨率可已达到0.0625°C,但测量精确度为0.5°C,因此设计4位数的LED数码显示管就可以了,显示3位整数,1位小数。

2、硬件介绍:1、数字温度传感器DS18B20DS18B20数字温度计提供9位-24位(二进制)温度读数,以指示器件的温度,数据经过单线接口送入DS18B20或从DS18B20送出,因此从主机CPU到DS18B20仅需要一条DQ。

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