导航:首页 > 操作系统 > 基于单片机的温度采集系统

基于单片机的温度采集系统

发布时间:2022-05-31 21:29:22

⑴ 51单片机的温度采集系统设计

第一章 确定系统功能与性能

本系统的功能主要有数据采集、数据处理、输出控制。能对0~1000 �0�2c范围内的各种电加热炉的温度进行精密测量,同时,四位LED显示器直接跟踪显示被控对象的温度值,准确度高,显示清晰,稳定可靠,使用方便(在具体设计编程、调试过程中,为了调试方便,编程把温度范围设在0~100 �0�2c)。

本系统的原理框图如下图所示。

数据采集部分能完成对被测信号的采样,显示分辨率0.1�0�2c,测量精度0.1�0�2c,控制精度0.1�0�2c,可以实现采集信号的放大及A/D转换,并自动进行零漂校正,同时按设定值、所测温度值、温度变化速率,自动进行FID参数自整定和运算,并输出0~10mA控制电流,配以主回路实现温度的控制。数据处理分为预处理、功能性处理、抗干扰等子功能。输出控制部分主要是数码管显示控制。

第二章 确定系统基本结构及硬件设计

本单片机应用系统结构是以单片机为核心外部扩展相关电路的形式。确定了系统中的单片机、存储器分配及输入/输出方式就可大体确定出单片机应用系统的基本组成。

1)单片机选用MCS-51系统的8031

8031是INTEL公司MCS-51系列单片机中最基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,标准MCS-51单片机的体系结构和指令系统。

8031内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。但80C31片内并无程序存储器,需外接ROM。

此外,8031还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。8031有PDIP(40pin)和PLCC(44pin)两种封装形式。

主要功能特性:

· 标准MCS-51内核和指令系统

· 外部程序存储器ROM地址空间64kB

· 32个可编程双向I/O口

· 128x8bit内部RAM(可扩充64kB外部存储器)

· 2个16位可编程定时/计数器

· 时钟频率3.5-16MHz

· 5个中断源

· 5.0V工作电压

· 全双工串行通信口

· 布尔处理器

· 2层优先级中断结构

· 兼容TTL和CMOS逻辑电平

· PDIP(40)和PLCC(44)封装形式

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

加热部件可以在淘宝上买个
usb
5v
加热片,usb供电的电流不会超过
500ma,
控制可以用单片机脚控制一个
c8050三极管控制加热片的通断电。

⑶ 基于单片机的温湿度采集与控制程序(C语言)

给你一个DS18B20的温度采集程序!
//ICC-AVR application builder : 2009-10-25 10:43:39
// Target : M16
// Crystal: 16.000Mhz

#include <iom16v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
#include "xianshi.c"
#include "delay.h"

#define CLR_DIR_1WIRE DDRD&=~BIT(4) //只要修改这里的参数就可以了
#define SET_DIR_1WIRE DDRD|=BIT(4) //里面什么都不用该!
#define CLR_OP_1WIRE PORTD&=~BIT(4)
#define SET_OP_1WIRE PORTD|=BIT(4)
#define CHECK_IP_1WIRE (PIND&0x10) //检测

unsigned char wmh,wml;
void init_1820()
{
SET_DIR_1WIRE; //设置PD4 为输出
SET_OP_1WIRE;
CLR_OP_1WIRE;
delay_nus(480); //480us以上
SET_OP_1WIRE;
CLR_DIR_1WIRE;
delay_nus(20); //15~60us
while(CHECK_IP_1WIRE);
SET_DIR_1WIRE;
SET_OP_1WIRE;
delay_nus(140); //60~240us
}
void write_1820(unsigned char x)
{
unsigned char m;
for(m=0;m<8;m++)
{
CLR_OP_1WIRE;
if(x&(1<<m)) //写数据了,先写低位的!
SET_OP_1WIRE;
else
{CLR_OP_1WIRE;}
delay_nus(40); //15~60us
SET_OP_1WIRE;
}
SET_OP_1WIRE;
}
unsigned char read_1820()
{
unsigned char temp,k,n;
temp=0;
for(n=0;n<8;n++)
{
CLR_OP_1WIRE;
SET_OP_1WIRE;
CLR_DIR_1WIRE;
k=(CHECK_IP_1WIRE); //读数据,从低位开始
if(k)
temp|=(1<<n);
else
temp&=~(1<<n);
delay_nus(50); //60~120us
SET_DIR_1WIRE;
}
return (temp);
}

unsigned int gettemp() //读取温度值
{
unsigned char temh,teml,wm0,wm1,wm2,wm3;
init_1820(); //复位18b20
write_1820(0xcc); // 发出转换命令
write_1820(0x44);
// delay_nms(800); //不延时也好使,不知道怎么回事!
init_1820();
write_1820(0xcc); //发出读命令
write_1820(0xbe);
teml=read_1820(); //读数据
temh=read_1820();
wm0=teml>>4; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
wm1=temh<<4;
wm2=wm1+wm0; //16进制转10进制
return wm2;
}

