找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機智能燈光系統(tǒng)程序+Proteus仿真電路圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:841372 發(fā)表于 2020-11-10 14:06 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
智能過道照明系統(tǒng)主要功能
⑴系統(tǒng)設(shè)有2個按鍵功能按鍵(模式切換鍵和開關(guān)鍵),和一個單片機復(fù)位按鍵;
⑵系統(tǒng)設(shè)有1個電源指示燈和5個狀態(tài)指示燈,分別為:光照檢測信號指示燈(光線暗時指示燈亮),紅外熱釋電傳感器信號指示燈(檢測到人體信號指示燈亮),自動模式繼電器工作狀態(tài)指示燈(自動模式下,繼電器接通,指示燈亮),模式指示燈(手動模式時指示燈亮),手動模式繼電器工作狀態(tài)指示燈(手動模式下,繼電器接通,指示燈亮);
⑶系統(tǒng)設(shè)置了兩種工作模式:自動工作模式和手動工作模式,開機默認為自動模式,可通過“模式切換鍵”來實現(xiàn)模式切換;
⑷在自動模式下,繼電器接通時間是延遲變量來控制的,延遲變量>0,繼電器接通,延遲變量=0,繼電器斷開。延遲變量由檢測到的信號控制,在檢測到光線暗時,并且檢測到有人時,延遲變量就等于設(shè)置的延遲時間,從而實現(xiàn)在人走后一段時間,燈泡自動熄滅,節(jié)能的目的;
⑸設(shè)置的延遲時間可以修改的,在自動模式下,長按“開關(guān)鍵”,每5秒鐘,延遲時間加10秒,并且5個狀態(tài)指示燈會顯示出來,每5秒鐘從左到右亮一個指示燈,延遲時間最大為50秒。
⑹在手動模式下時,可通過“開關(guān)鍵”控制繼電器開關(guān);

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


