找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3763|回复: 2
收起左侧

基于单片机的红外防盗报警程序源码设计

[复制链接]
ID:319495 发表于 2018-4-30 18:09 | 显示全部楼层 |阅读模式
分享一个基于51单片机的人体红外防盗报警设计,模块接P1^6引脚上面的.
单片机源程序如下:
  1. #include <reg52.h>

  2. #define uchar unsigned char                // 以后unsigned char就可以用uchar代替
  3. #define uint  unsigned int                // 以后unsigned int 就可以用uint 代替

  4. sbit Module    = P1^6;                        // 安防模块
  5. sbit Buzzer    = P1^7;                        // 蜂鸣器
  6. sbit Key1      = P3^2;                        // 按键1,报警模式切换
  7. sbit Key2      = P3^3;                        // 按键2,布防/撤防切换
  8. sbit Key3      = P3^4;                        // 按键3,紧急报警
  9. sbit LedRed    = P2^0;                        // 红色led灯,报警指示灯
  10. sbit LedGreen  = P2^1;                        // 绿色led灯,布防/撤防指示灯
  11. sbit LedYellow = P2^2;                        // 黄色led灯,报警模式指示灯


  12. /*********************************************************/
  13. // 毫秒级的延时函数,time是要延时的毫秒数
  14. /*********************************************************/
  15. void DelayMs(uint time)
  16. {
  17.         uint i,j;
  18.         for(i=0;i<time;i++)
  19.                 for(j=0;j<112;j++);
  20. }

  21. /*********************************************************/
  22. // 等待所有按键释放
  23. /*********************************************************/
  24. void WaitKey()
  25. {
  26.         DelayMs(10);                                // 消除按键按下的抖动
  27.         while(Key1==0);                        // 等待按键1释放
  28.         while(Key2==0);                        // 等待按键2释放
  29.         while(Key3==0);                        // 等待按键3释放
  30.         DelayMs(10);                                // 消除按键松开的抖动
  31. }

  32. /*********************************************************/
  33. // 紧急报警
  34. /*********************************************************/
  35. void EmergencyAlarm()
  36. {
  37.         Buzzer=0;                                        // 启动蜂鸣器报警
  38.         while(1)
  39.         {
  40.                 LedRed=0;                        // 红灯亮
  41.                 LedGreen=0;                        // 绿灯亮
  42.                 LedYellow=0;                        // 黄灯亮
  43.                 DelayMs(150);                        // 延时150毫秒
  44.                 LedRed=1;                        // 红灯灭                        
  45.                 LedGreen=1;                        // 绿灯灭
  46.                 LedYellow=1;                        // 黄灯灭
  47.                 DelayMs(150);                        // 延时150毫秒
  48.         }
  49. }

  50. /*********************************************************/
  51. // 布防过程,正常是30秒左右
  52. /*********************************************************/
  53. uchar AnFang()
  54. {
  55.         uchar i,j;
  56.         LedGreen=0;                                        // 绿灯亮
  57.         WaitKey();                                        // 等待按键释放
  58.         for(i=0;i<60;i++)                                // 延时并扫描按键
  59.         {
  60.                 LedGreen=~LedGreen;                // 绿灯状态取反(亮灭交换)
  61.                 for(j=0;j<50;j++)
  62.                 {
  63.                         if(Key2==0)                        // 如果按下按键2
  64.                                 return 2;                        // 则返回2
  65.                         if(Key3==0)                        // 如果按下按键3
  66.                                 return 3;                        // 则返回3
  67.                         DelayMs(10);                        // 延时10毫秒
  68.                 }
  69.         }
  70.         return 0;                                                // 程序正常结束,返回0
  71. }
  72.         
  73. /*********************************************************/
  74. // 主函数
  75. /*********************************************************/
  76. void main(void)
  77. {
  78.         uint  i;
  79.         uchar ret;
  80.         Buzzer=0;                                                                // 蜂鸣器鸣叫

  81.         DelayMs(200);                                                        // 延时0.2秒
  82.         Buzzer=1;                                                                // 停止蜂鸣器
  83.         while(1)
  84.         {
  85.                 /* 按键1检测 */
  86.                 if(Key1==0)                                                // 如果按键1被按下                        
  87.                 {
  88.                         LedYellow=~LedYellow;                        // 黄色等状态取反
  89.                         WaitKey();                                        // 等待按键释放
  90.                 }
  91.                
  92.                 /* 按键2检测 */
  93.                 if(Key2==0)                                                // 如果按键2被按下                        
  94.                 {
  95.                         if(LedGreen==1)                                // 如果当前没有布置安防
  96.                         {
  97.                                 ret=AnFang();                                // 开始安防
  98.                                 if(ret==0)                                        // 如果返回0
  99.                                 {
  100.                                         LedGreen=0;                        // 绿灯亮,启动安防
  101.                                 }
  102.                                 if(ret==2)                                        // 如果返回2
  103.                                 {
  104.                                         LedGreen=1;                        // 绿灯灭,说明安防过程被取消
  105.                                         WaitKey();                        // 等待按键释放
  106.                                 }
  107.                                 if(ret==3)                                        // 如果返回3
  108.                                 {
  109.                                         EmergencyAlarm();                // 说明安防过程按下了紧急报警按键
  110.                                 }
  111.                         }
  112.                         else                                                        // 如果当前为安防状态
  113.                         {
  114.                                 LedGreen=1;                                // 绿灯灭,撤防
  115.                                 WaitKey();                                // 等待按键释放
  116.                         }
  117.                 }
  118.                
  119.                 /* 按键3检测 */
  120.                 if(Key3==0)                                                // 如果按键3被按下                        
  121.                 {        
  122.                         EmergencyAlarm();                                // 启动紧急报警
  123.                 }               
  124.                
  125.                 /* 安防检测 */
  126.                 if((LedGreen==0)&&(Module==1))                // 如果安防已启动并且检测到有人
  127.                 {
  128.                         // 短报警处理
  129.                         if(LedYellow==1)                                // 如果黄灯是灭的                                                               
  130.                         {
  131.                                 LedRed=0;                                // 红灯亮
  132.                                 Buzzer=0;                                        // 蜂鸣器响
  133.                                 for(i=0;i<400;i++)                        // 短报警并进行按键扫描
  134.                                 {
  135.                                         if(Key2==0)                        // 如果按键按键2
  136.                                         {
  137.                                                 LedGreen=1;                // 绿灯灭,表示撤防
  138.                                                 LedRed=1;                // 红灯灭
  139.                                                 Buzzer=1;                        // 蜂鸣器停止鸣叫
  140.                                                 WaitKey();                // 等待按键释放
  141.                                                 break;                        // 退出报警
  142.                                         }
  143.                                         DelayMs(10);                        // 延时10毫秒
  144.                                 }
  145.                                 LedRed=1;                                // 红灯灭
  146.                                 Buzzer=1;                                        // 蜂鸣器停止鸣叫
  147.                         }
  148.                         // 长报警处理
  149.                         else                                                                        
  150.                         {
  151.                                 LedRed=0;                                // 红灯亮
  152.                                 Buzzer=0;                                        // 蜂鸣器响
  153.                                 while(1)
  154.                                 {        
  155.                                         if(Key2==0)                        // 如果按键按键2
  156.                                         {
  157.                                                 LedGreen=1;                // 绿灯灭,表示撤防
  158.                                                 LedRed=1;                // 红灯灭
  159.                                                 Buzzer=1;                        // 蜂鸣器停止鸣叫
  160.                                                 WaitKey();                // 等待按键释放
  161.                                                 break;                        // 退出报警
  162.                                         }
  163.                                 }
  164.                         }
  165.                 }
  166.         }
  167. }
复制代码

所有资料51hei提供下载:
单片机程序.doc (31 KB, 下载次数: 38)
回复

使用道具 举报

ID:293762 发表于 2018-5-9 22:36 | 显示全部楼层
谢谢楼主的分享!认真学习。
回复

使用道具 举报

ID:438819 发表于 2018-12-3 22:53 | 显示全部楼层
谢谢楼主的分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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