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

標題: 51單片機1602+dht11實時顯示溫度程序 [打印本頁]

作者: 清泉映殘月    時間: 2020-4-20 19:51
標題: 51單片機1602+dht11實時顯示溫度程序
本帖最后由 清泉映殘月 于 2020-4-20 19:54 編輯

學習51單片機C語言編程6天,成功實現通過液晶實時顯示周圍環境溫濕度,當與所設溫濕度區間不符立即蜂鳴報警(報警音是---八月桂花),具有一鍵報警消音功能,設置鍵按一次設置濕度上限,兩次濕度下限,三次溫度上限,四次溫度下限,五次退出設置部分代碼如下
  1. /*-----------------------------------------------
  2. 硬件:單片機AT89C52、液晶1602、溫濕傳感器DHT11、晶振11.0592M
  3. 功能:實時顯示周圍環境溫濕度,與所設溫濕度區間不符立即蜂鳴報警,
  4.           具有報警消音功能,s1循環設置,s2加,s3減,s4報警消音  
  5. 通訊連接:P0口與液晶1602通訊,P3.7口與溫濕傳感器DHT11通訊連接
  6. ------------------------------------------------*/
  7. #include <reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  8. #include <intrins.h>
  9. #include <math.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int        
  12. sbit RS = P2^3;   //定義端口
  13. sbit RW = P2^4;
  14. sbit EN = P2^5;
  15. sbit Data = P3^7;//定義數據線
  16. sbit moshi=P2^6;   //模式切換
  17. sbit INC=P2^7;     //加
  18. sbit DEC=P2^0;     //減
  19. sbit SPK=P3^6;     //蜂鳴報警
  20. sbit XY=P2^1;           //蜂鳴報警消音
  21. uchar rec_dat0[16];   //用于顯示的接收數據數組
  22. uchar rec_dat1[16];
  23. uchar countRH=95,countRL=20,moshicount=0,n=0;//n為報警音樂節拍常數變量
  24. uchar RH,RL,TH,TL;
  25. char   countTH=50,countTL=0;
  26. void xiaoyin();
  27. unsigned char code music_tab[] ={   
  28. 0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數,   
  29. 0x20, 0x40, 0x1C , 0x10,   
  30. 0x18, 0x10, 0x20 , 0x10,   
  31. 0x1C, 0x10, 0x18 , 0x40,   
  32. 0x1C, 0x20, 0x20 , 0x20,   
  33. 0x1C, 0x20, 0x18 , 0x20,   
  34. 0x20, 0x80, 0xFF , 0x20,   
  35. 0x30, 0x1C, 0x10 , 0x18,   
  36. 0x20, 0x15, 0x20 , 0x1C,   
  37. 0x20, 0x20, 0x20 , 0x26,   
  38. 0x40, 0x20, 0x20 , 0x2B,   
  39. 0x20, 0x26, 0x20 , 0x20,   
  40. 0x20, 0x30, 0x80 , 0xFF,   
  41. 0x20, 0x20, 0x1C , 0x10,   
  42. 0x18, 0x10, 0x20 , 0x20,   
  43. 0x26, 0x20, 0x2B , 0x20,   
  44. 0x30, 0x20, 0x2B , 0x40,   
  45. 0x20, 0x20, 0x1C , 0x10,   
  46. 0x18, 0x10, 0x20 , 0x20,   
  47. 0x26, 0x20, 0x2B , 0x20,   
  48. 0x30, 0x20, 0x2B , 0x40,   
  49. 0x20, 0x30, 0x1C , 0x10,   
  50. 0x18, 0x20, 0x15 , 0x20,   
  51. 0x1C, 0x20, 0x20 , 0x20,   
  52. 0x26, 0x40, 0x20 , 0x20,   
  53. 0x2B, 0x20, 0x26 , 0x20,   
  54. 0x20, 0x20, 0x30 , 0x80,   
  55. 0x20, 0x30, 0x1C , 0x10,   
  56. 0x20, 0x10, 0x1C , 0x10,   
  57. 0x20, 0x20, 0x26 , 0x20,   
  58. 0x2B, 0x20, 0x30 , 0x20,   
  59. 0x2B, 0x40, 0x20 , 0x15,   
  60. 0x1F, 0x05, 0x20 , 0x10,   
  61. 0x1C, 0x10, 0x20 , 0x20,   
  62. 0x26, 0x20, 0x2B , 0x20,   
  63. 0x30, 0x20, 0x2B , 0x40,   
  64. 0x20, 0x30, 0x1C , 0x10,   
  65. 0x18, 0x20, 0x15 , 0x20,   
  66. 0x1C, 0x20, 0x20 , 0x20,   
  67. 0x26, 0x40, 0x20 , 0x20,   
  68. 0x2B, 0x20, 0x26 , 0x20,   
  69. 0x20, 0x20, 0x30 , 0x30,   
  70. 0x20, 0x30, 0x1C , 0x10,   
  71. 0x18, 0x40, 0x1C , 0x20,   
  72. 0x20, 0x20, 0x26 , 0x40,   
  73. 0x13, 0x60, 0x18 , 0x20,   
  74. 0x15, 0x40, 0x13 , 0x40,   
  75. 0x18, 0x80, 0x00   
  76. };

  77. #define RS_CLR RS=0
  78. #define RS_SET RS=1

  79. #define RW_CLR RW=0
  80. #define RW_SET RW=1

  81. #define EN_CLR EN=0
  82. #define EN_SET EN=1

  83. #define DataPort P0


  84. /*------------------------------------------------
  85. uS延時函數,含有輸入參數 unsigned char t,無返回值
  86. unsigned char 是定義無符號字符變量,其值的范圍是
  87. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  88. 長度如下 T=tx2+5 uS
  89. ------------------------------------------------*/
  90. void DelayUs2x(unsigned int t)
  91. {   
  92. while(--t);
  93. }
  94. /*------------------------------------------------
  95. mS延時函數,含有輸入參數 unsigned char t,無返回值
  96. unsigned char 是定義無符號字符變量,其值的范圍是
  97. 0~255 這里使用晶振12M,精確延時請使用匯編
  98. ------------------------------------------------*/
  99. void DelayMs(unsigned char t)
  100. {
  101.      
  102. while(t--)
  103. {
  104.      //大致延時1mS
  105.      DelayUs2x(245);
  106.          DelayUs2x(245);
  107. }
  108. }

  109. void delay (unsigned char m)   //控制頻率延時   
  110. {   
  111. unsigned i=3*m;   
  112. while(--i);  
  113. }  

  114. /*------------------------------------------------
  115.               判忙函數
  116. ------------------------------------------------*/
  117. bit LCD_Check_Busy(void)
  118. {
  119. DataPort= 0xFF;
  120. RS_CLR;
  121. RW_SET;
  122. EN_CLR;
  123. _nop_();
  124. EN_SET;
  125. return (bit)(DataPort & 0x80);
  126. }
  127. /*------------------------------------------------
  128.               寫入命令函數
  129. ------------------------------------------------*/
  130. void LCD_Write_Com(unsigned char com)
  131. {  
  132. while(LCD_Check_Busy()); //忙則等待
  133. RS_CLR;
  134. RW_CLR;
  135. EN_SET;
  136. DataPort= com;
  137. _nop_();
  138. EN_CLR;
  139. }
  140. /*------------------------------------------------
  141.               寫入數據函數
  142. ------------------------------------------------*/
  143. void LCD_Write_Data(unsigned char Data)
  144. {
  145. while(LCD_Check_Busy()); //忙則等待
  146. RS_SET;
  147. RW_CLR;
  148. EN_SET;
  149. DataPort= Data;
  150. _nop_();
  151. EN_CLR;
  152. }


  153. /*------------------------------------------------
  154.               寫入字符函數
  155. ------------------------------------------------*/
  156. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  157. {     
  158. if (y == 1)
  159.          {     
  160.          LCD_Write_Com(0x80 + x);     
  161.          }   
  162. else
  163.          {     
  164.          LCD_Write_Com(0xC0 + x);     
  165.          }        
  166. LCD_Write_Data( Data);  
  167. }
  168. /*------------------------------------------------
  169.               初始化函數
  170. ------------------------------------------------*/
  171. void LCD_Init(void)
  172. {
  173.    LCD_Write_Com(0x38);        //設置 8 位格式,2 行,5x7
  174.    LCD_Write_Com(0x0C);        //整體顯示,關光標,不閃爍
  175.    LCD_Write_Com(0x06);        //寫一個字符后地址指針加 1,設定輸入方式,增量不移位
  176.    LCD_Write_Com(0x01); //清除屏幕顯示
  177.    DelayMs(5);  
  178.    }

  179. //*******定時器初始化函數**********
  180. void timerinit()         //采用中斷0 控制節拍   
  181. {
  182.         TMOD=0x01;//設置定時器0為工作方式1
  183.         TH0=0xd8;        
  184.         TL0=0xef;
  185.         EA=1; //開總中斷                  
  186.         ET0=1;//開定時器0中斷
  187. }        
  188. //********************************   

  189. /*------------------------------------------------
  190.               DHT11延時函數
  191. ------------------------------------------------*/
  192. void DHT11_delay_us(uchar n)//2微秒延時
  193. {
  194.     while(--n);
  195. }

  196. void DHT11_delay_ms(uint z)//1毫秒延時
  197. {
  198.    uint i,j;
  199.    for(i=z;i>0;i--)
  200.       for(j=110;j>0;j--);
  201. }
  202. /*------------------------------------------------
  203.               DHT11開始信號
  204. ------------------------------------------------*/
  205. void DHT11_start()
  206. {
  207.    Data=1;
  208.    DHT11_delay_us(2);
  209.    Data=0;
  210.    DHT11_delay_ms(20);   //延時18ms以上
  211.    Data=1;
  212.    DHT11_delay_us(30);
  213. }
  214. /*------------------------------------------------
  215.               接收八位二進制
  216. ------------------------------------------------*/
  217. uchar DHT11_rec_byte()      //接收一個字節
  218. {
  219.    uchar i,dat=0;
  220.   for(i=0;i<8;i++)    //從高到低依次接收8位數據
  221.    {         
  222.       while(!Data);   ////等待50us低電平過去
  223.       DHT11_delay_us(8);     //延時60us,如果還為高則數據為1,否則為0
  224.       dat<<=1;           //移位使正確接收8位數據,數據為0時直接移位
  225.       if(Data==1)    //數據為1時,使dat加1來接收數據1
  226.          dat+=1;
  227.       while(Data);  //等待數據線拉低   
  228.     }  
  229.     return dat;
  230. }
  231. /*------------------------------------------------
  232.               接收40bit數據
  233. ------------------------------------------------*/
  234. void DHT11_receive()      //接收40位的數據
  235. {
  236.     uchar R_H,R_L,T_H,T_L,revise;
  237.     DHT11_start();

  238.     if(Data==0)
  239.     {
  240.         
  241.         while(Data==0);   //等待拉高     
  242.                
  243.         DHT11_delay_us(40);  //拉高后延時80us
  244.         R_H=DHT11_rec_byte();    //接收濕度高八位  
  245.         R_L=DHT11_rec_byte();    //接收濕度低八位  
  246.         T_H=DHT11_rec_byte();    //接收溫度高八位  
  247.         T_L=DHT11_rec_byte();    //接收溫度低八位
  248.         revise=DHT11_rec_byte(); //接收校正位
  249.                         
  250.         DHT11_delay_us(25);    //結束

  251.         if((R_H+R_L+T_H+T_L)==revise)      //校正
  252.         {
  253.             RH=R_H;
  254.             RL=R_L;
  255.             TH=T_H;
  256.             TL=T_L;
  257.                         rec_dat0[0]=RH/10;
  258.                         rec_dat0[1]=RH%10;
  259.                         rec_dat1[0]=TH/10;
  260.                         rec_dat1[1]=TH%10;
  261.         }

  262.     }
  263. }

