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

📄 wxbj.lst

📁 16路无线防盗报警器,无线部分由VD5026/VD2027编码发射和接收AT89C2051进行防盗报警.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE WXBJ
OBJECT MODULE PLACED IN wxbj.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE wxbj.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89X55.H>//加载头文件
   2          #define uchar unsigned char//变量类型的宏定义
   3          #define uint unsigned int//变量类型的宏定义
   4          uchar SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,
   5                          0x6d,0x7d,0x07,0x7f,0x6f};/*0~9的数码管段码*/
   6          #define reset() {WDT=0x1e;WDT=0xe1;}//看门狗启动/复位宏定义
   7          uchar act[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管驱动位码数组
   8          void delay(uint k);//延时子函数声明
   9          void dis_check1(uchar m);//显示报警时的地址、时间子函数
  10          sfr WDT=0xa6;//看门狗寄存器定义
  11          
  12          /*************外部函数声明************/
  13          extern void delay_iic(int n);
  14          extern void wr_24c01(char a,char b);
  15          extern uchar rd_24c01(char a);
  16          extern void shift8(char a);
  17          extern void ack();
  18          extern void stop();
  19          extern void start();
  20          
  21          /***************************/
  22          sbit MSKEY=P1^7; /*功能键标志*/
  23          sbit MONKEY=P1^6;//月按键
  24          sbit DAYKEY=P1^5;//天按键
  25          sbit HOUKEY=P1^4;//时按键
  26          sbit MINKEY=P1^3;//分按键
  27          sbit CHECKKEY=P3^2;//查询按键
  28          sbit P3_0=P3^0;
  29          sbit P3_1=P3^1;
  30          sbit P3_2=P3^2;
  31          sbit P3_3=P3^3;
  32          
  33          //------------------
  34          bit d_05s=0;   /*0.5秒标志*/
  35          bit rdflag=1;//读取标志
  36          bit checkflag;//查询标志
  37          bit IO_flag=0;//报警触发标志
  38          bit T1_startflag; //第一路定时启动标志
  39          bit T1_endflag; //第一路定时结束标志
  40          bit T2_startflag;// 第二路定时启动标志
  41          bit T2_endflag;//第二路定时结束标志
  42          bit out_P1_2; //第二路继电器输出
  43          bit out_P3_1; //第一路继电器输出
  44          bit ALMstart;//报警时间启动标志
  45          bit ALMmin_iicflag;//报警所用时间写入24C01标志
  46          bit iic_rdflag;//读取24C01标志
  47          
  48          //------------------
  49          uchar x,y,memoryoverflag;//变量定义
  50          uchar MS=0;//工作模式定义
  51          uchar deda=0;           /*100mS计数单元清零*/ 
  52          uint cnt;
  53          uchar ALMadd,discnt;//报警地址暂存、显示屏扫描计数器
  54          char iic_cnt,ALMmin;//24C01单元计数、报警时间(分)
  55          uchar sec,min,hou,day,mon;//秒、分、时、天、月
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 2   

  56          uchar temp_min,temp_hou,temp_day;//临时存放的分、时、天
  57          
  58          /*===================*/
  59          uchar T1min_st,T1hou_st,T1min_end,T1hou_end;//第一路定时(分、时)开始、结束时间
  60          uchar T2min_st,T2hou_st,T2min_end,T2hou_end;//第二路定时(分、时)开始、结束时间
  61          
  62          /*********************/
  63          void dis_time(uchar m);//函数列表
  64          void dis_adjtime(uchar m);
  65          void dis_check(uchar m);
  66          void dis_adjT1_st(uchar m);
  67          void dis_adjT1_end(uchar m);
  68          void dis_adjT2_st(uchar m);
  69          void dis_adjT2_end(uchar m);
  70          void dis_adjALMtime(uchar m);
  71          void scankey();
  72          void conv();
  73          void pdT(void);
  74          void dis_check(uchar m);
  75          
  76          /***********************/
  77          /*定时器T0初始化100ms*/
  78          void init_timer0()
  79          {
  80   1      TMOD=0x11;
  81   1      TH0=-(50235/256);
  82   1      TL0=-(50235%256);
  83   1      TR0=1;
  84   1      }
  85          
  86          /*定时器T1初始化2ms*/
  87          void init_timer1()
  88          {
  89   1      TH1=-(1000/256);
  90   1      TL1=-(1000%256);
  91   1      TR1=1;
  92   1      }
  93          
  94          //***********初始化子函数************
  95          void init(void)
  96          {       P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  97   1              ALMstart=0;reset()
  98   1              rdflag=0;
  99   1              discnt=0;
 100   1              init_timer0();         
 101   1              init_timer1();          
 102   1              IE=0x8f;PT1=1;
 103   1              IT1=1;
 104   1              EA=0;// 关总中断
 105   1      x=rd_24c01(4);delay_iic(250);
 106   1      if(x!=88) 
 107   1      {sec=0;min=0;hou=0;day=1;mon=1; 
 108   2      wr_24c01(4,88);delay_iic(250); 
 109   2      wr_24c01(5,1);delay_iic(250); 
 110   2      wr_24c01(6,3);delay_iic(250); 
 111   2      }
 112   1      x=rd_24c01(6);delay_iic(250);
 113   1      if(x>59){wr_24c01(6,3);delay_iic(250);}
 114   1      //-------------------------------
 115   1      iic_cnt=rd_24c01(5);delay_iic(250);
 116   1      //----------------------------------
 117   1      ALMmin=rd_24c01(6);delay_iic(250);
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 3   

 118   1      EA=1; 
 119   1      }
 120          
 121          /*********延时Kx1ms子函数*****************/
 122          void delay(uint k)
 123          {
 124   1      uint i,j;
 125   1      for(i=0;i<k;i++){
 126   2      for(j=0;j<60;j++)
 127   2      {;}reset()}
 128   1      }
 129          
 130          /*100mS定时中断服务子函数*/
 131          void time_zd0(void) interrupt 1 using 1
 132          {
 133   1      TH0=-(50235/256);
 134   1      TL0=-(50235%256);
 135   1      deda++;
 136   1      }
 137          
 138          /***********外部中断1子函数,报警触发*************/
 139          void extern_zd1(void) interrupt 2 using 2
 140          {IO_flag=1;delay(200);}
 141          //===========================================
 142          void IO_fnc()
 143          {       uchar temp;     
 144   1                      if(IO_flag) 
 145   1                      {       EA=0; 
 146   2                              ALMadd=P3;ALMadd=ALMadd>>4; 
 147   2                              ALMmin=rd_24c01(6);delay_iic(250); 
 148   2                              iic_cnt=rd_24c01(5);delay_iic(250); 
 149   2                              iic_cnt++;//地址指针加1
 150   2                              temp=rd_24c01(7);delay_iic(250);
 151   2                              if(temp!=55) 
 152   2                              {if(iic_cnt==31){wr_24c01(7,55);delay_iic(250);memoryoverflag=55;}}
 153   2                              if(iic_cnt>31)iic_cnt=2; 
 154   2                              x=iic_cnt*4; 
 155   2                              wr_24c01(x,ALMadd);delay_iic(250); 
 156   2                              wr_24c01(x+1,day);delay_iic(250);
 157   2                              wr_24c01(x+2,hou);delay_iic(250);
 158   2                              wr_24c01(x+3,min);delay_iic(250);
 159   2                              //**************************
 160   2                              wr_24c01(5,iic_cnt);delay_iic(250); 
 161   2                              MS=15;IO_flag=0; 
 162   2                              temp_day=day;temp_hou=hou;temp_min=min;
 163   2                              ALMstart=1;EA=1; 
 164   2                      }
 165   1      }
 166          
 167          /**************************/
 168          /*2mS定时中断服务子函数*/
 169          void time_zd1(void) interrupt 3 using 3
 170          {
 171   1              TH1=-(1000/256);// 重载定时初值
 172   1              TL1=-(1000%256);
 173   1      if(discnt>7)discnt=0;// 显示为8位数码管
 174   1      if(cnt>700)cnt=0;// 报警时的闪烁周期
 175   1      switch(MS)
 176   1      {
 177   2      case 0:{dis_time(discnt);}break;// 显示走时
 178   2      case 1:{dis_adjtime(discnt);}break;// 显示调时
 179   2      case 2:{dis_adjT1_st(discnt);}break; //显示T1调整及设定
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 4   

 180   2      case 3:{dis_adjT1_end(discnt);}break;// 显示T2调整及设定
 181   2      case 4:{dis_adjT2_st(discnt);}break;// 显示T3调整及设定
 182   2      case 5:{dis_adjT2_end(discnt);}break;// 显示T4调整及设定
 183   2      case 6:{dis_adjALMtime(discnt);}break;// 显示报警时间调整及设定
 184   2      case 10:{dis_check(discnt);}break;// 查询时显示的报警历史记录(翻页)
 185   2      case 15:{dis_check1(discnt);}break;// 报警触发时,显示此时的报警地点、时间
 186   2      default:break;
 187   2      }
 188   1      discnt++;cnt++;
 189   1      }
 190          
 191          /*****************************/
 192          void dis_check1(uchar m)// 报警触发时,显示此时的报警地点、时间
 193          {
 194   1      if(cnt<350)
 195   1      {switch(m)
 196   2      {case 0:{P0=SEG7[temp_min%10];}break;
 197   3      case 1:{P0=SEG7[temp_min/10];}break;
 198   3      case 2:{P0=SEG7[temp_hou%10];}break;
 199   3      case 3:{P0=SEG7[temp_hou/10];}break;
 200   3      case 4:{P0=SEG7[temp_day%10];}break;
 201   3      case 5:{P0=SEG7[temp_day/10];}break;
 202   3      case 6:{P0=SEG7[ALMadd%10];}break;
 203   3      case 7:{P0=SEG7[ALMadd/10];}break;
 204   3      default:break;
 205   3      }
 206   2      P2=act[m];P0_7=1;}
 207   1      else
 208   1      P2=0xff;
 209   1      }
 210          
 211          //===============================
 212          void dis_check(uchar m)// 查询时显示的报警历史记录(翻页)
 213          {
 214   1      switch(m)
 215   1      {case 0:{P0=SEG7[temp_min%10];}break;
 216   2      case 1:{P0=SEG7[temp_min/10];}break;
 217   2      case 2:{P0=SEG7[temp_hou%10];}break;
 218   2      case 3:{P0=SEG7[temp_hou/10];}break;
 219   2      case 4:{P0=SEG7[temp_day%10];}break;
 220   2      case 5:{P0=SEG7[temp_day/10];}break;
 221   2      case 6:{P0=SEG7[ALMadd%10];}break;
 222   2      case 7:{P0=SEG7[ALMadd/10];}break;
 223   2      default:break;
 224   2      }
 225   1      P2=act[m];P0_7=1;
 226   1      }
 227          
 228          /*******************************/
 229          void dis_time(uchar m) //显示走时
 230          {
 231   1      switch(m)
 232   1      {case 0:{P0=SEG7[min%10];}break;
 233   2      case 1:{P0=SEG7[min/10];}break;
 234   2      case 2:{P0=SEG7[hou%10];}break;
 235   2      case 3:{P0=SEG7[hou/10];}break;
 236   2      case 4:{P0=SEG7[day%10];}break;
 237   2      case 5:{P0=SEG7[day/10];}break;
 238   2      case 6:{P0=SEG7[mon%10];}break;
 239   2      case 7:{P0=SEG7[mon/10];}break;
 240   2      default:break;
 241   2      }
C51 COMPILER V7.06   WXBJ                                                                  11/18/2005 20:24:48 PAGE 5   

 242   1      if(!d_05s) {P0_7=0;}
 243   1      else {P0_7=1;}
 244   1      P2=act[m];
 245   1      }
 246          
 247          /****************************/
 248          void dis_adjtime(uchar m)// 显示调时
 249          {
 250   1      switch(m)
 251   1      {case 0:{P0=SEG7[min%10];}break;
 252   2      case 1:{P0=SEG7[min/10];}break;
 253   2      case 2:{P0=SEG7[hou%10];}break;
 254   2      case 3:{P0=SEG7[hou/10];}break;
 255   2      case 4:{P0=SEG7[day%10];}break;
 256   2      case 5:{P0=SEG7[day/10];}break;
 257   2      case 6:{P0=SEG7[mon%10];}break;
 258   2      case 7:{P0=SEG7[mon/10];}break;
 259   2      default:break;
 260   2      }
 261   1      P0_7=1;
 262   1      P2=act[m];
 263   1      }
 264          
 265          /****************************/
 266          void dis_adjT1_st(uchar m) //显示T1调整及设定
 267          {
 268   1      switch(m)
 269   1      {case 0:{P0=SEG7[T1min_st%10];}break;
 270   2      case 1:{P0=SEG7[T1min_st/10];}break;
 271   2      case 2:{P0=SEG7[T1hou_st%10];}break;
 272   2      case 3:{P0=SEG7[T1hou_st/10];}break;
 273   2      case 4:{P0=0x00;}break;
 274   2      case 5:{P0=0x00;}break;
 275   2      case 6:{P0=SEG7[1];}break;
 276   2      case 7:{P0=0x31;}break;
 277   2      default:break;
 278   2      }
 279   1      if(!T1_startflag) P0_7=1;
 280   1      else P0_7=0;
 281   1      P2=act[m];
 282   1      }
 283          
 284          /************************************/
 285          void dis_adjT1_end(uchar m) //显示T2调整及设定
 286          {
 287   1      switch(m)
 288   1      {case 0:{P0=SEG7[T1min_end%10];}break;
 289   2      case 1:{P0=SEG7[T1min_end/10];}break;
 290   2      case 2:{P0=SEG7[T1hou_end%10];}break;
 291   2      case 3:{P0=SEG7[T1hou_end/10];}break;
 292   2      case 4:{P0=0x00;}break;
 293   2      case 5:{P0=0x00;}break;
 294   2      case 6:{P0=SEG7[2];}break;
 295   2      case 7:{P0=0x31;}break;
 296   2      default:break;
 297   2      }
 298   1      if(!T1_endflag) P0_7=1;
 299   1      else P0_7=0;

⌨️ 快捷键说明

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