
温湿度部分VB程序
Option Explicit
Dim buffer$ ' 字串暂存区
Dim com As Integer ' 序列埠变数
Dim D_ID, A_ID As Integer ' 控制板 ID
Dim H_LMT, L_LMT, TP As Double ' 量测温度及上下
'---------------------------------------------------------------------
Private Sub Command1_Click() ' 控制系统开始运
buffer$ = "" ' 清空暂存区
D_ID = Text5 ' 设定 DIO-I控制板的 ID
A_ID = Text1 ' 设定 AT2051控制板的 ID
H_LMT = Val(Text2) ' 设定温度上限
L_LMT = Val(Text3) ' 设定温度下限
Call ComPortOpen ' 开启序列埠
MSComm1Output = Chr(A_ID) ' 送出指令读取温
Do
DoEvents
buffer$ = buffer$ + MSComm1Input
Loop Until Len(buffer$) > 10
Text4 = Mid(buffer$, 5, 4) ' 将读取的温度显示在
TP = Val(Text4) ' 将量测温度存在温度
If TP > H_LMT Then ' 超过上限则启动风扇
Call Switch_On
ElseIf TP < L_LMT Then ' 低於下限则关闭风扇
Call Switch_Off
End If
sbit DHT11_1 = P2^4 ;
void COM1()
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!DHT11_1)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(DHT11_1)U8temp=1;
U8FLAG=2;
while((DHT11_1)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void RH1()
{
//主机拉低18ms
DHT11_1=0;
Delay(180);
DHT11_1=1;
//总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
DHT11_1=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!DHT11_1) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!DHT11_1)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((DHT11_1)&&U8FLAG++);
//数据接收状态
COM1();
U8RH_data_H_temp=U8comdata;
COM1();
U8RH_data_L_temp=U8comdata;
COM1();
U8T_data_H_temp=U8comdata;
COM1();
U8T_data_L_temp=U8comdata;
COM1();
U8checkdata_temp=U8comdata;
DHT11_1=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
给你一个DS18B20温度采集程序吧
// 温度采集DS18B20 程序代码
#include<reg52h>
#include<stdioh>
#define uchar unsigned char
#define uint unsigned int
#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE
sbit DQ = P2^3; //DS18B20数据口
sbit beep=P1^2; //蜂鸣器
uint warn_l=5; //定义温度下限值
uint warn_h=17; //定义温度上限值
unsigned char TMPH,TMPL;
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/
名称 : delay()
功能 : 延时,延时时间大概为140US。
输入 : 无
输出 : 无
/
void delay_1()
{
int i,j;
for(i=0; i<=10; i++)
for(j=0; j<=2; j++)
;
}
/
名称 : delay()
功能 : 延时函数
输入 : 无
输出 : 无
/
void delay(uint N)
{
int i;
for(i=0; i<N; i++)
;
}
/
名称 : Delay_1ms()
功能 : 延时子程序,延时时间为 1ms x
输入 : x (延时一毫秒的个数)
输出 : 无
/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/
名称 : Reset()
功能 : 复位DS18B20
输入 : 无
输出 : 无
/
uchar Reset(void)
{
uchar deceive_ready;
DQ = 0;
delay(29);
DQ = 1;
delay(3);
deceive_ready = DQ;
delay(25);
return(deceive_ready);
}
/
名称 : read_bit()
功能 : 从DS18B20读一个位值
输入 : 无
输出 : 从DS18B20读出的一个位值
/
uchar read_bit(void)
{
uchar i;
DQ = 0;
DQ = 1;
for(i=0; i<3; i++);
return(DQ);
}
/
名称 : write_bit()
功能 : 向DS18B20写一位
输入 : bitval(要对DS18B20写入的位值)
输出 : 无
/
void write_bit(uchar bitval)
{
DQ=0;if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}
/
名称 : read_byte()
功能 : 从DS18B20读一个字节
输入 : 无
输出 : 从DS18B20读到的值
/
uchar read_byte(void)
{
uchar i,m,receive_data;
m = 1;
receive_data = 0;
for(i=0; i<8; i++)
{
if(read_bit())
{
receive_data = receive_data + (m << i);
}
delay(6);
}
return(receive_data);
}
/
名称 : write_byte()
功能 : 向DS18B20写一个字节
输入 : val(要对DS18B20写入的命令值)
输出 : 无
/
void write_byte(uchar val)
{
uchar i,temp;
for(i=0; i<8; i++)
{
temp = val >> i;
temp = temp & 0x01;
write_bit(temp);
delay(5);
}
}
/
名称 : warn()
功能 : 蜂鸣器报警
输入 :beep
输出 :蜂鸣器
/
void warn(uint s)
{
uchar i;i=s;
beep=0;
while(i--);
beep=1;
i=s;
while(i--);
}
/
名称 : deal()
功能 : 根据温度上下限控制蜂鸣器间隔
输入 : temp
输出 : 无
/
void deal(uint t)
{
if(t<warn_l)
{
warn(20);
}
else if(t>warn_h)
{
warn(10);
}
}
/
名称 : Main()
功能 : 主函数
输入 : 无
输出 : 无
/
void main()
{
uint temp;
P2 = 0x00;
while(1)
{
Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
temp = TMPL / 16 + TMPH 16;
printf("%d",temp); //通过串口发送到PC
deal(temp);
P0 = table[temp/10%10];
P2 = 6;
Delay_1ms(5);
P0 = table[temp%10];
P2 = 7;
Delay_1ms(5);
}
}
以上就是关于用vb与单片机连接起来精确控制温湿度,请问怎么编写vb的程序全部的内容,包括:用vb与单片机连接起来精确控制温湿度,请问怎么编写vb的程序、急求用stc12c5a60s2单片机显示dht11温湿度传感器程序,基本的读取和时序程序就行、我需要用sht10采集温湿度信息送入单片机,然后通过串口显示到PC上。程序该怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)