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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機制作居家養老監護系統程序PCB與仿真 e4a安卓App源程序

  [復制鏈接]
跳轉到指定樓層
樓主
居家養老監護系統仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


Altium Designer畫的居家養老監護系統PCB圖如下:(51hei附件中可下載工程文件)


安卓app 用e4a寫的:


單片機源程序如下:
  1. #include "reg52.h"                 //調用單片機頭文件
  2. #include "delay.h"
  3. #include "oled.h"
  4. #include "dht11.h"
  5. #include "esp8266.h"

  6. #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  7. #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535

  8. //繼電器
  9. sbit relay1=P1^6;
  10. sbit relay2=P1^5;
  11. sbit relay3=P1^4;
  12. sbit relay4=P1^3;
  13. sbit relay5=P3^6;
  14. sbit relay6=P3^7;
  15. //按鍵接口
  16. sbit K0=P2^6;          //一鍵啟動
  17. sbit K1=P2^7;          //一鍵關閉
  18. sbit K2=P2^5;          //R1開/關
  19. sbit K3=P2^4;          //R2開/關
  20. sbit K4=P2^3;          //R3開/關
  21. sbit K5=P2^2;          //R4開/關
  22. sbit K6=P2^1;          //R5開/關
  23. sbit K7=P2^0;          //R6開/關
  24. //蜂鳴器
  25. sbit beep=P1^0;

  26. uchar code table[]="0123456789.";
  27. uchar T=0,H=0,Receive;     

  28. uchar Recive_table[40];                  //用于接收wifi模塊反饋到MCU上的數據
  29. uchar Send_table[10]="0000000000";//前面4位溫濕度,后面6位繼電器狀態,1表示開,0表示關

  30. void ESP8266_Senddate()
  31. {         
  32.            delay_uint(100);
  33.        ESP8266_Set("AT+CIPSEND=0,10");//發送10個字節
  34.        delay_uint(100);
  35.        ESP8266_Set(Send_table);
  36. }
  37. void DHT11_receive()      //接收40位的數據
  38. {
  39.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  40.         EA=0; //關閉中斷,防止中斷影響DHT11出現單片機死機
  41.     DHT11_start();
  42.     if(Data==0)
  43.     {
  44.         while(Data==0);  //等待拉高     
  45.         DHT11_delay_us(40);  //拉高后延時80us
  46.         R_H=DHT11_rec_byte();    //接收濕度高八位  
  47.         R_L=DHT11_rec_byte();    //接收濕度低八位  
  48.         T_H=DHT11_rec_byte();    //接收溫度高八位  
  49.         T_L=DHT11_rec_byte();    //接收溫度低八位
  50.         revise=DHT11_rec_byte(); //接收校正位

  51.         DHT11_delay_us(25);    //結束
  52.                 EA=1;
  53.         if((R_H+R_L+T_H+T_L)==revise)      //校正
  54.         {
  55.             RH=R_H;
  56.             RL=R_L;
  57.             TH=T_H;
  58.             TL=T_L;
  59.         }
  60.                 T=TH;
  61.                 H=RH;
  62.                 //獲取當前溫濕度值并顯示
  63.                 OLED_ShowChar(72,0,T%100/10,16);
  64.             OLED_ShowChar(88,0,T%10,16);
  65.             OLED_ShowChar(72,2,H%100/10,16);
  66.         OLED_ShowChar(88,2,H%10,16);
  67.         //溫度
  68.        Send_table[0]=table[T%100/10];
  69.        Send_table[1]=table[T%10];
  70.        //濕度
  71.        Send_table[2]=table[H%100/10];
  72.        Send_table[3]=table[H%10];
  73.      }
  74. }
  75. /*****
  76. 對接收的數據處理
  77. ******/
  78. void ESP8266_Recive_Estimate()
  79. {
  80.   if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的數據為+IPD時進入控制  
  81.                 {
  82.                   //一鍵啟動
  83.                   if((Recive_table[9]=='a'))
  84.                   {
  85.                    //提示音
  86.                 beep=1;
  87.                     delay_uint(100);
  88.                     beep=0;
  89.                    relay1=1;
  90.            relay2=1;
  91.            relay3=1;
  92.            relay4=1;
  93.            relay5=1;
  94.            relay6=1;
  95.                    OLED_ShowChinese(24,4,11,16);//繼電器1
  96.                    OLED_ShowChinese(68,4,11,16);//繼電器2
  97.                    OLED_ShowChinese(112,4,11,16);//繼電器3
  98.                    OLED_ShowChinese(24,6,11,16);//繼電器4
  99.                    OLED_ShowChinese(68,6,11,16);//繼電器5
  100.                    OLED_ShowChinese(112,6,11,16);//繼電器6
  101.                    Send_table[4]=Send_table[5]=Send_table[6]=Send_table[7]=Send_table[8]=Send_table[9]=table[1];
  102.                    Recive_table[9]=' ';
  103.                    ESP8266_Senddate();
  104.                   }
  105.                   //一鍵關閉
  106.                   if((Recive_table[9]=='b'))
  107.                   {
  108.                    //提示音
  109.                 beep=1;
  110.                     delay_uint(100);
  111.                     beep=0;
  112.                    relay1=0;
  113.            relay2=0;
  114.            relay3=0;
  115.            relay4=0;
  116.            relay5=0;
  117.            relay6=0;
  118.                    OLED_ShowChinese(24,4,12,16);//繼電器1
  119.                    OLED_ShowChinese(68,4,12,16);//繼電器2
  120.                    OLED_ShowChinese(112,4,12,16);//繼電器3
  121.                    OLED_ShowChinese(24,6,12,16);//繼電器4
  122.                    OLED_ShowChinese(68,6,12,16);//繼電器5
  123.                    OLED_ShowChinese(112,6,12,16);//繼電器6
  124.                    Send_table[4]=Send_table[5]=Send_table[6]=Send_table[7]=Send_table[8]=Send_table[9]=table[0];
  125.                    Recive_table[9]=' ';
  126.                    ESP8266_Senddate();
  127.                   }
  128.                   //繼電器1控制
  129.                   if((Recive_table[9]=='c'))
  130.                   {
  131.                    //提示音
  132.                 beep=1;
  133.                     delay_uint(100);
  134.                     beep=0;
  135.                    if((Send_table[4]-'0')==1){Send_table[4]=table[0];OLED_ShowChinese(24,4,12,16);relay1=0;}
  136.                    else{Send_table[4]=table[1];OLED_ShowChinese(24,4,11,16);relay1=1;}
  137.                    Recive_table[9]=' ';
  138.                    ESP8266_Senddate();
  139.                   }
  140.                   //繼電器2控制
  141.                   if((Recive_table[9]=='d'))
  142.                   {
  143.                     //提示音
  144.                 beep=1;
  145.                     delay_uint(100);
  146.                     beep=0;
  147.                    if((Send_table[5]-'0')==1){Send_table[5]=table[0];OLED_ShowChinese(68,4,12,16);relay2=0;}
  148.                    else{Send_table[5]=table[1];OLED_ShowChinese(68,4,11,16);relay2=1;}
  149.                    Recive_table[9]=' ';
  150.                    ESP8266_Senddate();
  151.                   }
  152.                   //繼電器3控制
  153.                   if((Recive_table[9]=='e'))
  154.                   {
  155.                    //提示音
  156.                 beep=1;
  157.                     delay_uint(100);
  158.                     beep=0;
  159.                    if((Send_table[6]-'0')==1){Send_table[6]=table[0];OLED_ShowChinese(112,4,12,16);relay3=0;}
  160.                    else{Send_table[6]=table[1];OLED_ShowChinese(112,4,11,16);relay3=1;}
  161.                    Recive_table[9]=' ';
  162.                    ESP8266_Senddate();
  163.                   }
  164.                   //繼電器4控制
  165.                   if((Recive_table[9]=='f'))
  166.                   {
  167.                    //提示音
  168.                 beep=1;
  169.                     delay_uint(100);
  170.                     beep=0;
  171.                    if((Send_table[7]-'0')==1){Send_table[7]=table[0];OLED_ShowChinese(24,6,12,16);relay4=0;}
  172.                    else{Send_table[7]=table[1];OLED_ShowChinese(24,6,11,16);relay4=1;}
  173.                    Recive_table[9]=' ';
  174.                    ESP8266_Senddate();
  175.                   }
  176.                   //繼電器5控制
  177.                   if((Recive_table[9]=='g'))
  178.                   {
  179.                    //提示音
  180.                 beep=1;
  181.                     delay_uint(100);
  182.                     beep=0;
  183.                    if((Send_table[8]-'0')==1){Send_table[8]=table[0];OLED_ShowChinese(68,6,12,16);relay5=0;}
  184.                    else{Send_table[8]=table[1];OLED_ShowChinese(68,6,11,16);relay5=1;}
  185.                    Recive_table[9]=' ';
  186.                    ESP8266_Senddate();
  187.                   }
  188.                   //繼電器6控制
  189.                   if((Recive_table[9]=='h'))
  190.                   {
  191.                    //提示音
  192.                 beep=1;
  193.                     delay_uint(100);
  194.                     beep=0;
  195.                    if((Send_table[9]-'0')==1){Send_table[9]=table[0];OLED_ShowChinese(112,6,12,16);relay6=0;}
  196.                    else{Send_table[9]=table[1];OLED_ShowChinese(112,6,11,16);relay6=1;}
  197.                    Recive_table[9]=' ';
  198.                    ESP8266_Senddate();
  199.                   }
  200.                   //APP連接后一直發送
  201.                   if((Recive_table[9]=='I'))
  202.                   {
  203.                     ESP8266_Senddate();
  204.                   }
  205.                 }
  206. }
  207. /****
  208. 按鍵控制
  209. ****/
  210. void keyscan()
  211. {
  212. //一鍵啟動
  213.    if(K0==0)                                          
  214.     {
  215.       delay_uint(10);//延時消抖
  216.      if(K0==0)
  217.           {
  218.            //按鍵提示音
  219.             beep=1;
  220.                 delay_uint(100);
  221.                 beep=0;
  222.            //啟動所有繼電器
  223.         relay1=1;
  224.         relay2=1;
  225.         relay3=1;
  226.         relay4=1;
  227.         relay5=1;
  228.         relay6=1;
  229.                 Send_table[4]=Send_table[5]=Send_table[6]=Send_table[7]=Send_table[8]=Send_table[9]='1';
  230.                 OLED_ShowChinese(24,4,11,16);//繼電器1
  231.                 OLED_ShowChinese(68,4,11,16);//繼電器2
  232.                 OLED_ShowChinese(112,4,11,16);//繼電器3
  233.                 OLED_ShowChinese(24,6,11,16);//繼電器4
  234.                 OLED_ShowChinese(68,6,11,16);//繼電器5
  235.                 OLED_ShowChinese(112,6,11,16);//繼電器6
  236.                 while(K0==0);//等待按鍵釋放
  237.           }
  238.         }
  239. //一鍵關閉
  240.    if(K1==0)                                          
  241.     {
  242.       delay_uint(10);//延時消抖
  243.      if(K1==0)
  244.           {
  245.                    //按鍵提示音
  246.             beep=1;
  247.                 delay_uint(100);
  248.                 beep=0;
  249.            //啟動所有繼電器
  250.         relay1=0;
  251.         relay2=0;
  252.         relay3=0;
  253.         relay4=0;
  254.         relay5=0;
  255.         relay6=0;
  256.                 Send_table[4]=Send_table[5]=Send_table[6]=Send_table[7]=Send_table[8]=Send_table[9]='0';
  257.                 OLED_ShowChinese(24,4,12,16);//繼電器1
  258.                 OLED_ShowChinese(68,4,12,16);//繼電器2
  259.                 OLED_ShowChinese(112,4,12,16);//繼電器3
  260.                 OLED_ShowChinese(24,6,12,16);//繼電器4
  261.                 OLED_ShowChinese(68,6,12,16);//繼電器5
  262.                 OLED_ShowChinese(112,6,12,16);//繼電器6
  263.                 while(K1==0);//等待按鍵釋放
  264.           }
  265.         }
  266. //繼電器1
  267.    if(K2==0)                                          
  268.     {
  269.       delay_uint(10);//延時消抖
  270.      if(K2==0)
  271.           {
  272.             //按鍵提示音
  273.             beep=1;
  274.                 delay_uint(100);
  275.                 beep=0;
  276.            //繼電器狀態翻轉
  277.                 if(relay1==0){OLED_ShowChinese(24,4,12,16);Send_table[4]='0';}
  278.                 else {OLED_ShowChinese(24,4,11,16);Send_table[4]='1';}
  279.                 while(K2==0);//等待按鍵釋放
  280.           }
  281.         }
  282. //繼電器2
  283.    if(K3==0)                                          
  284.     {
  285.       delay_uint(10);//延時消抖
  286.      if(K3==0)
  287.           {
  288.           //按鍵提示音
  289.             beep=1;
  290.                 delay_uint(100);
  291.                 beep=0;
  292.            //繼電器狀態翻轉
  293.         relay2=~relay2;
  294.                 if(relay2==0){OLED_ShowChinese(68,4,12,16);Send_table[5]='0';}
  295.                 else {OLED_ShowChinese(68,4,11,16);Send_table[5]='1';}
  296.                 while(K3==0);//等待按鍵釋放
  297.           }
  298.         }
  299. //繼電器3
  300.    if(K4==0)                                          
  301.     {
  302.       delay_uint(10);//延時消抖
  303.      if(K4==0)
  304.           {
  305.           //按鍵提示音
  306.             beep=1;
  307.                 delay_uint(100);
  308.                 beep=0;
  309.            //繼電器狀態翻轉
  310.         relay3=~relay3;
  311.                 if(relay3==0){OLED_ShowChinese(112,4,12,16);Send_table[6]='0';}
  312.                 else {OLED_ShowChinese(112,4,11,16);Send_table[6]='1';}
  313.                 while(K4==0);//等待按鍵釋放
  314.           }
  315.         }
  316. //繼電器4
  317.    if(K5==0)                                          
  318.     {
  319.       delay_uint(10); //延時消抖
  320.      if(K5==0)
  321.           {
  322.            //按鍵提示音
  323.             beep=1;
  324.                 delay_uint(100);
  325.                 beep=0;
  326.            //繼電器狀態翻轉
  327.         relay4=~relay4;
  328.                 if(relay4==0){OLED_ShowChinese(24,6,12,16);Send_table[7]='0';}
  329.                 else {OLED_ShowChinese(24,6,11,16);Send_table[7]='1';}
  330.                 while(K5==0);//等待按鍵釋放
  331.           }
  332.         }
  333. //繼電器5
  334.    if(K6==0)                                          
  335.     {
  336.       delay_uint(10);//延時消抖
  337.      if(K6==0)
  338.           {
  339.            //按鍵提示音
  340.             beep=1;
  341.                 delay_uint(100);
  342.                 beep=0;
  343.            //繼電器狀態翻轉
  344.         relay5=~relay5;
  345.                 if(relay5==0){OLED_ShowChinese(68,6,12,16);Send_table[8]='0';}
  346.                 else {OLED_ShowChinese(68,6,11,16);Send_table[8]='1';}
  347.                 while(K6==0);//等待按鍵釋放
  348.           }
  349.         }
  350. //繼電器6
  351.    if(K7==0)                                          
  352.     {
  353.       delay_uint(10);//延時消抖
  354.      if(K7==0)
  355.           {
  356.            //按鍵提示音
  357.             beep=1;
  358.                 delay_uint(100);
  359.                 beep=0;
  360.            //繼電器狀態翻轉
  361.         relay6=~relay6;
  362.                 if(relay6==0){OLED_ShowChinese(112,6,12,16);Send_table[9]='0';}
  363.                 else {OLED_ShowChinese(112,6,11,16);Send_table[9]='1';}
  364.                 while(K7==0);//等待按鍵釋放
  365.           }
  366.         }
  367.             
  368. }
  369. /*****
  370. 系統初始化函數
  371. ****/
  372. void System_Init()
  373. {       
  374.     beep=0;//關閉蜂鳴器
  375.     //關閉所有繼電器
  376.     relay1=0;
  377.     relay2=0;
  378.     relay3=0;
  379.     relay4=0;
  380.     relay5=0;
  381.     relay6=0;
  382.         //OLED初始化
  383.         OLED_Init();       
  384.     //開機顯示                                                                                                                          
  385.     OLED_ShowChinese(10,0,0,16);
  386.         OLED_ShowChinese(28,0,1,16);
  387.         OLED_ShowChinese(42,0,2,16);
  388.         OLED_ShowChinese(60,0,3,16);
  389.         OLED_ShowChinese(78,0,4,16);
  390.         OLED_ShowChar(96,0,11,16);//!

  391.         OLED_ShowChinese(10,3,5,16);
  392.         OLED_ShowChinese(28,3,6,16);
  393.         OLED_ShowChinese(42,3,7,16);
  394.         OLED_ShowChar(60,3,24,16);//.
  395.         OLED_ShowChar(78,3,24,16);//.
  396.         OLED_ShowChar(96,3,24,16);//.
  397.         //ESP8266模塊初始化
  398.         ESP8266_Init();
  399.         OLED_Clear();//清屏
  400.                 //顯示溫度
  401.         OLED_ShowChinese(20,0,8,16);
  402.         OLED_ShowChinese(38,0,9,16);
  403.         OLED_ShowChar(56,0,26,16);
  404.         OLED_ShowChar(72,0,T%100/10,16);
  405.         OLED_ShowChar(88,0,T%10,16);
  406.         OLED_ShowChar(102,0,35,16);
  407.         OLED_ShowChar(110,0,95,16);
  408.         //顯示濕度
  409.         OLED_ShowChinese(20,2,10,16);
  410.         OLED_ShowChinese(38,2,9,16);
  411.         OLED_ShowChar(56,2,26,16);
  412.         OLED_ShowChar(72,2,H%100/10,16);
  413.         OLED_ShowChar(88,2,H%10,16);
  414.         OLED_ShowChar(102,2,15,16);
  415.         //顯示繼電器狀態、繼電器1
  416.         OLED_ShowChar(0,4,50,16);
  417.         OLED_ShowChar(8,4,1,16);
  418.         OLED_ShowChar(16,4,26,16);
  419.         OLED_ShowChinese(24,4,12,16);
  420.          //繼電器2
  421.         OLED_ShowChar(44,4,50,16);
  422.         OLED_ShowChar(52,4,2,16);
  423.         OLED_ShowChar(60,4,26,16);
  424.         OLED_ShowChinese(68,4,12,16);
  425.          //繼電器3
  426.         OLED_ShowChar(88,4,50,16);
  427.         OLED_ShowChar(96,4,3,16);
  428.         OLED_ShowChar(104,4,26,16);
  429.         OLED_ShowChinese(112,4,12,16);
  430.         //繼電器4
  431.         OLED_ShowChar(0,6,50,16);
  432.         OLED_ShowChar(8,6,4,16);
  433.         OLED_ShowChar(16,6,26,16);
  434.         OLED_ShowChinese(24,6,12,16);
  435.     //繼電器5
  436.         OLED_ShowChar(44,6,50,16);
  437.         OLED_ShowChar(52,6,5,16);
  438. ……………………

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


上圖資料51hei附件下載 程序Keil5,仿真Proteus8.8,ad10 PCB:
居家養老監護系統.7z (2.93 MB, 下載次數: 82)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:297903 發表于 2022-4-14 19:52 | 只看該作者
看標題應該很適用!!
回復

使用道具 舉報

板凳
ID:262 發表于 2022-4-15 05:28 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

地板
ID:712493 發表于 2022-4-15 08:54 | 只看該作者
能說說E4A的調試過程,想學  謝謝!
回復

使用道具 舉報

5#
ID:368810 發表于 2022-4-19 14:29 | 只看該作者
目前看你這個是有一個溫濕度的監測,算上加熱,降溫,加濕與除濕,應該控制4個繼電器啊,你還有兩個繼電器是什么作用呢大佬?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国内精品久久影院 | 亚洲一区视频 | 99在线免费视频 | 久久久久国产一区二区三区 | 一级黄色淫片 | 最新国产视频 | 亚洲一区二区中文字幕 | 一区二区三区不卡视频 | 国产成人免费视频网站视频社区 | 国产精品免费大片 | 毛片网站在线观看 | 精品国产欧美一区二区三区不卡 | 99精品99久久久久久宅男 | 成人午夜高清 | 亚洲一区视频在线 | 日韩精品无码一区二区三区 | 欧美一级大片 | 亚洲不卡一| 亚洲一区精品在线 | 亚洲黄色网址视频 | 第一福利社区1024 | 91视频网址 | 国产精品av久久久久久久久久 | 国产一区二区三区在线看 | 欧美日韩在线一区 | 国产高清一区二区三区 | 日韩成人一区 | 免费观看一级特黄欧美大片 | 浮生影院免费观看中文版 | 日韩免费福利视频 | 在线播放一区二区三区 | www.4hu影院 | 欧美日韩国产综合在线 | 国产精品久久久久久久久 | 精品视频免费 | 欧美一区二区三区精品 | 精品久久九| 欧美精品一区二区三区在线 | 欧美成人精品一区二区男人看 | 国产精品久久久久久久岛一牛影视 | 亚洲国产一区二区三区, |