久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3428|回復: 2
打印 上一主題 下一主題
收起左側(cè)

DHT11溫濕度1602顯示的單片機程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:230034 發(fā)表于 2017-8-30 13:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用89c52,用DHT11,將溫濕顯示到LCD1602屏幕上

單片機源程序如下:
  1. //****************************************************************//

  2. #include <reg52.h>
  3. #include <intrins.h>
  4. //
  5. typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable           無符號8位整型變量  */
  6. typedef signed   char  S8;       /* defined for signed 8-bits integer variable                  有符號8位整型變量  */
  7. typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable           無符號16位整型變量 */
  8. typedef signed   int   S16;      /* defined for signed 16-bits integer variable           有符號16位整型變量 */
  9. typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable           無符號32位整型變量 */
  10. typedef signed   long  S32;      /* defined for signed 32-bits integer variable           有符號32位整型變量 */
  11. typedef float          F32;      /* single precision floating point variable (32bits) 單精度浮點數(shù)(32位長度) */
  12. typedef double         F64;      /* double precision floating point variable (64bits) 雙精度浮點數(shù)(64位長度) */
  13. //
  14. #define uchar unsigned char
  15. #define uint unsigned int
  16. #define   Data_0_time    4
  17. U8 str1[]={" "};
  18. U8 str2[]={" "};


  19. //----------------------------------------------//
  20. //----------------IO口定義區(qū)--------------------//
  21. //----------------------------------------------//
  22. sbit  P2_0  = P2^0 ;

  23. sbit RS = P2^6;   //定義端口
  24. sbit RW = P2^5;
  25. sbit EN = P2^7;


  26. #define RS_CLR RS=0
  27. #define RS_SET RS=1

  28. #define RW_CLR RW=0
  29. #define RW_SET RW=1

  30. #define EN_CLR EN=0
  31. #define EN_SET EN=1

  32. #define DataPort P0
  33. //----------------------------------------------//
  34. //----------------定義區(qū)--------------------//
  35. //----------------------------------------------//
  36. U8  TH_data,TL_data,RH_data,RL_data,CK_data;
  37. U8  U8FLAG,k;
  38. U8  U8count,U8temp;
  39. U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  40. U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  41. U8  U8comdata;







  42. void delayms(U16 xms)
  43.    {
  44.    U16 i,j;
  45.   for(i=xms;i>0;i--)
  46.    {
  47.    for(j=110;j>0;j--);
  48.    }

  49.    }

  50. void Delay(U16 j)
  51.     {      U8 i;
  52.             for(;j>0;j--)
  53.           {         
  54.                 for(i=0;i<27;i++);

  55.           }
  56.     }

  57. void  Delay_10us(void)
  58.       {
  59.         U8 i;
  60.         i--;
  61.         i--;
  62.         i--;
  63.         i--;
  64.         i--;
  65.         i--;
  66.        }



  67. /*------------------------------------------------
  68. mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  69. unsigned char 是定義無符號字符變量,其值的范圍是
  70. 0~255 這里使用晶振12M,精確延時請使用匯編
  71. ------------------------------------------------*/

  72. /*------------------------------------------------
  73.               判忙函數(shù)
  74. ------------------------------------------------*/
  75. bit LCD_Check_Busy(void)
  76. {
  77. DataPort= 0xFF;
  78. RS_CLR;
  79. RW_SET;
  80. EN_CLR;
  81. _nop_();
  82. EN_SET;
  83. return (bit)(DataPort & 0x80);
  84. }
  85. /*------------------------------------------------
  86.               寫入命令函數(shù)
  87. ------------------------------------------------*/
  88. void LCD_Write_Com(unsigned char com)
  89. {  
  90. while(LCD_Check_Busy()); //忙則等待
  91. RS_CLR;
  92. RW_CLR;
  93. EN_SET;
  94. DataPort= com;
  95. _nop_();
  96. EN_CLR;
  97. }
  98. /*------------------------------------------------
  99.               寫入數(shù)據(jù)函數(shù)
  100. ------------------------------------------------*/
  101. void LCD_Write_Data(unsigned char Data)
  102. {
  103. while(LCD_Check_Busy()); //忙則等待
  104. RS_SET;
  105. RW_CLR;
  106. EN_SET;
  107. DataPort= Data;
  108. _nop_();
  109. EN_CLR;
  110. }

  111. /*------------------------------------------------
  112.                 清屏函數(shù)
  113. ------------------------------------------------*/
  114. void LCD_Clear(void)
  115. {
  116. LCD_Write_Com(0x01);
  117. delayms(1);
  118. }
  119. /*------------------------------------------------
  120.               寫入字符串函數(shù)
  121. ------------------------------------------------*/
  122. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  123. {     
  124. if (y == 0)
  125.         {     
  126.          LCD_Write_Com(0x80 + x);     //表示第一行
  127.         }
  128. else
  129.         {      
  130.         LCD_Write_Com(0xC0 + x);      //表示第二行
  131.         }        
  132. while (*s)
  133.         {     
  134. LCD_Write_Data( *s);     
  135. s ++;     
  136.         }
  137. }
  138. /*------------------------------------------------
  139.               寫入字符函數(shù)
  140. ------------------------------------------------*/
  141. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  142. {     
  143. if (y == 0)
  144.         {     
  145.         LCD_Write_Com(0x80 + x);     
  146.         }   
  147. else
  148.         {     
  149.         LCD_Write_Com(0xC0 + x);     
  150.         }        
  151. LCD_Write_Data( Data);  
  152. }
  153. /*------------------------------------------------
  154.               初始化函數(shù)
  155. ------------------------------------------------*/
  156. void LCD_Init(void)
  157. {
  158.    LCD_Write_Com(0x38);    /*顯示模式設置*/
  159.    delayms(5);
  160.    LCD_Write_Com(0x38);
  161.    delayms(5);  
  162.    LCD_Write_Com(0x38);
  163.    delayms(5);  
  164.    LCD_Write_Com(0x38);  
  165.    LCD_Write_Com(0x08);    /*顯示關(guān)閉*/
  166.    LCD_Write_Com(0x01);    /*顯示清屏*/
  167.    LCD_Write_Com(0x06);    /*顯示光標移動設置*/
  168.    delayms(5);  
  169.    LCD_Write_Com(0x0C);    /*顯示開及光標設置*/
  170.    }
  171.         
  172.      void  COM(void)
  173.       {

  174.                 U8 i;

  175.        for(i=0;i<8;i++)           
  176.             {
  177.                
  178.                        U8FLAG=2;        
  179.                    while((!P2_0)&&U8FLAG++);
  180.                         Delay_10us();
  181.                     Delay_10us();
  182.                         Delay_10us();
  183.                           U8temp=0;
  184.              if(P2_0)U8temp=1;
  185.                     U8FLAG=2;
  186.                  while((P2_0)&&U8FLAG++);
  187.                    //超時則跳出for循環(huán)                  
  188.                     if(U8FLAG==1)break;
  189.                    //判斷數(shù)據(jù)位是0還是1         
  190.                      
  191.                 // 如果高電平高過預定0高電平值則數(shù)據(jù)位為 1
  192.                     
  193.                    U8comdata<<=1;
  194.                       U8comdata|=U8temp;        //0
  195.              }//rof
  196.            
  197.         }

  198.         //--------------------------------
  199.         //-----濕度讀取子程序 ------------
  200.         //--------------------------------
  201.         //----以下變量均為全局變量--------
  202.         //----溫度高8位== U8T_data_H------
  203.         //----溫度低8位== U8T_data_L------
  204.         //----濕度高8位== U8RH_data_H-----
  205.         //----濕度低8位== U8RH_data_L-----
  206.         //----校驗 8位 == U8checkdata-----
  207.         //----調(diào)用相關(guān)子程序如下----------
  208.         //---- Delay();, Delay_10us();,COM();
  209.         //--------------------------------

  210.         void RH(void)
  211.         {
  212.           //主機拉低18ms
  213.        P2_0=0;
  214.            Delay(180);
  215.            P2_0=1;
  216.          //總線由上拉電阻拉高 主機延時20us
  217.            Delay_10us();
  218.            Delay_10us();
  219.            Delay_10us();
  220.            Delay_10us();
  221.          //主機設為輸入 判斷從機響應信號
  222.            P2_0=1;
  223.          //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行         
  224.            if(!P2_0)                 //T !         
  225.            {
  226.            U8FLAG=2;
  227.          //判斷從機是否發(fā)出 80us 的低電平響應信號是否結(jié)束         
  228.            while((!P2_0)&&U8FLAG++);
  229.            U8FLAG=2;
  230.          //判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài)
  231.            while((P2_0)&&U8FLAG++);
  232.          //數(shù)據(jù)接收狀態(tài)                 
  233.            COM();
  234.            U8RH_data_H_temp=U8comdata;
  235.            COM();
  236.            U8RH_data_L_temp=U8comdata;
  237.            COM();
  238.            U8T_data_H_temp=U8comdata;
  239.            COM();
  240.            U8T_data_L_temp=U8comdata;
  241.            COM();
  242.            U8checkdata_temp=U8comdata;
  243.            P2_0=1;
  244.          //數(shù)據(jù)校驗
  245.          
  246.            U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  247.            if(U8temp==U8checkdata_temp)
  248.            {
  249.                      U8RH_data_H=U8RH_data_H_temp;
  250.                      U8RH_data_L=U8RH_data_L_temp;
  251.                   U8T_data_H=U8T_data_H_temp;
  252.                      U8T_data_L=U8T_data_L_temp;
  253.                      U8checkdata=U8checkdata_temp;
  254.            }//fi
  255.            }//fi

  256.         }
  257.         
  258. void main()
  259. {
  260.         
  261.          LCD_Init();
  262.          LCD_Clear();//清屏
  263.          LCD_Write_String(0,0,"shidu:");
  264.          LCD_Write_String(0,1,"wendu:");
  265.                  LCD_Write_Char(9,0,'%');
  266.                  LCD_Write_String(10,1,"C");
  267.                  LCD_Write_String(10,0,"RH");
  268.         Delay(1);         //延時100US(12M晶振)
  269.         while(1)
  270.         {  

  271.            //------------------------
  272. ……………………

  273. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
1602DHT11工程文件.zip (35.13 KB, 下載次數(shù): 68)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:271725 發(fā)表于 2018-1-11 17:01 | 只看該作者
顯示不出來
回復

使用道具 舉報

板凳
ID:67787 發(fā)表于 2024-1-28 22:25 | 只看該作者
buxing
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 狠狠操在线| 亚洲色在线视频 | 91视频在线观看免费 | 欧美日本韩国一区二区 | 精品欧美一区二区三区久久久 | 999国产视频 | 人碰人操| 久久久国产一区二区 | 久久精品国产一区 | 国产一级免费在线观看 | ww 255hh 在线观看 | 一区二区在线 | 精品一区二区三区在线观看 | 亚洲精品视频导航 | 日本在线免费看最新的电影 | 亚洲人人 | 久久久久国产一区二区三区四区 | 亚洲综合婷婷 | 台湾av在线| 日韩精品区 | 超碰一区二区 | 男女视频在线观看免费 | av在线播放不卡 | 成人午夜视频在线观看 | 久久久激情 | 欧美精品免费观看二区 | 自拍 亚洲 欧美 老师 丝袜 | 国产精品福利在线观看 | 中文字幕成人av | 伊人在线 | 国产精品久久久久久吹潮 | 激情五月综合网 | 色综合天天天天做夜夜夜夜做 | 久久国产日本 | 伊人网在线看 | 青青草亚洲 | 天天拍天天草 | 亚洲欧美日韩中文字幕一区二区三区 | 成人在线免费看 | 91av在线免费看 | 国产精品日产欧美久久久久 |