导航:首页 > 操作系统 > 单片机大棚温湿度测试仪代码

单片机大棚温湿度测试仪代码

发布时间:2022-09-12 14:13:41

1. 环境实验设备温湿度校验装置 代码是多少

计量标准代码: 15313503

计量标准名称: 单相电能表检定装置(通化)

描述: 单相电能表检定装置(通化),社会公用计量标准,15313503,
关键字: 单相电能表检定装置(通化),社会公用计量标准,15313503
负责单位: 吉林省质量技术监督局
最新修改日期: 2009-07-16 09:22:47.0
创建日期: 2009-07-16 09:22:47.0

计量标准类型
计量标准类型: 社会公用计量标准

测量范围及不确定度或准确度或最大允许误差

量值范围 量值复现不确定度或准确度
(0.1~100)A 220V 0.1级

使用状态类别
使用状态类别: 在用

计量标准考核证书
证书编号: 2008吉量法证字第1131

有效期至: 2012-12-16

发证日期: 2008-12-17

发证机关: 吉林省质量技术监督局

发证单位级别: 省级

计量标准建立时间: 2008

计量标准器

名称 型号 测量范围 不确定度或准确度等级或最大允许误差 制造厂及出厂编号
单相电能表检验装置 BYXDB102-24 (0.1~100)A220V 0.1级 北京北研兴G53308

主要配套设备

名称 型号 测量范围 不确定度或准确度等级或最大允许误差 制造厂及出厂编号

技术改造
有无进行过改造: 无

改造时间: --

测量能力
开展检定所依
据的计量检定
规程或开展
校准依据的计量
技术规范代号
及名称 JJG 596-1999《电子式电能表》 JJG 307-2006《机电式交流电能表》

编号1.
(1).可开展检定及校准项目名称:单相电子式电能表
(2).测量范围:(0.1~100)A
(3).不确定度或准确度等级或最大允许误差:1.0级及以下

2. 基于单片机的温湿度采集与控制程序(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);
}
}
}
程序我都调试过的,都是好的,有不会再问我。可以给分了吗?嘿嘿

3. 求单片机控制大棚温度的具体步骤,本人在此拜谢

1、集成传感器获得环境温度,一个大棚需要至少1个,面积大的需要多个布置在不同位置
2、如果测得温度低于需要的温度,启动加温设备。
3、如果测得温度大于等于需要温度,加温停止
4、返回第一步

