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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2496|回復(fù): 0
收起左側(cè)

單片機(jī)模擬倉(cāng)庫(kù)物流環(huán)境監(jiān)測(cè)的仿真和源程序

[復(fù)制鏈接]
ID:103965 發(fā)表于 2018-7-26 10:07 | 顯示全部樓層 |閱讀模式
主控芯片采用STC89C52RC,使用到的模塊有 MQ2 紅外對(duì)管 火焰模塊等等。有仿真文件,僅供參考學(xué)習(xí)之用。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png 0.png

sbit LED1 = P1 ^ 0;    //高于最佳溫度范圍指示燈
sbit LED2 = P1 ^ 1;    //低于最佳溫度范圍指示燈

sbit LED3 = P1 ^ 2;    //范圍指示燈高于最佳濕度
sbit LED4 = P1 ^ 3;    //低于最佳濕度范圍指示燈

sbit Flame_LED = P1 ^ 4;//火焰指示燈
sbit MQ2_LED = P1 ^ 5;//煙霧指示燈
sbit Ir_LED = P1 ^ 6;//紅外對(duì)管 報(bào)警指示燈

sbit TRH = P1 ^ 7; //溫濕度傳感器DHT11數(shù)據(jù)接入


-------------------------------------------------------------------

sbit LED_DC  = P2^0; // OLED模塊  DC   CS懸空
sbit LED_RST = P2^1; // OLED模塊  RST
sbit LED_SDA = P2^2;  // OLED模塊  D1
sbit LED_SCL = P2^3;  // OLED模塊  D0

sbit beep = P2 ^ 5;    //蜂鳴器模塊
sbit flame = P2 ^ 6; //火焰報(bào)警器模塊
sbit MQ2 = P2 ^ 7; //煙霧檢測(cè)模塊 檢測(cè)到為 0



-----------------------------------------------------------------------------------------

//sbit infrared = P3^2; //紅外  外部中斷0

sbit key_ir = P3 ^ 4; //解除紅外報(bào)警按鈕 為自鎖開(kāi)關(guān)
sbit police_ok = P3 ^ 5; //確認(rèn)收到紅外報(bào)警按鈕
-----------------------------------------------------------------------------------------
按鍵接線:
-------------------------------------------------------------------------------
sbit KEY1 = P0^2; // 更改/確認(rèn)建
sbit KEY2 = P0^3; //加
sbit KEY3 = P0^4; //減
sbit KEY4 = P0^5; //下一項(xiàng)

-------------------------------------------------------------------------------------------------------------------------------


----------------------------------------------------------------------
| Px |   0   |   1   |   2   |   3   |   4   |   5   |   6   |   7   |
----------------------------------------------------------------------
| P1 |  LED1 |  LED2 |  LED3 |  LED3 | 火焰L | MQ2 L |  紅外L |  TRH  |      全部為L(zhǎng)ED 除P1.7
----------------------------------------------------------------------
| P2 | OL_DC | OL_RST| OL_D0 | OL_D1 |       | 蜂鳴器| 火 焰 |  MQ2  |
----------------------------------------------------------------------
| P3 |       |       |紅外對(duì)管|       |key_ir|收到key|       |       |       key_ir 為自鎖開(kāi)關(guān)
----------------------------------------------------------------------
| P0 |       |       |  KEY1 |  KEY2 |  KEY3 |  KEY4 |       |       |
----------------------------------------------------------------------

單片機(jī)源程序如下:
  1. /******************************************************************************
  2.   文 件 名   : main.c
  3.   版 本 號(hào)   : v1.0
  4.   作    者   : Guokaiyi
  5.   生成日期   : 2012-12-1
  6.   最近修改   :
  7.   功能描述   : OLED演示例程(51系列)
  8.                說(shuō)明:
  9.                ----------------------------------------------------------------
  10.                G    電源地
  11.                VCC  接5V或3.3v電源
  12.                D0   P1^0(SCLK)
  13.                D1   P1^1(MOSI)
  14.                RST  P1^2
  15.                DC   P1^3
  16.                CS   已經(jīng)默認(rèn)選中,可以不接
  17.                ----------------------------------------------------------------
  18. sbit LED_SCL = P1^0;
  19. sbit LED_SDA = P1^1;
  20. sbit LED_RST = P1^2;
  21. sbit LED_DC  = P1^3;

  22. //DHT11溫濕度測(cè)試程序
  23. //P2作為L(zhǎng)CD的數(shù)據(jù)控制口,P1.6 作為DHT11data總線 ,P1.1作為狀態(tài)顯示
  24. ******************************************************************************/

  25. /*----------------------------------------------------------------------------*
  26. * 包含頭文件                                                                 *
  27. *----------------------------------------------------------------------------*/
  28. #include "common.h"
  29. #include "oled.h"
  30. #include <intrins.h>
  31. #include "SCAN_KEY.h"

  32. #include "DHT11.h"

  33. /*----------------------------------------------------------------------------*
  34. * 宏定義                                                                     *
  35. *----------------------------------------------------------------------------*/

  36. /*----------------------------------------------------------------------------*
  37. * 全局變量                                                                   *
  38. *----------------------------------------------------------------------------*/

  39. unsigned char str1[] = {"        "};
  40. unsigned char str2[] = {"        "};


  41. unsigned char DiWenDu[] = {"    "};
  42. unsigned char GaoWenDu[] = {"   "};

  43. unsigned char DiShiDu[] = {"    "};
  44. unsigned char GaoShiDu[] = {"   "};


  45. sbit LED1 = P1 ^ 0;        //高于最佳溫度范圍指示燈
  46. sbit LED2 = P1 ^ 1;        //低于最佳溫度范圍指示燈

  47. sbit LED3 = P1 ^ 2;        //高于最佳濕度范圍指示燈
  48. sbit LED4 = P1 ^ 3;        //低于最佳濕度范圍指示燈

  49. sbit Flame_LED = P1 ^ 4;//火焰指示燈
  50. sbit MQ2_LED = P1 ^ 5;//煙霧指示燈
  51. sbit Ir_LED = P1 ^ 6;//紅外對(duì)管 報(bào)警指示燈

  52. UCHAR8 TH_data, TL_data, RH_data, RL_data, CK_data;
  53. DHT11DATA Dht11TRHData;


  54. volatile int optimum_TL = 26;//最佳溫度  26 -28 度 最適宜溫度
  55. volatile int optimum_RL = 45;//最佳濕度        45% - 65%

  56. volatile int optimum_TH = 28;//最佳溫度  26 -28 度 最適宜溫度
  57. volatile int optimum_RH = 65;//最佳濕度                45% - 65%

  58. bit Cursor_Flag = 0;        //        是否顯示光標(biāo)
  59. int Cursor_place = 0;        //光標(biāo)位置 0沒(méi)有 1TL 2TH 3RL 4RH
  60. bit SetKeyFlag = 0;                //是否按下設(shè)置鍵 0 未按下 1按下





  61. sbit MQ2 = P2 ^ 7; //煙霧檢測(cè)模塊 檢測(cè)到為 0
  62. sbit flame = P2 ^ 6; //火焰報(bào)警器模塊
  63. sbit beep = P2 ^ 5;        //蜂鳴器模塊
  64. //sbit infrared = P3^2; //紅外

  65. sbit key_ir = P3 ^ 4; //解除紅外報(bào)警按鈕
  66. sbit police_ok = P3 ^ 5; //確認(rèn)收到紅外報(bào)警按鈕


  67. #define MQ2_BJ                 0
  68. #define FLAME_BJ         0
  69. #define IR_BJ                 0
  70. #define BEEP_ON         0
  71. #define BEEP_OFF         1
  72. //int ir_key = 0;
  73. int ir_police = 0;


  74. void call_police() //報(bào)警
  75. {
  76.         char beepbaojingno = 0;
  77.        
  78.     if(police_ok == 0) ir_police = 0;


  79.     if(MQ2 == MQ2_BJ) {
  80.                 beepbaojingno = 1;
  81.         MQ2_LED = 0;
  82.     } else {
  83.         MQ2_LED = 1;
  84.     }


  85.     if(flame == FLAME_BJ) {
  86.         beepbaojingno = 2;
  87.         Flame_LED = 0;
  88.     } else
  89.         {
  90.         Flame_LED = 1;
  91.     }


  92.     if(ir_police == 1)
  93.     {
  94.                 if(key_ir == 0)
  95.                 {
  96.                         ir_police = 0;        //報(bào)警解除
  97.                 } else
  98.                 {
  99.                         beepbaojingno = 3;
  100.                         Ir_LED = 0;
  101.                 }
  102.     }
  103.     else
  104.     {
  105.         Ir_LED = 1;
  106.     }

  107.        
  108.         if(beepbaojingno != 0)
  109.         {
  110.                 beep = BEEP_ON;
  111.         }else
  112.         {
  113.                 beep = BEEP_OFF;
  114.         }

  115. }


  116. /*********************************************************************************
  117. *實(shí)驗(yàn)名   :外部中斷實(shí)驗(yàn)(下降沿觸發(fā))
  118. *實(shí)驗(yàn)效果        :按下學(xué)習(xí)板上第三排任意按鍵,LED燈前后四位狀態(tài)調(diào)換
  119. *
  120. *********************************************************************************/

  121. void Init_police()
  122. {
  123.     Flame_LED = 1;
  124.     MQ2_LED = 1;
  125.     Ir_LED = 1;
  126.     beep = BEEP_OFF;
  127.     EA = 1; //全局中斷打開(kāi)
  128.     EX0 = 1; //INT0中斷允許
  129.     IT0 = 1; //觸發(fā)方式為下降沿觸發(fā)

  130. }

  131. void ISR_KEY()interrupt 0
  132. {
  133.     if(key_ir == 0)
  134.     {
  135.         ir_police = 0;        //報(bào)警解除
  136.     } else
  137.     {
  138.         ir_police = 1;        //報(bào)警
  139.     }
  140. }











  141. /*----------------------------------------------------------------------------*
  142. * 內(nèi)部函數(shù)原型                                                               *
  143. *----------------------------------------------------------------------------*/
  144. VOID MAIN_Init(VOID); //初始化函數(shù)
  145. VOID DHT11_Display(VOID); //DHT11顯示函數(shù)


  146. void delay_display(unsigned char ms);        //延時(shí)顯示 主要解決延遲時(shí)間內(nèi)不能按鍵操作

  147. int optimum_judge_T();        //最佳 溫度 判斷                -1 小于 最小值  0 正常  1 大于最大值
  148. int optimum_judge_R();        //最佳 濕度 判斷                -1 小于 最小值  0 正常  1 大于最大值

  149. void TR_optimum_adjust(); //溫濕度 最佳 調(diào)節(jié)
  150. void Optimum_Display();        //最佳溫濕度顯示

  151. void Optimum_panduan();        //最佳濕度判斷

  152. void NotDisplayCursor();        //不顯示光標(biāo)
  153. void DisplayCursor_temp();        //顯示光標(biāo)
  154. void Call_DisplayCursor();        //必要的調(diào)用顯示光標(biāo)函數(shù)

  155. void NotCursor_L3();        //第三行不顯示光標(biāo)

  156. /*----------------------------------------------------------------------------*
  157. * 外部函數(shù)原型                                                               *
  158. *----------------------------------------------------------------------------*/
  159. VOID main(void)
  160. {
  161.     MAIN_Init();

  162.     Optimum_Display();
  163.     DHT11_Display();

  164.     call_police(); //報(bào)警

  165.     while(1)
  166.     {
  167.         delay_display(500);//延時(shí)顯示 主要解決延遲時(shí)間內(nèi)不能按鍵操作

  168.         Optimum_panduan();

  169.         if(Cursor_place != 0)
  170.         {
  171.             Call_DisplayCursor();
  172.         }

  173.         call_police(); //報(bào)警

  174.     }

  175. }

  176. VOID MAIN_Init(VOID)
  177. {
  178.     LED1 = 1;
  179.     LED2 = 1;
  180.     LED3 = 1;
  181.     LED4 = 1;

  182.     Init_police();

  183.     LED_Init();//OLED初始化
  184.     key_init();
  185.        
  186.         key_ir = 1;

  187. }

  188. void Optimum_panduan() //最佳濕度判斷
  189. {
  190.     int temp_T, temp_R;
  191. //最佳溫度判斷        -1 小于 最小值  0 正常  1 大于最大值
  192.     temp_T = optimum_judge_T();        //最佳 溫度 判斷
  193.     temp_R = optimum_judge_R();        //最佳 溫度 判斷

  194.     switch(temp_T)
  195.     {
  196.     case 0:
  197.         LED1 = 1;
  198.         LED2 = 1;
  199.         break;
  200.     case 1:
  201.         LED1 = 0;
  202.         LED2 = 1;
  203.         break;
  204.     case -1:
  205.         LED1 = 1;
  206.         LED2 = 0;
  207.         break;

  208.     }

  209.     switch(temp_R)
  210.     {
  211.     case 0:
  212.         LED3 = 1;
  213.         LED4 = 1;
  214.         break;
  215.     case 1:
  216.         LED3 = 0;
  217.         LED4 = 1;
  218.         break;
  219.     case -1:
  220.         LED3 = 1;
  221.         LED4 = 0;
  222.         break;

  223.     }

  224. }

  225. void delay_display(unsigned char ms)        //延時(shí)顯示 主要解決延遲時(shí)間內(nèi)不能按鍵操作
  226. {
  227.     unsigned char i;
  228.     Optimum_panduan(); //最佳濕度判斷
  229.     DHT11_Display();//溫濕度 顯示
  230.     while(ms--)
  231.     {
  232.         for(i = 0; i < 30; i++)
  233.         {
  234.             TR_optimum_adjust();//溫濕度 最佳 調(diào)節(jié)
  235.         }
  236.     }

  237. }

  238. void TR_optimum_adjust() //溫濕度 最佳 調(diào)節(jié)
  239. {
  240.     int key;
  241.     key = key_return(); //1 設(shè)置鍵    2 加     3 減    4 下一條

  242.     switch(key)
  243.     {
  244.     case 1:
  245.         SetKeyFlag = !SetKeyFlag;
  246.         if(SetKeyFlag)
  247.         {
  248.             Cursor_Flag = 1;
  249.             Cursor_place = 1;
  250.         } else
  251.         {
  252.             Cursor_Flag = 0;
  253.             Cursor_place = 0;
  254.             Call_DisplayCursor();
  255.         }
  256.         break;
  257.     case 2:
  258.         if(Cursor_place == 1)
  259.         {
  260.             if(optimum_TL < optimum_TH)
  261.             {
  262.                 optimum_TL++;
  263.             }

  264.         } else if(Cursor_place == 2)
  265.         {
  266.             optimum_TH++;
  267.             if( optimum_TH > 99 )
  268.                 optimum_TH = 99;
  269.         } else if(Cursor_place == 3)
  270.         {
  271.             if(optimum_RL < optimum_RH)
  272.             {
  273.                 optimum_RL++;
  274.             }
  275.         } else if(Cursor_place == 4)
  276.         {
  277.             optimum_RH++;
  278.             if( optimum_RH > 99 )
  279.                 optimum_RH = 99;
  280.         }
  281.         break;

  282.     case 3:
  283.         if(Cursor_place == 1)
  284.         {
  285.             optimum_TL--;
  286.             if( optimum_TL < 0 )
  287.                 optimum_TL = 0;
  288.         } else if(Cursor_place == 2)
  289.         {
  290.             if(optimum_TH > optimum_TL)
  291.             {
  292.                 optimum_TH--;
  293.             }
  294.         } else if(Cursor_place == 3)
  295.         {
  296.             optimum_RL--;
  297.             if( optimum_RL < 0 )
  298.                 optimum_RL = 0;
  299.         } else if(Cursor_place == 4)
  300.         {
  301.             if(optimum_RH > optimum_RL)
  302.             {
  303.                 optimum_RH--;
  304.             }
  305.         }
  306.         break;

  307.     case 4:
  308.         Cursor_place++;
  309.         if(Cursor_place == 5)
  310.             Cursor_place = 1;
  311.         break;
  312.     }
  313.     if(key != -1)
  314.     {
  315.         Optimum_Display();
  316.         Call_DisplayCursor();
  317.     }

  318. }

  319. void GeShiHuaDht11Data_Humi()//濕度
  320. {
  321.     //濕度整數(shù)部分
  322.     str1[0] = (char)(0X30 + RH_data / 10);
  323.     str1[1] = (char)(0X30 + RH_data % 10);
  324.     str1[2] =  0x2e; //小數(shù)點(diǎn)
  325.     //濕度小數(shù)部分
  326.     str1[3] = (char)(0X30 + RL_data / 10);
  327.     str1[5] = 0X25; //"%"
  328.     str1[6] = 0X52; //"R"
  329.     str1[7] = 0X48; //"H"
  330.        
  331. }
  332. void GeShiHuaDht11Data_Temp()//溫度
  333. {
  334.     //溫度整數(shù)部分
  335.     str2[0] = (char)(0X30 + TH_data / 10);
  336.     str2[1] = (char)(0X30 + TH_data % 10);
  337.     str2[2] =  0x2e; //小數(shù)點(diǎn)
  338.     //溫度小數(shù)部分
  339.     str2[3] = (char)(0X30 + TL_data / 10);
  340.     str2[5] = 0X27;  //"'"
  341.     str2[6] = 0X43;  //"C"

  342. }



  343. VOID DHT11_Display(VOID)
  344. {
  345.         Dht11TRHData = SendDht11Data();
  346.        
  347.         TH_data = Dht11TRHData.DtempH;
  348.         TL_data = Dht11TRHData.DtempL;
  349.        
  350.         RH_data = Dht11TRHData.DhumiH;
  351.         RL_data = Dht11TRHData.DhumiL;

  352.         GeShiHuaDht11Data_Humi();
  353.         GeShiHuaDht11Data_Temp();
  354.     LED_P8x16Str(0, 0, (UCHAR8*)"TRH RH: ");
  355.     LED_P8x16Str(64, 0, (UCHAR8*)str1);        //寫(xiě)濕度數(shù)據(jù)

  356.     LED_P8x16Str(0, 1, (UCHAR8*)"TRH  T: ");
  357.     LED_P8x16Str(64, 1, (UCHAR8*)str2);

  358.     //delay_ms(1000) ;

  359. }

  360. void NotDisplayCursor()        //不顯示光標(biāo)
  361. {
  362.     LED_P8x16Str(24, 2, (UCHAR8*)" ");
  363.     LED_P8x16Str(80, 2, (UCHAR8*)" ");

  364.     LED_P8x16Str(24, 3, (UCHAR8*)" ");
  365.     LED_P8x16Str(80, 3, (UCHAR8*)" ");
  366. }

  367. void DisplayCursor_temp()        //顯示光標(biāo)
  368. {
  369.     switch(Cursor_place)
  370.     {
  371.     case 1:
  372.         LED_P8x16Str(24, 2, (UCHAR8*)"|");
  373.         break;

  374.     case 2:
  375.         LED_P8x16Str(80, 2, (UCHAR8*)"|");
  376.         break;

  377.     case 3:
  378.         LED_P8x16Str(24, 3, (UCHAR8*)"|");
  379.         break;

  380.     case 4:
  381.         LED_P8x16Str(80, 3, (UCHAR8*)"|");
  382.         break;
  383.     }
  384. }

  385. void Call_DisplayCursor()
  386. {
  387.     Cursor_Flag = !Cursor_Flag;
  388.     NotDisplayCursor();        //不顯示
  389.     if(Cursor_Flag == 1)
  390.     {
  391.         DisplayCursor_temp();        //顯示光標(biāo)
  392.     }
  393. }

  394. void Optimum_Display()        //最佳溫濕度顯示
  395. {
  396. //        0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120           128
  397. //        T L :     2  5     T  H  :     5  5

  398.     /*--------------------低溫度---------------------------*/
  399.     DiWenDu[0] = (char)(0X30 + optimum_TL / 10);
  400.     DiWenDu[1] = (char)(0X30 + optimum_TL % 10);

  401.     LED_P8x16Str(0, 2, (UCHAR8*)"TL:");
  402.     LED_P8x16Str(32, 2, (UCHAR8*)DiWenDu);
  403. ……………………

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

所有資料51hei提供下載:
倉(cāng)庫(kù)物流.zip (201.3 KB, 下載次數(shù): 26)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线免费看 | 欧美日韩久 | 国产高潮好爽受不了了夜夜做 | 午夜精品一区二区三区三上悠亚 | 国产精品久久久久一区二区三区 | a级黄色片在线观看 | 亚洲综合在线播放 | 亚洲精品福利在线 | 日韩中文一区 | 99热国产在线播放 | 亚洲精品电影在线观看 | 一区二区亚洲 | 不卡在线一区 | 免费a级毛片在线播放 | 中文字幕在线一区二区三区 | 亚洲欧美一区二区三区国产精品 | av在线播放不卡 | 综合一区二区三区 | 日韩成人一区 | 日韩视频一区 | 亚洲精品乱码久久久久久按摩观 | 亚洲综合色自拍一区 | 久久国产欧美日韩精品 | 青青草这里只有精品 | 国产精品永久免费视频 | 国产一级在线 | 国产精品毛片av一区 | 久热久草 | 三级av网址 | 亚洲高清视频一区二区 | 免费观看日韩精品 | 天天综合91 | 国产一区二区三区亚洲 | 99精品视频免费观看 | 9191在线播放 | 韩国av影院| 美女久久久| 成人国产在线观看 | 91欧美精品成人综合在线观看 | 日日夜夜天天 | 国产精品成人一区二区三区夜夜夜 |