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

📄 pwlock.lst

📁 51单片机C语言应用程序设计实例精讲.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   PWLOCK                                                               09/15/2005 20:01:05 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE PWLOCK
OBJECT MODULE PLACED IN PWLock.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PWLock.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************/
   2          /* Copyright (c) 2005, 通信工程学院      */
   3          /* All rights reserved.                  */
   4          /* 作    者:戴 佳                                               */
   5          /*****************************************/
   6          
   7          #include "PWLock.h"
   8          
   9          /* 键消抖延时函数 */
  10          void delay(void)
  11          {
  12   1              uchar i;
  13   1              for (i=300;i>0;i--);
  14   1      }
  15          
  16          /* 键扫描函数 */
  17          uchar keyscan(void)
  18          {
  19   1              uchar scancode,tmpcode;
  20   1              P1 = 0xf0;                                                              // 发全0行扫描码
  21   1              if ((P1&0xf0)!=0xf0)                                    // 若有键按下
  22   1              {
  23   2                      delay();                                                        // 延时去抖动
  24   2                      if ((P1&0xf0)!=0xf0)                            // 延时后再判断一次,去除抖动影响
  25   2                      {
  26   3                              scancode = 0xfe;
  27   3                              while((scancode&0x10)!=0)               // 逐行扫描
  28   3                              {
  29   4                                      P1 = scancode;                          // 输出行扫描码
  30   4                                      if ((P1&0xf0)!=0xf0)            // 本行有键按下
  31   4                                      {
  32   5                                              tmpcode = (P1&0xf0)|0x0f;
  33   5      
  34   5                                              /* 返回特征字节码,为1的位即对应于行和列 */
  35   5                                              return((~scancode)+(~tmpcode));
  36   5                                      }
  37   4                                      else scancode = (scancode<<1)|0x01;             // 行扫描码左移一位
  38   4                              }
  39   3                      }
  40   2              }
  41   1              return(0);                                                              // 无键按下,返回值为0  
  42   1      }
  43          
  44          /* 定时器0中断服务子程序,2ms定时动态扫描显示 */
  45          void time0_int(void) interrupt 1 
  46          {
  47   1              /* 重置2ms定时 */
  48   1              TH0 = -2000/256;
  49   1              TL0 = -2000%256;
  50   1      
  51   1              if (showflag==1)
  52   1                      display();                              // 调用显示函数
  53   1      }
  54          
  55          /* 定时器1中断服务子程序,50ms*/
C51 COMPILER V7.02b   PWLOCK                                                               09/15/2005 20:01:05 PAGE 2   

  56          void time1_int(void) interrupt 3 
  57          {
  58   1              uchar k;
  59   1              /* 重置50ms定时 */
  60   1              TH1 = -50000/256;
  61   1              TL1 = -50000%256;
  62   1      
  63   1              if (t1count<20)                         
  64   1              {
  65   2                      t1count++;
  66   2              }
  67   1              else                                            // 计时到1s
  68   1              {
  69   2                      TR1 = 0;                                // 关闭计数器1
  70   2                      t1count = 0;    
  71   2                      green = 1;                              // 绿灯不亮
  72   2                      red = 1;                                // 红灯不亮
  73   2                      showflag = 1;                   // 打开数码管显示
  74   2                      digbit = 0x01;                  // 从数码管第1位开始动态显示
  75   2                      for (k=0;k<6;k++)               // 显示888888
  76   2                              wordbuf[k] = 8;
  77   2              }
  78   1      }
  79          
  80          /* 根据共阴极字型编码表获取0~9,A~B字型代码 */
  81          uchar getcode(uchar i)
  82          {
  83   1              uchar p;
  84   1              switch (i)
  85   1              {
  86   2                      case 0:  p=0x3f;        break;                  /* 0 */
  87   2                      case 1:  p=0x06;        break;                  /* 1 */
  88   2                      case 2:  p=0x5B;        break;                  /* 2 */
  89   2                      case 3:  p=0x4F;        break;                  /* 3 */
  90   2                      case 4:  p=0x66;        break;                  /* 4 */
  91   2                      case 5:  p=0x6D;        break;                  /* 5 */
  92   2                      case 6:  p=0x7D;        break;                  /* 6 */
  93   2                      case 7:  p=0x07;        break;                  /* 7 */
  94   2                      case 8:  p=0x7F;        break;                  /* 8 */
  95   2                      case 9:  p=0x67;        break;                  /* 9 */
  96   2                      case 10: p=0x77;        break;                  /* A */
  97   2                      case 11: p=0x7C;        break;                  /* B */
  98   2                      case 12: p=0x39;        break;                  /* C */
  99   2                      case 13: p=0x5E;        break;                  /* D */
 100   2                      case 14: p=0x79;        break;                  /* E */
 101   2                      case 15: p=0x71;        break;                  /* F */
 102   2                      default:                        break;
 103   2              }
 104   1              return(p);
 105   1      }
 106          
 107          /* 显示函数 */
 108          void display(void)
 109          {
 110   1              uchar i;
 111   1              switch (digbit)
 112   1              {
 113   2                      case 1:         i=0;    break;
 114   2                      case 2:         i=1;    break;
 115   2                      case 4:         i=2;    break;
 116   2                      case 8:         i=3;    break;
 117   2                      case 16:        i=4;    break;
C51 COMPILER V7.02b   PWLOCK                                                               09/15/2005 20:01:05 PAGE 3   

 118   2                      case 32:        i=5;    break;
 119   2                      default:        break;
 120   2              }
 121   1      
 122   1              P2 = 0x0;                                               // 关闭显示
 123   1              P0 = getcode(wordbuf[i]);               // 送字型码
 124   1              P2 = digbit;                                    // 送字位码
 125   1              
 126   1              if (digbit<0x20)                                // 共6位
 127   1                      digbit = digbit*2;                      // 左移一位
 128   1              else
 129   1                  digbit = 0x01;
 130   1      }
 131          
 132          /* 密码比较函数 */
 133          bit pwcmp(void)
 134          {
 135   1              bit flag;
 136   1              uchar i;
 137   1              for (i=0;i<6;i++)
 138   1              {
 139   2                      if (pw[i]==pwbuf[i])
 140   2                              flag = 1;
 141   2                      else
 142   2                      {
 143   3                              flag = 0;
 144   3                              i = 6;
 145   3                      }
 146   2              }
 147   1              return(flag);
 148   1      }
 149          
 150          /* 主程序 */
 151          void main()
 152          {
 153   1              uchar j,key;
 154   1      
 155   1              P2 = 0x0;                                                       // 关闭数码管显示
 156   1              
 157   1              TMOD = 0x11;                                            // T0,T1工作方式1
 158   1      
 159   1              /* 2ms 定时设置 */
 160   1              TH0 = -2000/256;
 161   1              TL0 = 2000%256;
 162   1      

⌨️ 快捷键说明

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