4. 100分,求温湿度传感器SHT11的源程序(51单片机语言)

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管位定义
sbit la = P2^6;
sbit wela = P2^7;
#define OK 1
#define ERROR 0
#define NUMBER 20
#define SIZE 5
sbit dht11 = P2^0;
uchar status;
//存放五字节数据的数组
uchar value_array[SIZE];
/*可在其他的文件引用温湿度值,实际是温度的整数的10 倍
如dht11 读回的温度是26,则temp_value = 260, 湿度同理*/
uchar flag;
//数码管编码
uchar code array[]= {
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f
};
int temp_value, humi_value;
void InitTime(void);
//void Delay_1ms(uint ms);
void SMG_Display(uint value);
void Delay_1ms(uint ms)
{
uint x, y;
for(x = ms; x > 0; x--)
{
for(y = 124; y > 0; y--);
}
}
void Delay_10us(void)
{
unsigned char i;
i--;
i--;
i--;
i--;
i--;
i--;
}
/*读一个字节的数据*/
uchar ReadValue(void)
{
uchar count, value = 0, i;
status = OK; //设定标志为正常状态
for(i = 8; i > 0; i--)
{
//高位在先
value <<= 1;
count = 0;
//每一位数据前会有一个50us 的低电平时间.等待50us 低电平结束
while(dht11 == 0 && count++ < NUMBER);
if(count >= NUMBER)
{
status = ERROR; //设定错误标志
return 0; //函数执行过程发生错误就退出函数
}
//26-28us 的高电平表示该位是0,为70us 高电平表该位1
Delay_10us();
Delay_10us();
Delay_10us();
//延时30us 后检测数据线是否还是高电平
if(dht11 != 0)
{
//进入这里表示该位是1
value++;
//等待剩余(约40us)的高电平结束
while(dht11 != 0 && count++ < NUMBER)
{
dht11 = 1;
}
if(count >= NUMBER)
{
status = ERROR; //设定错误标志
return 0;
}
}
}
return (value);
}
//读一次的数据,共五字节
uchar ReadTempAndHumi(void)
{
uchar i = 0, check_value = 0,count = 0;
EA = 0;
dht11 = 0; //拉低数据线大于18ms 发送开始信号
Delay_1ms(20); //需大于18 毫秒
dht11 = 1; //释放数据线,用于检测低电平的应答信号
//延时20-40us,等待一段时间后检测应答信号,应答信号是从机拉低数据线80us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
if(dht11 != 0) //检测应答信号,应答信号是低电平
{
//没应答信号
EA = 1;
return ERROR;
}
else
{
//有应答信号
while(dht11 == 0 && count++ < NUMBER); //等待应答信号结束
if(count >= NUMBER) //检测计数器是否超过了设定的范围
{
dht11 = 1;
EA = 1;
return ERROR; //读数据出错,退出函数
}
count = 0;
dht11 = 1;//释放数据线
//应答信号后会有一个80us 的高电平,等待高电平结束
while(dht11 != 0 && count++ < NUMBER);
if(count >= NUMBER)
{
dht11 = 1;
EA = 1;
return ERROR; //退出函数
}
//读出湿.温度值
for(i = 0; i < SIZE; i++)
{
value_array[i] = ReadValue();
if(status == ERROR)//调用ReadValue()读数据出错会设定status 为ERROR
{
dht11 = 1;
EA = 1;
return ERROR;
}
//读出的最后一个值是校验值不需加上去
if(i != SIZE - 1)
{
//读出的五字节数据中的前四字节数据和等于第五字节数据表示成功
check_value += value_array[i];
}
}//end for
//在没用发生函数调用失败时进行校验
if(check_value == value_array[SIZE - 1])
{
//将温湿度扩大10 倍方便分离出每一位
humi_value = value_array[0] * 10;
temp_value = value_array[2] * 10;
dht11 = 1;
EA = 1;
return OK; //正确的读出dht11 输出的数据
}
else
{
//校验数据出错
EA = 1;
return ERROR;
}
}
}
void main(void)
{
uchar mark = 0;
//先等上电稳定
Delay_1ms(1000);
//因为读一次数据dht11 才会触发一次采集数据.
//即在先使用数据时采集一次数据
ReadTempAndHumi();
//因为在两次采集数据需一定的时间间隔,这里还可减少
Delay_1ms(3000);
//设定定时器
InitTime();
while(1)
{
//三秒读一次温湿度
if(flag == 60)
{
flag = 0;
mark++;
/*
//读温湿度,可检测函数调用是否失败,
//函数返回OK(1)表示成功,返回ERROR(0)表示失败
//OK和ERROR是在DHT11.H中定义的宏
*/
ReadTempAndHumi();
}
if(mark % 2 == 0)
{
//显示温度
SMG_Display(temp_value);
}
else
{
//显示湿度
SMG_Display(humi_value);
}
}
}
//设定定时器
void InitTime(void)
{
TH0 = (65535 - 50000)/256;
TL0 = (65535 - 50000)%256 ;
TMOD = 0X01;
TR0 = 1;
ET0 = 1;
EA = 1;
}
//数码管显示函数
void SMG_Display(uint value)
{
uchar ge, , shi;
ge = value % 10;
shi = value % 100 / 10;
= value % 1000 / 100;
wela=1;
P0 = 0XFE;
wela=0;
P0 = 0XFF;
la=1;;
P0 = array[];
la=0;
Delay_1ms(2);
wela=1;
P0 = 0XFD;
wela=0;
P0 = 0XFF;
la=1;
P0 = array[shi];
P0 |= 0x80; /*显示小数点*/
la=0;
Delay_1ms(2);
wela=1;
P0 = 0XFB;
wela=0;
P0 = 0XFF;
la=1;
P0 = array[ge];
la=0;
Delay_1ms(2);
}
//中断函数
void timer(void) interrupt 1
{
TH0 = (65535 - 50000)/256;
TL0 = (65535 - 50000)%256;
flag++;
}

