找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)紅外熱釋電傳感器報(bào)警程序與Proteus仿真圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  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. }
復(fù)制代碼

Keil5代碼與Proteus8.8仿真下載:
紅外.zip (39.19 KB, 下載次數(shù): 35)

評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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