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

📄 2.28.lst

📁 八位数字密码锁设计资料
💻 LST
字号:
C51 COMPILER V7.06   2_28                                                                  03/01/2007 18:07:27 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 2_28
OBJECT MODULE PLACED IN 2.28.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 2.28.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>             
   2          #include<math.h>                
   3          #include<intrins.h>              
   4          #define uchar unsigned char      
   5          #define uint unsigned int
   6          #define  data_IO P2
   7          
   8          sbit     rs=P3^0;       //指令和数据寄存器 “1是数据,” “0是指令”
   9          sbit     rw=P3^1;//读写控制,“1读” “0写”
  10          sbit      e=P3^2; //片选信号
  11          sbit      p=P2^7;
  12          sbit   deng=P0^0;///响音乐的端口
  13          sbit   md=P0^1;///修改密码时的灯
  14          
  15          
  16          uchar  pwflag;//密码是否正确的标志位
  17          uchar  count;//
  18          uchar  gg=0 ;//只有输入正确的密码才能修改密码
  19          uchar  cs=3 ;//输入密码的错误次数
  20          
  21          
  22          uchar m[]={1,2,3,4,5,6}; ///初始密码
  23          static uchar mbuf[6];///输入的密码
  24          
  25          
  26           char d[32]={' ','I','M','P','O','R','T',' ','C','I','P','H','E','R',':',' ',
  27                       ' ',' ','_',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};//输入密码
  28          
  29          code  char ks[32]={'C','O','N','G','R','A','T','U','L','A','T','E',' ','Y','O','U',
  30                                    ' ','O','P','E','N','I','N','G',' ',' ','L','O','C','K','!',' '};////开锁
  31          
  32          code char cw[32]={' ','C','I','P','H','E','R',' ',' ','E','R','R','O','R',' ',' ',
  33                                        '~','~','~','~','~','~','~','~','~','~','~','~','~','~','~','~' };////错误          
  34          
  35          code char xc[32]={' ',' ','A','M','E','N','D',' ','S','U','C','C','E','E','D',' ',
  36                            ' ',' ',' ',' ',' ','!','!','!','!','!','!',' ',' ',' ',' ',' '};//修改成功  
  37          
  38          code char xg[32]={' ','A','M','E','N','D',' ',' ','C','I','P','H','E','R',':',' ',
  39                            ' ',' ',' ',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};///修改密码*/
  40          
  41          
  42          void yanshi(uint n)///////////////延时函数///////////////////////////////////
  43          {
  44   1       uint i;
  45   1        for(i=0;i<n;i++){};
  46   1      }
  47          
  48          void delay(uint n)///////////////延时函数///////////////////////////////////
  49          {
  50   1       uint i,j;
  51   1        for(i=0;i<1000;i++)
  52   1         {for(j=0;j<n;j++){}}
  53   1         
  54   1      }
  55          
