89C52RC DHT11湿度温度显示到数码管 源代码

记录一下 用到的软件

1 Keil uVision5 (把源代码编译成HEX文件)

2 stc-isp-15xx-v6.85.exe (把HEX文件写入单片机)


下面是源代码

//****************************************************************//

//   STC89C52RC  DHT11 温度湿度

// 功能  :单片机通过 DHT11 获取温湿度  显示到8位数码管 

//硬件连接:DHT11有3根线 DATA连接P2.0  VCC连接VCC GND连接GND

// 测试通过: wx:  yaolifang1987

//****************************************************************//

#include <reg52.h>

#include <intrins.h>

//

typedef unsigned char  U8;      /* defined for unsigned 8-bits integer variable          无符号8位整型变量  */

typedef signed  char  S8;      /* defined for signed 8-bits integer variable                  有符号8位整型变量  */

typedef unsigned int  U16;      /* defined for unsigned 16-bits integer variable          无符号16位整型变量 */

typedef signed  int  S16;      /* defined for signed 16-bits integer variable          有符号16位整型变量 */

typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable          无符号32位整型变量 */

typedef signed  long  S32;      /* defined for signed 32-bits integer variable          有符号32位整型变量 */

typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */

typedef double        F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */

//

#define uchar unsigned char

#define uint unsigned int

#define  Data_0_time    4

//----------------------------------------------//

//----------------IO口定义区--------------------//

//----------------------------------------------//

sbit FM=P2^3; // 蜂鸣器的接口

sbit  P2_0 = P2^0;

sbit  dula=P2^6;

sbit  wela=P2^7;

//----------------------------------------------//

//----------------定义区--------------------//

//----------------------------------------------//

U8  U8FLAG,k;

U8  U8count,U8temp;

U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8  U8comdata;

U8  outdata[5];  //定义发送的字节数         

U8  indata[5];

U8  count, count_r=0;

U8  str[5];

U16 U16temp1,U16temp2;

U8  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

        void delayms(U16 xms)

  {

  U16 i,j;

  for(i=xms;i>0;i--)

  {

  for(j=110;j>0;j--);

  }

  }

    void Delay(U16 j)

    {      U8 i;

            for(;j>0;j--)

          {       

                for(i=0;i<27;i++);

          }

    }

    void  Delay_10us(void)

      {

        U8 i;

        i--;

        i--;

        i--;

        i--;

        i--;

        i--;

      }


    void  COM(void)

      {

                U8 i;

      for(i=0;i<8;i++)         

            {


                      U8FLAG=2;       

                  while((!P2_0)&&U8FLAG++);

                        Delay_10us();

                    Delay_10us();

                        Delay_10us();

                          U8temp=0;

            if(P2_0)U8temp=1;

                    U8FLAG=2;

                while((P2_0)&&U8FLAG++);

                  //超时则跳出for循环                 

                    if(U8FLAG==1)break;

                  //判断数据位是0还是1       


                // 如果高电平高过预定0高电平值则数据位为 1


                  U8comdata<<=1;

                      U8comdata|=U8temp;        //0

            }//rof


        }

        //--------------------------------

        //-----湿度读取子程序 ------------

        //--------------------------------

        //----以下变量均为全局变量--------

        //----温度高8位== U8T_data_H------

        //----温度低8位== U8T_data_L------

        //----湿度高8位== U8RH_data_H-----

        //----湿度低8位== U8RH_data_L-----

        //----校验 8位 == U8checkdata-----

        //----调用相关子程序如下----------

        //---- Delay();, Delay_10us();,COM();

        //--------------------------------

        void RH(void)

        {

          //主机拉低18ms

      P2_0=0;

          Delay(180);

          P2_0=1;

        //总线由上拉电阻拉高 主机延时20us

          Delay_10us();

          Delay_10us();

          Delay_10us();

          Delay_10us();

        //主机设为输入 判断从机响应信号

          P2_0=1;

        //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行         

          if(!P2_0)                //T !         

          {

          U8FLAG=2;

        //判断从机是否发出 80us 的低电平响应信号是否结束       

          while((!P2_0)&&U8FLAG++);

          U8FLAG=2;

        //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态

          while((P2_0)&&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;

          P2_0=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;

          }//fi

          }//fi

        }


//----------------------------------------------

//main()功能描述:  AT89C51  11.0592MHz       

void main()