5. 嵌入式温湿度传感器C语言代码求帮忙注释

#include "ioCC2430.h" //包含头文件,相应的板子以及传感器一些信息

#include "hal.h"

#include <math.h>

//#include <intrins.h>

#include <stdio.h>


typedef union //定义联合体,

{

unsigned int i;

float f;

} value; //定义联合体类型名称为value


#define noACK 0

#define ACK 1

#define STATUS_REG_W 0x06 //0x06 = 0000 0110

#define STATUS_REG_R 0x07 //0x07 = 0000 0111

#define MEASURE_TEMP 0x03 //0x03 = 0000 0011

#define MEASURE_HUMI 0x05 //0x05 = 0000 0101

#define RESET 0x1e //0x1e = 0001 1110

#define SDA P1_6 //定义SDA代表的是P1_6脚

#define SCL P1_7

#define begin P2_0

unsigned char d1,d2,d3,d4,d5,d6,d7; //定义无符号字符型变量


void Wait(unsigned int ms) //定义wait函数,主要用于软件循环,延时作用

{

unsigned char g,k;

while(ms)

{

for(g = 0;g <= 167; g++)

{

for(k = 0;k <= 48; k++);

}

ms--;

}

}


void QWait() //1us的延时

{

asm("NOP"); //加入汇编操作语句,空操作,主要用于机器周期执行

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

}


void initUART(void) //初始化单片机的串口

{

IO_PER_LOC_USART0_AT_PORT0_PIN2345(); //具体函数的定义与用法,你得参考头文件中的程序代码了

IO_DIR_PORT_PIN(1, 6, IO_OUT);

IO_DIR_PORT_PIN(1, 7, IO_OUT);

//IO_IMODE_PORT_PIN(1, 6, IO_IMODE_TRI);

//IO_IMODE_PORT_PIN(1, 7, IO_IMODE_TRI);

IO_DIR_PORT_PIN(2, 0, IO_OUT);

IO_FUNC_PORT_PIN(2, 0, IO_FUNC_GIO);

//SET_MAIN_CLOCK_SOURCE(RC);

SET_MAIN_CLOCK_SOURCE(CRYSTAL);

UART_SETUP(0, 115200, HIGH_STOP); //设置传输数据的波特率115200

UTX0IF = 1;

U0CSR |= 0XC7; //U0CSR = U0CSR | 0x1010 0111 (进行位或操作)

IEN0 |= 0x84;

SDA = 1;

SCL = 0;

}


int putchar (int c) //定义输入字符函数,给的参数是一个整型的数

{

if (c == ' ') //判断参数c的值是否和' '的值相等

{

while (!UTX0IF); //执行的时候UTX0IF的值是0,此处不是很理解?

UTX0IF = 0; //给UTX0IF赋0

U0DBUF = 0x0d; //U0DBUF赋值0x0d = 0000 1011

}

while (!UTX0IF);

UTX0IF = 0;

return (U0DBUF = c); //如果c的值不是' '也就是换行符的时候,将c的值传递到U0DBUF寄存器中

}


char s_write_byte(unsigned char value) //定义写字节函数(8位)

{

unsigned char i,error = 0;

for (i = 0x80;i > 0;i /= 2) //i 赋初始值0x80 = 128, 执行判断是i > 0,执行语句是i = i / 2; 即i = 128,64,32,16,8,4,2,1,0.5(0),8位

{

if (i & value)

SDA = 1;

else

SDA = 0;

SCL = 1; //此时SCL端口处,也就是p1_7引脚处是高电平

QWait(); //因为写入需要时间,所以程序之中加入下面几条语句

QWait();

QWait();

QWait();

QWait();

SCL = 0; //使能p1_7眼角处低电平,使的数据写入(具体需要看单片机控制芯片的手册

asm("NOP");

asm("NOP");

}

SDA = 1;

SCL = 1;

asm("NOP");

error = SDA;

QWait();

QWait();

QWait();

SDA = 1;

SCL = 0;

return error;

}


