⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dhbj.lst

📁 拨号防盗器报警器的系统方案及源程序代码.用的89c2051做控制器.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 135          {uchar g;
 136   1      P1=0xb6;delay(1);                                       /*数码管显示"三"*/
 137   1      if(P3_5==0)
 138   1      {delay(10);if(P3_5==0)
 139   2                              {P1=0x7f;m=0;data_flag=0;               /*按下OK键确认并点亮小数点*/
 140   3                              for(g=0;g<20;g++){DATA[g]=10;}
 141   3                              delay(500);                             /*同时DATA数组中全部写入10*/
 142   3                              while(1)
 143   3                              {
 144   4                              if(P3_4==0){delay(10);  /*按下UP键数码管作0-9递增显示*/
 145   5                                      if(P3_4==0){m++;if(m==10)m=0;P1=DATA_7SEG[m];delay(300);}
 146   5                                                      }
 147   4                              P1=DATA_7SEG[m];delay(1);/*若不按下UP键数码管也作0-9显示*/      
 148   4                              if(P3_5==0)
 149   4                                      {delay(10);
 150   5                                      if(P3_5==0)                     /*按下OK键显示的数据(号码)存入数组DATA中*/
 151   5                                      {DATA[data_flag]=m;data_flag++;P1=0x7f;delay(500);}
 152   5                                      }                                       /*按下OK键超过2秒则退出向数组DATA送入号码*/
 153   4                              if(P3_5==0){delay(2000);if(P3_5==0)break;}
 154   4                              }
 155   3      }
 156   2      }                                                                       /*数码管显示"三"*/
 157   1      F1:if(P3_5==0){delay(10);if(P3_5==0){P1=0xb6;delay(1);goto F1;}}
 158   1      }
 159          /***********************************************************************/
 160          /*---启动报警器进入警戒工作---*/
 161          void work()
 162          {       uchar h;
 163   1              P1=0xdf;                                                /*数码管左上角显示"1"*/
 164   1              delay(1);
 165   1      if(set==1)                                                      /*进入时间1循环*/
 166   1      {while(cnt_1<=X[0]*100+X[1]*10+X[2])
 167   2                      {
 168   3                      delay(1000);                    
 169   3                      cnt_1++;                                        /*计数器cnt_1累加*/     
 170   3                      if(set!=1){EX1=0;cnt_1=0;break;}
 171   3                      }                       /*如按下Set键,则退出此循环*/
 172   2      }
 173   1      else {EX1=0;PCON=0x00;}/*Set不为1,则关闭外中断1,退出待机状态*/
 174   1      if(set==1)
 175   1      {if(cnt_1>=X[0]*100+X[1]*10+X[2])
 176   2              {EX1=1;cnt_1=0;}        /*时间1到,打开外中断1,计数器归零*/
 177   2      /*进入待机。若有1秒以上开关动作,退出待机*/
 178   2      while(1)
 179   2      {PCON=0x01;if(f>=5){PCON=0x00;break;}}
C51 COMPILER V8.05a   DHBJ                                                                 02/20/2008 08:03:19 PAGE 4   

 180   2      }
 181   1      /*-----------------------------------------------------*/                                       
 182   1      EX1=0;                                  /*关闭外中断1*/
 183   1      if(set==1)                              /*进入时间2循环*/
 184   1      {while(cnt_2<=Y[0]*100+Y[1]*10+Y[2])
 185   2                      {
 186   3                      delay(1000);
 187   3                      cnt_2++;                /*计数器cnt_2累加*/
 188   3                      if(set!=1){cnt_2=0;break;}
 189   3                      }                               /*如按下Set键,则退出此循环*/
 190   2      }
 191   1      if(set==1)
 192   1      {
 193   2      bh();                                   /*时间2到,调用拨号子程序*/
 194   2      delay(3000);
 195   2      P3_7=0;//控制输出端为低
 196   2      for(h=0;h<60;h++)               /*发出60秒警音*/
 197   2      {               for(f=0;f<500;f++)
 198   3                      {f++;
 199   4                      P3_1=!P3_1;P1=0x5f;
 200   4                      delay(1);
 201   4                      }
 202   3              P3_1=0;P1=0x7f;delay(500);
 203   3      }
 204   2      P3_7=1;//控制输出端恢复高
 205   2      cnt_1=0;cnt_2=0;                /*有关计数器、端口回到初始状态*/
 206   2      P3_0=0;P3_1=0;P1_7=1;
 207   2      for(f=0;f<3;f++)delay(60000);/*关闭3分钟,以便进行电话报警*/
 208   2      }
 209   1      }
 210          /********************************************************************/
 211          /*---拨号---*/
 212          void bh()
 213          {data_flag=0;                           /*电话号码计数器(二十位)归零*/
 214   1              P3_0=1;                                 /*接通线路*/
 215   1              P1_7=0;                                 /*数码管小数点亮*/
 216   1              delay(1000);
 217   1      while(DATA[data_flag]<10)       /*号码小于10进入循环拨号状态*/
 218   1      {
 219   2              if(DATA[data_flag]==0)  /*若号码为0*/
 220   2              {TR0=1;                                 /*启动T0定时器*/
 221   3              if(n==20){data_flag++;  /*进行20次中断,产生10个脉冲*/
 222   4                                      n=0;TR0=0;
 223   4                                      P3_0=1;P1_7=0;
 224   4                                      delay(500);
 225   4                                      }
 226   3              }
 227   2              
 228   2              if(DATA[data_flag]>0)           /*若号码>0*/
 229   2              {TR0=1;                                         /*启动T0定时器*/
 230   3              if(n==((DATA[data_flag])*2))/*进行号码x2次中断,产生号码个脉冲*/
 231   3                              {data_flag++;
 232   4                                      n=0;TR0=0;
 233   4                                      P3_0=1;P1_7=0;
 234   4                                      delay(500);
 235   4                              }
 236   3              }
 237   2      }
 238   1      TR0=0;
 239   1      }       
 240          /*********************************************************************/
 241          /*--主函数--*/
C51 COMPILER V8.05a   DHBJ                                                                 02/20/2008 08:03:19 PAGE 5   

 242          void main()
 243          {
 244   1      init_timer();                                   /*定时器T0初始化*/
 245   1      EA=1;EX0=1;                                             /*开总中断,开外中断0*/
 246   1      P3_0=0;                                                 /*关闭线路(挂机)*/
 247   1      P3_1=0; 
 248   1      while(1)                                                        /*无限循环*/
 249   1      {
 250   2      switch(set)                                             /*根据Set标志散转*/
 251   2      {
 252   3      case 0:stop();break;                    /*关机*/
 253   3      case 1:work();break;                    /*警戒工作*/
 254   3      case 2:in_time1();break;                /*输入时间t1*/
 255   3      case 3:in_time2();break;                /*输入时间t2*/
 256   3      case 4:in_data();break;                 /*输入电话号码*/
 257   3      default:break;
 258   3      } 
 259   2              if(flag!=0x55)                          /*若flag标志变化,数码管显示E(错误)*/
 260   2               {P1=0x86;delay(1);}
 261   2      }
 262   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1179    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     37       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -