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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9978|回復: 14
打印 上一主題 下一主題
收起左側

基于89c51的dht11溫濕度檢測1602顯示(附加串口顯示)

  [復制鏈接]
跳轉到指定樓層
樓主


全部資料51hei下載地址:
DHT11 串口顯示.rar (44.77 KB, 下載次數: 358)

單片機源碼:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar str1[]={"  "},str2[]={"  "};
  6. sbit dat=P2^0; //dht11 dat端口
  7. sbit EN=P3^4;
  8. sbit RS=P3^5;  
  9. sbit RW=P3^6;
  10. uchar TH_data,TL_data,RH_data,RL_data,CK_data;
  11. uchar FLAG,k,count,temp,comdata;
  12. uchar T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;
  13. uchar T_data_H_temp,T_data_L_temp,RH_data_H_temp,
  14.       RH_data_L_temp,checkdata_temp;
  15. void delayms(uint x)   
  16. {
  17.         uint y;
  18.         for(;x>0;x--)
  19.                 for(y=110;y>0;y--);
  20. }
  21. void Delay(uint j) //100us
  22. {      
  23.         uchar i;
  24.         for(;j>0;j--)        
  25.                 for(i=0;i<27;i++);
  26. }
  27. void Delay_10us(void)
  28. {
  29.         uchar i;
  30.         i--;
  31.         i--;
  32.         i--;
  33.         i--;
  34.         i--;
  35.         i--;
  36. }
  37. bit LCD_Check_Busy(void)
  38. {
  39.         P0=0xFF;
  40.         RS=0;
  41.         RW=1;
  42.         EN=0;
  43.         _nop_();
  44.         EN=1;
  45.         return(bit)(P0&0x80);
  46. }
  47. void LCD_Write_Com(uchar com)
  48. {  
  49.         while(LCD_Check_Busy()); //忙則等待
  50.         RS=0;
  51.         RW=0;
  52.         P0=com;
  53.         _nop_();
  54.         EN=1;  
  55.         _nop_();
  56.         EN=0;
  57. }
  58. void LCD_Write_Data(uchar Data)
  59. {
  60.         while(LCD_Check_Busy()); //忙則等待
  61.         RS=1;
  62.         RW=0;
  63.         P0=Data;
  64.         _nop_();
  65.         EN=1;  
  66.         _nop_();
  67.         EN=0;
  68. }
  69. void LCD_Write_String(uchar x,y,uchar *s)
  70. {     
  71.         if(y==0)
  72.         {     
  73.                 LCD_Write_Com(0x80+x); //表示第一行
  74.          }
  75.         else
  76.         {      
  77.                 LCD_Write_Com(0xC0+x); //表示第二行
  78.         }        
  79.         while(*s)
  80.         {     
  81.                 LCD_Write_Data(*s);     
  82.                 s++;     
  83.          }
  84. }
  85. void LCD_Write_Char(uchar x,y,Data)
  86. {     
  87.         if (y==0)
  88.         {     
  89.                 LCD_Write_Com(0x80+x);     
  90.         }   
  91.         else
  92.         {     
  93.                 LCD_Write_Com(0xC0+x);     
  94.          }        
  95.         LCD_Write_Data(Data);  
  96. }
  97. void LCD_Init(void)
  98. {
  99.         LCD_Write_Com(0x01); //清屏
  100.         LCD_Write_Com(0x38);   
  101.         LCD_Write_Com(0x08); //顯示關閉
  102.         LCD_Write_Com(0x01); //顯示清屏
  103.         LCD_Write_Com(0x06); //顯示光標移動設置  
  104.         LCD_Write_Com(0x0C); //顯示開及光標設置
  105. }      
  106. void COM(void)
  107. {
  108.         uchar i;
  109.         for(i=0;i<8;i++)           
  110.         {               
  111.                 FLAG=2;        
  112.                 while((!dat)&&FLAG++);
  113.                 Delay_10us();
  114.                 Delay_10us();
  115.                 Delay_10us();
  116.                 temp=0;
  117.                 if(dat)temp=1;
  118.                 FLAG=2;
  119.                 while((dat)&&FLAG++); //超時則跳出for循環                  
  120.                 if(FLAG==1) //判斷數據位是0還是1
  121.                         break; //如果高電平高過預定0高電平值則數據位為 1
  122.                 comdata<<=1;
  123.                 comdata|=temp;        //0
  124.         }           
  125. }
  126. void RH(void)
  127. {
  128.         dat=0;
  129.         Delay(200);        
  130.         dat=1;
  131.         Delay_10us(); //總線由上拉電阻拉高 主機延時20us
  132.         Delay_10us();
  133.         Delay_10us();
  134.         Delay_10us();
  135.         //主機設為輸入 判斷從機響應信號
  136.         dat=1;
  137.         //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行         
  138.         if(!dat)  //T !         
  139.         {
  140.                 FLAG=2;
  141.                 //判斷從機是否發出 80us 的低電平響應信號是否結束         
  142.                 while((!dat)&&FLAG++);
  143.                 FLAG=2;
  144.                 //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  145.                 while((dat)&&FLAG++);
  146.                 //數據接收狀態                 
  147.                 COM();
  148.                 RH_data_H_temp=comdata;
  149.                 COM();
  150.                 RH_data_L_temp=comdata;
  151.                 COM();
  152.                 T_data_H_temp=comdata;
  153.                 COM();
  154.                 T_data_L_temp=comdata;
  155.                 COM();
  156.                 checkdata_temp=comdata;
  157.                 dat=1; //數據校驗         
  158.                 temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);
  159.                 if(temp==checkdata_temp)
  160.                 {
  161.                         RH_data_H=RH_data_H_temp;
  162.                         RH_data_L=RH_data_L_temp;
  163.                         T_data_H=T_data_H_temp;
  164.                         T_data_L=T_data_L_temp;
  165.                         checkdata=checkdata_temp;
  166.                 }
  167.         }      
  168. }      
  169. void main()
  170. {      
  171.                 LCD_Init();
  172.                 Delay(20000);
  173.                 LCD_Write_String(0,0,"shidu:");
  174.                 LCD_Write_String(0,1,"wendu:");
  175.                 LCD_Write_Char(9,0,'%');
  176.                 LCD_Write_Char(10,1,'C');
  177.                 //LCD_Write_String(10,1,"C");
  178.                 LCD_Write_String(10,0," RH");
  179.                 Delay(1);      
  180.         while(1)
  181.         {  
  182.                         RH();
  183.                         RH_data=RH_data_H; //把濕度整數給予SRT0.(直接使用即可)
  184.                         RL_data=RH_data_L; //把濕度小數給予SRT1.==0(為零,不用)
  185.                         TH_data=T_data_H;  //把溫度整數給予SRT2.(直接使用即可)
  186.                         TL_data=T_data_L;  //把溫度小數給予SRT3.==0(為零,不用)
  187.                         CK_data=checkdata; //校驗位(不用)                                
  188.                         str1[0]=(char)(0x30+RH_data/10); //濕度整數部分
  189.                         str1[1]=(char)(0x30+RH_data%10);                                
  190.                         str2[0]=(char)(0x30+TH_data/10); //溫度整數部分
  191.                         str2[1]=(char)(0x30+TH_data%10);                                                
  192.                         LCD_Write_Char(7,0,str1[0]); //顯示濕度        
  193.                         LCD_Write_Char(8,0,str1[1]);                                       
  194.                         LCD_Write_Char(7,1,str2[0]); //顯示溫度        
  195.                         LCD_Write_Char(8,1,str2[1]);                                                                 
  196.                         Delay(20000); //讀取模塊數據周期不易小于 2S
  197.         }     
  198. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:334737 發表于 2018-5-22 15:37 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:258975 發表于 2018-6-11 12:07 | 只看該作者
為什么我的串口顯示的是亂碼
回復

使用道具 舉報

地板
ID:317625 發表于 2018-6-12 09:04 | 只看該作者
gugugu 發表于 2018-6-11 12:07
為什么我的串口顯示的是亂碼

接受選擇不要用十六進制  字符接收即可 應該是 printf 做的輸出
回復

使用道具 舉報

5#
ID:381859 發表于 2018-8-18 15:17 | 只看該作者
請問。要想在這個程序中加報警系統,怎么弄啊
回復

使用道具 舉報

6#
ID:359667 發表于 2018-12-4 17:53 | 只看該作者
gugugu 發表于 2018-6-11 12:07
為什么我的串口顯示的是亂碼

你好,這個程序燒進去后在串口助手顯示的也是亂碼(在文本模式下是漢字的那種亂碼),想問一下你是怎么解決的
回復

使用道具 舉報

7#
ID:242804 發表于 2018-12-4 18:30 | 只看該作者
學習了,感謝分享
回復

使用道具 舉報

8#
ID:406408 發表于 2018-12-5 10:50 來自手機 | 只看該作者
最近正想做一個,學習了。
回復

使用道具 舉報

9#
ID:499446 發表于 2019-3-27 21:53 | 只看該作者
樓樓大人可以發送一份完整的在串口助手中顯示大代碼?
回復

使用道具 舉報

10#
ID:483579 發表于 2019-4-7 15:09 來自手機 | 只看該作者
liding12356 發表于 2018-12-4 18:30
學習了,感謝分享

可以發我一份完整資料嘛?2756873747@qq.com
回復

使用道具 舉報

11#
ID:483579 發表于 2019-4-7 15:10 來自手機 | 只看該作者
樓主可以發我一份完整資料嘛?2756873747@qq.com
回復

使用道具 舉報

12#
ID:163730 發表于 2019-6-21 23:21 | 只看該作者
謝謝分享!
回復

使用道具 舉報

13#
ID:561669 發表于 2019-7-3 11:22 | 只看該作者
厲害厲害,非常感謝啊
回復

使用道具 舉報

14#
ID:561669 發表于 2019-7-3 11:22 | 只看該作者
這篇程序非常棒
回復

使用道具 舉報

15#
ID:282095 發表于 2019-7-3 11:54 | 只看該作者
數據幀的傳送
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品精品国产色婷婷 | 久久高清免费视频 | 成人免费在线 | 成人精品福利 | 中文字幕一区二区三区四区五区 | 成人午夜精品一区二区三区 | 日韩三级在线 | 91麻豆精品国产91久久久久久久久 | 日本在线看 | 日韩中字幕 | 欧美精品久久 | 久草www| 男人天堂视频在线观看 | 国产超碰人人爽人人做人人爱 | 久久久久久久亚洲精品 | 欧美成年人网站 | 精品国产欧美日韩不卡在线观看 | 日韩精品一二三区 | 在线欧美日韩 | 免费国产一区二区 | 91精品久久久久久久久99蜜臂 | 亚洲一区二区三区桃乃木香奈 | 亚洲精品区 | 亚洲欧美一区二区三区情侣bbw | 天天射天天干 | 国产精品久久久久久婷婷天堂 | 在线激情视频 | 欧美操操操 | 国产成人精品一区二区三区在线观看 | 一区二区三区在线观看视频 | 国产精品视频在线免费观看 | 欧美99| 可以在线观看av的网站 | 国产成人精品视频在线观看 | 麻豆久久久久久久 | 一级高清| 国产成人av一区二区三区 | 国产一区 | 日韩中文久久 | 免费色网址 | 国产精品不卡 |