char s_read_byte(unsigned char ack) //读取数据,按照字节位的顺序读取(8位)128 = 1000 0000 ,64 = 0100 0000, 32 = 0010 0000 ,16 = 0001 0000, 8 = 0000 1000, 4 = 0000 0100 , 2 = 0000 0010, 1 = 0000 0001

{

unsigned char i,val = 0;

SDA= 1;

for(i = 0x80;i > 0;i /= 2) //同上

{

SCL = 1;

if (SDA) //判断SDA处是否有高电平

val = (val | i); //进行或操作

else

val = (val | 0x00);

SCL = 0;

QWait();

QWait();

QWait();

QWait();

QWait();

}

SDA = !ack;

SCL = 1;

QWait();

QWait();

QWait();

QWait();

QWait();

SCL = 0;

SDA = 1;


return val; //返回读取到的数据,一个字节,八位

}


void s_transstart(void) //传输使能函数,就是给控制器引脚处相应电平,使对应模块工作

{

SDA = 1;

SCL = 0;

QWait();

QWait();

SCL = 1;

QWait();

QWait();

SDA = 0;

QWait();

QWait();

SCL = 0;

QWait();

QWait();

QWait();

QWait();

QWait();

SCL = 1;

QWait();

QWait();

SDA = 1;

QWait();

QWait();

SCL = 0;

QWait();

QWait();

}


void s_connectionreset(void) //复位操作函数

{

unsigned char i;

SDA = 1;

SCL = 0;

for(i = 0;i < 9; i++)

{

SCL = 1;

QWait();

QWait();

SCL = 0;

QWait();

QWait();

}

s_transstart(); //调用开始函数

}


char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) //函数,主要统计传输的数据个数

{

unsigned er = 0;

unsigned int i,j;

s_transstart();

switch(mode)

{

case 3 :er += s_write_byte(3);

break;

case 5 :er += s_write_byte(5);

break;

default :break;

}

for(i = 0;i < 65535;i++)

{

for(j = 0;j < 65535;j++)

{if(SDA == 0)

{

break;

}

}

if(SDA == 0)

{

break;

}


}

if(SDA)

{

er += 1;

}

*(p_value) = s_read_byte(ACK);

*(p_value + 1) = s_read_byte(ACK);

*p_checksum = s_read_byte(noACK);

d6 = *(p_value);

d7=*(p_value + 1);

return er;

}


void calc_sth11(float *p_humidity ,float *p_temperature)//计算温度值

{

const float C1 =- 4.0;

const float C2 =+ 0.0405;

const float C3 =- 0.0000028;

const float T1 =+ 0.01;

const float T2 =+ 0.00008;

float rh =* p_humidity;

float t =* p_temperature;

float rh_lin;

float rh_true;

float t_C;

t_C = t * 0.01 - 44.0 ;

rh_lin = C3 * rh * rh + C2 * rh + C1;

rh_true = (t * 0.01 - 40.0 - 25) * (T1 + T2 * rh) + rh_lin;

if(rh_true > 100)

{

rh_true = 100;

}

if(rh_true < 0.1)

{

rh_true = 0.1;

}

*p_temperature = t_C;

*p_humidity = rh_true;

}


void main() //主函数