void main()
{
uint tem,ad[4],i;
port_init();

while(1)
{

tem = gettemp();
for(i=0;i<4;i++)
{
ad[3-i]=tem%10;
tem=tem/10;
}

for(i=0;i<4;i++)
{
show1(ad[i],i);
delay(5);
}
}

}
显示函数:
#include <iom16v.h>
#include <macros.h>

#define uint unsigned int
#define uchar unsigned char
#pragma data:code
const uint tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00}; //共阳数码管代码表

const uint tab2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X00};//共阴数码管代码表

void port_init(void)
{
DDRA = 0xFF;
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0x00;
}

void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
void show1(uchar j,uchar k)//显示函数
{
PORTB = ~BIT(k);
PORTA = tab2[j];
delay(1);
}
void show(uint ada)
{

uint i,ad[4];

for(i=0;i<4;i++)
{
ad[3-i]=ada%10;
ada = ada/10;
}
while(1)
{
for(i=0;i<4;i++)
{
show1((ad[i]),i);
delay(100);
}
}
}
程序我都调试过的,都是好的,有不会再问我。可以给分了吗?嘿嘿

⑷ 基于单片机的温度采集系统使用什么芯片

一般用DS18B20温度传感器加一个51单片机,或者DHT11温湿度传感器加51单片机。要注意,传感器采集来的数据,是要经过软件校正的,因为和现实温度是有一定误差

⑸ 基于单片机的温度控制系统(毕业论文)

必须要有实物啊,理论的东西都是要靠实物来验证的啊。温度控制系统不难吧,学过电子、单片机的都很轻松的,同学看来你大学过得还挺滋润的啊。去文库看看,基本都会有资料参考的。知识要点:
1,AD采样,
也就是温度的数据采集。2,中断,
采集数据后比较,做相应的处理。

⑹ 单片机温度采集系统的流程图总编程~~~

sbit DQ=P3^5; //数据传输线接单片机的相应的引脚
unsigned char tempL=0; //设全局变量
unsigned char tempH=0;
bit fg=1; //温度正负标志

//******************延时子程序 *******************************

//这个延时程序的具体延时时间是time="i"*8+10,适用于小于2ms的延时

//************************************************************
void delay(unsigned char i)
{
for(i;i>0;i--);
}

//***********************************************************

// 延时子程序

//************************************************************
/*void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延时124*8+10=1002us
} */

//*****************************初始化程序 *********************************//

Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高
delay(8); //稍延时
DQ=0; //发送复位脉冲
delay(80); //延时(>480us)
DQ=1; //拉高数据线
delay(5); //等待(15~60us)
x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X="0",否则X="1"
delay(20);
}

//**********读一个字节************//

ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0;
for (i=8;i>0;i--) //一个字节有8位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}

//*********************** **写一个字节**************************//

WriteOneChar(unsigned char dat)
{
unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
{
DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。
DQ=dat & 0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}

//读温度值(低位放tempL;高位放tempH;)
void Tempcor(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
}

void ReadTemp(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB

if(tempH>0x7f) //最高位为1时温度是负
{
tempL=~tempL+1; //补码转换,取反加一
tempH=~tempH;
fg=0; //读取温度为负时fg="0"
}

}
/*ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
delay(200); //转换需要一点时间,延时
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB

if(tempH>0x7f) //最高位为1时温度是负
{
tempL=~tempL+1; //补码转换,取反加一
tempH=~tempH;
fg=0; //读取温度为负时fg="0"
}
} */

//**************************** //主程序

/*float Temperature()
{
float tvalue;
ReadTemperature();
tvalue=tempL/16+tempH*16+(tempL & 0x0f)*0.0625;
if(!fg) tvalue=-tvalue;
fg=1;
return(tvalue);
} */

float Temperature()
{
float temp;
ReadTemp();
temp=tempL/16+tempH*16+(tempL & 0x0f)*0.0625;
if(fg)
{
return(temp);
}
else
{
fg=1;
return(-temp);
}

}

DS18B20温度采集,通过调用Temperature()函数可得到温度数据。

⑺ 基于STC系列单片机的温度采集系统

stc就是51单片机的一种,51系列单片机有好多,也就是不同公司生产的,都是以8051为核心的,51是入门级的单片机,所以不难!

阅读全文

与基于单片机的温度采集系统相关的资料

热点内容
自己购买云主服务器推荐 浏览:419
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:189
pdf劈开合并 浏览:28
不能修改的pdf 浏览:752
同城公众源码 浏览:488
一个服务器2个端口怎么映射 浏览:297
java字符串ascii码 浏览:78
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:945
安卓导航无声音怎么维修 浏览:332
app怎么装视频 浏览:430
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288
汇编编译后 浏览:491