标题:
vb上位机+AM2301温湿度监测单片机下位机全套源码
[打印本页]
作者:
include599
时间:
2018-1-21 16:28
标题:
vb上位机+AM2301温湿度监测单片机下位机全套源码
这个装置中51单片机读取温湿度传感器模块的数值,然后通过串口发送给vb上位机
0.png
(44.61 KB, 下载次数: 37)
下载附件
2018-1-21 17:14 上传
AM2301温湿度的下位机单片机源码:
#include <reg52.h>
unsigned char tmp;
void send_char(unsigned char txd);
void send_str();
void delayms(unsigned char ms);
void send_char(unsigned char txd);
void delay_us(unsigned int i);
void dht_init();
unsigned char read_byte();
void read_hum_temp();
void zhuanhuan();
unsigned int hum,temp; //定义湿度、温度(全局)
unsigned char hum_h,hum_l,temp_h,temp_l,check; //湿度高、低8位,温度高、低8位,校验位
unsigned char bai,shi,ge,bai1,shi1,ge1;
sbit dht=P1^1;
int main()
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1
IE = 0x0; // 禁止任何中断
dht_init();
while(1)
{
read_hum_temp();
zhuanhuan();
send_str();
delayms(255);
delayms(255);
}
}
//传感器初始化
void dht_init()
{
dht=0;
delay_us(50); //拉低延时500微秒,发送开始信号
dht=1; //释放总线,延时30微秒
delay_us(4);
while(!dht); //拉低等待
while(dht); // 拉高等待,即将传送数据
}
//读取一个字节数据
unsigned char read_byte()
{
unsigned char n,byte=0,dat;
for(n=0;n<8;n++)
{
while(!dht);
delay_us(4); //理论上28us<延时<70us,此处写2--6都可以
dat=0;
if(dht)
dat=1;
while(dht);
byte<<=1;
byte|=dat;
}
return byte;
}
//读取40位数据
void read_hum_temp()
{
dht_init();
hum_h=read_byte(); //读湿度
hum_l=read_byte();
temp_h=read_byte(); //读温度
temp_l=read_byte();
check=read_byte(); //读校验
while(!dht); // 等待低电平结束
dht=1; //最后拉高总线
}
//数据转换,提取各位数字
void zhuanhuan()
{
unsigned char a;
a=hum_h+hum_l+temp_h+temp_l;
if(a==check)
{
hum=temp=0;
hum=((hum|hum_h)<<8)|hum_l;
temp=((temp|temp_h)<<8)|temp_l;
bai=temp/100+0x30;
shi=temp%100/10+0x30;
ge=temp%10+0x30;
bai1=hum/100+0x30;
shi1=hum%100/10+0x30;
ge1=hum%10+0x30;
}
else bai=shi=ge=bai1=shi1=ge1=0;
}
// 传送一个字符
void send_char(unsigned char txd)
{
SBUF = txd;
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送标志
}
// 传送字串
void send_str()
{
send_char(bai);
send_char(shi);
send_char('.');
send_char(ge);
//delay_us(200);
send_char(bai1);
send_char(shi1);
send_char('.');
send_char(ge1);
}
//延时
void delay_us(unsigned int i)
{
while(i--);
}
// 延时子程序
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 255; i++);
}
}
复制代码
蓝牙,电脑端进行实时显示
全部资料51hei下载地址:
温湿度.zip
(33.98 KB, 下载次数: 121)
2018-1-21 16:28 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1