{

value humi_val,temp_val; //声明两个联合体变量

unsigned char error,checksum; //声明两个无符号的字符型变量

initUART(); //初始化串口

P1INP |= 0xC0; //初始化P1引脚 , 0xC0 = 1010 0000 ,使P1_7和P1_5引脚为1

begin = 0;

s_connectionreset();

while(1) //无限循环操作

{

error = 0;

error += s_measure((unsigned char*) &humi_val.i,&checksum,5); //读入串口的数据进行温度的计算

d1 = d6;

d2 = d7;

error += s_measure((unsigned char*) &temp_val.i,&checksum,3);

d3 = d6;

d4 = d7;

if(error != 0)

s_connectionreset();

else

{

humi_val.f = (float)humi_val.i;

temp_val.f = (float)temp_val.i;

humi_val.f = d1 * 256 + d2;

temp_val.f = d3 * 256 + d4;

calc_sth11(&humi_val.f,&temp_val.f);

printf("temp:%5.1fC humi:%5.1f%% ",temp_val.f,humi_val.f);

// printf("t1:%x h1:%x ",d1,d2);

//printf("t2:%x h2:%x ",d3,d4);

}

Wait(150);

}

}


6. 我要做基于89s52单片机下的温室大棚监控系统,要到测光照强度、温度、湿度的传感器,不知道用哪种

SHT11:温度湿度传感器, SHT11是瑞士Sensirion公司推出的基于CMOSensTM技术的新型温湿度传感器。该传感器将CMOS芯片技术与传感器技术结合起来,从而发挥出它们强大的优势互补作用。2性能特点
SHT11温湿度传感器的主要特性如下:
●将温湿度传感器、信号放大调理、A/D转换、I2C总线接口全部集成于一芯片(CMOSensTM技术);
●可给出全校准相对湿度及温度值输出;
●带有工业标准的I2C总线数字输出接口;
●具有露点值计算输出功能;
●具有卓越的长期稳定性;
●湿度值输出分辨率为14位,温度值输出分辨率为12位,并可编程为12位和8位;
●小体积(7.65×5.08×23.5mm),可表面贴装;
●具有可靠的CRC数据传输校验功能;
●片内装载的校准系数可保证100%互换性;
●电源电压范围为2.4~5.5V;
●电流消耗,测量时为550μA,平均为28μA,休眠时为3μA。    SHT11温湿度传感器采用SMD(LCC)表面贴片封装形式,管脚排列如图1所示,其引脚说明如下:
(1)GND:接地端;
(2)DATA:双向串行数据线;
(3)SCK:串行时钟输入;
(4)VDD电源端:0.4~5.5V电源端;
(5~8)NC:空管脚。
TSL256x光强传感器,网上资料较多, 不做赘述,给分吧

7. java编程:求温湿度控制程序的源代码,类似的也可以提供,作为参考。谢谢大家

到底是真实的温控、还是模拟的温控 。。。。。。。。。如果是真实的温控,这么大工作的话题,放这不太合适

8. 现在我要用AT89C51、SHT11、DS18B20和COMPIM做一个温湿度数据采集,请问代码怎么怎么做

写程序,要是不想自己写,可以出银子,我给你写。

9. 基于单片机的蔬菜大棚温湿度智能控制系统设计

我公司是生产温湿度变送器的

10. 求基于51或52单片机的温湿度测量protues仿真程序、图、完整源代码 ,求大神帮助

需要你提供具体的要求
不能做错了呀
我是做单片机开发的

阅读全文

与单片机大棚温湿度测试仪代码相关的资料

热点内容
pythonbg是什么 浏览:245
c数值算法程序大全 浏览:785
android整点报时 浏览:219
稀土pdf 浏览:534
单片机电子锁 浏览:594
通达信机智资金流指标公式源码 浏览:216
php安装xsl扩展 浏览:840
python如何使用help 浏览:366
上汽荣威app在哪里查询 浏览:901
冰柜压缩机温度108 浏览:718
阿里云邮smtp服务器地址 浏览:250
解压馆认知理解 浏览:239
为什么使用非官方服务器会封号 浏览:9
佛山加密文档软件 浏览:813
港式5张梭哈源码 浏览:241
数据中心pdf 浏览:524
crf源码解析 浏览:854
服务器软件开发是什么意思 浏览:943
删除彩信android 浏览:863
元宵节猜灯谜h5源码 浏览:70