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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機智能家居系統設計 含程序源碼Proteus仿真原理圖

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

所用到的知識點:
1、8位共陰極數碼管               
2、4x4矩陣鍵盤
3、液晶顯示屏LCD1602
4、大型液晶顯示屏 LCD12864
5、實時時鐘芯片 DS1302
6、數模轉換芯片 ADC0832
7、利用I2C進行的數模轉換芯片 PCF8591
8、溫度傳感器 DS18B20
9、壓力傳感器 MAX4115
10、光敏電阻 LDR
11、電機驅動電路
12、三態輸出移位緩存器 74HC595
13、外部中斷及定時器
14、雙機通訊
15、片機與上位機通訊 COMPIM

使用說明:
1、用戶輸入正確的密碼,打開門禁之后,LED屏進入歡迎界面,
    居室內各電器自動啟動;
2、密碼鍵盤支持刪除、清空、提示功能;
3、上方的LED屏實時顯示萬年歷,包括年月日,周,時分秒;
4、下方的LED屏實時顯示各傳感器檢測到的狀態,
        第一行依次顯示當前的溫度、煙霧濃度、光照強度;
5、當溫度高于40時,將會自動打開風扇,
    而當溫度高于50度時,將會自動報警;
6、當居室內光照強度太低時,自動打開照明系統,
    當居室內光照強度太高時,自動關上窗簾;
7、當室內煙霧濃度,超過20,自動鳴笛報警,警報燈閃爍;
8、用戶也可以手動打開或者關上窗簾;
9、家居系統里裝有體重秤,可以隨時測量體重;
10、網絡模塊將最新的溫度、光照強度、煙霧濃度發送到上位機;


一、首先,進入系統會顯示歡迎界面,并輸入密碼;
      密碼輸入錯誤:會顯示“請重新輸入”
      密碼輸入正確,會顯示“”歡迎”

二、密碼輸入正確之后
       上面的LED顯示當前的時間。下面的LED實時顯示各傳感器檢測到的狀態,第一行依次顯示當前的溫度、煙霧濃度、光照強度;如果是溫度、光照強度,第二行會顯示“worming”+數字,超過這個數字會自動報警;如果是光照強度。第二行會顯示“NOMNAL”,”TOO HIGH”,”TOO LOW”,分別表示正常,太高,太低。

三、溫度傳感器模塊,及煙霧檢測模塊
       超過40度時,風扇慢慢打開。
       超過50度時,自動報警。
       煙霧濃度超過20時,自動報警。

四、光照強度檢測裝置
       光照太低時,自動打開照明系統
       光照太高時。自動關上窗簾
       另外,窗簾也可以手動打開、關閉。
   
五、體重秤模塊
       檢測到當前溫度,并顯示出來。

六、上位機
       因為單片機有了雙機通信,甲機已經接受了乙機的數據,沒有辦法再接收上位機發送的數據,所以上位機只做了接收功能。
       單片機每秒一次,把當前的溫度,煙霧、光強數據發送到上位機。


