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

📄 sy.lst

📁 用C语言实现的单片机密码锁程序
💻 LST
字号:
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SY
OBJECT MODULE PLACED IN SY.OBJ
COMPILER INVOKED BY: D:\keil uvision3\C51\BIN\C51.EXE SY.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.H>
   2          unsigned char ps[]={1,2,3,4,5};//密码
   3          unsigned char code dispbit[]={0x04,0x08,0x10,0x20, 
   4                                       0x40,0x80};//数码管片选
   5          unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
   6                                         0x6d,0x7d,0x07,0x7f,0x6f,
   7                                         0x00,0x73,0xff};//数码驱动
   8          unsigned char dispbuf[6]={11,10,10,10,10,10};//数码管初始化
   9          unsigned char dispcount;//变量
  10          unsigned char flashcount;//变量
  11          unsigned char temp;//数据暂存
  12          unsigned char key;//按键
  13          unsigned char keycount;//输入数据数目
  14          unsigned char pslen=5;//输入数据位数
  15          unsigned char getps[6];//输入数据
  16          bit keyoverflag;//数据溢出标志
  17          bit rightflag;//正确标志
  18          bit errorflag;//错误标志
  19          unsigned int second3;//三秒计时
  20          bit alarmflag;//警报标志
  21          unsigned int js=2;
  22          unsigned int aa=1;//变量
  23          unsigned int bb;//变量
  24          unsigned int cc;//变量
  25          unsigned int dd;//变量
  26          unsigned int ee;//变量
  27          sbit K4=P2^4;
  28          sbit K5=P2^5;
  29          sbit K6=P2^6;
  30          sbit K7=P2^7; 
  31          sbit L=P3^1;
  32          void main(void)
  33          {
  34   1      unsigned char i,j;
  35   1      TMOD=0x01;
  36   1      TH0=(65536-500)/256;
  37   1      TL0=(65536-500)%256;
  38   1      TR0=1;
  39   1      ET0=1;
  40   1      EA=1;
  41   1      while(1)
  42   1      {
  43   2      P2=0xff;
  44   2      K4=0;
  45   2      temp=P2;
  46   2      temp=temp & 0x0f;
  47   2      if (temp!=0x0f)
  48   2      {
  49   3      for(i=10;i>0;i--)
  50   3      for(j=248;j>0;j--);
  51   3      temp=P2;
  52   3      temp=temp & 0x0f;
  53   3      if (temp!=0x0f)
  54   3      {
  55   4      temp=P2;
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 2   

  56   4      temp=temp & 0x0f;
  57   4      switch(temp)
  58   4      {
  59   5      case 0x0e:
  60   5      key=4;
  61   5      break;
  62   5      case 0x0d:
  63   5      key=3;
  64   5      break;
  65   5      case 0x0b:
  66   5      key=2;
  67   5      break;
  68   5      case 0x07:
  69   5      key=1;
  70   5      break;
  71   5      }
  72   4      temp=P2;
  73   4      if((key>=0) && (key<10))
  74   4      { keycount++;
  75   5      if(keycount<6)
  76   5      {
  77   6      getps[keycount]=key;
  78   6      dispbuf[keycount]=12;
  79   6      }
  80   5      if(keycount==5)
  81   5      {
  82   6      keycount=5;
  83   6      }
  84   5      else if(keycount>5)
  85   5      {
  86   6      keycount=5;
  87   6      keyoverflag=1;//key overflow
  88   6      }
  89   5      }
  90   4      else if(key==11)//delete key
  91   4      {
  92   5      if(keycount>0)
  93   5      {
  94   6      getps[keycount]=0;
  95   6      dispbuf[keycount]=10;
  96   6      keycount--;
  97   6      }
  98   5      else
  99   5      {
 100   6      keyoverflag=1;
 101   6      }
 102   5      }
 103   4      else if(key==10)//enter key
 104   4      {
 105   5      if(keycount!=pslen)//输入数据不是六位
 106   5      {
 107   6      keyoverflag=1;
 108   6      second3=0;
 109   6      }
 110   5      else
 111   5      {
 112   6      for(i=0;i<keycount;i++)
 113   6      {
 114   7      if(getps[i+1]!=ps[i])
 115   7      {
 116   8      i=keycount;
 117   8      errorflag=1;
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 3   

 118   8      rightflag=0;
 119   8      second3=0;
 120   8      goto a;
 121   8      }
 122   7      }
 123   6      errorflag=0;
 124   6      rightflag=1;
 125   6      a: i=keycount;
 126   6      }
 127   5      }
 128   4      temp=temp & 0x0f;
 129   4      while(temp!=0x0f)
 130   4      {
 131   5      temp=P2;
 132   5      temp=temp & 0x0f;
 133   5      }
 134   4      }
 135   3      }
 136   2      
 137   2      
 138   2      P2=0xff;
 139   2      K5=0;
 140   2      temp=P2;
 141   2      temp=temp & 0x0f;
 142   2      if (temp!=0x0f)
 143   2      {
 144   3      for(i=10;i>0;i--)
 145   3      for(j=248;j>0;j--);
 146   3      temp=P2;
 147   3      temp=temp & 0x0f;
 148   3      if (temp!=0x0f)
 149   3      {
 150   4      temp=P2;
 151   4      temp=temp & 0x0f;
 152   4      switch(temp)
 153   4      {
 154   5      case 0x0e:
 155   5      key=8;
 156   5      break;
 157   5      case 0x0d:
 158   5      key=7;
 159   5      break;
 160   5      case 0x0b:
 161   5      key=6;
 162   5      break;
 163   5      case 0x07:
 164   5      key=5;
 165   5      break;
 166   5      }
 167   4      temp=P2;
 168   4      if((key>=0) && (key<10))
 169   4      {keycount++;
 170   5      if(keycount<6)
 171   5      {
 172   6      getps[keycount]=key;
 173   6      dispbuf[keycount]=12;
 174   6      }
 175   5      if(keycount==5)
 176   5      {
 177   6      keycount=5;
 178   6      }
 179   5      else if(keycount>5)
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 4   

 180   5      {
 181   6      keycount=5;
 182   6      keyoverflag=1;//key overflow
 183   6      }
 184   5      }
 185   4      else if(key==11)//delete key
 186   4      {
 187   5      if(keycount>0)
 188   5      {
 189   6      getps[keycount]=0;
 190   6      dispbuf[keycount]=10;
 191   6      keycount--;
 192   6      }
 193   5      else
 194   5      {
 195   6      keyoverflag=1;
 196   6      }
 197   5      }
 198   4      else if(key==10)//enter key
 199   4      {
 200   5      if(keycount!=pslen)
 201   5      {
 202   6      keyoverflag=1;
 203   6      second3=0;
 204   6      }
 205   5      else
 206   5      {
 207   6      for(i=0;i<keycount;i++)
 208   6      {
 209   7      if(getps[i+1]!=ps[i])
 210   7      {
 211   8      i=keycount;
 212   8      errorflag=1;
 213   8      rightflag=0;
 214   8      second3=0;
 215   8      goto a4;
 216   8      }
 217   7      }
 218   6      errorflag=0;
 219   6      rightflag=1;
 220   6      a4: i=keycount;
 221   6      }
 222   5      }
 223   4      temp=temp & 0x0f;
 224   4      while(temp!=0x0f)
 225   4      {
 226   5      temp=P2;
 227   5      temp=temp & 0x0f;
 228   5      }
 229   4      }
 230   3      }
 231   2      
 232   2      P2=0xff;
 233   2      K6=0;
 234   2      temp=P2;
 235   2      temp=temp & 0x0f;
 236   2      if (temp!=0x0f)
 237   2      {
 238   3      for(i=10;i>0;i--)
 239   3      for(j=248;j>0;j--);
 240   3      temp=P2;
 241   3      temp=temp & 0x0f;
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 5   

 242   3      if(temp!=0x0f)
 243   3      {
 244   4      temp=P2;
 245   4      temp=temp & 0x0f;
 246   4      switch(temp)
 247   4      {
 248   5      case 0x0e:
 249   5      keyoverflag=1;
 250   5      break;
 251   5      case 0x0d:
 252   5      key=11;
 253   5      break;
 254   5      case 0x0b:
 255   5      key=10;
 256   5      break;
 257   5      case 0x07:
 258   5      key=9;
 259   5      break;
 260   5      }
 261   4      temp=P2;
 262   4      if((key>=0) && (key<10))
 263   4      {keycount++;
 264   5      if(keycount<6)
 265   5      {
 266   6      getps[keycount]=key;
 267   6      dispbuf[keycount]=12;
 268   6      }
 269   5      if(keycount==5)
 270   5      {
 271   6      keycount=5;
 272   6      }
 273   5      else if(keycount>5)
 274   5      {
 275   6      keycount=5;
 276   6      keyoverflag=1;//key overflow
 277   6      }
 278   5      }
 279   4      else if(key==11)//delete key
 280   4      {
 281   5      if(keycount>0)
 282   5      {
 283   6      getps[keycount]=0;
 284   6      dispbuf[keycount]=10;
 285   6      keycount--;
 286   6      }
 287   5      else
 288   5      {
 289   6      keyoverflag=1;
 290   6      }
 291   5      }
 292   4      else if(key==10)//enter key
 293   4      {
 294   5      if(keycount!=pslen)
 295   5      {
 296   6      keyoverflag=1;
 297   6      second3=0;
 298   6      }
 299   5      else
 300   5      {
 301   6      for(i=0;i<keycount;i++)
 302   6      {
 303   7      if(getps[i+1]!=ps[i])
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 6   

 304   7      {
 305   8      i=keycount;
 306   8      errorflag=1;
 307   8      rightflag=0;
 308   8      second3=0;
 309   8      goto a3;
 310   8      }
 311   7      }
 312   6      errorflag=0;
 313   6      rightflag=1;
 314   6      a3: i=keycount;
 315   6      }
 316   5      }
 317   4      temp=temp & 0x0f;
 318   4      while(temp!=0x0f)
 319   4      {
 320   5      temp=P2;
 321   5      temp=temp & 0x0f;
 322   5      }
 323   4      }
 324   3      }
 325   2      
 326   2      P2=0xff;
 327   2      K7=0;
 328   2      temp=P2;
 329   2      temp=temp & 0x0f;
 330   2      if (temp!=0x0f)
 331   2      {
 332   3      for(i=10;i>0;i--)
 333   3      for(j=248;j>0;j--);
 334   3      temp=P2;
 335   3      temp=temp & 0x0f;
 336   3      if (temp!=0x0f)
 337   3      {
 338   4      temp=P2;
 339   4      temp=temp & 0x0f;
 340   4      switch(temp)
 341   4      {
 342   5      case 0x0e:
 343   5      keyoverflag=1;
 344   5      break;
 345   5      case 0x0d:
 346   5      keyoverflag=1;
 347   5      break;
 348   5      case 0x0b:
 349   5      keyoverflag=1;
 350   5      break;
 351   5      case 0x07:
 352   5      keyoverflag=1;
 353   5      break;
 354   5      }
 355   4      temp=P2;
 356   4      if((key>=0) && (key<10))
 357   4      { keycount++;
 358   5      if(keycount<6)
 359   5      {
 360   6      getps[keycount]=key;
 361   6      dispbuf[keycount]=12;
 362   6      }
 363   5      if(keycount==5)
 364   5      {
 365   6      keycount=5;
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 7   

 366   6      }
 367   5      else if(keycount>5)
 368   5      {
 369   6      keycount=5;
 370   6      keyoverflag=1;//key overflow
 371   6      }
 372   5      }
 373   4      else if(key==11)//delete key
 374   4      {
 375   5      if(keycount>0)
 376   5      {
 377   6      getps[keycount]=0;
 378   6      dispbuf[keycount]=10; 
 379   6      keycount--;
 380   6      }
 381   5      else
 382   5      {
 383   6      keyoverflag=1;
 384   6      }
 385   5      }
 386   4      else if(key==10)//enter key
 387   4      {
 388   5      if(keycount!=pslen)
 389   5      {
 390   6      keyoverflag=1;
 391   6      second3=0;
 392   6      }
 393   5      else
 394   5      {
 395   6      for(i=0;i<keycount;i++)
 396   6      {
 397   7      if(getps[i+1]!=ps[i])
 398   7      {
 399   8      i=keycount;
 400   8      errorflag=1;
 401   8      rightflag=0;
 402   8      second3=0;
 403   8      goto a2;
 404   8      }
 405   7      }
 406   6      errorflag=0;
 407   6      rightflag=1;
 408   6      a2: i=keycount;
 409   6      }
 410   5      }
 411   4      temp=temp & 0x0f;
 412   4      while(temp!=0x0f)
 413   4      {
 414   5      temp=P2;
 415   5      temp=temp & 0x0f;
 416   5      }
 417   4      }
 418   3      }
 419   2      }
 420   1      }
 421          
 422          
 423          void format(void)
 424          {keycount=0;
 425   1      for(ee=0;ee<=pslen;ee++)
 426   1      getps[ee]=0;
 427   1      dispbuf[0]=11;
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 8   

 428   1      for(ee=1;ee<=pslen;ee++)
 429   1      dispbuf[ee]=10;
 430   1      errorflag=0;
 431   1      rightflag=0;
 432   1      keyoverflag=0;
 433   1      P0=0xff;
 434   1      js=2;
 435   1      }
 436          
 437          
 438          void t0(void) interrupt 1 using 0
 439          {unsigned char m;
 440   1      TH0=(65536-500)/256;
 441   1      TL0=(65536-500)%256;
 442   1      flashcount++;
 443   1      if(flashcount==8)
 444   1      {
 445   2      flashcount=0;
 446   2      P1=dispcode[dispbuf[dispcount]];
 447   2      P3=dispbit[dispcount];
 448   2      dispcount++;
 449   2      if(dispcount==6)
 450   2      {
 451   3      dispcount=0;
 452   3      }
 453   2      }
 454   1      if((errorflag==1) && (rightflag==0))
 455   1      {for(m=0;m<=4;m++)
 456   2      dispbuf[m]=10;
 457   2      bb++;
 458   2      if(bb==400)
 459   2      {aa=aa*2;
 460   3      if(aa==0)
 461   3      {aa=1;} 
 462   3      bb=0;
 463   3      L=~L;
 464   3      } 
 465   2      P0=~aa;
 466   2      second3++;
 467   2      if(second3==3200)
 468   2      {dispbuf[5]=js;
 469   3      second3=0;
 470   3      js--;
 471   3      }
 472   2      if(dispbuf[5]==0)
 473   2      {dispbuf[5]=js;
 474   3      format();
 475   3      }
 476   2      }
 477   1      else if((errorflag==0) && (rightflag==1))
 478   1      {
 479   2      P0=0x00;
 480   2      cc++;
 481   2      if(cc==10000)
 482   2      {
 483   3      P0=0xff;
 484   3      format();
 485   3      cc=0;
 486   3      }
 487   2      }
 488   1      if(keyoverflag==1)
 489   1      {for(m=0;m<=4;m++)
C51 COMPILER V7.50   SY                                                                    08/03/2007 16:41:09 PAGE 9   

 490   2      dispbuf[m]=10;
 491   2      P0=0x7e;
 492   2      second3++;
 493   2      if(second3==3200)
 494   2      {dispbuf[5]=js;
 495   3      second3=0;
 496   3      js--;
 497   3      }
 498   2      if(dispbuf[5]==0)
 499   2      {dispbuf[5]=js;
 500   3      format();
 501   3      }
 502   2      }
 503   1      } 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1418    ----
   CONSTANT SIZE    =     19    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     37    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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