四位共阴数码管显示DHT11温湿度

 时间:2024-10-25 00:02:53

1、//main.c文件/*******************************程序功能:四位共阴极数码管显示DHT11温湿度****编写人员:盖工****编写时间:2016-03-07***************************/#include "includes.h"#include "DHT11.h"#include "Delay_time.h"/********段选IO口**********/sbit SMG1=P3^4;sbit SMG2=P3^5;sbit SMG3=P3^6;sbit SMG4=P3^7;INT16U a,b,time,flag = 0;unsigned char code tab[]={0x3f,0x05,0x5b,0x4f,0x65,0x6e,0x7e,0x07,0x7f,0x6f}; //显示0-9 void delay(unsigned int n){ unsigned char i,j; for(i=n;i>0;i--) for(j=0;j<110;j++);}/**********************函数名称:TEMP_show****函数描述:温湿度显示函数****返回值:******************/void TEMP_show(){ SMG2 = 1; P1 = tab[temp1]; delay(5); SMG2 = 0; SMG1 = 1; P1 = tab[temp0]; delay(5); SMG1 = 0; SMG3 = 1; P1 = tab[temp2]; delay(5); SMG3 = 0; SMG4 = 1; P1 = tab[temp3]; delay(5); SMG4 = 0;}void main(){ int i; P3=0xff; while(1) { RH(); Data_Deal(); for(i=0;i<3000;i++) //大约3s动态刷新一次 { TEMP_show(); } }}

2、//DHT11.c文件#include "includes.h"#inclu蟠校盯昂de "DHT11.h"#include "Delay_time.h"//#include "Usart.h"sbit data_dht = P2^2;INT8U dis_deal[5];INT16U temp0,temp1,temp2,temp3;INT8U U8FLAG;INT8U U8TEMP;INT8U U8T_data_H,U8T_data_L,U8RH_data_H ,U8RH_data_L ,U8checkdata;INT8U U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;INT8U U8comdata;INT8U outdata[5]; //定义发送的字节数 INT8U indata[5];INT8U str[5];INT16U U16temp1,U16temp2;void COM(void){ INT8U i; for(i=0;i<8;i++) //接收8bit的数据 { U8FLAG=2; while((!data_dht) &&U8FLAG++); //等待50us的低电平开始信号结束 Delay_10us_1T(); //延时27us Delay_10us_1T(); Delay_7us_1T(); U8TEMP=0; //接收数据为‘0’ if(data_dht) U8TEMP=1; //如果26~28us之后还未高电平则接受的数据为‘1’ U8FLAG=2; while((data_dht) && U8FLAG++); //等待数据信号高电平 //超时则跳出for循环 if(U8FLAG == 1) break; //判断数据位是0还是1 // 如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; //接受的数据高位在前,左移 U8comdata|=U8TEMP; }}//--------------------------------//-----湿度读取子程序 ------------//--------------------------------//----以下变量均为全局变量--------//----温度高8位== U8T_data_H------//----温度低8位== U8T_data_L------//----湿度高8位== U8RH_data_H -----//----湿度低8位== U8RH_data_L -----//----校验 8位 == U8checkdata-----//----调用相关子程序如下----------//---- Delay();, Delay_6us();,COM();//--------------------------------void RH(void){ //主机拉低18ms data_dht = 0; Delay18Ms_1T(); data_dht = 1;//总线由上拉电阻拉高 主机延时20us Delay_10us_1T(); Delay_10us_1T();//主机设为输入 判断从机响应信号 data_dht = 1;//判断从机是否有低电平响应信号 如不响应则跳出,响应则向32zsasz下运行 if(!data_dht) { U8FLAG = 2; //判断从机是否发出 80us 的低电平响应信号是否结束 while((!data_dht)&&(U8FLAG ++)); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 U8FLAG = 2; while((data_dht)&&(U8FLAG ++)); //数据接收状态 COM(); U8RH_data_H_temp = U8comdata; //湿度高位 COM(); U8RH_data_L_temp = U8comdata; //湿度地位 COM(); U8T_data_H_temp = U8comdata; //温度高位 COM(); U8T_data_L_temp = U8comdata; //温度地位 COM(); U8checkdata_temp = U8comdata; //校验位 //最后一bit接收完成后 从机拉低50us data_dht = 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; } }}void Data_Deal (void){ str[0]=U8RH_data_H; str[1]=U8RH_data_L; str[2]=U8T_data_H; str[3]=U8T_data_L; str[4]=U8checkdata; //读取模块数据周期不易小于 2S dis_deal[0] = str[0]; dis_deal[1] = str[2]; temp0 = str[2]/10; temp1 = str[2]%10; temp2 = str[0]/10; temp3 = str[0]%10; Delay_Ms(150);}

3、//延时函数#include "includes.h"#include "Delay_Time.h"/*******************************************************函数名称:Delay_Ms函数描述:毫秒级延时函数 1T 模式********************************************************/void Delay_Ms(INT16U ms) { INT16U i,j; for(i=ms;i>0;i--) for(j=190;j>0;j--);}/*******************************************************函数名称:Delay_Us函数描述:微秒级延时函数********************************************************/void Delay_Us(INT8U us){ while(us--); }void Delay_7us_1T(){ unsigned char i; _nop_(); i = 16; while (--i);}/********************************************函数名: Delay_10Us()***函数描述:延时***返回值: NULL*****************************************/void Delay_10us_1T() //延时10us左右{ unsigned char i; _nop_(); _nop_(); _nop_(); i = 24; while (--i);}void Delay18Ms_1T() //n = 3t -3{ INT8U i,j,k; _nop_(); _nop_(); i = 1; j = 194; k = 159; do { do { while(--k); }while(--j); }while(--i);}///*******************************************************//函数名称:Delay_15us//函数描述:微秒级延时函数//********************************************************///void Delay_15us() //@11.0592MHz//{// unsigned char i;// _nop_();// _nop_();// i = 38;// while (--i);//}///*******************************************************//函数名称:Delay_50us//函数描述:微秒级延时函数//********************************************************///void Delay_50us() //@11.0592MHz//{// unsigned char i, j;// _nop_();// _nop_();// _nop_();// i = 1;// j = 133;// do// {// while (--j);// } while (--i);//}///*******************************************************//函数名称:Delay_70us//函数描述:微秒级延时函数//********************************************************///void Delay_70us() //@11.0592MHz//{// unsigned char i, j;// i = 1;// j = 189;// do// {// while (--j);// } while (--i);//}///*******************************************************//函数名称:Delay_500us//函数描述:微秒级延时函数//********************************************************///void Delay_500us() //@11.0592MHz//{// unsigned char i, j;// i = 6;// j = 93;// do// {// while (--j);// } while (--i);//}

  • Altium Designer怎么设置关于图形编辑
  • 示波器怎么调出波形
  • IC先生网:简述晶体管的三种工作状态
  • 怎么用keil编写C51工程
  • stm32写程序如何出现提示
  • 热门搜索
    初中数学手抄报 新学期手抄报内容 最美逆行者手抄报 劳动手抄报内容50字 保护环境手抄报图片 教师节手抄报内容 名人手抄报 关于安全的手抄报图片 手抄报图片大全4年级 红星照耀中国手抄报