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

📄 wxbj.lst

📁 16路无线防盗报警器,无线部分由VD5026/VD2027编码发射和接收AT89C2051进行防盗报警.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 300   1      P2=act[m];
 301   1      }
 302          
 303          /****************************************/
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 6   

 304          void dis_adjT2_st(uchar m) //显示T3调整及设定
 305          {
 306   1      switch(m)
 307   1      {case 0:{P0=SEG7[T2min_st%10];}break;
 308   2      case 1:{P0=SEG7[T2min_st/10];}break;
 309   2      case 2:{P0=SEG7[T2hou_st%10];}break;
 310   2      case 3:{P0=SEG7[T2hou_st/10];}break;
 311   2      case 4:{P0=0x00;}break;
 312   2      case 5:{P0=0x00;}break;
 313   2      case 6:{P0=SEG7[3];}break;
 314   2      case 7:{P0=0x31;}break;
 315   2      default:break;
 316   2      }
 317   1      if(!T2_startflag) P0_7=1;
 318   1      else P0_7=0;
 319   1      P2=act[m];
 320   1      }
 321          
 322          /**************************************/
 323          void dis_adjT2_end(uchar m) //显示T4调整及设定
 324          {
 325   1      switch(m)
 326   1      {case 0:{P0=SEG7[T2min_end%10];}break;
 327   2      case 1:{P0=SEG7[T2min_end/10];}break;
 328   2      case 2:{P0=SEG7[T2hou_end%10];}break;
 329   2      case 3:{P0=SEG7[T2hou_end/10];}break;
 330   2      case 4:{P0=0x00;}break;
 331   2      case 5:{P0=0x00;}break;
 332   2      case 6:{P0=SEG7[4];}break;
 333   2      case 7:{P0=0x31;}break;
 334   2      default:break;
 335   2      }
 336   1      if(!T2_endflag) P0_7=1;
 337   1      else P0_7=0;
 338   1      P2=act[m];
 339   1      }
 340          
 341          /***************************************/
 342          void dis_adjALMtime(uchar m) // 显示报警时间调整1~59及设定
 343          {
 344   1      switch(m)
 345   1      {case 0:{P0=SEG7[ALMmin%10];}break;
 346   2      case 1:{P0=SEG7[ALMmin/10];}break;
 347   2      case 2:{P0=0x00;}break;
 348   2      case 3:{P0=0x00;}break;
 349   2      case 4:{P0=0x00;}break;
 350   2      case 5:{P0=0x00;}break;
 351   2      case 6:{P0=0X38;}break;
 352   2      case 7:{P0=0x77;}break;
 353   2      default:break;
 354   2      }
 355   1      P0_7=1;
 356   1      P2=act[m];
 357   1      }
 358          
 359          /************************************/
 360          /*时、分、秒计时单元转换*/
 361          void conv()
 362          {
 363   1              if(deda<=5)d_05s=0;
 364   1                      else d_05s=1;
 365   1              if(deda>=10){sec++;deda=0;}
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 7   

 366   1      
 367   1              if(sec>=60){min++;sec=0;if(ALMstart)ALMmin--;}//若报警标志启动,则报警时间递
 368   1      //减
 369   1              if(ALMmin==0){ALMstart=0;rdflag=0;}// 若报警时间减为0,则关闭报警标志
 370   1              
 371   1              if(min>=60){hou++;min=0;}
 372   1              if(hou>=24){day++;hou=0;}
 373   1              switch(mon)
 374   1      {case 1:if(day>31){mon++;day=1;}break;// 万年历计算
 375   2      case 2:if(day>28){mon++;day=1;}break;
 376   2      case 3:if(day>31){mon++;day=1;}break;
 377   2      case 4:if(day>30){mon++;day=1;}break;
 378   2      case 5:if(day>31){mon++;day=1;}break;
 379   2      case 6:if(day>30){mon++;day=1;}break;
 380   2      case 7:if(day>31){mon++;day=1;}break;
 381   2      case 8:if(day>31){mon++;day=1;}break;
 382   2      case 9:if(day>30){mon++;day=1;}break;
 383   2      case 10:if(day>31){mon++;day=1;}break;
 384   2      case 11:if(day>30){mon++;day=1;}break;
 385   2      case 12:if(day>31){mon++;day=1;}break;
 386   2      default:break;
 387   2      }
 388   1      if(mon>12)mon=1;
 389   1      }
 390          
 391          /****************主程序*******************/
 392          void main()
 393          {       init();//初始化
 394   1              while(1)// 无限循环
 395   1              {
 396   2              scankey();//扫描按键
 397   2              reset()//看门狗复位
 398   2              conv();//时间计算及转换
 399   2              IO_fnc();//报警触发处理
 400   2              pdT();}//判断定时输出
 401   1      }
 402          
 403          /************************/
 404          void pdT(void)// 判断定时输出子函数
 405          {reset()
 406   1      //---------------------------------
 407   1      if(T1_startflag){// 若T1标志启动
 408   2              if((T1min_st==min)&&(T1hou_st==hou)) {out_P3_1=0;}// 若定时时与分到
 409   2                      P3_1=out_P3_1;}// 输出激活
 410   1      if(T1_endflag){// 若T2标志启动
 411   2              if((T1min_end==min)&&(T1hou_end==hou)) {out_P3_1=1;}// 若定时时与分到
 412   2                      P3_1=out_P3_1;}// 输出关闭
 413   1      //---------------------------------------------
 414   1      if(T2_startflag){// 若T3标志启动
 415   2      if((T2min_st==min)&&(T2hou_st==hou)) {out_P1_2=0;}// 若定时时与分到
 416   2      P1_2=out_P1_2;}// 输出激活
 417   1      if(T2_endflag){// 若T4标志启动
 418   2      if((T2min_end==min)&&(T2hou_end==hou)) {out_P1_2=1;}// 若定时时与分到
 419   2      P1_2=out_P1_2;}// 输出关闭
 420   1      //---------------------------------------------
 421   1      if(ALMstart){if(ALMmin>0)P3_0=0;}// 启动报警喇叭
 422   1              else P3_0=1;
 423   1      }
 424          
 425          /**********************************/
 426          void scankey()//扫描按键子函数
 427          {
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 8   

 428   1      if((MS==0)||(MS==10))EX0=1;else EX0=0;// 若模式为0或10,打开外中断0
 429   1      if(MS<7)// 若模式小于7
 430   1      {
 431   2      if(!MSKEY){MS++;delay(300);if(MS==7)MS=0;}// 调整模式
 432   2      if(MS==1){
 433   3                      if(!MONKEY){mon++;if(mon>12)mon=1;delay(300);}// 调整月
 434   3                      if(!DAYKEY){day++;if(day>31)day=1;delay(300);}// 调整天
 435   3                      if(!HOUKEY){hou++;if(hou>23)hou=0;delay(300);}// 调整时
 436   3                      if(!MINKEY){min++;if(min>=60)min=0;delay(300);}// 调整分
 437   3                      }
 438   2      if(MS==2){// 调整定时T1
 439   3                      if(!HOUKEY){T1hou_st++;if(T1hou_st>23)T1hou_st=0;delay(300);}
 440   3                      if(!MINKEY){T1min_st++;if(T1min_st>=60)T1min_st=0;delay(300);}
 441   3                      if(!CHECKKEY){T1_startflag=!T1_startflag;delay(300);}// 启动T1
 442   3                      }
 443   2      if(MS==3){// 调整定时T2
 444   3                      if(!HOUKEY){T1hou_end++;if(T1hou_end>23)T1hou_end=0;delay(300); }
 445   3                      if(!MINKEY){T1min_end++;if(T1min_end>=60)T1min_end=0;delay(300);}
 446   3                      if(!CHECKKEY){T1_endflag=!T1_endflag;delay(300);}// 启动T2
 447   3                      }
 448   2      if(MS==4){// 调整定时T3
 449   3                      if(!HOUKEY){T2hou_st++;if(T2hou_st>23)T2hou_st=0;delay(300);}
 450   3                      if(!MINKEY){T2min_st++;if(T2min_st>=60)T2min_st=0;delay(300);}
 451   3                      if(!CHECKKEY){T2_startflag=!T2_startflag;delay(300);}// 启动T3
 452   3                      }
 453   2      if(MS==5){// 调整定时T4
 454   3                      if(!HOUKEY){T2hou_end++;if(T2hou_end>23)T2hou_end=0;delay(300); }
 455   3                      if(!MINKEY){T2min_end++;if(T2min_end>=60)T2min_end=0;delay(300);}
 456   3                      if(!CHECKKEY){T2_endflag=!T2_endflag;delay(300);}// 启动T4
 457   3                      }
 458   2      if(MS==6){// 调整报警时间
 459   3                      if(!rdflag){ALMmin=rd_24c01(6);rdflag=1;}// 若尚未从24C01中6号单元读出
 460   3      //报警时间,则读一次
 461   3                      if(!MINKEY){delay(30);if(!MINKEY)ALMmin++;if(ALMmin>59)ALMmin=1;delay(300);}
 462   3                      if(!CHECKKEY){  ALMmin_iicflag=1;delay(300);}// 将调整后的报警时间再写
 463   3      //入6号单元
 464   3                      if(ALMmin_iicflag){EA=0;P0_7=0;wr_24c01(6,ALMmin);delay_iic(250);EA=1;
 465   4                                      delay(2000);ALMmin_iicflag=0;}else P0_7=1;
 466   3                      }
 467   2      }
 468   1      }
 469          
 470          /**************查询报警的历史记录子函数****************/
 471          void extern_zd0(void) interrupt 0 using 0
 472          {EA=0;
 473   1      MS=10;P0=0x00;P2=0xff;// 置模式10
 474   1      if(!checkflag){iic_cnt=rd_24c01(5);delay_iic(250);
 475   2                                      y=iic_cnt;x=y*4;checkflag=1;} 
 476   1                              
 477   1                              ALMadd=rd_24c01(x);delay_iic(250); 
 478   1                              temp_day=rd_24c01(x+1);delay_iic(250); 
 479   1                              temp_hou=rd_24c01(x+2);delay_iic(250); 
 480   1                              temp_min=rd_24c01(x+3);delay_iic(250); 
 481   1                              y--;
 482   1                              memoryoverflag=rd_24c01(7);delay_iic(250); 
 483   1                              if(y==1){if(memoryoverflag==55)y=31;else y=iic_cnt;} 
 484   1                              x=y*4;EA=1;delay(500); 
 485   1      }
 486          /************************************************************************/
 487          /**********以下为24C01的读写子函数*************/
 488          /*************************************************************************/
 489          #include <AT89X55.H>
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 9   

 490          #include <intrins.H>
 491          #define uchar unsigned char
 492          #define uint unsigned int
 493          sbit SDA=P1^0;
 494          sbit SCL=P1^1;
 495          //sfr WDT=0xa6;
 496          //#define reset() {WDT=0x1e;WDT=0xe1;}
 497          bdata char com_data;
 498          sbit mos_bit=com_data^7;
 499          sbit low_bit=com_data^0;
 500          uchar data display_buffer[10];
 501          void delay_iic(int n);
 502          uchar rd_24c01(char a);
 503          void wr_24c01(char a,char b);
 504          //***************************
 505          
 506          //***************************************
 507          void start()//启动读写时序
 508          {
 509   1      SDA=1;_nop_();_nop_();_nop_();_nop_();
 510   1      SCL=1;_nop_();_nop_();_nop_();_nop_();
 511   1      SDA=0;_nop_();_nop_();_nop_();_nop_();
 512   1      SCL=0;_nop_();_nop_();_nop_();_nop_();
 513   1      }
 514          //*****************************************
 515          void stop()//停止操作
 516          {
 517   1      SDA=0;_nop_();_nop_();_nop_();_nop_();
 518   1      SCL=1;_nop_();_nop_();_nop_();_nop_();
 519   1      SDA=1;_nop_();_nop_();_nop_();_nop_();
 520   1      }
 521          //***********************
 522          void ack()//应答
 523          {
 524   1      SCL=1;_nop_();_nop_();_nop_();_nop_();
 525   1      SCL=0;_nop_();_nop_();_nop_();_nop_();
 526   1      }
 527          //***********************
 528          void shift8(char a)//8位移位输出
 529          {
 530   1      data uchar i;
 531   1      com_data=a;
 532   1      for(i=0;i<8;i++)
 533   1      {
 534   2      SDA=mos_bit;
 535   2      SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 536   2      SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 537   2      com_data=com_data*2;
 538   2      }
 539   1      }
 540          //******************
 541          uchar rd_24c01(char a)//读24C01A中a地址单元的数据
 542          {
 543   1      data uchar i,command;
 544   1      SDA=1;_nop_();_nop_();_nop_();_nop_();
 545   1      SCL=0;_nop_();_nop_();_nop_();_nop_();
 546   1      start();
 547   1      command=160;
 548   1      shift8(command);
 549   1      ack();
 550   1      shift8(a);
 551   1      ack();
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 10  

 552   1      start();
 553   1      command=161;
 554   1      shift8(command);
 555   1      ack();
 556   1      SDA=1;_nop_();_nop_();_nop_();_nop_();
 557   1      for(i=0;i<8;i++)
 558   1      {
 559   2      com_data=com_data*2;
 560   2      SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 561   2      low_bit=SDA;
 562   2      SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 563   2      }
 564   1      stop();
 565   1      return(com_data);
 566   1      }
 567          //*****************
 568          void wr_24c01(char a,char b)//将RAM中b地址单元的数据写入24C01A中a地址单元中
 569          {
 570   1      data uchar command;
 571   1      _nop_();_nop_();_nop_();_nop_();_nop_();
 572   1      SDA=1;_nop_();_nop_();_nop_();_nop_();
 573   1      SCL=0;_nop_();_nop_();_nop_();_nop_();
 574   1      start();
 575   1      command=160;
 576   1      shift8(command);
 577   1      ack();
 578   1      shift8(a);
 579   1      ack();
 580   1      shift8(b);
 581   1      ack();
 582   1      stop();
 583   1      _nop_();_nop_();_nop_();_nop_();_nop_();
 584   1      }
 585          //***************
 586          void delay_iic(int n)// 延时
 587          {
 588   1      int i;
 589   1      for(i=1;i<n;i++){reset();}
 590   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2671    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     56       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =     13    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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