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

📄 st.lst

📁 单片机密码锁程序源码
💻 LST
字号:
C51 COMPILER V6.12  ST                                                                     12/28/2007 17:13:30 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE ST
OBJECT MODULE PLACED IN .\st.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE C:\st.c DEBUG OBJECTEXTEND PRINT(.\st.lst) OBJECT(.\st.obj) 

stmt level    source

   1          ///////////////密码锁程序//////////////////////
   2          #include<reg51.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          //////////////////////////////////////////////////////////
   6          #define a 0x80
   7          #define b 0x40
   8          #define c 0x20
   9          #define d 0x10
  10          #define e 0x08
  11          #define f 0x04
  12          #define g 0x02
  13          #define dp 0x01
  14          uchar     n;
  15          ///////////////////延时子程序/////////////////////////
  16          void delay(uint i){uint j;
  17   1                         for(j=0;j<i;j++)
  18   1      			{;}}
  19          //////////////////数据显示字模(共阳)/////////////////////
  20          uchar const disp_code[16]={a+b+c+d+e+f,
  21                                     b+c,
  22                                     a+b+d+e+g,
  23          						   a+b+c+d+g,
  24          						   b+c+f+g,
  25          						   a+c+d+f+g,
  26          						   a+c+d+e+f+g,
  27          						   a+b+c,
  28          						   a+b+c+d+e+f+g,
  29          						   a+b+c+d+f+g,
  30                                     a+b+c+e+f+g,
  31                                     c+d+e+f+g,
  32                                     a+d+e+f,
  33                                     b+c+d+e+g,
  34                                     a+d+e+f+g,
  35                                     a+e+f+g};
  36                               uchar disp_busf[4];
  37          ///////////////////动态显示子程序/////////////////////                     
  38          void display(void){P0&=~0x08;
  39   1                         P2=~disp_code[disp_busf[0]];
  40   1      						 delay(100);
  41   1      						 P0|=0x0f;
  42   1                         P0&=~0x04;
  43   1                         P2=~disp_code[disp_busf[1]];
  44   1      						 delay(100);
  45   1      						 P0|=0x0f;
  46   1      						 P0&=~0x02;
  47   1                         P2=~disp_code[disp_busf[2]];
  48   1      						 delay(100);
  49   1      						 P0|=0x0f;
  50   1                         P0&=~0x01;
  51   1                         P2=~disp_code[disp_busf[3]];
  52   1      						 delay(100);
  53   1      						 P0|=0x0f;}
  54          ///////////////////键盘扫描子程序(反转法)///////////////////////
  55          uchar key_scan(void){uchar i,j;
C51 COMPILER V6.12  ST                                                                     12/28/2007 17:13:30 PAGE 2   

  56   1                           P1=0x0f;
  57   1                           i=P1;
  58   1                           i&=0x0f;
  59   1                           if(i==0x0f) return(0xff);
  60   1                           delay(1000);
  61   1                           P1|=0x0f;
  62   1                           i=P1;
  63   1                           i&=0x0f;
  64   1                           if(i==0x0f) return(0xff);
  65   1                           P1=0xf0;
  66   1                           j=P1;
  67   1                           j&=0xf0;
  68   1                           return(i+j);}
  69          ////////////////////键盘键值//////////////////////
  70          uchar const key_code[16]={0x77,0x7b,0x7d,0x7e,0xb7,0xbb,0xbd,0xbe,
  71                                   /*k1   k2   k3   k4   k5   k6   k7   k8*/
  72                                    0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};
  73                                   /*k9   k10  k11  k12  k13  k14  k15  k16*/ 
  74          ///////////////////键盘扫描与键值译码子程序//////////////////////////
  75          uchar key(void){uchar i,j;
  76   1                      i=key_scan();
  77   1                      if(i==0xff) return(0xff);
  78   1                 loop:j=key_scan();
  79   1                      if(j!=0xff) goto loop;
  80   1                      for(j=0;j<16;j++)
  81   1                         {if(i==key_code[j]) break;}
  82   1                      return(j);}
  83          //////////////////////定时器0的中断服务程序//////////////////////////
  84          void xianshi(void) interrupt 1 using 1///中断方式显示数据////////////
  85               {TH0=50000/256;
  86   1            TL0=50000%256;
  87   1            display();}
  88          uchar key_busf;
  89          //////////////////////清除后从新输入////////////////////////////////////
  90          void qingchu(void)
  91                     {          disp_busf[3]=0;
  92   1      	                  disp_busf[2]=0;
  93   1      	                  disp_busf[1]=0;
  94   1      	                  disp_busf[0]=0;P0&=0xff;
  95   1      						return; }
  96          /////////////////////初始密码数据/////////////////////////////////////
  97          uchar mima[4]={1,1,2,2};
  98          uchar xiu_gai[4];
  99          ///////////////////////输入数据子程序////////////////////////////////
 100          void shuru(void){uchar i,j,k,n;
 101   1                             j=0;k=0;
 102   1      					 loop:i=key();
 103   1                       if(i==0xff) goto loop;
 104   1                       else if(i<10)
 105   1                          {P0|=0xf0;
 106   2                             disp_busf[3]=disp_busf[2];
 107   2                           disp_busf[2]=disp_busf[1];
 108   2                           disp_busf[1]=disp_busf[0];
 109   2                           disp_busf[0]=i;}
 110   1      				else if(i==0x0d)
 111   1      						  qingchu();	  
 112   1                       else if(i==0x0f)
 113   1                          {for(i=0;i<4;i++)
 114   2                              {if(disp_busf[i]!=mima[i]) break;}
 115   2                           if(i!=4)
 116   2                               {P0|=0xf0;
 117   3      						j=j+1;
C51 COMPILER V6.12  ST                                                                     12/28/2007 17:13:30 PAGE 3   

 118   3      						if(j>2) 
 119   3      							{P0|=0xf0;delay(500);P0&=0x0f;delay(500);
 120   4      								P0&=0x7f;delay(240000);
 121   4      								disp_busf[3]=0;
 122   4      	                  disp_busf[2]=0;
 123   4      	                  disp_busf[1]=0;
 124   4      	                    disp_busf[0]=0;}
 125   3      								}/////////蜂鸣器报警
 126   2                           else 
 127   2                              {P3|=0x40;j=0;delay(240000);
 128   3      					  disp_busf[3]=0;
 129   3      	                  disp_busf[2]=0;
 130   3      	                  disp_busf[1]=0;
 131   3      	                  disp_busf[0]=0;}} 
 132   1      				
 133   1                 else if(i==0x0e)		 
 134   1      		 { 
 135   2      					  for(i=0;i<4;i++)
 136   2                              {if(disp_busf[i]!=mima[i]) break;}
 137   2                            if(i!=4)
 138   2      						{P0|=0xf0;delay(500);P0&=0x0f;delay(500);
 139   3                            P0|=0xf0;delay(500);P0&=0x0f;delay(500);  
 140   3      					  disp_busf[3]=0;
 141   3      	                  disp_busf[2]=0;
 142   3      	                  disp_busf[1]=0;
 143   3      	                  disp_busf[0]=0;  return; 	} 
 144   2      				else	 {
 145   3      						disp_busf[3]=0;
 146   3      	                    disp_busf[2]=0;
 147   3      	                    disp_busf[1]=0;
 148   3      	                    disp_busf[0]=0;
 149   3      				    loop1:  i=key();
 150   3      						   if(i==0xff) goto loop1;
 151   3      						  else if(i<10) 
 152   3      						  { disp_busf[3]=disp_busf[2];
 153   4      							disp_busf[2]=disp_busf[1];
 154   4      							disp_busf[1]=disp_busf[0];
 155   4      							disp_busf[0]=i;
 156   4      						  }
 157   3      						  else if(i==0x0d)
 158   3      						  qingchu();
 159   3      						  else if(i==0x0f) 
 160   3      						  { 	//////////////////////////////
 161   4      						    xiu_gai[0]=disp_busf[0];
 162   4      						    xiu_gai[1]=disp_busf[1];
 163   4      						    xiu_gai[2]=disp_busf[2];
 164   4      						    xiu_gai[3]=disp_busf[3];
 165   4      								disp_busf[3]=0;
 166   4      	                            disp_busf[2]=0;
 167   4      	                            disp_busf[1]=0;
 168   4      	                            disp_busf[0]=0;}
 169   3      						
 170   3      						loop3:		i=key();
 171   3                       if(i==0xff) goto loop3;
 172   3                       else if(i<10)
 173   3                          {	
 174   4                           disp_busf[3]=disp_busf[2];
 175   4                           disp_busf[2]=disp_busf[1];
 176   4                           disp_busf[1]=disp_busf[0];
 177   4                           disp_busf[0]=i;}
 178   3      				else if(i==0x0d)
 179   3      						  {	
C51 COMPILER V6.12  ST                                                                     12/28/2007 17:13:30 PAGE 4   

 180   4      						   disp_busf[3]=0;
 181   4      	                       disp_busf[2]=0;
 182   4      	                       disp_busf[1]=0;
 183   4      	                       disp_busf[0]=0;
 184   4                                 goto loop3;}  
 185   3                       else if(i==0x0f)
 186   3                          {for(i=0;i<4;i++)
 187   4                              {if(xiu_gai[i]!=disp_busf[i]) break;}
 188   4                           if(i!=4)
 189   4                               {P0|=0xf0;return;			
 190   5      						 mima[n]=xiu_gai[n];
 191   5      						 delay(240000);
 192   5      						disp_busf[3]=0;
 193   5      	                    disp_busf[2]=0;
 194   5      	                    disp_busf[1]=0;
 195   5      	                    disp_busf[0]=0;}								  
 196   4      							return;} goto loop3;
 197   3      						  }
 198   2      					   goto loop1;}
 199   1      					 
 200   1      
 201   1      				 goto loop;}
 202          
 203          				
 204          					 
 205                              
 206          void main(void){TMOD=0x01;
 207   1                      TH0=50000/256;
 208   1                      TL0=50000%256;
 209   1                      ET0=1;
 210   1                      TR0=1;
 211   1                      EA=1;
 212   1                 loop:shuru();
 213   1      	                goto loop;}


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    566    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     46       3
   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 + -