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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6285|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

DHT90溫濕度實(shí)時(shí)顯示單片機(jī)小系統(tǒng)詳解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
數(shù)據(jù)類型
長(zhǎng) 度
值 域
unsigned char
單字節(jié)
0~255
signed char
單字節(jié)
-128~+127
unsigned int
雙字節(jié)
0~65535
signed int
雙字節(jié)
-32768~+32767
unsigned long
四字節(jié)
0~4294967295
signed long
四字節(jié)
-2147483648~+2147483647
float
四字節(jié)
±1.175494E-38~±3.402823E+38
*
1~3字節(jié)
對(duì)象的地址
bit
0或1
sfr
單字節(jié)
0~255
sfr16
雙字節(jié)
0~65535
sbit
0或1

一、        目的與要求
制作一個(gè)溫濕度實(shí)時(shí)顯示小系統(tǒng),響應(yīng)時(shí)間控制在1s左右,探頭部分能夠放進(jìn)大約10cm直徑的容器中。
二、        工作原理
采用AT89S52單片機(jī)作為本系統(tǒng)的控制單元,傳感器采用DHT90(即把SHT10封裝為4個(gè)2.54標(biāo)準(zhǔn)插針的獨(dú)立結(jié)構(gòu),大連北方測(cè)控代理的價(jià)格為50元/片),顯示模塊為L(zhǎng)CD1602。單片機(jī)收到來自DHT90的溫濕度數(shù)據(jù),再經(jīng)過軟件線性擬合,最后送到1602上顯示并沒隔1s刷新一次數(shù)據(jù)。
三、        原理圖

圖1 溫濕度顯示系統(tǒng)原理圖


四、        硬件設(shè)計(jì)
電源部分采用+5V開關(guān)電源集成模塊(實(shí)測(cè)輸出電壓5.19V),這符合DHT90和AT89S52單片機(jī)的供電要求。本系統(tǒng)電路設(shè)計(jì)較簡(jiǎn)單,難點(diǎn)至于軟件編寫與調(diào)試。
五、        軟件設(shè)計(jì)
5.1 流程圖

軟件流程圖

  5.2 軟件調(diào)試過程及經(jīng)驗(yàn)
    對(duì)于本系統(tǒng),我首先調(diào)試1602的顯示程序,重點(diǎn)理解時(shí)序圖。對(duì)硬件理解清楚后,參照相關(guān)程序,編寫自己規(guī)范的程序。然后,調(diào)試DHT90數(shù)據(jù)通信顯示,在SHT11(DHT90/SHT10也屬于同系列)例程中,顯示功能是利用51單片機(jī)串口向上位機(jī)發(fā)數(shù)據(jù),在上位機(jī)上顯示溫濕度。所以,這部分在我的程序中就去掉了。同樣,DHT90程序部分的關(guān)鍵也是時(shí)序圖,讀明白時(shí)序圖,就可以很快得進(jìn)入編程調(diào)試階段。
六、        系統(tǒng)實(shí)物圖

圖2 單片機(jī)控制及顯示部分

圖3 LCD1602顯示特寫

圖4 傳感器部分特寫(準(zhǔn)備封裝為一個(gè)小的探頭)

七、        菜鳥的小結(jié)
在兩個(gè)多月的時(shí)間里,我從零開始做這個(gè)溫濕度測(cè)量小系統(tǒng),現(xiàn)在終于有了初步的成果。在這期間,我學(xué)到了很多東西,比如說焊接技術(shù)(當(dāng)然還是比較菜),下載線制作等等。我覺得最重要的一點(diǎn)是鍛煉了自己的實(shí)踐能力。嗯,很多東西難與不難就看你做沒做過。呵呵,套用毛主席他老人家的一句話就是:沒有實(shí)踐就沒有發(fā)言權(quán)。一開始,做下載線,我感覺很難很難,但現(xiàn)在回頭一看,那就是小case而已。
通過這個(gè)小系統(tǒng)的制作,我從一個(gè)“理想的電子愛好者”轉(zhuǎn)變?yōu)橐粋(gè)“實(shí)踐的電子愛好者”。從享受電子成品的快樂到享受電子DIY過程的快樂,這是一直升華,DIY很美妙。最后一句與所有DIY愛好者共勉。
最后,歡迎大家交流學(xué)習(xí),給我批評(píng)指正!