C51 COMPILER V7.06   2_28                                                                  03/01/2007 18:07:27 PAGE 2   

  56          void busy() ////////////////////判断是否忙////////////////////////////////////////
  57          {data_IO=0xff;
  58   1       rs=0; //写指令        ////////////////////
  59   1       rw=1; //表示读状态    // 三个的状态表示 //
  60   1       e=1;  //下降延//      // 判忙状态       //
  61   1       while(!p);         ////////////////////
  62   1      // e=0;
  63   1      } 
  64          void xiezl(uchar shuju) /////////////////////*写指令*/////////////////////////////
  65          {
  66   1       busy();/*yanshi(6500);*/
  67   1       data_IO=shuju;
  68   1       rs=0; //写指令        ////////////////////
  69   1       rw=0; //表示写状态    // 三个的状态表示 //
  70   1       e=1;  //下降延//      // 写指令         //
  71   1       e=0;  /////////       ////////////////////
  72   1      
  73   1      }
  74          
  75          void w_dat(uint n)//////////////////写数据//////////////////////////
  76          {
  77   1       busy(); /*yanshi(6500) ;*/
  78   1        data_IO=n;
  79   1         rs=1; //写数据       ////////////////////
  80   1         rw=0; //表示写状态    // 三个的状态表示 //
  81   1         e=1;  //下降延//      //写数据         //
  82   1         e=0;  /////////       ////////////////////
  83   1        // return;
  84   1      }
  85          
  86          void xianshi(uchar js[]) //////////////////显示函数///////////////////////////////
  87          {
  88   1        uchar h,v;
  89   1        xiezl(0x01); //清屏显示
  90   1        yanshi(2000) ;
  91   1        xiezl(0x80); // DDRAM地址的设置
  92   1       for(h=0;h<16;h++)
  93   1         {w_dat(js[h]);  ///n表示有写几位数据
  94   2         yanshi(100) ;
  95   2         }
  96   1         xiezl(0xc0);//换行
  97   1       for(v=(16);v<32;v++)
  98   1         {w_dat(js[v]);  ///n表示有写几位数据
  99   2         yanshi(100) ;
 100   2         }
 101   1      }
 102          
 103          void chushihua(void)///////////////////*液晶模块初始化*/
 104           { uchar i;
 105   1         rs=0; //写指令
 106   1         rw=0; //表示写状态
 107   1         e=0;  //使能
 108   1         for(i=0;i<3;i++)
 109   1         {
 110   2          xiezl(0x38);  //功能设置,8位,一行显示,5*7点阵
 111   2          yanshi(1000);
 112   2         }
 113   1          xiezl(0x38); //两行显示
 114   1          xiezl(0x0f); //显示开关控制位
 115   1          xiezl(0x18); //移位控制,光标和显示一起左移  
 116   1          xiezl(0x06); //设置输入模式
 117   1          xiezl(0x01); //清屏显示
C51 COMPILER V7.06   2_28                                                                  03/01/2007 18:07:27 PAGE 3   

 118   1          xiezl(0x80); // DDRAM地址的设置
 119   1          }
 120          
 121          bit pwcmp(void)
 122          {
 123   1              bit flag;
 124   1              uchar i;
 125   1              for (i=0;i<6;i++)
 126   1              {
 127   2                      if (m[i]==mbuf[i])   flag = 1;   //*密码正确*/
 128   2                      else  { flag = 0;  i=6; } //*密码错误*/
 129   2              }
 130   1              return(flag);
 131   1      }
 132          
 133          void gb(void)/////////转移光标
 134          {  uchar c;
 135   1         xiezl(0xc0);//换行
 136   1         yanshi(3000) ;
 137   1         for(c=0;c<5;c++)
 138   1         {w_dat(' ');///n表示有写几位数据
 139   2          yanshi(2000) ;
 140   2         } 
 141   1      }
 142          uchar getkey(void)///得到键值
 143          { uchar h,l,k;
 144   1        while(P1!=0x0f)
 145   1        {
 146   2         h=P1&0x0f;
 147   2         P1=0xf0;
 148   2         l=P1&0xf0;
 149   2         k=h|l;
 150   2         return(k);
 151   2        }
 152   1      }
 153          
 154          
 155          void diaoyong(uchar i)///////////调用各键的函数//////输入密码
 156          {  uchar lq;
 157   1               switch(i)
 158   1                  {
 159   2                case 0x7e: if (count<6) { mbuf[count]=1; count++;  w_dat('*');} break;  // 01111110       1
 160   2                case 0xbe: if (count<6) { mbuf[count]=2; count++;  w_dat('*');}break;  // 10111110             2
 161   2                case 0xde: if (count<6) { mbuf[count]=3; count++;  w_dat('*');} break;  // 11011110            3
 162   2                case 0xee: if (count<6) { mbuf[count]=4; count++;  w_dat('*');} break;  // 11101110            4
 163   2      
 164   2                case 0x7d: if (count<6) { mbuf[count]=5; count++;  w_dat('*');} break;  // 01111101            5
 165   2                case 0xbd: if (count<6) { mbuf[count]=6; count++;  w_dat('*');} break; // 10111101             6
 166   2                case 0xdd: if (count<6) { mbuf[count]=7; count++;  w_dat('*');} break;  // 11011101            7
 167   2                case 0xed: if (count<6) { mbuf[count]=8; count++;  w_dat('*');} break;  // 11101101            8
 168   2      
 169   2                case 0x7b: if (count<6) { mbuf[count]=9; count++;  w_dat('*');} break;  // 01111011            9
 170   2                case 0xbb: if (count<6) { mbuf[count]=0; count++;  w_dat('*');}break;  // 10111011             0
 171   2                case 0xdb:   if (count==6) { pwflag = pwcmp();}   else  pwflag = 0;// 只有输入6个密码后按确认键

⌨️ 快捷键说明

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