找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1956|回复: 0
收起左侧

单片机红外热释电传感器报警程序与Proteus仿真图

[复制链接]
ID:661888 发表于 2022-5-24 16:44 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif

单片机源程序如下:
  1. #include <reg52.h>           

  2. #define uchar unsigned char  
  3. #define uint  unsigned int   

  4. #define key_io P1

  5. uchar key_can;  

  6. sbit beep=P2^3;         
  7. sbit red=P2^2;      
  8. sbit green=P2^1;        
  9. sbit yellow=P2^0;        
  10. sbit hw=P1^3;      

  11. bit flag_300ms=0;
  12.    
  13. void key()
  14. {
  15.         static uchar key_new=0,key_old=0,key_value=0;
  16.         if(key_new == 0)      
  17.         {
  18.                 if((key_io&0x07)==0x07)
  19.                 key_value ++;
  20.                 else
  21.                 key_value=0;
  22.                 if(key_value>=5)   
  23.                 {
  24.                         key_value=0;
  25.                         key_new=1;   
  26.                 }
  27.         }
  28.         else
  29.         {
  30.                 if((key_io&0x07)!=0x07)   
  31.                 key_value ++;
  32.                 else
  33.                 key_value=0;
  34.                 if(key_value>=5)   
  35.                 {
  36.                         key_value=0;
  37.                         key_new=0;      
  38.                 }
  39.         }
  40.         key_can=20;
  41.         if((key_new==0)&&(key_old==1))
  42.         {
  43.                 switch(key_io&0x07)
  44.                 {
  45.                         case 0x06: key_can=1; break;      
  46.                         case 0x05: key_can=2; break;     
  47.                         case 0x03: key_can=3; break;      
  48.                 }
  49.         }           
  50.         key_old = key_new;   

  51. }

  52. void time_init()     
  53. {
  54.         EA=1;         
  55.         TMOD=0X01;      
  56.         ET0=1;         
  57.         TR0=1;         
  58. }
  59. uchar flag_alarm ;   
  60. uchar flag_bufang ;   
  61. uchar flag_bufang_en ;
  62. uint  flag_value;      
  63.      
  64. void hongwai_dis()
  65. {
  66.         if(flag_alarm==1)      
  67.         {
  68.                 red=~red;         
  69.                 beep=~beep;      
  70.         }   
  71.         if(flag_bufang_en==1)
  72.         {
  73.                 green=~green;      
  74.         }
  75.         if(flag_bufang==1)
  76.         {
  77.                 green=0;      
  78.                 if(hw==1)         
  79.                 {
  80.                         flag_alarm=1;   
  81.                 }
  82.         }
  83. }
  84.      
  85. void key_with()
  86. {
  87.         if(key_can==1)   
  88.         {
  89.                 flag_alarm=1;     
  90.         }
  91.         if(key_can==2)   
  92.         {
  93.                 flag_bufang_en=1;      
  94.         }
  95.         if(key_can==3)   
  96.         {
  97.                 flag_alarm=0;
  98.                 flag_bufang=0;
  99.                 flag_bufang_en=0;   
  100.                 flag_value=0;   
  101.                 P2=0xff;     
  102.         }           
  103. }
  104.    
  105. void main()
  106. {
  107.         time_init();
  108.         while(1)
  109.         {
  110.                 key();         
  111.                 yellow=~hw;   
  112.                 if(key_can<10)
  113.                 {
  114.                         key_with();   
  115.                 }
  116.                 if(flag_300ms==1)
  117.                 {
  118.                         flag_300ms=0;
  119.                         hongwai_dis();     
  120.                 }   
  121.         }
  122. }

  123. void time0_int() interrupt 1
  124. {   
  125.         static uint value;
  126.         TH0=0x3c;
  127.         TL0=0xb0;      
  128.         value++;
  129.         if(value%6==0)
  130.         {
  131.                 flag_300ms=1;
  132.         }
  133.         if(flag_bufang_en==1)
  134.         {
  135.                 flag_value ++;
  136.                 if(flag_value>=600)
  137.                 {
  138.                         flag_bufang=1;
  139.                         flag_bufang_en=0;
  140.                         flag_value=0;   
  141.                 }
  142.         }
  143. }
复制代码

Keil5代码与Proteus8.8仿真下载:
红外.zip (39.19 KB, 下载次数: 34)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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