WSD.C(温湿度主程序) /* 晶振12.0MHZ,MCU是AT89S51 DHT11数字温湿度传感器数码管显示程序。 P2^2接DATA 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"
|