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

📄 dianzimimasuo.lst

📁 电子密码锁
💻 LST
字号:
C51 COMPILER V9.01   DIANZIMIMASUO                                                         04/09/2012 09:13:21 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE DIANZIMIMASUO
OBJECT MODULE PLACED IN dianzimimasuo.OBJ
COMPILER INVOKED BY: D:\Program Files\C51\BIN\C51.EXE dianzimimasuo.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2                   
   3                  #include<reg52.h>
   4                  #include<intrins.h>
   5          //      #include<c02.h>
   6                  #define uchar unsigned char
   7                  #define uint  unsigned int
   8                  sbit key=P3^2;
   9                  sbit cs=P2^7;
  10                  sbit dat=P3^6;
  11                  sbit clk=P3^7;
  12                  sbit bill=P1^6;
  13                  //              #ifndef _24c02_H_
  14          //      #define _24c02_H_  //24c02驱动程序
  15                  #define WriteDeviceAddress 0xa0
  16                  #define ReadDeviceAddress 0xa1
  17                  sbit  SDA=P3^5;
  18                  sbit  SCK=P3^4;
  19                  void delay10ms(void)
  20                   {unsigned char i,j;
  21   1              for(i=20;i>0;i--)
  22   1              for(j=248;j>0;j--);
  23   1              }
  24                  void DelayWait()
  25                  { _nop_();
  26   1                _nop_();
  27   1                _nop_();
  28   1                _nop_();
  29   1                _nop_();
  30   1                _nop_();
  31   1                _nop_();
  32   1              }
  33                  void Start_Cond()
  34                  { SDA=1;
  35   1                DelayWait();
  36   1                SCK=1;
  37   1                DelayWait();
  38   1                SDA=0;
  39   1                DelayWait();
  40   1                SCK=0;
  41   1              }
  42                    void Stop_Cond()
  43                  { SDA=0;
  44   1                DelayWait();
  45   1                SCK=1;
  46   1                DelayWait();
  47   1                SDA=1;
  48   1                DelayWait();
  49   1                SCK=0;
  50   1              }
  51                  void Ack()
  52                  { SDA=0;
  53   1                SCK=1;
  54   1                DelayWait();
  55   1                SCK=0;
C51 COMPILER V9.01   DIANZIMIMASUO                                                         04/09/2012 09:13:21 PAGE 2   

  56   1                DelayWait();
  57   1              }
  58                  void NoAck()
  59                  { unsigned char i;
  60   1                SDA=1;
  61   1                _nop_();
  62   1                SCK=1;
  63   1                DelayWait();
  64   1                while((SDA==1)&&(i<250))i++;
  65   1                SCK=0;
  66   1                DelayWait();
  67   1              }
  68                  bit Write8Bit(unsigned char input)
  69                  { unsigned char i;
  70   1                for(i=0;i<8;i++)
  71   1              {   SCK=0;
  72   2                  input<<=1;
  73   2                  SDA=CY;
  74   2                  DelayWait();
  75   2                  SCK=1;
  76   2                  DelayWait();
  77   2                  SCK=0;
  78   2              }
  79   1                SCK=0;
  80   1                DelayWait();
  81   1                SDA=1;
  82   1                DelayWait();
  83   1                return(CY);
  84   1              }
  85                  unsigned char Read8Bit()
  86                  { unsigned char i,j=0;
  87   1                SCK=0;
  88   1                DelayWait();
  89   1                SDA=1;
  90   1                DelayWait();
  91   1                for(i=8;i!=0;i--)
  92   1              {  SCK=1;
  93   2                 DelayWait();
  94   2                 j=(j<<1)|SDA;
  95   2                 SCK=0;
  96   2                 DelayWait();
  97   2              }
  98   1                return j;
  99   1              }
 100                  unsigned char Read_one_Flash(unsigned char nAddr)
 101                  {  unsigned char Data;
 102   1                 Start_Cond();
 103   1                 Write8Bit(WriteDeviceAddress);
 104   1                 NoAck();
 105   1                 Write8Bit(nAddr);
 106   1                 NoAck();
 107   1                 Start_Cond();
 108   1                 DelayWait();
 109   1                 Write8Bit(ReadDeviceAddress);
 110   1                 NoAck();
 111   1                 Data=Read8Bit();
 112   1                 Stop_Cond();
 113   1                 return(Data);
 114   1              }
 115                  void Write_one_Flash(unsigned char nAddr,unsigned char Data)
 116                  {  Start_Cond();
 117   1                 Write8Bit(WriteDeviceAddress);
C51 COMPILER V9.01   DIANZIMIMASUO                                                         04/09/2012 09:13:21 PAGE 3   

 118   1                 NoAck();
 119   1                 Write8Bit(nAddr);
 120   1                 NoAck();
 121   1                 Write8Bit(Data);
 122   1                 NoAck();
 123   1                 Stop_Cond();
 124   1              }
 125                  void Read_Flash(unsigned char *nContent,unsigned char nAddr,unsigned char nLen)
 126                  {  unsigned char count;
 127   1                 for(count=0;count<nLen;count++)
 128   1                {*(nContent+count)=Read_one_Flash (nAddr+count);}
 129   1              }
 130          void Write_Flash(unsigned char *nContent,unsigned char nAddr,unsigned char nLen)
 131                  {  unsigned char temp;
 132   1                 unsigned char count;  
 133   1                 for(count=0;count<nLen;count++)
 134   1                {temp=*(nContent+count);
 135   2                 Write_one_Flash((nAddr+count),temp);
 136   2                 delay10ms();
 137   2                 delay10ms();
 138   2                }
 139   1              }
 140          //      #endif  
 141                  uchar b[6]={0x01,0x02,0x03,0x04,0x05,0x06},c[6]={0x02,0x03,0x04,0x05,0x06,0x07}; 
 142                  uchar *q,*r,count;
 143                  void first(void)
 144                  {  q=b;r=c; 
 145   1                Write_Flash(q,0x00,6);
 146   1                Write_Flash(r,0x06,6);
 147   1              }
 148                  void delayus(uchar i)
 149                  {uchar j;
 150   1                do
 151   1                {for(j=0;j<8;j++);
 152   2                 }while(i--);
 153   1              }
 154                  void delayms(uchar i)
 155                  {uint j;
 156   1                do
 157   1                {for(j=0;j<333;j++);
 158   2                 }while(i--);
 159   1              }
 160                  void bill1(void)//输入密码正确
 161                  { uchar i=2;
 162   1               while(i)
 163   1                 {  delayms(22);
 164   2                    delayms(22);
 165   2                       bill=0;
 166   2                    delayms(22);
 167   2                    delayms(22);
 168   2                           bill=1;
 169   2                           --i;
 170   2                 }
 171   1              }
 172                  void bill2(void)//输入密码错误
 173                  { uchar i=10; 
 174   1               while(i)
 175   1                 { delayms(7);
 176   2                         delayms(7);
 177   2                         bill=0;   
 178   2                         delayms(7);
 179   2                         delayms(7);
C51 COMPILER V9.01   DIANZIMIMASUO                                                         04/09/2012 09:13:21 PAGE 4   

 180   2                         bill=1;
 181   2                         --i;
 182   2                 }
 183   1              }
 184                  void send(uchar j)
 185                  {uchar i;
 186   1               clk=0;
 187   1               delayus(5);
 188   1               for(i=0;i<8;i++)
 189   1               {if(j&0x80)
 190   2                 dat=1;
 191   2                 else
 192   2                 dat=0;         
 193   2                clk=1;
 194   2                delayus(1);
 195   2                clk=0;
 196   2                delayus(1); 
 197   2                  j=j<<1; 
 198   2               }
 199   1               dat=0;
 200   1               return;
 201   1              }        
 202                  uchar receive()
 203                  { uchar i,j;
 204   1               j=1;
 205   1               clk=0;
 206   1               dat=1;
 207   1               delayus(5);
 208   1               for(i=0;i<8;i++)
 209   1               {      clk=1;
 210   2                   delayus(1);
 211   2                      j=j*2;
 212   2                          if(dat)
 213   2                   j|=0x01;
 214   2                      clk=0;
 215   2                      delayus(1);
 216   2               }
 217   1                 dat=0;
 218   1                 return  j;
 219   1              }                         
 220                  bit compare(uchar *string1,uchar *string2)
 221                  {uchar t;
 222   1               for(t=0;t<6;t++)
 223   1               {if(string1[t]!=string2[t])
 224   2                     return(0);
 225   2               }
 226   1               return(1);
 227   1              }
 228                  void main()
 229                  {bit js,k,jp; 
 230   1               uchar i,keynum,s;
 231   1               uchar a[7],d[6],*p,*u;
 232   1                first();
 233   1                p=a;u=d;
 234   1               Read_Flash(u,0x06,6);
 235   1               count=0;
 236   1              
 237   1               k=0;
 238   1               cs=1;
 239   1               key=1;
 240   1               clk=0;
 241   1               dat=0;
C51 COMPILER V9.01   DIANZIMIMASUO                                                         04/09/2012 09:13:21 PAGE 5   

 242   1               delayms(25);
 243   1               cs=0;
 244   1               send(0xa4);
 245   1               cs=1;
 246   1               while(1)       
 247   1               { for(count=0;count<7;count++)
 248   2                { if(key==0)
 249   3                {  cs=0;
 250   4                   send(0x15);
 251   4                   keynum=receive();
 252   4                   cs=1;
 253   4                 switch(keynum)
 254   4                 {   case 0x1e:  i=0x0d;break;         //0x0d,改密键
 255   5                     case 0x16:  i=0x0c;break;
 256   5                     case 0x0e:  i=0x0b;break;
 257   5                         case 0x06:  i=0x0a;break;
 258   5                         case 0x1d:  i=0x0e;break;                 //0x0e,取消键
 259   5                         case 0x15:  i=0x09;break;
 260   5                         case 0x0d:  i=0x06;break;
 261   5                         case 0x05:  i=0x03;break;
 262   5                         case 0x1c:  i=0x0f;break;     //0x0f,确定键
 263   5                         case 0x14:  i=0x08;break;
 264   5                         case 0x0c:  i=0x05;break;
 265   5                         case 0x04:  i=0x02;break;
 266   5                         case 0x1b:  i=0x00;break;
 267   5                         case 0x13:  i=0x07;break;
 268   5                         case 0x0b:  i=0x04;break;
 269   5                         case 0x03:  i=0x01;break;
 270   5                         default : break;
 271   5                 }
 272   4                if(count<6)
 273   4                {    if((i!=0x0f)&&(i!=0x0e)&&(i!=0x0d))
 274   5                     {cs=0;send(0xcb);send(0x00);cs=1;a[count]=i;} }
 275   4                if(i==0x0e)
 276   4                {count=0;cs=0;send(0xa4);cs=1;}
 277   4                if((i=0x0f)&&(count==6))
 278   4                {count=0;cs=0;send(0xcb);send(0x0f);cs=1;
 279   5                 js=compare(p,q); jp=compare(p,u); k=js|jp; 
 280   5                  if(k) bill1();  else bill2(); }
 281   4                if((i=0x0d)&&k)
 282   4                {cs=0;send(0xcb);send(0x0d);cs=1;count=0;
 283   5                  for(s=0;s<6;s++)
 284   5                      {d[s]=a[s];}  Write_Flash(u,0x06,6);}
 285   4                 while(key==0);
 286   4                }
 287   3                 while(key!=0);  
 288   3                 cs=0;
 289   3                 send(0xa0);
 290   3                 cs=1;                                                         
 291   3               }      } }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1015    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19      38
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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