單片機源程序如下:
  1. #include "main.h"
  2. #include "ADC0832.h"
  3. #include "DS18B20.h"
  4. #include "LCD1602.h"
  5. #include "74HC595.h"
  6. #include "PCF8591.h"

  7. void main()
  8. {
  9.         time_init();
  10.         fan=0;
  11.         Pcf8591SendByte(0);      //使用通道0
  12.         wendu=get_wendu();
  13.         Init1602();                          //調用初始化顯示函數
  14.         LCD_Write_String(0,4,"WELCOME TO");
  15.         LCD_Write_String(1,2,"My Smart Home");

  16.         while(1)
  17.         {
  18.                 if(flag==1)
  19.                         break;
  20.         };
  21.         TR0=1;
  22.         wendu=get_wendu();                  //初始化時調用溫度讀取函數 防止開機85°C
  23.        
  24.         guangqiang=getGuangqiang();                                //讀取光照值
  25.         yanwu=getYanwu();                                //讀取天然氣值*/
  26.        
  27.        
  28.         PW1        = 1;
  29.         PW2 = 1;       
  30.        
  31.         Puts_to_SerialPort("溫度        煙霧        光強\r\n");
  32.         while(1)
  33.         {
  34.                 tizhong = Pcf8591ReadByte()/2;
  35.                 SendTo595(table[tizhong/10]+(table[tizhong%10]<<4));
  36.                 delay1ms(1);
  37.                 times++;
  38.                 if(times==300)
  39.                 {
  40.                         times=0;
  41.                 }
  42.                 if(times<=100)
  43.                 {
  44.                         if(times==1)
  45.                                         write_com(0x01);//清屏
  46.                         LCD_Write_String(0,0,"WenDu:");  
  47.                         LCD_Write_Char(0,10,wendu/10,2) ;
  48.                         write_data('.');
  49.                         LCD_Write_Char(0,13,wendu%10,1) ;
  50.                        
  51.                         LCD_Write_String(1,0,"Worming:");
  52.                         LCD_Write_Char(1,10,set_wdHH,2) ;
  53.                 }
  54.                 else if(times>100&×<=200)
  55.                 {
  56.                         if(times==101)
  57.                                         write_com(0x01);//清屏
  58.                         LCD_Write_String(0,0,"YanWu:");
  59.                         LCD_Write_Char(0,11,yanwu,2) ;
  60.                         LCD_Write_String(1,0,"Worming:");
  61.                         LCD_Write_Char(1,10,set_yanwu,2) ;
  62.                 }
  63.                 else if(times>200)
  64.                 {
  65.                         if(times==201)
  66.                                         write_com(0x01);//清屏
  67.                         LCD_Write_String(0,0,"GuangZhao:");  
  68.                         LCD_Write_Char(0,11,guangqiang,2) ;
  69.                         if(guangqiang>=set_lightL&&guangqiang<=set_lightH)
  70.                                         LCD_Write_String(1,5,"NORMAL");
  71.                         else if(guangqiang<=set_lightL)
  72.                                         LCD_Write_String(1,5,"TOO LOW");
  73.                         else
  74.                                         LCD_Write_String(1,5,"TOO HIGH");
  75.                 }
  76.         }
  77. }
  78. void delay(uchar i)
  79. {
  80.          for(i;i>0;i--);
  81. }


  82. void delay_ms(uint cnt)
  83. {
  84.         unsigned int x;
  85.         for( ; cnt>0; cnt--)
  86.         {
  87.                 for(x=500; x>0; x--);
  88.         }
  89. }

  90. void delay1ms(int n)
  91. {
  92.          unsigned char i;
  93.          for(i=124*n;i>0;i--);  //延時124*8+10=1002us
  94. }

  95. void Putc_to_SerialPort(uchar c)
  96. {  
  97.         SBUF=c;  
  98.         while(TI==0);  
  99.         TI=0;
  100. }
  101. void Puts_to_SerialPort(uchar *s)
  102. {  
  103.         while(*s!='\0')  
  104.         {   
  105.                 Putc_to_SerialPort(*s);   
  106.                 s++;   
  107.                 WDdelay(5);  
  108.         }
  109. }
  110. /*************定時器0初始化程序***************/
  111. void time_init()          
  112. {

  113.         TMOD=0X21; //定時器0、工作方式1 ,T2工作方式2
  114.         TH0=(65536-1000)/256;
  115.         TL0=(65536-1000)%256;
  116.         EA=1; //開總中斷
  117.         ET0=1; //開定時器0中斷
  118.         TR0=0; //允許定時器0定時
  119.         SCON=0x50;                //串口模式1,允許接收
  120.         PCON=0x00;                //波特率不倍增
  121.         TH1=0xfd;
  122.         TL1=0xfd;
  123.         TI=RI=0;
  124.         TR1=1;
  125.         ES=1;
  126.        
  127.         EX0=1;
  128.         IT0=1;
  129.         IP=0x02;
  130. }
  131. void check()
  132. {
  133.         if(wendu/10>=set_wdH)
  134.                 fan=1;
  135.         else
  136.                 fan=0;       
  137.         if(guangqiang<=set_lightL)
  138.                 DENG=0;
  139.         else
  140.                 DENG=1;
  141.        
  142.         if(yanwu>=set_yanwu||wendu/10>=set_wdHH&&wendu/10<=60)
  143.         {
  144.                 speaker=0;
  145.                 BaoJing=!BaoJing;
  146.         }
  147.         else
  148.                 speaker=BaoJing=1;

  149.         if(guangqiang>=set_lightH&&is_cl==1)
  150.         {
  151.                 PW1=1;
  152.                 PW2=0;
  153.                 delay_ms(1000);
  154.                 PW1=1;
  155.                 PW2=1;
  156.                 is_cl=0;
  157.         }
  158.         if(guangqiang<=set_lightH)
  159.                 is_cl=1;
  160. }
  161. void time0_inter() interrupt 1
  162. {       

  163.         TH0 = (65536-1000)/256;
  164.         TL0 = (65536-1000)%256;     // 50ms         12M
  165.        
  166.        
  167.        
  168.         count++;
  169.         if(count>80)
  170.         {
  171.                 count = 0;
  172.                 ctimes++;
  173.                 wendu=get_wendu();          
  174.                 guangqiang=getGuangqiang();                               
  175.                 yanwu=getYanwu();                               
  176.                 check();       
  177.                 tizhong = Pcf8591ReadByte()/2;
  178.         }
  179.         if(ctimes==15)
  180.         {
  181.                 ctimes=0;
  182.                 Putc_to_SerialPort(' ');
  183.                 Putc_to_SerialPort(wendu/100+'0');
  184.                 Putc_to_SerialPort(wendu/10%10+'0');
  185.                 Puts_to_SerialPort("         ");
  186.                 Putc_to_SerialPort(yanwu/10+'0');
  187.                 Putc_to_SerialPort(yanwu%10+'0');
  188.                 Puts_to_SerialPort("         ");
  189.                 Putc_to_SerialPort(guangqiang/10+'0');
  190.                 Putc_to_SerialPort(guangqiang%10+'0');
  191.                 Puts_to_SerialPort("\r\n");
  192.         }
  193.        
  194. }

  195. void inter_0() interrupt 0
  196. {
  197.         PW1        = 1;
  198.         PW2 = 1;       
  199.         if(KEY1==0){
  200.                 delay(10);
  201.                 while(!KEY1);
  202.                 //電機逆時針轉動,模擬窗簾打開
  203.                 PW1        = 1;
  204.                 PW2 = 0;
  205.                 delay_ms(1000);
  206.                 //電機停止轉動,窗簾打開完成
  207.                 PW1        = 1;
  208.                 PW2 = 1;       
  209.         }
  210.         if(KEY2==0){
  211.                 delay(10);
  212.                 while(!KEY2);
  213.                 //電機順時針轉動,模擬窗簾關閉
  214.                 PW1        = 0;
  215.                 PW2 = 1;
  216.                 delay_ms(1000);
  217.                 //電機停止轉動,窗簾關閉完成
  218.                 PW1        = 1;
  219.                 PW2 = 1;               
  220.         }
  221.         KEY1=1;
  222.         KEY2=1;
  223. }


  224. void Serial_INT() interrupt        4
  225. {
  226.         if(RI)
  227.         {
  228.                 RI=0;
  229.                 if(SBUF==1)
  230.                 {
  231.                         flag=1;
  232.                 }

  233.         }
  234. }       
  235.        