{

        U8  i,j;

        unsigned int ikk;

        //uchar str[6]={"RS232"};

        /* 系统初始化 */

        Delay(1);        //延时100US(12M晶振)

FM=0;Delay(2000);           //蜂鸣器报警

FM=1;Delay(2000);    //延迟

FM=0;Delay(2000);           //蜂鸣器报警

FM=1;Delay(2000);    //延迟

FM=0;Delay(2000);           //蜂鸣器报警

FM=1;

FM=0;Delay(1000);           //蜂鸣器报警

FM=1;Delay(1000);    //延迟

FM=0;Delay(1000);           //蜂鸣器报警

FM=1;Delay(1000);    //延迟

FM=0;Delay(1000);           //蜂鸣器报警

FM=1;Delay(1000);

FM=0;Delay(1000);           //蜂鸣器报警

FM=1;Delay(1000);

FM=0;Delay(1000);           //蜂鸣器报警

FM=1;

  Delay(1000);

        while(1)

        { 

          //------------------------

          //调用温湿度读取子程序

          RH();

          //串口显示程序

          //--------------------------

          str[0]=U8RH_data_H; //  把湿度整数给予SRT0.(直接使用即可)

          str[1]=U8RH_data_L; //  把湿度小数给予SRT1.==0(为零,不用)

          str[2]=U8T_data_H;  //  把温度整数给予SRT2.(直接使用即可)

          str[3]=U8T_data_L;  //  把温度小数给予SRT3.==0(为零,不用)

          str[4]=U8checkdata; //  校验位(不用)

// unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 

// unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  


  // dula=1;

          // P0=table[str[2]/10];

          // dula=0;

          // P0=0xff;

          // wela=1;

          // P0=0xfe;

          // wela=0;

          // delayms(300);


    // FM=0;Delay(2000);           //蜂鸣器报警

// FM=1;Delay(2000);    //延迟

// FM=0;Delay(2000);           //蜂鸣器报警

// FM=1;Delay(2000);    //延迟

// FM=0;Delay(2000);           //蜂鸣器报警

// FM=1;

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);    //延迟

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);    //延迟

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;

  // Delay(1000);




  ikk=0;

  // for(ikk=0;ikk<500;ikk++)

  for(ikk=0;ikk<500;ikk++)

  {

  // 温度 第一位

          dula=1;

          P0=table[str[2]/10];

          dula=0;

          P0=0xff;

          wela=1;

          P0=0xfe;

          wela=0;

          delayms(1);

// 温度 第二位

          dula=1;

          P0=table[str[2]%10];

          dula=0;

          P0=0xff;

          wela=1;

          P0=0xfd;

          wela=0;

          delayms(1);

  // 温度 C

          dula=1;

          P0=table[12];

          dula=0;

          P0=0xff;

          wela=1;

          P0=0xfb;

          wela=0;

          delayms(1);


// unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 

// unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

// unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,  0xef,0xdf,0xbf,0x7f};


  // 湿度 第一位 str[0]

  dula=1;

          P0=table[str[0]/10];

          dula=0;

          P0=0xff;

          wela=1;

          P0=0xef;

          wela=0;

          delayms(1);

  // 湿度 第二位 str[0]

  dula=1;

          P0=table[str[0]%10];

          dula=0;

          P0=0xff;

          wela=1;

          P0=0xdf;

          wela=0;

          delayms(1);

  // 湿度 符号

  dula=1;

          // P0=table[13];

          P0=0x76;

          dula=0;

          P0=0xff;

          wela=1;

          P0=0xbf;

          wela=0;

          delayms(1);





  }





// FM=0;           //蜂鸣器报警

// Delay(3000);    //延迟

// FM=1;

// Delay(3000); 

// FM=0;           //蜂鸣器报警

// Delay(3000);    //延迟

// FM=1;

// Delay(1000);

// Delay(10000);

  // FM=0;Delay(2000);           //蜂鸣器报警

// FM=1;Delay(2000);    //延迟

// FM=0;Delay(2000);           //蜂鸣器报警

// FM=1;Delay(2000);    //延迟

// FM=0;Delay(2000);           //蜂鸣器报警

// FM=1;

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);    //延迟

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);    //延迟

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;Delay(1000);

// FM=0;Delay(1000);           //蜂鸣器报警

// FM=1;

  // Delay(1000);

      //延迟

Delay(18000);

FM=0;Delay(1000);           //蜂鸣器报警

FM=1;Delay(1000);


          //读取模块数据周期不易小于 2S

          // Delay(10000);

        }//elihw


}// main

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容