找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机的智能声控灯系统程序设计

[复制链接]
跳转到指定楼层
楼主
ID:537793 发表于 2019-5-14 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. sbit Ji_D_Qi = P1^0;           //继电器接口
  2. sbit Rsd     = P1^1;           //红外热释电接口
  3. sbit Led     = P1^2;           //红外热释电信号指示接口
  4. sbit Light   = P1^3;           //光敏电阻接口
  5. sbit shengyin= P1^4;

  6. #define TIMEMIN  6      //宏定义 检测到一次吸合2分钟
  7. sbit bufang=P2^0;       //布防按键
  8. sbit beep = P2^1;              //蜂鸣器定义
  9. sbit green = P2^5;           //绿色发光二极管定义
  10. sbit yellow = P2^4;           //黄色发光二极管定义
  11. sbit hw    = P2^6;           //红外热释传感器定义
  12. bit flag_300ms = 0;

  13. uchar flag_alarm ;                 //报警标志位
  14. uchar flag_bufang ;                //布防标志位
  15. uchar flag_bufang_en ;             //布防标志位使能
  16. uint  flag_value,flag_value2;      //用做定时器的变量
  17. uchar flag_deng_en ;               //灯标志位使能

  18. /***定时器0初始化程序***/
  19. void time_init()          
  20. {
  21.         EA   = 1;                   //开总中断
  22.         TMOD = 0X01;          //定时器0工作方式1
  23.         ET0  = 1;                  //开定时器0中断
  24.         TR0  = 1;                  //允许定时器0定时
  25. }

  26. /***红外报警布防***/          
  27. void hongwai_dis()
  28. {
  29.         if(flag_alarm == 1)           //报警
  30.         {
  31.                 beep = ~beep;               //蜂鸣器报警
  32.         }       
  33.         if(flag_bufang_en == 1) //确认开始布防
  34.         {
  35.                 green = ~green;           //绿灯闪
  36.                        
  37.         }  
  38.         if(flag_bufang == 1)   //确认布防
  39.         {
  40.                 green = 0;           //延时布防成功 绿灯长亮
  41.                 if(hw == 1)                //有体感应时,红外有输出
  42.                 {
  43.                         flag_alarm = 1;       
  44.                 }
  45.         }

  46. }

  47. /***主函数***/
  48. void main(void)
  49. {
  50.         time_init();   // 定时器初始化程序
  51.         while(1)
  52.         {         
  53.             yellow = ~hw;                 //黄灯为红外热释电指示灯 有输出就亮黄灯
  54.                 if(bufang==0)          //判断按键是否按下
  55.                 {
  56.                   DelayMs(50);        //延时
  57.                   if(bufang==0)        flag_bufang_en = 1;
  58.                   
  59.                 }
  60.                 if(flag_300ms == 1)
  61.                 {
  62.                         flag_300ms = 0;
  63.                         hongwai_dis();           //红外报警函数
  64.                 }       
  65.                 if(Rsd == 1)Led = 0;    //检测到有人,热释电为1,led发光
  66.                 else Led = 1;                   //否则不发光
  67.                 if((Rsd == 1 && Light == 0)||(Light == 0&&shengyin == 0))
  68. //如果检测到有人并且再晚上,或者再晚上的时候有声音
  69.                 {
  70.                         Ji_D_Qi = 0;          //继电器吸合
  71.                         flag_deng_en=1;
  72.                 }
  73.                
  74.         }
  75. }





  76. /***定时器0中断服务程序  布防时间和亮灯时间***/
  77. void time0_int() interrupt 1
  78. {       
  79.         static uint value;
  80.         TH0 = 0x3c;
  81.         TL0 = 0xb0;              // 50ms          
  82.         value ++;                 //计数增加
  83.         if(value % 6 == 0)         //  计数6次的时候
  84.         {      
  85.                 flag_300ms = 1;          //  就是300ms,
  86.         }
  87.         if(flag_bufang_en == 1)
  88.         {
  89.                 flag_value ++;
  90.                 if(flag_value >= 600)  //布防时间30秒
  91.                 {
  92.                         flag_bufang = 1;
  93.                         flag_bufang_en = 0;
  94.                         flag_value = 0;       
  95.                 }
  96.         }
  97.         if(flag_deng_en == 1)
  98.         {
  99.                 flag_value2 ++;
  100.                 if(flag_value2 >= 2400)  //亮灯时间2分钟
  101.                 {
  102.                         Ji_D_Qi = 1;    //关闭继电器
  103.                         flag_deng_en = 0;
  104.                         flag_value2 = 0;       
  105.                 }
  106.         }
  107. }


  108. 延时

  109. #include "std_for_wym.h"

  110. void DelayMs(unsigned int z)
  111. {
  112.    unsigned int x;
  113.    for(;z>0;z--)
  114.      for(x=110;x>0;x--);
  115. }
复制代码


程序代码.docx

17.8 KB, 下载次数: 24, 下载积分: 黑币 -5

基于单片机智能声控灯系统设计

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

使用道具 举报

沙发
ID:652994 发表于 2020-2-14 22:26 | 只看该作者
请问有完整程序吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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