單片機源程序如下:
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit renti=P2^1;                 //定義人感
  6. sbit guangming=P2^0;         //定義光照檢測腳
  7. sbit jdq=P2^7;                   //繼電器
  8. sbit L1=P2^6;                   //定義指示燈
  9. sbit L2=P2^5;
  10. sbit L3=P2^4;
  11. sbit L4=P2^3;
  12. sbit L5=P2^2;
  13. sbit K1=P1^0;                  //定義開關(guān)
  14. sbit K2=P1^1;                          
  15. int count;rt,gm,qd,shijian,sj=10,moshi=1,shijian1,count1,shezhi=0;         //變量
  16. void qudou(void)     //去抖延遲                                                                                  
  17. { int i;
  18.    for(i=0;i<2400;i++);
  19. }
  20. void key()                            //按鍵掃描
  21. {if(K1==0)                 //去抖   
  22.    { qudou();
  23.      if(K1==0)                 //模式按鍵按下
  24.     {moshi++;                 //moshi=1是自動,=0是手動
  25.          if(moshi>=2) moshi=0;
  26.          jdq=1;
  27.     }while(K1==0);
  28.         }
  29. if(moshi==1)          //在自動模式
  30. {if(K2==0)                //開關(guān)按鍵按下   
  31.    { qudou();
  32.      if(K2==0)
  33.     {shezhi=1;                 //開關(guān)按鍵長按可以設(shè)置延遲時間,具體看中斷
  34.          shijian1=0;
  35.     }while(K2==0);
  36.         }
  37.         else shezhi=0;                   //沒按開關(guān)按鍵就退出設(shè)置
  38.   }
  39. }
  40. void rentijiance()                  //紅外人體檢測子程序
  41. { if(renti==0) rt=1;          //檢測到?jīng)]人體時,傳感器發(fā)送低電平給單片機,rt就為1        rt=0(有人),rt=1(無人)
  42.    else rt=0;
  43. }
  44. void guangzhaoqiangdu()           //光照強度子程序
  45. { if(guangming==0) gm=1;          //檢測到光線亮時,傳感器發(fā)送低電平給單片機,gm就為1  gm=0(光照暗),gm=1(光照亮)
  46.    else gm=0;
  47. }               
  48. void panduan()                        //判斷
  49. {if(moshi==1)
  50. {if(gm==0)
  51.   {if(rt==0)
  52.    shijian=sj;
  53.    else
  54.    shijian=shijian;}
  55.   else
  56.   shijian=shijian;
  57. }
  58. else
  59. shijian=0;
  60. }
  61. void zhishideng()                 //指示燈函數(shù)
  62. {L5=gm;
  63. L4=rt;
  64. if(moshi==1)
  65. L3=jdq;
  66. else
  67. L3=1;
  68. L2=moshi;
  69. if(moshi==0)
  70. L1=jdq;
  71. else
  72. L1=1;
  73. }
  74. void qudong()                           //繼電器驅(qū)動
  75. {if(moshi==1)                    //自動模式下
  76. {if(shijian>0) jdq=0;         //根據(jù)延遲時間控制繼電器
  77.   else jdq=1;
  78. }
  79. else                                        //手動模式下
  80. {if(K2==0)                   
  81.    { qudou();
  82.      if(K2==0)                         //開下開關(guān)按鍵控制繼電器的開關(guān)
  83.     {jdq=!jdq;
  84.     }while(K2==0);
  85.         }
  86. }
  87. }
  88. void main()                                         //主程序
  89. {      TMOD=0x1;                     //中斷開啟
  90.        TH0=0xb1;
  91.        TL0=0xe0;
  92.        TR0=1;      
  93.        ET0=1;                                                        
  94.        EA=1;                     
  95.        while(1)                       //無線循環(huán)
  96.        {key();                                //按鍵掃描
  97.             rentijiance();                //人體
  98.             guangzhaoqiangdu();        //光照
  99.                 panduan();                         //判斷
  100.                 zhishideng();                 //指示燈
  101.                 qudong();                        //驅(qū)動
  102.            }
  103. }
  104. void time0(void) interrupt 1          //中斷
  105. {     TH0=0xb1;                                                  
  106.       TL0=0xe0;
  107.      if(shijian>0)                  //用來計時延遲
  108.          { count++;
  109.       if(count==50)  
  110.         { count=0;
  111.               shijian--;
  112.         }
  113.          }

  114.           if(shezhi==1)                 //在自動模式下用來設(shè)置延遲時間
  115.           {count1++;
  116.       if(count1==50)  
  117.         { count1=0;
  118.               shijian1++;
  119.                   if(shijian1<=5)         //長按5秒,延遲時間為10s,并有1個指示燈顯示
  120.                   {sj=10; L5=0;L4=1;L3=1;L2=1;L1=1;}
  121.                   else if(shijian1<=10)        //長按10秒,延遲時間為20s,并有2個指示燈顯示
  122.                   {sj=20; L5=0;L4=0;L3=1;L2=1;L1=1;}
  123.                   else if(shijian1<=15)        //長按15秒,延遲時間為30s,并有3個指示燈顯示
  124.                   {sj=30; L5=0;L4=0;L3=0;L2=1;L1=1;}
  125.                   else if(shijian1<=20)        //長按20秒,延遲時間為40s,并有4個指示燈顯示
  126.                   {sj=40; L5=0;L4=0;L3=0;L2=0;L1=1;}
  127.                   else if(shijian1>25)        //長按25秒,延遲時間為50s,并有5個指示燈顯示
  128.                   {sj=50; L5=0;L4=0;L3=0;L2=0;L1=0;}

  129.         }
  130.            }
  131.          
  132. }
復(fù)制代碼

所有資料51hei提供下載:
智能燈光.rar (53.66 KB, 下載次數(shù): 146)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:666063 發(fā)表于 2021-1-4 11:21 | 只看該作者
請問有沒有相關(guān)文檔
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表