找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2719|回复: 2
打印 上一主题 下一主题
收起左侧

单片机人体感应智能灯程序Proteus仿真图 烟雾和光照ADC0832转换

[复制链接]
跳转到指定楼层
楼主
51单片机制作的人体感应智能灯设计仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


Altium Designer画的PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. #include<reg52.h>
  2. #include "adc0832.h"
  3. #include "delay.h"
  4. #include<intrins.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int

  7. sbit Inf=P2^0;  //人体感应器
  8. sbit relay=P2^1; //继电器
  9. sbit beep=P2^2;  //蜂鸣器
  10. bit fag=0;
  11. bit Light=0;
  12. uchar L,S; //定义光照强度、烟雾
  13. uint num,time;//定义计时参数


  14. /******
  15. //系统初始化函数
  16. **********/
  17. void System_Init()
  18. {
  19.   Inf=0;
  20.   relay=1;
  21.   beep=1;
  22.   TMOD=0x10;//选择定时器1的方式1
  23.   TH1=(65536-45956)/256;//11.030Mhz,定时大概50ms溢出,一个指令1.088us,需计数45956次
  24.   TL1=(65536-45956)%256;
  25.   EA=1;//中断申请
  26.   TR1=0;//关闭定时器
  27.   ET1=1;//打通中断
  28. }

  29. /******
  30. //人体·感应控制
  31. ******/
  32. void Infare_RI()
  33. {
  34.   if((Inf==1)&&(Light==1))
  35.   {
  36.    fag=1;
  37.    TR1=1;//定时器
  38.    time=20;//感应到人新时间,20s
  39.   }
  40.   if(Inf==1)
  41.   {
  42.    time=20;//感应到人新时间,20s
  43.   }
  44.   if(fag==1)
  45.   {
  46.     relay=0;
  47.   }
  48.   else
  49.   {

  50.    TR1=0;
  51.    relay=1;
  52.   }

  53. }
  54. /***************
  55. 光照强度和烟雾传感器数值读取

  56. **************/
  57. void light_S()
  58. {
  59.   //光照强度读取
  60.   L=(ADC0832_read(0)*99)/255;
  61.   // 烟雾数值读取
  62.   S=(ADC0832_read(1)*99)/255;
  63.   //光强小于35%进入等待人来开灯
  64.   if(L<35)
  65.   {
  66.    Light=1;
  67.   }
  68.   if((L>60)&&(fag==0))//人不在光强大于60%就关灯
  69.   {
  70.    Light=0;
  71.    relay=1;
  72.    fag=0;
  73.    time=0;
  74.    TR1=0;
  75.   }
  76.   //人在光强大于90%就关灯
  77.    if((L>90)&&(fag==1))
  78.   {
  79.    Light=0;
  80.    relay=1;
  81.    fag=0;
  82.    time=0;
  83.    TR1=0;
  84.   }
  85.   //烟雾浓度大于20%就报警
  86.   if(S>20)
  87.   {
  88.    beep=0;
  89.    delay(500);
  90.    beep=1;
  91.    delay(500);
  92.   }
  93.   if(S<21)
  94.   {
  95.    beep=1;
  96.   }
  97. }

  98. //主函数
  99. void main()
  100. {
  101.         //系统初始化
  102.     System_Init();
  103.    while(1)
  104.    {
  105.      light_S();  //光强、烟雾
  106.          delay(100);  
  107.      Infare_RI();//人体·感应
  108.    }
  109. }

  110. //定时器50毫秒
  111. void interr_zd1()interrupt 3
  112. {
  113.   TH1=(65536-45956)/256;
  114.   TL1=(65536-45956)%256;
  115.   num++;
  116.   if((num==20)&&(time>0)){num=0;time--;}
  117.   if(time==0){TR1=0;fag=0;}//感应人离开关闭继电器
  118. }
复制代码

PCB Keil代码与Proteus仿真下载:
智能灯.7z (3.14 MB, 下载次数: 109)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:262 发表于 2022-4-15 02:27 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:668601 发表于 2024-10-23 22:16 | 只看该作者
谢谢UP的分享,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表