復制代碼

51hei圖片_20200420191336.jpg (113.71 KB, 下載次數: 55)

51hei圖片_20200420191336.jpg

溫濕報警.rar

3.65 KB, 下載次數: 38, 下載積分: 黑幣 -5






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国内精品一区二区 | 黑人巨大精品欧美黑白配亚洲 | 国产精品亚洲一区二区三区在线观看 | 九九热这里 | www.午夜| 精品三级在线观看 | 九九热精品视频在线观看 | 真人女人一级毛片免费播放 | 91精品无人区卡一卡二卡三 | 日本精品一区二区三区在线观看视频 | 最新日韩在线 | 国产精品www | 一区二区三区回区在观看免费视频 | 婷婷二区 | 99在线资源| 精品一区二区三区在线观看 | 99精品国产一区二区三区 | 日韩在线一区二区三区 | 中文字幕加勒比 | 日本aⅴ中文字幕 | 水蜜桃久久夜色精品一区 | 日韩精品一区二区三区中文在线 | 欧美日韩亚| 国产激情免费视频 | 国产精品久久久久久久久免费 | 欧美精品日韩精品 | 久久久久久久久久久久久久久久久久久久 | 91视频88av | www.久草.com| 北条麻妃一区二区三区在线观看 | 91动漫在线观看 | 在线成人免费av | 久久久久久综合 | 一区二区三区在线看 | 一区二区三区视频在线观看 | 韩日精品一区 | 欧美第一区 | 色婷婷久久久久swag精品 | 欧美第一区 | 国产日韩欧美精品一区二区 | 亚洲电影一区二区三区 |