附源程序(調(diào)試成功版):


  1. /***********************************************************************************  
  2. ;功能說明:DHT90與LCD1602的溫濕度顯示  
  3. ;文件名稱:DHT90.c     
  4.   
  5. ;微處理器:AT89S52
  6. ;編譯環(huán)境:Keil uVision V2.38a
  7.   
  8. ;作    者:
  9. ;版    權(quán):(c)
  10. ;修改說明:添加了一個(gè)LCD_disp_str()函數(shù)
  11. ;***********************************************************************************/

  12. /*************定義接口********************
  13.          P0------DB0~DB7  (LCD1602)      
  14.          P2.0------RS      (LCD1602)
  15.          P2.1------RW      (LCD1602)
  16.          P2.2------E       (LCD1602)
  17.                  P2.6------SCK     (DHT90)
  18.                  P2.7------DATA    (DHT90)
  19. *****************************************/

  20. #include  
  21. #include   
  22. #include     //Keil library   
  23. #include    //Keil library  

  24. //*********************第一部分LCD1602設(shè)置 START****************************************
  25. #define LCD_DB        P0
  26.         sbit         LCD_RS=P2^0;   //P2^0是p2.0的意思;LCD_RS與P2.0等效起來,對(duì)LCD_RS 讀寫,就是對(duì)P2.0讀寫 好處在于LCD_RS含義直接明了,寫程序多了就會(huì)知道有必要de
  27.         sbit         LCD_RW=P2^1;   //P2^1是p2.1的意思
  28.         sbit         LCD_E=P2^2;    //P2^2是p2.2的意思

  29. /******定義函數(shù)****************/
  30. #define uchar unsigned char
  31. #define uint unsigned int
  32. void LCD_init(void);                          //初始化函數(shù)
  33. void LCD_write_command(uchar command);        //寫指令函數(shù)
  34. void LCD_write_data(uchar dat);               //寫數(shù)據(jù)函數(shù)
  35. void LCD_disp_char(uchar x,uchar y,uchar dat);//在某個(gè)屏幕位置上顯示一個(gè)字符,X(0-15),y(1-2)
  36. void LCD_disp_str(uchar x,uchar y,uchar *str); //LCD1602顯示字符串函數(shù)
  37. void delay_n10us(uint n);                     //延時(shí)函數(shù)


  38. /*--------------------------------------  
  39. ;模塊名稱:LCD_init();  
  40. ;功    能:初始化LCD1602  
  41. ;占用資源:--
  42. ;參數(shù)說明:--
  43. ;創(chuàng)建日期:2008.08.15  
  44. ;版    本:FV1.0(函數(shù)版本Function Version)
  45. ;修改日期:--
  46. ;修改說明:--
  47. ;-------------------------------------*/  
  48. void LCD_init(void)
  49. {
  50. delay_n10us(10);
  51. LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  52. delay_n10us(10);
  53. LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
  54. delay_n10us(10);
  55. LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
  56. delay_n10us(10);
  57. LCD_write_command(0x01);//清除屏幕顯示
  58. delay_n10us(100);       //延時(shí)清屏,延時(shí)函數(shù),延時(shí)約n個(gè)10us
  59. }


  60. /*--------------------------------------  
  61. ;模塊名稱:LCD_write_command();  
  62. ;功    能:LCD1602寫指令函數(shù)  
  63. ;占用資源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E).
  64. ;參數(shù)說明:dat為寫命令參數(shù)
  65. ;創(chuàng)建日期:2008.08.15  
  66. ;版    本:FV1.0(函數(shù)版本Function Version)
  67. ;修改日期:--
  68. ;修改說明:--
  69. ;-------------------------------------*/  
  70. void LCD_write_command(uchar dat)
  71. {
  72. delay_n10us(10);
  73. LCD_RS=0;         //指令
  74. LCD_RW=0;         //寫入
  75. LCD_E=1;          //允許
  76. LCD_DB=dat;
  77. delay_n10us(10);  //實(shí)踐證明,我的LCD1602上,用for循環(huán)1次就能完成普通寫指令。
  78. LCD_E=0;
  79. delay_n10us(10);  //實(shí)踐證明,我的LCD1602上,用for循環(huán)1次就能完成普通寫指令。
  80. }


  81. /*--------------------------------------  
  82. ;模塊名稱:LCD_write_data();  
  83. ;功    能:LCD1602寫數(shù)據(jù)函數(shù)  
  84. ;占用資源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E).
  85. ;參數(shù)說明:dat為寫數(shù)據(jù)參數(shù)
  86. ;創(chuàng)建日期:2008.08.15  
  87. ;版    本:FV1.0(函數(shù)版本Function Version)
  88. ;修改日期:--
  89. ;修改說明:--
  90. ;-------------------------------------*/
  91. void LCD_write_data(uchar dat)
  92. {
  93. delay_n10us(10);
  94. LCD_RS=1;          //數(shù)據(jù)
  95. LCD_RW=0;          //寫入
  96. LCD_E=1;           //允許
  97. LCD_DB=dat;
  98. delay_n10us(10);
  99. LCD_E=0;
  100. delay_n10us(10);
  101. }


  102. /*--------------------------------------  
  103. ;模塊名稱:LCD_disp_char();  
  104. ;功    能:LCD1602顯示一個(gè)字符函數(shù),在某個(gè)屏幕位置上顯示一個(gè)字符,X(0-15),y(1-2)。
  105. ;占用資源:--
  106. ;參數(shù)說明:X為1602的列值(取值范圍是0-15),y為1602的行值(取值范圍是1-2),dat為所要顯示字符對(duì)應(yīng)的地址參數(shù)。
  107. ;創(chuàng)建日期:2008.08.15  
  108. ;版    本:FV1.0(函數(shù)版本Function Version)
  109. ;修改日期:--
  110. ;修改說明:--
  111. ;-------------------------------------*/
  112. void LCD_disp_char(uchar x,uchar y,uchar dat)
  113. {
  114.   uchar address;
  115.   if(y==1)
  116.          address=0x80+x;
  117.   else
  118.          address=0xc0+x;
  119.   LCD_write_command(address);
  120.   LCD_write_data(dat);
  121. }



  122. /*--------------------------------------  
  123. ;模塊名稱:LCD_disp_str();  
  124. ;功    能:LCD1602顯示字符串函數(shù),在某個(gè)屏幕起始位置{X(0-15),y(1-2)}上顯示一個(gè)字符串。
  125. ;占用資源:--
  126. ;參數(shù)說明:X為1602的列值(取值范圍是0-15),y為1602的行值(取值范圍是1-2),str為所要顯示字符串對(duì)應(yīng)的指針參數(shù)。
  127. ;創(chuàng)建日期:2008.08.16  
  128. ;版    本:FV1.0(函數(shù)版本Function Version)
  129. ;修改日期:--
  130. ;修改說明:--  
  131. ;-------------------------------------*/
  132. void LCD_disp_str(uchar x,uchar y,uchar *str)
  133. {
  134.   uchar address;
  135.   if(y==1)
  136.          address=0x80+x;
  137.   else
  138.          address=0xc0+x;
  139.   LCD_write_command(address);
  140.   while(*str!='')
  141.   {  
  142.     LCD_write_data(*str);   
  143.     str++;
  144.   }
  145. }


  146. /*--------------------------------------  
  147. ;模塊名稱:delay_n10us();  
  148. ;功    能:延時(shí)函數(shù),延時(shí)約n個(gè)10us
  149. ;占用資源:--
  150. ;參數(shù)說明:--
  151. ;創(chuàng)建日期:2008.08.15  
  152. ;版    本:FV1.1(函數(shù)版本Function Version)
  153. ;修改日期:2008.08.16
  154. ;修改說明:修改為較精確的延時(shí)函數(shù)
  155. ;-------------------------------------*/
  156. void delay_n10us(uint n)
  157. {        
  158.         uint i;            
  159.         for(i=n;i>0;i--)
  160.         {
  161.         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //延時(shí)10us@12M晶振
  162.                 }
  163. }                                    

  164. //*********************第一部分LCD1602設(shè)置 END****************************************


  165. //*********************第二部分DHT90設(shè)置   START****************************************  
  166. sbit SCK  = P2^6;      //定義通訊時(shí)鐘端口
  167. sbit DATA = P2^7;      //定義通訊數(shù)據(jù)端口

  168. typedef union   
  169. { unsigned int i;      //定義了兩個(gè)共用體
  170.   float f;  
  171. } value;  

  172. enum {TEMP,HUMI};      //TEMP=0,HUMI=1
  173.   

  174. #define noACK 0             //用于判斷是否結(jié)束通訊
  175. #define ACK   1             //結(jié)束數(shù)據(jù)傳輸
  176.                             //adr  command  r/w  
  177. #define STATUS_REG_W 0x06   //000   0011    0  
  178. #define STATUS_REG_R 0x07   //000   0011    1  
  179. #define MEASURE_TEMP 0x03   //000   0001    1  
  180. #define MEASURE_HUMI 0x05   //000   0010    1  
  181. #define RESET        0x1e   //000   1111    0  

  182. /****************定義函數(shù)****************/
  183. void s_transstart(void);               //啟動(dòng)傳輸函數(shù)
  184. void s_connectionreset(void);          //連接復(fù)位函數(shù)
  185. char s_write_byte(unsigned char value);//DHT90寫函數(shù)
  186. char s_read_byte(unsigned char ack);   //DHT90讀函數(shù)
  187. char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);//測(cè)量溫濕度函數(shù)
  188. void calc_dht90(float *p_humidity ,float *p_temperature);//溫濕度補(bǔ)償



  189. /*--------------------------------------  
  190. ;模塊名稱:s_transstart();  
  191. ;功    能:啟動(dòng)傳輸函數(shù)
  192. ;占用資源:--
  193. ;參數(shù)說明:--
  194. ;創(chuàng)建日期:2008.08.15  
  195. ;版    本:FV1.0(函數(shù)版本Function Version)
  196. ;修改日期:--
  197. ;修改說明:--
  198. ;-------------------------------------*/   
  199. void s_transstart(void)  
  200. // generates a transmission start   
  201. //       _____         ________  
  202. // DATA:      |_______|  
  203. //           ___     ___  
  204. // SCK : ___|   |___|   |______  
  205. {   
  206.    DATA=1; SCK=0;                   //Initial state  
  207.    _nop_();  
  208.    SCK=1;  
  209.    _nop_();  
  210.    DATA=0;  
  211.    _nop_();  
  212.    SCK=0;   
  213.    _nop_();_nop_();_nop_();  
  214.    SCK=1;  
  215.    _nop_();  
  216.    DATA=1;         
  217.    _nop_();  
  218.    SCK=0;         
  219. }  

  220. /*--------------------------------------  
  221. ;模塊名稱:s_connectionreset();  
  222. ;功    能:連接復(fù)位函數(shù)
  223. ;占用資源:--
  224. ;參數(shù)說明:--
  225. ;創(chuàng)建日期:2008.08.15  
  226. ;版    本:FV1.0(函數(shù)版本Function Version)
  227. ;修改日期:--
  228. ;修改說明:--
  229. ;-------------------------------------*/  
  230. void s_connectionreset(void)  
  231. // communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart  
  232. //       _____________________________________________________         ________  
  233. // DATA:                                                      |_______|  
  234. //          _    _    _    _    _    _    _    _    _        ___     ___  
  235. // SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|   |___|   |______  
  236. {   
  237.   unsigned char i;   
  238.   DATA=1; SCK=0;                    //Initial state  
  239.   for(i=0;i<9;i++)                  //9 SCK cycles  
  240.   {  
  241.     SCK=1;
  242.     SCK=0;  
  243.   }  
  244.   s_transstart();                   //transmission start  
  245. }  


  246. /*--------------------------------------  
  247. ;模塊名稱:s_write_byte();  
  248. ;功    能:DHT90寫函數(shù)
  249. ;占用資源:--
  250. ;參數(shù)說明:--
  251. ;創(chuàng)建日期:2008.08.15  
  252. ;版    本:FV1.0(函數(shù)版本Function Version)
  253. ;修改日期:--
  254. ;修改說明:--
  255. ;-------------------------------------*/  
  256. char s_write_byte(unsigned char value)  
  257. //----------------------------------------------------------------------------------  
  258. // writes a byte on the Sensibus and checks the acknowledge   
  259. {   
  260.   unsigned char i,error=0;   
  261.   for (i=0x80;i>0;i/=2)             //shift bit for masking  
  262.   {   
  263.     if (i & value) DATA=1;          //masking value with i , write to SENSI-BUS  
  264.     else DATA=0;                          
  265.     SCK=1;                          //clk for SENSI-BUS  
  266.     _nop_();_nop_();_nop_();        //pulswith approx. 5 us      
  267.     SCK=0;  
  268.   }  
  269.   DATA=1;                           //release DATA-line  
  270.   SCK=1;                            //clk #9 for ack   
  271.   error=DATA;                       //check ack (DATA will be pulled down by DHT90),DATA在第9個(gè)上升沿將被DHT90自動(dòng)下拉為低電平。  
  272.   _nop_();_nop_();_nop_();
  273.   SCK=0;
  274.   DATA=1;                           //release DATA-line  
  275.   return error;                     //error=1 in case of no acknowledge //返回:0成功,1失敗
  276. }  
  277.   

  278. /*--------------------------------------  
  279. ;模塊名稱:s_read_byte();  
  280. ;功    能:DHT90讀函數(shù)
  281. ;占用資源:--
  282. ;參數(shù)說明:--
  283. ;創(chuàng)建日期:2008.08.15  
  284. ;版    本:FV1.0(函數(shù)版本Function Version)
  285. ;修改日期:--
  286. ;修改說明:--
  287. ;-------------------------------------*/  
  288. char s_read_byte(unsigned char ack)   
  289. // reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"   
  290. {   
  291.   unsigned char i,val=0;  
  292.   DATA=1;                           //release DATA-line  
  293.   for (i=0x80;i>0;i/=2)             //shift bit for masking  
  294.   { SCK=1;                          //clk for SENSI-BUS  
  295.     if (DATA) val=(val | i);        //read bit   
  296.         _nop_();_nop_();_nop_();        //pulswith approx. 5 us
  297.     SCK=0;               
  298.   }  
  299.   if(ack==1)DATA=0;                 //in case of "ack==1" pull down DATA-Line  
  300.   else DATA=1;                      //如果是校驗(yàn)(ack==0),讀取完后結(jié)束通訊
  301.   _nop_();_nop_();_nop_();          //pulswith approx. 5 us  
  302.   SCK=1;                            //clk #9 for ack  
  303.   _nop_();_nop_();_nop_();          //pulswith approx. 5 us   
  304.   SCK=0;                  
  305.   _nop_();_nop_();_nop_();          //pulswith approx. 5 us  
  306.   DATA=1;                           //release DATA-line  
  307.   return val;  
  308. }  
  309.   

  310.   

  311. /*--------------------------------------  
  312. ;模塊名稱:s_measure();  
  313. ;功    能:測(cè)量溫濕度函數(shù)
  314. ;占用資源:--
  315. ;參數(shù)說明:--
  316. ;創(chuàng)建日期:2008.08.15  
  317. ;版    本:FV1.0(函數(shù)版本Function Version)
  318. ;修改日期:--
  319. ;修改說明:--
  320. ;-------------------------------------*/  
  321. char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)  
  322. // makes a measurement (humidity/temperature) with checksum  
  323. {   
  324.   unsigned error=0;  
  325.   unsigned int i;  
  326.   
  327.   s_transstart();                   //transmission start  
  328.   switch(mode){                     //send command to sensor  
  329.     case TEMP  : error+=s_write_byte(MEASURE_TEMP); break;  
  330.     case HUMI  : error+=s_write_byte(MEASURE_HUMI); break;  
  331.     default     : break;     
  332.   }  
  333.   for (i=0;i<65535;i++) if(DATA==0) break; //wait until sensor has finished the measurement  
  334.   if(DATA) error+=1;                // or timeout (~2 sec.) is reached  
  335.   *(p_value)  =s_read_byte(ACK);    //read the first byte (MSB)  
  336.   *(p_value+1)=s_read_byte(ACK);    //read the second byte (LSB)  
  337.   *p_checksum =s_read_byte(noACK);  //read checksum  
  338.   return error;  
  339. }  
  340.   

  341. /*--------------------------------------  
  342. ;模塊名稱:calc_dht90();  
  343. ;功    能:溫濕度補(bǔ)償函數(shù)
  344. ;占用資源:--
  345. ;參數(shù)說明:--
  346. ;創(chuàng)建日期:2008.08.15  
  347. ;版    本:FV1.0(函數(shù)版本Function Version)
  348. ;修改日期:--
  349. ;修改說明:--
  350. ;-------------------------------------*/  
  351. void calc_dht90(float *p_humidity ,float *p_temperature)
  352. // calculates temperature [C] and humidity [%RH]  
  353. // input :  humi [Ticks] (12 bit)  
  354. //          temp [Ticks] (14 bit)
  355. // output:  humi [%RH]
  356. //          temp [C]
  357. { const float C1=-4.0;              // for 12 Bit
  358.   const float C2=+0.0405;           // for 12 Bit
  359.   const float C3=-0.0000028;        // for 12 Bit
  360.   const float T1=+0.01;             // for 14 Bit @ 5V
  361.   const float T2=+0.00008;           // for 14 Bit @ 5V  

  362.   float rh=*p_humidity;             // rh:      Humidity [Ticks] 12 Bit  
  363.   float t=*p_temperature;           // t:       Temperature [Ticks] 14 Bit
  364.   float rh_lin;                     // rh_lin:  Humidity linear
  365.   float rh_true;                    // rh_true: Temperature compensated humidity
  366.   float t_C;                        // t_C   :  Temperature [C]

  367.   t_C=t*0.01 - 40;                  //calc. temperature from ticks to [C]
  368.   rh_lin=C3*rh*rh + C2*rh + C1;     //calc. humidity from ticks to [%RH]
  369.   rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;   //calc. temperature compensated humidity [%RH]
  370.   if(rh_true>100)rh_true=100;       //cut if the value is outside of
  371.   if(rh_true<0.1)rh_true=0.1;       //the physical possible range

  372.   *p_temperature=t_C;               //return temperature [C]
  373.   *p_humidity=rh_true;              //return humidity[%RH]
  374. }




  375. //*********************第二部分DHT90設(shè)置   END****************************************

  376. //*********主函數(shù)*****************
  377. void main(void)
  378. {
  379.                 value humi_val,temp_val;
  380.         unsigned char error,checksum;  
  381.         unsigned int wendu,shidu;
  382.         LCD_init();         
  383.         s_connectionreset();  
  384.         LCD_disp_str(0,1,"TE");
  385.                 LCD_disp_str(0,2,"RH");


  386. //*********初始化溫度顯示區(qū)*********
  387.         LCD_disp_str(2,1,"TTT.TC");

  388. //*********初始化濕度顯示區(qū)*********
  389.         LCD_disp_str(2,2,"RRR.R%");

  390.         delay_n10us(20000);     //延時(shí)0.2s

  391.         while(1)  
  392.         { error=0;  
  393.           error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI);  //measure humidity  
  394.           error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP);  //measure temperature  
  395.           if(error!=0) s_connectionreset();                 //in case of an error: connection reset  
  396.           else  
  397.           { humi_val.f=(float)humi_val.i;                   //converts integer to float //加入溫濕度比較程序
  398.             temp_val.f=(float)temp_val.i;                   //converts integer to float //比較輸出控制信號(hào)
  399.             calc_dht90(&humi_val.f,&temp_val.f);            //calculate humidity, temperature
  400.                         wendu=10*temp_val.f;
  401.                         LCD_disp_char(2,1,wendu/1000+'0');              //顯示溫度百位
  402.             LCD_disp_char(3,1,(wendu%1000)/100+'0');        //顯示溫度十位
  403.             LCD_disp_char(4,1,(wendu%100)/10+'0');          //顯示溫度個(gè)位
  404.                         LCD_disp_char(6,1,(wendu%10)+'0');              //顯示溫度小數(shù)點(diǎn)后第一位

  405.                         shidu=10*humi_val.f;
  406.                         LCD_disp_char(2,2,shidu/1000+'0');               //顯示濕度百位


  407. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


完整的資料下載(包含論文與代碼):
http://www.zg4o1577.cn/bbs/dpj-82305-1.html

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线免费观看一区二区 | 日韩一级精品视频在线观看 | 91精品国产91久久久久久最新 | 亚洲激情综合 | 久久99久久 | 久久av网| 亚洲三级免费看 | 亚洲综合色网站 | 欧美一级在线免费 | 日本人爽p大片免费看 | 国户精品久久久久久久久久久不卡 | 中文字幕一区二区三区在线观看 | 久久99精品久久久 | 国产亚洲精品91 | 精品视频在线免费观看 | 天天看片天天干 | 中文字幕亚洲视频 | 奇米av | 色姑娘综合网 | 成人欧美一区二区三区黑人孕妇 | 国产精品视频久久 | 二区高清 | 99精品在线 | 国产精品成人一区二区三区夜夜夜 | 中文字幕成人在线 | 亚洲成人免费在线 | 欧美在线小视频 | 日韩精品一 | 久久久久网站 | 精品1区2区3区 | 国产精品18久久久久久久 | 久久久久久av | 国产日韩精品一区二区三区 | 国产成人艳妇aa视频在线 | 欧美日韩综合 | 国产精品久久精品 | 亚洲精品日韩在线观看 | 操操日| 蜜桃视频在线观看免费视频网站www | 一级网站 | 最新国产精品视频 |