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

📄

📁 c语言编程的8位密码锁
💻
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   最新                                                                  07/20/2008 15:07:46 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE 最新
OBJECT MODULE PLACED IN 最新.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 最新.c DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <reg51.h>
   3          #include <absacc.h>
   4          #include <STRING.H>
   5          #include <INTRINS.H>
   6          #define uchar unsigned char
   7          
   8          sbit row1=P1^0;
   9          sbit row2=P1^1;
  10          sbit row3=P1^2;
  11          sbit row4=P1^3;
  12          sbit col1=P1^4;
  13          sbit col2=P1^5;
  14          sbit col3=P1^6;
  15          sbit col4=P1^7;
  16          sbit P3_2=P3^2;
  17          sbit P3_0=P3^0;                         //控制报警//
  18          sbit P3_1=P3^1;
  19          bit key_flag=0;
  20          //sbit SDA=P3^7;
  21          //sbit SCL=P3^6;
  22          uchar pw_hash[8];       //存放原始密码的数组
  23          uchar pw_new[8];          //输入键号存放的单元
  24          uchar pw_p;
  25          uchar i;              
  26          uchar error_time;    //密码输入错误次数
  27          uchar pw_s;          //存放比较结果的变量
  28          uchar *pw_new_p;
  29          char key_s;                   
  30          uchar i=0;
  31          int a;
  32          int j;
  33          int b=0;
  34          int k=0;
  35          int t;
  36          int  KeyTemp;
  37          int  table[8]={0xFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
  38          int code duanma[]={0xC0,0xF9,0xA4,0xB0,
  39                                     0x99,0x92,0x82,0xF8,
  40                                     0x80,0x90,0x88,0x83,
  41                                     0xC6,0xA1,0x86,0x8E,
  42                             0xFF,0xBF};
  43          uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  44          void delay(int count);
  45          int KeyNum();
  46          void BeepCount(int count);
  47          int keydown(void);
  48          void display(void);
  49          int KeyUp(void);
  50          void delay1(void);
  51          //void IICStart(void);
  52          //void IICStop(void);
  53          //bit IICRecAck(void);
  54          //void IICAck(void);
  55          //void IICNoAck(void);
C51 COMPILER V7.07   最新                                                                  07/20/2008 15:07:46 PAGE 2   

  56          //bit IICSendByte(unsigned char sendbyte);
  57          //void R24C01(uchar Address,uchar idata *R24Ctemp,uchar QuantityByte );
  58          void main()
  59          {
  60   1              IE=0X00;                        //禁止中断
  61   1      
  62   1              P3_1=0;
  63   1              P3_2=0;
  64   1          //R24C01(0x00,pw_hash,8 );
  65   1              pw_hash[0] = 1;                //设置原始密码
  66   1              pw_hash[1] = 2;
  67   1              pw_hash[2] = 3;
  68   1          pw_hash[3] = 4;
  69   1              pw_hash[4] = 5;
  70   1              pw_hash[5] = 6;
  71   1              pw_hash[6] = 7;
  72   1              pw_hash[7] = 8;
  73   1              //pw_hash[8] = -1;
  74   1              
  75   1      begin:
  76   1          k=0;
  77   1              error_time = 0;             //错误次数赋初值0
  78   1               P3_2 = 0; 
  79   1              pw_p = 0;                                       
  80   1              
  81   1              while (error_time != 3)        //当错误次数没有超过3次时执行下面程序                      (0)
  82   1              {        
  83   2                      a = keydown();         //判断是否有键按下     
  84   2                      if (a==1)           //若返回值为1,执行下面的程序(为1代表有键按下)            (1)
  85   2                              {
  86   3                              key_s=KeyNum();
  87   3                              BeepCount(1);         //按一下键发一次声音
  88   3                              if (key_s > 0  && key_s <11)        //如果键值在0~10之间                           
  89   3                                      {
  90   4                                      if (key_s == 10 ) key_s = 16;     //键值为10时,将key_s赋0
  91   4                                      //sendbyte(key_s);                 //发键值到AT24C01
  92   4                                      pw_new[pw_p] = key_s;            //同时将键值放入pw_new数组中                   
  93   4                                  }
  94   3                                   
  95   3                                    /***************以下是比较密码,只有按下确认键后才进行比较*******************/
  96   3                                    
  97   3                      if (key_s == 15)                     //确认键 
  98   3                              {                                                                                  //(2) 
  99   4                                pw_p=8;                          //将8赋给pw_new
 100   4                                      pw_s = strncmp (pw_hash, pw_new, pw_p);    //键值和设定的密码进行逐个比较,这里八位密码都进行了比较
 101   4                                      if (pw_s != 0)                     //如果比较结果返回的是1,说明不相等
 102   4                                              {                                                                                                                               //(3)
 103   5                                              error_time += 1; 
 104   5                                              
 105   5                                                                                         for(j=0;j<8;j++)
 106   5                                                                                         {table[j]=0xFF;}            //错误次数加1
 107   5                                                                                       k=-1;
 108   5                                         //pw_p = -1;                      //pw_p赋-1 ,
 109   5                                              //CLS;                            //CLS 代表cls = 0; cls = 1结束信号
 110   5      
 111   5                              } 
 112   4                                      else                               //比较结果相等时
 113   4                                      {                                                                     
 114   5                                              P3_2 = 1;                      //开锁灯亮标志置1
 115   5                                              P2=0x00;
 116   5                                              while (1)                     //可以开始设置新密码
 117   5                                                      {                                                          //(4)
C51 COMPILER V7.07   最新                                                                  07/20/2008 15:07:46 PAGE 3   

 118   6                                                      key_s = KeyNum();         //键值送key_s
 119   6                                                      k=0;
 120   6                                                      if (key_s == 14)         //按键14,也即代表要设置密码了
 121   6                                                      {   
 122   7                                                      int j;
 123   7                                                       for(j=0;j<8;j++)
 124   7                                                                                         {table[j]=0xFF;}                                                       //(5)
 125   7                                                      //      CLS;                 
 126   7                                                      //      pw_p = 0;            //pw_p置0?
 127   7                                                      
 128   7                                                      
 129   7                                                      
 130   7                                                              /************开始设置密码***************/
 131   7                                                      pw_p=0;  
 132   7                                                              while(1)  
 133   7                                                                       
 134   7                                                                      {                                              //(6)                  
 135   8                                                                      a = keydown();   
 136   8                                                                      if (a==1)
 137   8                                                                              {   
 138   9                                                                              key_s=KeyNum();                                       //(7)
 139   9                                                                              if (key_s > 0  && key_s <11)
 140   9                                                                                      {
 141  10                                                                              
 142  10                                                                                      if (key_s == 10 ) 
 143  10                                                                                      key_s = 16;
 144  10                                                                                      //sendbyte(key_s);
 145  10                                                                                      pw_hash[pw_p] = key_s;   //将新密码放入pw_hash数组中
 146  10                                                                                  }
 147   9                                                                                      
 148   9                                                                                  pw_p += 1;
 149   9                                                                              b=key_s;
 150   9                                              table[k]=duanma[b];
 151   9                                                  k++;                   
 152   9                                                                                  if (key_s == 11)            //确认键
 153   9                                                                                      {  int j;
 154  10                                                                                         for(j=0;j<8;j++)
 155  10                                                                                         {table[j]=0xFF;}
 156  10                                                                                                                      
 157  10                                                                                      //pw_hash[pw_p] = -1;    //不知道什么意思
 158  10                                                                                      //W24C01(0x00,pw_hash,pw_p); //按下确认键后保存密码
 159  10                                                                                      //CLS;                       
 160  10                                                                                      goto begin;                //密码已设置完,跳到开始的begin处
 161  10                                                                                  }                                                       
 162   9                                                                           }                             //(7)
 163   8                                                                               for(t=0;t<8;t++)
 164   8                                                         {
 165   9                                                             P2=weima[t];        //位码送P2
 166   9                                                             P0=table[t];       //段选码送P0
 167   9                                                             delay(5);
 168   9                                                                                                      }
 169   8                                                                   }                                    //(6)
 170   7                                                      }                                      //(5)
 171   6                                              }                                         //(4)
 172   5                                      }                                             //(3)
 173   4                              }                                                 //(2)处结束 
 174   3                              //if (key_s == 12)                      //
 175   3                              //{
 176   3                                      //for(j=0;j<8;j++)
 177   3                       //{table[j]=0xFF;}  //
 178   3                
 179   3                        
C51 COMPILER V7.07   最新                                                                  07/20/2008 15:07:46 PAGE 4   

 180   3                                       //     pw_p = -1;
 181   3                                      //      CLS;
 182   3                                      /**********显示*************/
 183   3                      
 184   3                        pw_p += 1; 
 185   3                    b=key_s;
 186   3                table[k]=duanma[b];
 187   3                      k++;
 188   3                                                                                                                 
 189   3                      }                                     //(1)处结束
 190   2                  for(t=0;t<8;t++)
 191   2                     {
 192   3                      P2=weima[t];       //位码送P2

⌨️ 快捷键说明

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