找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 783|回复: 0
打印 上一主题 下一主题
收起左侧

温度传感器

[复制链接]
跳转到指定楼层
楼主
ID:854459 发表于 2021-1-5 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
WSD.C(温湿度主程序)
/*
晶振12.0MHZ,MCUAT89S51
DHT11数字温湿度传感器数码管显示程序。
P2^2DATA
8个共阴数码管接法:段选
P1.7->A;P1.5->B;P1.1->C;P1.3->D;P1.4->E;P1.6->F;P1.0->G;P1.2->DP
位选
P0.0->7;P0.1->6;P0.2->5;P0.3->4;P0.4->3;P0.5->2;P0.6->1;P0.7->0*/
#include<reg52.h>
#include <intrins.h>
#include"smg.h"
#include"head.h"
unsigned char str[]={0,0,0,0,0,0,0,0};
sbit TRH = P2^2;//温湿度传感器DHT11数据接入
uint j=0;
uintTH_data,TL_data,RH_data,RL_data,CK_data;
uintTH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
uint com_data,untemp,temp;
char receive()
{
uint i;
com_data=0;
for(i=0;i<=7;i++)
{
while(!TRH);
delay_10us();
delay_10us();
delay_10us();
if(TRH)
{
temp=1;
while(TRH);
}
else
temp=0;
com_data<<=1;
com_data|=temp;
}
return(com_data);
}
void read_TRH()
TRH=1;
delay_5us();
//主机拉低18ms
TRH=0;
delay_180ms();
TRH=1;
//DATA总线由上拉电阻拉高主机延时20us
delay_10us();
delay_10us();
delay_10us();
delay_10us();
TRH=1;
//判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行
if(!TRH)
{
//判断DHT11发出 80us 的低电平响应信号是否结束
while(!TRH);
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(TRH);
//数据接收状态
RH_temp = receive();
RL_temp = receive();
TH_temp = receive();
TL_temp = receive();
CK_temp = receive();
TRH=1;
//数据校验
untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
if(untemp==CK_temp)
{
RH_data = RH_temp;
RL_data = RL_temp;
TH_data = TH_temp;
TL_data = TL_temp;
CK_data = CK_temp;
}
}
//湿度整数部分
str[0] =RH_data/10;
str[1] =RH_data%10;
//湿度小数部分
str[2] = RL_data/10 ;
//温度整数部分
str[3] = TH_data/10;
str[4] = TH_data%10;
//温度小数部分
str[5] = TL_data/10;
//主函数
//TH,TL,RH,RL分别代表温湿度的整数和小数部分
void main()
{
delay_3s();
read_TRH();
for(;j<10000;j++)
disp(str);
}
smg.c(数码管显示C程序)
#include<reg52.h>
#include"smg.h"
#include"head.h"
//后加的8个数码管的段码和位码。
sbit smg_dw1=P0^0;
sbit smg_dw2=P0^1;
sbit smg_dw3=P0^2;
sbit smg_dw4=P0^3;
sbit smg_dw5=P0^4;
sbit smg_dw6=P0^5;
sbit smg_dw7=P0^6;
sbit smg_dw8=P0^7;
uchar
smg_du[]={0xfa,0x22,0xb9,0xab,0x63,0xcb,0xdb,0xa2,0xfb,0xeb,0xf3,0x5b,0xd8,0x3b,0xd9,0xd1,0x04};
void disp(uchar *p)
{
P1=smg_du[*p];
smg_dw1=0;
delay_17us(1);
smg_dw1=1;
delay_17us(1);
p++;
P1=smg_du[*p];
smg_dw2=0;
delay_17us(1);
smg_dw2=1;
delay_17us(1);
p++;
P1=smg_du[*p];
smg_dw3=0;
delay_17us(1);
smg_dw3=1;
delay_17us(1);
p++;
P1=smg_du[*p];
smg_dw4=0;
delay_17us(1);
smg_dw4=1;
delay_17us(1);
p++;
P1=smg_du[*p];
smg_dw5=0;
delay_17us(1);
smg_dw5=1;
delay_17us(1);
p++;
P1=smg_du[*p];
smg_dw6=0;
delay_17us(1);
smg_dw6=1;
delay_17us(1);
p++;
P1=smg_du[*p];
smg_dw7=0;
delay_17us(1);
smg_dw7=1;
delay_17us(1);
p++;
P1=smg_du[*p];
smg_dw8=0;
delay_17us(1);
smg_dw8=1;
delay_17us(1);
}
time.c(时间函数)
#include<reg52.h>
#include<intrins.h>
#include"head.h"

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表