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

📄 pwlock.lst

📁 开发环境 KEIl 用4*4键盘组成0~9,确认,取消,共12个数字按键,用6位7段数码管组成显示电路,加电后,显示888888,输入密码时,会逐位显示F,密码输入过程中有错,可以按取消键再重新
💻 LST
📖 第 1 页 / 共 2 页
字号:
 167   1              /* 启动计数器0,关闭计数器1 */
 168   1              TR0 = 1;
 169   1              ET0 = 1;
 170   1              TR1 = 0;
 171   1              ET1 = 1;
 172   1              EA = 1;
 173   1      
 174   1              count = 0;                                              // 初始没有输入密码,计数器设为0
 175   1              enterflag = 0;                                  // 没有按下确认键
 176   1              pwflag = 0;                                             // 密码标志先置为0
 177   1          green = 1;                                          // 绿灯不亮
 178   1              red = 1;                                                // 红灯不亮
 179   1              
C51 COMPILER V8.08   PWLOCK                                                                12/20/2008 04:18:22 PAGE 4   

 180   1              /* 假设内定密码为937602 */
 181   1              pw[0] = 5;
 182   1              pw[1] = 1;
 183   1              pw[2] = 2;
 184   1              pw[3] = 0;
 185   1              pw[4] = 2;
 186   1              pw[5] = 8;
 187   1              
 188   1              digbit = 0x01;                                  // 从第一位数码管开始动态扫描
 189   1      
 190   1              /* 刚加电时,显示888888 */
 191   1              for (j=0;j<6;j++)
 192   1                      wordbuf[j] = 8;
 193   1      
 194   1              showflag = 1;                                   // 打开数码管显示
 195   1      
 196   1              while(1)
 197   1        {       P1 = 0xf0;
 198   2            if ((P1&0xf0)!=0xf0)      //       有健按下
 199   2                      {
 200   3                              key = keyscan();                                        // 调用键盘扫描函数
 201   3                              switch(key)
 202   3                              {
 203   4                              case 0x11:                                              // 1行1列,数字0
 204   4                                              if (count<6)
 205   4                                              {
 206   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F”
 207   5                                                      pwbuf[count] = 0;
 208   5                                                      count++;
 209   5                                              }
 210   4                                              break;
 211   4                                      case 0x21:                                              // 1行2列,数字1
 212   4                                              if (count<6)
 213   4                                              {
 214   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 215   5                                                      pwbuf[count] = 1;
 216   5                                                      count++;
 217   5                                              }
 218   4                                              break;                  
 219   4                                      case 0x41:                                              // 1行3列,数字2
 220   4                                              if (count<6)
 221   4                                              {
 222   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 223   5                                                      pwbuf[count] = 2;
 224   5                                                      count++;
 225   5                                              }
 226   4                                              break;
 227   4                              case 0x81:                                              // 1行4列,数字3
 228   4                                              if (count<6)
 229   4                                              {
 230   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 231   5                                                      pwbuf[count] = 3;
 232   5                                                      count++;
 233   5                                              }
 234   4                                              break;
 235   4                                      case 0x12:                                              // 2行1列,数字4
 236   4                                              if (count<6)
 237   4                                              {
 238   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 239   5                                                      pwbuf[count] = 4;
 240   5                                                      count++;
 241   5                                              }
C51 COMPILER V8.08   PWLOCK                                                                12/20/2008 04:18:22 PAGE 5   

 242   4                                              break;
 243   4                                      case 0x22:                                              // 2行2列,数字5
 244   4                                              if (count<6)
 245   4                                              {
 246   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 247   5                                                      pwbuf[count] = 5;
 248   5                                                      count++;
 249   5                                              }
 250   4                                              break;
 251   4                                      case 0x42:                                              // 2行3列,数字6
 252   4                                              if (count<6)
 253   4                                              {
 254   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 255   5                                                      pwbuf[count] = 6;
 256   5                                                      count++;
 257   5                                              }
 258   4                                              break;
 259   4                                      case 0x82:                                              // 2行4列,数字7
 260   4                                              if (count<6)
 261   4                                              {
 262   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 263   5                                                      pwbuf[count] = 7;
 264   5                                                      count++;
 265   5                                              }
 266   4                                              break;
 267   4                                      case 0x14:                                              // 3行1列,数字8
 268   4                                              if (count<6)
 269   4                                              {
 270   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 271   5                                                      pwbuf[count] = 8;
 272   5                                                      count++;
 273   5                                              }
 274   4                                              break;
 275   4                                      case 0x24:                                              // 3行2列,数字9
 276   4                                              if (count<6)
 277   4                                              {
 278   5                                                      wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 279   5                                                      pwbuf[count] = 9;
 280   5                                                      count++;
 281   5                                              }
 282   4                                              break;
 283   4                                      case 0x44:                                              // 3行3列,确认键
 284   4                                              enterflag = 1;                          // 确认键按下
 285   4                                              if (count==6)                           // 只有输入6个密码后按确认键才作密码比较
 286   4                                                      pwflag = pwcmp();
 287   4                                              else                                            
 288   4                                                      pwflag = 0;                             // 否则直接pmflag赋0
 289   4                                              break;
 290   4                                      case 0x84:                                              // 3行4列,取消键
 291   4                                              count = 0;                                      // 密码计数清零
 292   4                                              for (j=0;j<6;j++)
 293   4                                              {
 294   5                                                      wordbuf[j] = 8;                 // 数码管显示888888
 295   5                                                      pwbuf[j] = 0x0f;                // 用FFFFFF清除已经输入的密码
 296   5                                              }
 297   4                                              break;
 298   4                                      default:break;
 299   4                              }
 300   3                          while((P1&0xf0)!=0xf0);  //松手检测
 301   3                                 
 302   3                              }
 303   2                              
C51 COMPILER V8.08   PWLOCK                                                                12/20/2008 04:18:22 PAGE 6   

 304   2                              
 305   2                              if (enterflag==1)                                       // 如果按下确认键
 306   2                              {
 307   3                                      enterflag = 0;                                  // 标志位置回0
 308   3                                      count = 0;                                              // 密码位计数器清零
 309   3                                      for (j=0;j<6;j++)
 310   3                                              pwbuf[j] = 0x0f;                        // 用FFFFFF清除已经输入的密码                   
 311   3                                      showflag = 0;                                   // 关闭数码管显示
 312   3                                      TR1 = 1;                                                // 计数器1开始计数
 313   3                                      t1count = 0;                                    // 定时器1由50ms累积到1s所用的计数器
 314   3                                      if (pwflag==1)                  
 315   3                                              green = 0;                                      // 绿灯亮
 316   3                                      else                                                    
 317   3                                              red = 0;                                        // 红灯亮               
 318   3                              }
 319   2                         
 320   2                               
 321   2              }   
 322   1      }
 323          
 324          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    938    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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