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

📄 pwlock.lst

📁 51单片机C语言应用程序设计实例精讲.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
 163   1              /* 50ms 定时设置 */
 164   1              TH1 = -50000/256;
 165   1              TL1 = -50000%256;
 166   1              
 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 V7.02b   PWLOCK                                                               09/15/2005 20:01:05 PAGE 4   

 180   1              /* 假设内定密码为937602 */
 181   1              pw[0] = 9;
 182   1              pw[1] = 3;
 183   1              pw[2] = 7;
 184   1              pw[3] = 6;
 185   1              pw[4] = 0;
 186   1              pw[5] = 2;
 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          {
 198   2                      key = keyscan();                                        // 调用键盘扫描函数
 199   2                      switch(key)
 200   2                      {
 201   3                      case 0x11:                                              // 1行1列,数字0
 202   3                                      if (count<6)
 203   3                                      {
 204   4                                              wordbuf[count] = 0x0f;  // 对应密码位上显示“F”
 205   4                                              pwbuf[count] = 0;
 206   4                                              count++;
 207   4                                      }
 208   3                                      break;
 209   3                              case 0x21:                                              // 1行2列,数字1
 210   3                                      if (count<6)
 211   3                                      {
 212   4                                              wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 213   4                                              pwbuf[count] = 1;
 214   4                                              count++;
 215   4                                      }
 216   3                                      break;                  
 217   3                              case 0x41:                                              // 1行3列,数字2
 218   3                                      if (count<6)
 219   3                                      {
 220   4                                              wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 221   4                                              pwbuf[count] = 2;
 222   4                                              count++;
 223   4                                      }
 224   3                                      break;
 225   3                      case 0x81:                                              // 1行4列,数字3
 226   3                                      if (count<6)
 227   3                                      {
 228   4                                              wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 229   4                                              pwbuf[count] = 3;
 230   4                                              count++;
 231   4                                      }
 232   3                                      break;
 233   3                              case 0x12:                                              // 2行1列,数字4
 234   3                                      if (count<6)
 235   3                                      {
 236   4                                              wordbuf[count] = 0x0f;  // 对应密码位上显示“F"
 237   4                                              pwbuf[count] = 4;
 238   4                                              count++;
 239   4                                      }
 240   3                                      break;
 241   3                              case 0x22:                                              // 2行2列,数字5
C51 COMPILER V7.02b   PWLOCK                                                               09/15/2005 20:01:05 PAGE 5   

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

 304   3                                      pwbuf[j] = 0x0f;                        // 用FFFFFF清除已经输入的密码                   
 305   3                              showflag = 0;                                   // 关闭数码管显示
 306   3                              TR1 = 1;                                                // 计数器1开始计数
 307   3                              t1count = 0;                                    // 定时器1由50ms累积到1s所用的计数器
 308   3                              if (pwflag==1)                  
 309   3                                      green = 0;                                      // 绿灯亮
 310   3                              else                                                    
 311   3                                      red = 0;                                        // 红灯亮               
 312   3                      }
 313   2              }    
 314   1      }
 315          
 316          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    916    ----
   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 + -