欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4739|回復: 6
收起左側

基于51單片機+SHT11+12864的溫濕度測量系統仿真代碼和文檔資料下載

[復制鏈接]
ID:441538 發表于 2018-12-13 12:56 | 顯示全部樓層 |閱讀模式
基于51單片機+SHT11的溫濕度測量系統仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png 0.png

溫度過低 溫度過高會有報警,還帶3個按鈕 設置和加減
0.png

單片機源程序如下:
  1. #include "reg52.H"
  2. #include "stdio.h"
  3. #include "intrins.h"
  4. #include <math.h>

  5. #define DB P0//液晶并行數據接口
  6. sbit  RS = P2^0;//液晶指令數據信號
  7. sbit  RW = P2^1;//液晶讀寫信號
  8. sbit  E  = P2^2;//液晶使能信號


  9. unsigned char  key_value;//獲取到按鍵的值

  10. sbit Sck_P     = P1^1;                        // SHT11傳感器的時鐘管腳
  11. sbit Data_P    = P1^0;                        // SHT11傳感器的數據管腳

  12. unsigned char temp;                                                        // 保存溫度
  13. unsigned char humi;                                                  // 保存濕度

  14. enum { TEMP,HUMI };
  15. typedef union                              //定義共用同類型
  16. {
  17.         unsigned int i;
  18.         float f;
  19. }value;

  20. //是否應答
  21. #define NACK        0
  22. #define ACK                1
  23. //SHT75傳感器命令集                地址                命令        讀/寫
  24. #define MEASURE_TEMP        0x03        //000 0001  1
  25. #define MEASURE_HUMI        0x05        //000 0010  1
  26. #define STATUS_REG_W        0x06        //000 0011  0
  27. #define STATUS_REG_R        0x07        //000 0011  1
  28. #define RESET                        0x1E        //000 1111  0

  29. unsigned char now_window;//當前顯示窗口
  30. unsigned char curr_menu;
  31. #define  normal_mode  0x10//輸入密碼狀態
  32. #define  set_mode  0x20//輸入密碼狀態

  33. signed char AlarmTL=10;                                // 溫度下限報警值
  34. signed char AlarmTH=30;                                // 溫度上限報警值
  35. signed char AlarmHL=40;                             // 濕度下限報警值
  36. signed char AlarmHH=80;                                // 濕度上限報警值

  37. unsigned char i;
  38. unsigned char cnt_100ms;
  39. unsigned char time_100ms_flag;
  40. unsigned char open_del;//開鎖成功延時計數
  41. unsigned char open_flag;//鎖狀態標志
  42. sbit beep = P1^2;

  43. sbit LedTL_P   = P1^3;                        // 溫度過低報警指示燈
  44. sbit LedTH_P   = P1^4;                        // 溫度過高報警指示燈
  45. sbit LedHL_P   = P1^5;                        // 濕度過低報警指示燈
  46. sbit LedHH_P   = P1^6;                        // 濕度過高報警指示燈

  47. /*******************************************************************************
  48. * 函 數 名         : delay_ms
  49. * 函數功能                   : 延時函數,延時1ms
  50. * 輸    入         : cnt
  51. * 輸    出         : 無
  52. * 說    名         : 該函數是在12MHZ晶振下,12分頻單片機的延時。
  53. *******************************************************************************/
  54. void delay_ms(unsigned int cnt)   //
  55. {
  56.         unsigned int x;
  57.         for( ; cnt>0; cnt--)
  58.         {
  59.                 for(x=110; x>0; x--);//軟件延時為1MS
  60.         }
  61. }
  62. #if 0
  63. void delay_us(unsigned int cnt)   //
  64. {
  65.         while(cnt--);
  66. }
  67. #endif
  68. /******************************************************
  69. ** 函數名:time_init
  70. ** 描述  :定時器初始化
  71. ** 輸入  :無
  72. ** 輸出  :無
  73. ******************************************************/
  74. void time_init(void)
  75. {
  76.           TMOD |= 0x01;//time0 工作方式為1
  77.           TH0 = 0xf8;//裝載初值
  78.           TL0 = 0x2f;//裝載初值,為2ms(65535-63535)
  79.       TR0 = 1;//開啟定時器
  80.           ET0 = 1;//打開中斷
  81.           EA=1;
  82. }
  83. /******************************************************
  84. ** 函數名:key_scan
  85. ** 描述  :按鍵掃描
  86. ** 輸入  :無
  87. ** 輸出  :無
  88. ******************************************************/
  89. void key_scan(void)
  90. {
  91.         static unsigned char key_in_flag = 0;//按鍵按下標志
  92.         unsigned char key_l;//存儲掃描到行列值。
  93.         key_value = 20;//按鍵值清除
  94.         if((P3 & 0x0f) != 0x0f)//按鍵按下
  95.         {
  96.                 delay_ms(1);//按鍵消抖動
  97.                 if(((P3 & 0x0f) != 0x0f) && (key_in_flag == 1))
  98.                 {
  99.                         key_in_flag = 0;//松手檢測防止一直觸發
  100.                         P3 = 0x0f;
  101.             //delay_ms(1);//按鍵消抖動
  102.                         key_l = P3;//掃描得到按鍵值
  103.                         switch(key_l)
  104.                         {
  105.                                 //獲取按鍵值
  106.                                 case 0x0e:
  107.                                 {
  108.                                         key_value = 1;
  109.                                 }
  110.                                 break;
  111.                                 case 0x0d:
  112.                                 {
  113.                                         key_value = 2;
  114.                                 }
  115.                                 break;
  116.                                 case 0x0b:
  117.                                 {
  118.                                         key_value = 3;
  119.                                 }
  120.                                 break;
  121.                                 //case 0x70:
  122.                                 //break;
  123.                         }
  124.                 }
  125.         }
  126.         else
  127.         {
  128.                 key_in_flag = 1;//(按鍵松開標志)
  129.         }

  130. }

  131. /*******************************************************************************
  132. * 函 數 名         : LcdWriteCom
  133. * 函數功能                   : 向LCD寫入一個字節的命令
  134. * 輸    入         : u8com
  135. * 輸    出         : 無
  136. *******************************************************************************/
  137. void lcd_wri_com(unsigned char com)          //寫入命令
  138. {
  139.         E = 0;         //使能清零
  140.         RS = 0;         //選擇寫入命令
  141.         RW = 0;         //選擇寫入

  142.         DB = com;
  143.         delay_ms(1);

  144.         E = 1;         //寫入時序
  145.         delay_ms(5);
  146.         E = 0;
  147. }

  148. /*******************************************************************************
  149. * 函 數 名         : LcdWriteData
  150. * 函數功能                   : 向LCD寫入一個字節的數據
  151. * 輸    入         : u8dat
  152. * 輸    出         : 無
  153. *******************************************************************************/

  154. void lcd_wri_data(unsigned char dat)//寫入數據
  155. {
  156.         E = 0;          //使能清零
  157.         RS = 1;          //選擇寫入數據
  158.         RW = 0;          //選擇寫入
  159.         DB = dat;
  160.         delay_ms(1);
  161.         E = 1;          //寫入時序
  162.         delay_ms(5);
  163.         E = 0;
  164. }
  165. /*******************************************************************************
  166. * 函 數 名         : WriString
  167. * 函數功能                   : 刷新屏幕顯示
  168. * 輸    入         : hang,add,*p
  169. * 輸    出         : 無
  170. *******************************************************************************/
  171. void wri_string(unsigned char y,unsigned char x,unsigned char *p)
  172. {
  173.         if(y==1)//如果選擇第一行
  174.                 lcd_wri_com(0x80+x);//選中地址
  175.         else
  176.                 lcd_wri_com(0xc0+x);//選中地址
  177.                 while(*p)
  178.                 {
  179.                         lcd_wri_data(*p);//寫入數據
  180.                         p++;
  181.                 }
  182. }
  183. /*******************************************************************************
  184. * 函 數 名         : lcd_write_char
  185. * 函數功能                   :
  186. * 輸    入         :
  187. * 輸    出         : 無
  188. *******************************************************************************/
  189. void lcd_write_char(unsigned char y, unsigned char x, unsigned char dat) //列x=0~15,行y=0,1
  190. {
  191.         unsigned char temp_l, temp_h;
  192.         if(y==1)//如果選擇第一行
  193.                 lcd_wri_com(0x80+x);//選中地址
  194.         else
  195.                 lcd_wri_com(0xc0+x);//選中地址
  196.         temp_l = dat % 10;
  197.     temp_h = dat / 10;
  198.     lcd_wri_data(temp_h + 0x30);          //convert to ascii
  199.     lcd_wri_data(temp_l + 0x30);
  200. }
  201. /*********************光標控制***********************/
  202. void lcd1602_guanbiao(unsigned char y, unsigned char x,unsigned char on_off)
  203. {
  204.         if(on_off == 1)   //開光標
  205.         {
  206.                 if(y==1)//如果選擇第一行
  207.                 lcd_wri_com(0x80+x);
  208.             else
  209.                 lcd_wri_com(0xc0+x);//將光標移動到秒個位
  210.                 lcd_wri_com(0x0f);//顯示光標并且閃爍
  211.         }
  212.         else
  213.         {
  214.         if(y==1)//如果選擇第一行
  215.                 lcd_wri_com(0x80+x);
  216.             else
  217.                 lcd_wri_com(0xc0+x);//將光標移動到秒個位
  218.                 lcd_wri_com(0x0c);   //關光標
  219.         }
  220. }

  221. /*******************************************************************************
  222. * 函 數 名       : LcdInit()
  223. * 函數功能                 : 初始化LCD屏
  224. * 輸    入       : 無
  225. * 輸    出       : 無
  226. *******************************************************************************/
  227. void lcd_init(void)                                                  //LCD初始化子程序
  228. {
  229.         lcd_wri_com(0x38);//置功能8位雙行
  230.         lcd_wri_com(0x0c);//顯示開關光標
  231.         lcd_wri_com(0x06);//字符進入模式屏幕不動字符后移
  232.         delay_ms(5);//延時5ms
  233.         lcd_wri_com(0x01);  //清屏
  234.         wri_string(1,0,"welcome user DHT");//初始化顯示
  235.         wri_string(2,0,"H:   %RH T:   C ");//初始化顯示
  236. }

  237. /*********************************************************/
  238. // 往SHT11寫入一個字節
  239. /*********************************************************/
  240. char ShtWriteByte(unsigned char value)
  241. {
  242.         unsigned char i,error=0;
  243.         for(i=128;i>0;i>>=1)  // 高位為1,循環右移
  244.         {
  245.                 if (i&value)
  246.                         Data_P=1;               // 和要發送的數相與,結果為發送的位
  247.                 else
  248.                         Data_P=0;
  249.                 Sck_P=1;
  250.                 _nop_();                                                // 延時3us
  251.                 _nop_();
  252.                 _nop_();
  253.                 Sck_P=0;
  254.         }
  255.         Data_P=1;                                            // 釋放數據線
  256.         Sck_P=1;
  257.         error=Data_P;                                  // 檢查應答信號,確認通訊正常
  258.         _nop_();
  259.         _nop_();
  260.         _nop_();
  261.         Sck_P=0;
  262.         Data_P=1;
  263.         return error;                                 // error=1 通訊錯誤
  264. }


  265. /*********************************************************/
  266. // 從SHT11讀出一個字節
  267. /*********************************************************/
  268. char ShtReadByte(unsigned char ack)
  269. {
  270.         unsigned char i,val=0;
  271.         Data_P=1;                                                 // 釋放數據線
  272.         for(i=0x80;i>0;i>>=1)        // 高位為1,循環右移
  273.         {
  274.                 Sck_P=1;
  275.                 if(Data_P)
  276.                         val=(val|i);            // 讀一位數據線的值
  277.                 Sck_P=0;
  278.         }
  279.         Data_P=!ack;                            // 如果是校驗,讀取完后結束通訊
  280.         Sck_P=1;
  281.         _nop_();                                                        // 延時3us
  282.         _nop_();
  283.         _nop_();
  284.         Sck_P=0;
  285.         _nop_();
  286.         _nop_();
  287.         _nop_();
  288.         Data_P=1;                                                 // 釋放數據線
  289.         return val;
  290. }


  291. /*********************************************************/
  292. // SHT11啟動傳輸
  293. /*********************************************************/
  294. void ShtTransStart(void)
  295. {
  296.         Data_P=1;
  297.         Sck_P=0;
  298.         _nop_();
  299.         Sck_P=1;
  300.         _nop_();
  301.         Data_P=0;
  302.         _nop_();
  303.         Sck_P=0;
  304.         _nop_();
  305.         _nop_();
  306.         _nop_();
  307.         Sck_P=1;
  308.         _nop_();
  309.         Data_P=1;
  310.         _nop_();
  311.         Sck_P=0;
  312. }


  313. /*********************************************************/
  314. // SHT11連接復位
  315. /*********************************************************/
  316. void ShtConnectReset(void)
  317. {
  318.         unsigned char i;
  319.         Data_P=1;                                    //準備
  320.         Sck_P=0;
  321.         for(i=0;i<9;i++)          //DATA保持高,SCK時鐘觸發9次,發送啟動傳輸,通迅即復位
  322.         {
  323.                 Sck_P=1;
  324.                 Sck_P=0;
  325.         }
  326.         ShtTransStart();           //啟動傳輸
  327. }
  328. /*********************************************************/
  329. // SHT11溫濕度檢測
  330. /*********************************************************/
  331. char ShtMeasure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
  332. {
  333.         unsigned error=0;
  334.         unsigned int i;
  335.         ShtTransStart();                  // 啟動傳輸
  336.         switch(mode)                       // 選擇發送命令
  337.         {
  338.                 case 1 :                                           // 測量溫度
  339.                         error+=ShtWriteByte(0x03);
  340.                         break;
  341.                 case 2 :                                           // 測量濕度
  342.                         error+=ShtWriteByte(0x05);
  343.                         break;
  344.                 default:
  345.                         break;
  346.         }
  347.         for(i=0;i<65535;i++)
  348.                 if(Data_P==0)
  349.                         break;                                          // 等待測量結束
  350.                 if(Data_P)
  351.                         error+=1;                           // 如果長時間數據線沒有拉低,說明測量錯誤
  352.         *(p_value) =ShtReadByte(1);                  // 讀第一個字節,高字節 (MSB)
  353.         *(p_value+1)=ShtReadByte(1);                 // 讀第二個字節,低字節 (LSB)
  354.         *p_checksum =ShtReadByte(0);          // read CRC校驗碼
  355.         return error;                                                                          // error=1 通訊錯誤
  356. }
  357. /*********************************************************/
  358. // SHT11溫濕度值標度變換及溫度補償
  359. /*********************************************************/
  360. void CalcSHT11(float *p_humidity ,float *p_temperature)
  361. {
  362.         const float C1=-4.0;                                 // 12位濕度精度 修正公式
  363.         const float C2=+0.0405;                        // 12位濕度精度 修正公式
  364.         const float C3=-0.0000028;        // 12位濕度精度 修正公式
  365.         const float T1=+0.01;                                 // 14位溫度精度 5V條件 修正公式
  366.         const float T2=+0.00008;                 // 14位溫度精度 5V條件 修正公式
  367.         float rh=*p_humidity;                                 // rh: 12位 濕度
  368.         float t=*p_temperature;                        // t:  14位 溫度
  369.         float rh_lin;                                                                // rh_lin: 濕度 linear值
  370.         float rh_true;                                                        // rh_true: 濕度 ture值
  371.         float t_C;                                                                         // t_C : 溫度 ℃
  372.         t_C=t*0.01 - 40;                                                 //補償溫度
  373.         rh_lin=C3*rh*rh + C2*rh + C1;                                        //相對濕度非線性補償
  374.         rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;                //相對濕度對于溫度依賴性補償
  375.         *p_temperature=t_C;                                         //返回溫度結果
  376.         *p_humidity=rh_true;                                 //返回濕度結果
  377. }
  378. /*********************************************************/
  379. // 溫度校正
  380. /*********************************************************/
  381. unsigned char TempCorrect(int temp)
  382. {
  383.         if(temp<0)        temp=0;
  384.         if(temp>970)  temp=970;
  385.         if(temp>235)  temp=temp+10;
  386.         if(temp>555)  temp=temp+10;
  387.         if(temp>875)  temp=temp+10;
  388.         temp=(temp%1000)/10;
  389.         return temp;
  390. }
  391. /*********************************************************/
  392. // 濕度校正
  393. /*********************************************************/
  394. unsigned char HumiCorrect(unsigned int humi)
  395. {
  396.         if(humi>999)  humi=999;
  397.         if((humi>490)&&(humi<951))  humi=humi-10;
  398.         humi=(humi%1000)/10;
  399.         return humi+4;
  400. }
  401. /*********************************************************/
  402. // 讀取SHT11的溫濕度數據
  403. /*********************************************************/
  404. void ReadShtData()
  405. {
  406.         value humi_val,temp_val;          // 定義兩個共同體,一個用于濕度,一個用于溫度
  407.         unsigned char error;                                                          // 用于檢驗是否出現錯誤
  408.         unsigned char checksum;                                                  // CRC
  409.         unsigned int temp1,humi1;                                                // 臨時讀取到的溫濕度數據

  410.         error=0;                                                                                 //初始化error=0,即沒有錯誤
  411.         error+=ShtMeasure((unsigned char*)&temp_val.i,&checksum,1);         //溫度測量
  412.         error+=ShtMeasure((unsigned char*)&humi_val.i,&checksum,2);         //濕度測量

  413.         if(error!=0)                                                           //如果發生錯誤,系統復位
  414.                 ShtConnectReset();
  415.         else
  416.         {
  417.                 humi_val.f=(float)humi_val.i;                                 //轉換為浮點數
  418.                 temp_val.f=(float)temp_val.i;                                  //轉換為浮點數
  419.                 CalcSHT11(&humi_val.f,&temp_val.f);          //修正相對濕度及溫度
  420.                 temp1=temp_val.f*10;
  421.                 temp=TempCorrect(temp1);
  422.                 humi1=humi_val.f*10-50;
  423.                 humi=HumiCorrect(humi1);
  424.         humi = humi + 2;
  425.         }

  426. }
  427. void AlarmJudge(void)
  428. {
  429.         if(temp>AlarmTH)                                // 溫度是否過高
  430.         {
  431.                 LedTH_P=0;
  432.                 LedTL_P=1;
  433.         }
  434.         else if(temp<AlarmTL)                // 溫度是否過低
  435.         {
  436.                 LedTL_P=0;
  437.                 LedTH_P=1;
  438.         }
  439.         else                                                                                // 溫度正常
  440.         {
  441.                 LedTH_P=1;
  442.                 LedTL_P=1;
  443.         }

  444.         if(humi>AlarmHH)                           // 濕度是否過高
  445.         {
  446.                 LedHH_P=0;
  447.                   LedHL_P=1;
  448.         }
  449.         else if(humi<AlarmHL)                // 濕度是否過低
  450.         {
  451.                 LedHL_P=0;
  452.                 LedHH_P=1;
  453.         }
  454.         else                                                                           // 濕度正常
  455.         {
  456.                 LedHH_P=1;
  457.                 LedHL_P=1;
  458.         }

  459.         if((LedHH_P==0)||(LedHL_P==0)||(LedTH_P==0)||(LedTL_P==0))         // 蜂鳴器判斷,只要至少1個報警燈亮,蜂鳴器就報警
  460.         {
  461.                 for(i=0;i<3;i++)
  462.                 {
  463.                         beep=0;
  464.                         delay_ms(100);
  465.                         beep=1;
  466.                         delay_ms(100);
  467.                 }
  468.         }
  469. }

  470. /******************************************************
  471. ** 函數名:key_service
  472. ** 描述  :按鍵服務函數
  473. ** 輸入  :無
  474. ** 輸出  :無
  475. ** 調用  :主程序
  476. ******************************************************/
  477. void key_service(void)
  478. {
  479.     switch (now_window)
  480.     {
  481.            case  normal_mode:
  482.            {
  483.               if (key_value == 1)
  484.               {
  485.                     now_window = set_mode;
  486.                     curr_menu = 0;
  487.                     wri_string(1,0,"T:  -           ");//初始化顯示
  488.                     wri_string(2,0,"H:  -           ");//初始化顯示
  489.                     lcd_write_char(1,2,AlarmTL);
  490.                             lcd_write_char(1,6,AlarmTH);
  491.                     lcd_write_char(2,2,AlarmHL);
  492.                             lcd_write_char(2,6,AlarmHH);
  493.                     lcd1602_guanbiao(1,3,1);
  494.               }
  495.            }
  496.            break;
  497.            case  set_mode:
  498.            {
  499.                     if (key_value == 1)
  500.                     {
  501.                             ++curr_menu;
  502.                             if (curr_menu==1)
  503.                             {
  504.                                 lcd1602_guanbiao(1,7,1);
  505.                             }
  506.                             else if(curr_menu==2)
  507.                             {
  508.                                 lcd1602_guanbiao(2,3,1);
  509.                             }
  510.                             else if(curr_menu==3)
  511.                             {
  512.                                 lcd1602_guanbiao(2,7,1);
  513.                             }
  514.                             if(curr_menu>3)
  515.                             {
  516.                                 curr_menu = 0;
  517.                                 lcd1602_guanbiao(2,7,0);
  518.                                 now_window = normal_mode;
  519.                                 wri_string(1,0,"welcome user DHT");//初始化顯示
  520.                                     wri_string(2,0,"H:   %RH T:   C ");//初始化顯示
  521.                                     lcd_write_char(2,2,humi);
  522.                                         lcd_write_char(2,11,temp);
  523.                                         lcd_wri_com(0xcd);
  524.                                         lcd_wri_data(0xdf);
  525.                             }
  526.                     }
  527.                     if (key_value == 2)
  528.                     {
  529.                             if(curr_menu==0)
  530.                             {
  531.                                  if(++AlarmTL>99)
  532.                                  {
  533.                                      AlarmTL = 0;
  534.                                  }
  535.                                  lcd_write_char(1,2,AlarmTL);
  536.                                  lcd1602_guanbiao(1,3,1);
  537.                             }
  538.                             else if (curr_menu==1)
  539.                             {
  540.                                  if(++AlarmTH>99)
  541.                                  {
  542.                                      AlarmTH = 0;
  543.                                  }
  544.                                  lcd_write_char(1,6,AlarmTH);
  545.                                  lcd1602_guanbiao(1,7,1);
  546.                             }
  547.                             else if(curr_menu==2)
  548.                             {
  549.                                 if(++AlarmHL>99)
  550.                                  {
  551.                                      AlarmHL = 0;
  552.                                  }
  553.                                  lcd_write_char(2,2,AlarmHL);
  554.                                  lcd1602_guanbiao(2,3,1);
  555.                             }
  556.                             else if(curr_menu==3)
  557.                             {
  558.                                  if(++AlarmHH>99)
  559.                                  {
  560.                                      AlarmHH = 0;
  561.                                  }
  562.                                  lcd_write_char(2,6,AlarmHH);
  563.                                  lcd1602_guanbiao(2,7,1);
  564.                             }
  565.                     }
  566.                     if (key_value == 3)
  567.                     {
  568.                             if(curr_menu==0)
  569.                             {
  570.                                  if(--AlarmTL<0)
  571.                                  {
  572.                                      AlarmTL = 99;
  573.                                  }
  574.                                  lcd_write_char(1,2,AlarmTL);
  575.                                   lcd1602_guanbiao(1,3,1);
  576.                             }
  577.                             else if (curr_menu==1)
  578.                             {
  579.                                  if(--AlarmTH<0)
  580.                                  {
  581.                                      AlarmTH = 99;
  582.                                  }
  583.                                  lcd_write_char(1,6,AlarmTH);
  584.                                  lcd1602_guanbiao(1,7,1);
  585.                             }
  586.                             else if(curr_menu==2)
  587.                             {
  588.                                 if(--AlarmHL<0)
  589.                                  {
  590.                                      AlarmHL = 99;
  591.                                  }
  592.                                   lcd_write_char(2,2,AlarmHL);
  593.                                    lcd1602_guanbiao(2,3,1);
  594.                             }
  595.                             else if(curr_menu==3)
  596.                             {
  597.                                 if(--AlarmHH<0)
  598.                                  {
  599.                                      AlarmHH = 99;

  600.                                  }
  601.                                  lcd_write_char(2,6,AlarmHH);
  602.                                   lcd1602_guanbiao(2,7,1);
  603.                             }
  604.                     }
  605.            }
  606.            break;
  607.     }
  608. }
  609. /******************************************************
  610. ……………………

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

所有資料51hei提供下載:
溫濕度課程設計.7z (8.51 MB, 下載次數: 305)


評分

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

查看全部評分

回復

使用道具 舉報

ID:438321 發表于 2019-5-29 12:46 | 顯示全部樓層
可以改成DHT11嗎
回復

使用道具 舉報

ID:438321 發表于 2019-5-29 12:46 | 顯示全部樓層
可以做成DHT11嗎
回復

使用道具 舉報

ID:183545 發表于 2019-6-16 19:05 | 顯示全部樓層
代碼跟原理圖對不上,液晶驅動是1602的,圖是12864的
回復

使用道具 舉報

ID:556461 發表于 2019-6-25 20:17 | 顯示全部樓層
好,值得學習,很大的幫助
回復

使用道具 舉報

ID:506687 發表于 2019-7-23 11:13 | 顯示全部樓層
有朋友做出來的嗎?
回復

使用道具 舉報

ID:608923 發表于 2019-9-20 16:05 | 顯示全部樓層
嗨,是不是該給我發原本文件啊
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表