用vb与单片机连接起来精确控制温湿度,请问怎么编写vb的程序

用vb与单片机连接起来精确控制温湿度,请问怎么编写vb的程序,第1张

温湿度部分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上。程序该怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9995842.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存