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

📄 pwlock.lst

📁 Very a useful monolithic machine source program , range are broad , the pragmatism is strong
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.09   PWLOCK                                                                05/23/2008 11:40:30 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE PWLOCK
OBJECT MODULE PLACED IN PWLock.OBJ
COMPILER INVOKED BY: E:\C51\BIN\C51.EXE PWLock.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*****************************************/
   2          /* Copyright (c) 2005, 通信工程学院      */
   3          /* All rights reserved.                  */
   4          /* 作    者:戴 佳                                               */
   5          /*****************************************/
   6          
   7          #ifndef _PWLOCK_H               // 防止PWLock.h被重复引用
   8          
   9          #define _PWLOCK_H
  10          
  11          #include <reg52.h>
  12          #include <absacc.h>
  13          #include <stdio.h>      
  14          #include <math.h>
  15          
  16          #define uchar unsigned char
  17          #define uint unsigned int
  18          
  19          uchar digbit;                                   // 字位
  20          uchar wordbuf[6];                               // 字型码缓冲区
  21          uchar t1count;                                  // 定时器1由50ms累积到1s所用的计数器
  22          uchar count;                                    // 密码位计数
  23          uchar pw[6];                                    // 初始密码存储区
  24          uchar pwbuf[6];                                 // 输入密码存储区
  25          bit enterflag;                                  // 确认键按下与否标志
  26          bit pwflag;                                             // 密码正确与否标志
  27          bit showflag;                                   // 数码管显示与否标志
  28          sbit green=P3^0;
  29          sbit red=P3^1;
  30          
  31          /* 键消抖延时函数 */
  32          void delay(void)
  33          {
  34   1              uchar i;
  35   1              for (i=300;i>0;i--);
  36   1      }
  37          
  38          /* 键扫描函数 */
  39          uchar keyscan(void)
  40          {
  41   1              uchar scancode,tmpcode;
  42   1              P1 = 0xf0;                                                              // 发全0行扫描码
  43   1              if ((P1&0xf0)!=0xf0)                                    // 若有键按下
  44   1              {
  45   2                      delay();                                                        // 延时去抖动
  46   2                      if ((P1&0xf0)!=0xf0)                            // 延时后再判断一次,去除抖动影响
  47   2                      {
  48   3                              scancode = 0xfe;
  49   3                              while((scancode&0x10)!=0)               // 逐行扫描
  50   3                              {
  51   4                                      P1 = scancode;                          // 输出行扫描码
  52   4                                      if ((P1&0xf0)!=0xf0)            // 本行有键按下
  53   4                                      {
  54   5                                              tmpcode = (P1&0xf0)|0x0f;
  55   5      
C51 COMPILER V8.09   PWLOCK                                                                05/23/2008 11:40:30 PAGE 2   

  56   5                                              /* 返回特征字节码,为1的位即对应于行和列 */
  57   5                                              return((~scancode)+(~tmpcode));
  58   5                                      }
  59   4                                      else scancode = (scancode<<1)|0x01;             // 行扫描码左移一位
  60   4                              }
  61   3                      }
  62   2              }
  63   1              return(0);                                                              // 无键按下,返回值为0  
  64   1      }
  65          
  66          /* 定时器0中断服务子程序,2ms定时动态扫描显示 */
  67          void time0_int(void) interrupt 1 
  68          {
  69   1              /* 重置2ms定时 */
  70   1              TH0 = -2000/256;
  71   1              TL0 = -2000%256;
  72   1      
  73   1              if (showflag==1)
  74   1                      display();                              // 调用显示函数
*** WARNING C206 IN LINE 74 OF PWLOCK.C: 'display': missing function-prototype
  75   1      }
  76          
  77          /* 定时器1中断服务子程序,50ms*/
  78          void time1_int(void) interrupt 3 
  79          {
  80   1              uchar k;
  81   1              /* 重置50ms定时 */
  82   1              TH1 = -50000/256;
  83   1              TL1 = -50000%256;
  84   1      
  85   1              if (t1count<20)                         
  86   1              {
  87   2                      t1count++;
  88   2              }
  89   1              else                                            // 计时到1s
  90   1              {
  91   2                      TR1 = 0;                                // 关闭计数器1
  92   2                      t1count = 0;    
  93   2                      green = 1;                              // 绿灯不亮
  94   2                      red = 1;                                // 红灯不亮
  95   2                      showflag = 1;                   // 打开数码管显示
  96   2                      digbit = 0x01;                  // 从数码管第1位开始动态显示
  97   2                      for (k=0;k<6;k++)               // 显示888888
  98   2                              wordbuf[k] = 8;
  99   2              }
 100   1      }
 101          
 102          /* 根据共阴极字型编码表获取0~9,A~B字型代码 */
 103          uchar getcode(uchar i)
 104          {
 105   1              uchar p;
 106   1              switch (i)
 107   1              {
 108   2                      case 0:  p=0x3f;        break;                  /* 0 */
 109   2                      case 1:  p=0x06;        break;                  /* 1 */
 110   2                      case 2:  p=0x5B;        break;                  /* 2 */
 111   2                      case 3:  p=0x4F;        break;                  /* 3 */
 112   2                      case 4:  p=0x66;        break;                  /* 4 */
 113   2                      case 5:  p=0x6D;        break;                  /* 5 */
 114   2                      case 6:  p=0x7D;        break;                  /* 6 */
 115   2                      case 7:  p=0x07;        break;                  /* 7 */
 116   2                      case 8:  p=0x7F;        break;                  /* 8 */
C51 COMPILER V8.09   PWLOCK                                                                05/23/2008 11:40:30 PAGE 3   

 117   2                      case 9:  p=0x67;        break;                  /* 9 */
 118   2                      case 10: p=0x77;        break;                  /* A */
 119   2                      case 11: p=0x7C;        break;                  /* B */
 120   2                      case 12: p=0x39;        break;                  /* C */
 121   2                      case 13: p=0x5E;        break;                  /* D */
 122   2                      case 14: p=0x79;        break;                  /* E */
 123   2                      case 15: p=0x71;        break;                  /* F */
 124   2                      default:                        break;
 125   2              }
 126   1              return(p);
 127   1      }
 128          
 129          /* 显示函数 */
 130          void dsplay(void)
 131          {
 132   1              uchar i;
 133   1              switch (digbit)
 134   1              {
 135   2                      case 1:         i=0;    break;
 136   2                      case 2:         i=1;    break;
 137   2                      case 4:         i=2;    break;
 138   2                      case 8:         i=3;    break;
 139   2                      case 16:        i=4;    break;
 140   2                      case 32:        i=5;    break;
 141   2                      default:        break;
 142   2              }
 143   1      
 144   1              P2 = 0x0;                                               // 关闭显示
 145   1              P0 = getcode(wordbuf[i]);               // 送字型码
 146   1              P2 = digbit;                                    // 送字位码
 147   1              
 148   1              if (digbit<0x20)                                // 共6位
 149   1                      digbit = digbit*2;                      // 左移一位
 150   1              else
 151   1                  digbit = 0x01;
 152   1      }
 153          
 154          /* 密码比较函数 */
 155          bit pwcmp(void)
 156          {
 157   1              bit flag;
 158   1              uchar i;
 159   1              for (i=0;i<6;i++)
 160   1              {
 161   2                      if (pw[i]==pwbuf[i])
 162   2                              flag = 1;
 163   2                      else
 164   2                      {
 165   3                              flag = 0;
 166   3                              i = 6;
 167   3                      }
 168   2              }
 169   1              return(flag);
 170   1      }
 171          
 172          /* 主程序 */
 173          void main()

⌨️ 快捷键说明

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