復制代碼

Keil5代碼與Proteus8.8仿真下載:
智能家居.zip (553.03 KB, 下載次數: 253)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:309376 發表于 2022-5-20 17:30 | 只看該作者
學習一下,感覺有用
回復

使用道具 舉報

板凳
ID:944426 發表于 2022-5-22 21:08 來自手機 | 只看該作者
樓主 仿真圖是不是少了些東西
回復

使用道具 舉報

地板
ID:368810 發表于 2022-5-23 09:59 | 只看該作者
labview上位機不在壓縮包里嗎
回復

使用道具 舉報

5#
ID:1087378 發表于 2024-4-9 20:12 | 只看該作者
仿真圖根本沒效果哇
回復

使用道具 舉報

6#
ID:262 發表于 2024-4-9 21:57 | 只看該作者
Pr1mo 發表于 2024-4-9 20:12
仿真圖根本沒效果哇

打開仿真后需要重新選擇你的hex文件所在的本地目錄,然后運行 輸入密a0867128,對應源碼中的uint mima[8]={10,0,8,6,7,1,2,8}; 你看我弄的視頻和仿真

51hei.gif (214.15 KB, 下載次數: 50)

51hei.gif

智能家居.7z

147.37 KB, 下載次數: 14, 下載積分: 黑幣 -5

回復

使用道具 舉報

7#
ID:88256 發表于 2024-4-9 22:00 | 只看該作者
Pr1mo 發表于 2024-4-9 20:12
仿真圖根本沒效果哇

不是沒有效果,而是單片機的程序來源需要重新設定。
回復

使用道具 舉報

8#
ID:965040 發表于 2024-4-10 10:51 | 只看該作者
兩個壓縮包都下載了,評論區的時間顯示正常,密碼輸入正常,別的沒效果啊
回復

使用道具 舉報

9#
ID:160725 發表于 2024-7-6 15:29 | 只看該作者
這個算是有難度的資料,初學者升級版
回復

使用道具 舉報

10#
ID:908758 發表于 2024-8-20 10:35 | 只看該作者
heicad 發表于 2024-4-9 21:57
打開仿真后需要重新選擇你的hex文件所在的本地目錄,然后運行 輸入密a0867128,對應源碼中的uint mima[8]={ ...

大佬除了這個密碼鎖功能,其他功能如何實現了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久丁香| 国产精品一区一区三区 | 国产国产精品久久久久 | 久久免费观看一级毛片 | 99久久中文字幕三级久久日本 | 精品国产视频 | 国产精品99999999 | 国产美女永久免费无遮挡 | 欧美一区二区三区四区在线 | 伊人激情综合网 | 日韩欧美一区二区三区四区 | 中文字幕欧美日韩一区 | 中文字幕乱码一区二区三区 | 成人精品国产一区二区4080 | 91玖玖| 一区视频 | 成人黄色av网址 | 波霸ol一区二区 | 久久久久亚洲av毛片大全 | 2022精品国偷自产免费观看 | 国产日韩欧美在线观看 | 涩涩视频在线看 | 国产精品99久久久久久动医院 | 九九热精品在线 | 亚洲精品在线播放 | 99热在线播放| 激情欧美一区二区三区中文字幕 | 久久久国产一区二区三区四区小说 | 九一视频在线观看 | 久草网址 | 国产日韩欧美 | 日韩免费视频一区二区 | 99精品久久久久久久 | 日韩av成人 | 亚洲成人av | 欧美一级免费看 | 99re6在线视频 | 黄色综合| 黄频视频 | 国内精品久久久久久久影视简单 | 欧美久久久久久久久 |