WSD.C(溫濕度主程序) /* 晶振12.0MHZ,MCU是AT89S51 DHT11數(shù)字溫濕度傳感器數(shù)碼管顯示程序。 P2^2接DATA 8個(gè)共陰數(shù)碼管接法:段選 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數(shù)據(jù)接入 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(); //主機(jī)拉低18ms TRH=0; delay_180ms(); TRH=1; //DATA總線由上拉電阻拉高主機(jī)延時(shí)20us delay_10us(); delay_10us(); delay_10us(); delay_10us(); TRH=1; //判斷DHT11是否有低電平響應(yīng)信號(hào)如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行 if(!TRH) { //判斷DHT11發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束 while(!TRH); //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài) while(TRH); //數(shù)據(jù)接收狀態(tài) RH_temp = receive(); RL_temp = receive(); TH_temp = receive(); TL_temp = receive(); CK_temp = receive(); TRH=1; //數(shù)據(jù)校驗(yàn) 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; } } //濕度整數(shù)部分 str[0] =RH_data/10; str[1] =RH_data%10; //濕度小數(shù)部分 str[2] = RL_data/10 ; //溫度整數(shù)部分 str[3] = TH_data/10; str[4] = TH_data%10; //溫度小數(shù)部分 str[5] = TL_data/10; //主函數(shù) //TH,TL,RH,RL分別代表溫濕度的整數(shù)和小數(shù)部分 void main() { delay_3s(); read_TRH(); for(;j<10000;j++) disp(str); } smg.c(數(shù)碼管顯示C程序) #include<reg52.h> #include"smg.h" #include"head.h" //后加的8個(gè)數(shù)碼管的段碼和位碼。 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(時(shí)間函數(shù)) #include<reg52.h> #include<intrins.h> #include"head.h"
|