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

📄 c8155.lst

📁 3000TB51配套实验例程 1八段数码管显示实验 等
💻 LST
字号:
C51 COMPILER V7.07   C8155                                                                 06/21/2005 17:13:57 PAGE 1   


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

stmt level    source

   1          /*   "验证式?   实验十二? 键盘扫描显示实验    */
   2          #include<absacc.h>
   3          #define LEDLen 6
   4          #define mode 0x03;
   5          #define CAddr XBYTE[0xe100]/* 控制字地址 */
   6          #define OUTBIT XBYTE[0xe101]/*  位控制口 */
   7          #define CLK164 XBYTE[0xe102]/* 段控制口(接164时钟位) */
   8          #define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位) */
   9          #define IN     XBYTE[0xe103] /* 键盘读入口 */
  10          
  11          
  12          unsigned char LEDBuf[LEDLen];  /* 显示缓冲 */
  13          code unsigned char LEDMAP[] = {  /* 八段管显示码 */
  14            0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  15            0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
  16          };
  17          
  18          void Delay(unsigned char CNT)
  19          {
  20   1        unsigned char i;
  21   1      
  22   1        while (CNT-- !=0)
  23   1          for (i=100; i !=0; i--);
  24   1      }
  25          
  26          void DisplayLED()
  27          {
  28   1        unsigned char i, j;
  29   1        unsigned char Pos;
  30   1        unsigned char LED;
  31   1      
  32   1        Pos = 0x20;  /* 从左边开始显示 */
  33   1        for (i = 0; i < LEDLen; i++) {
  34   2          OUTBIT = 0;     /* 关所有八段管 */
  35   2          LED = LEDBuf[i];
  36   2          for (j = 0; j < 8; j++) {   /* 送164 */
  37   3            if (LED & 0x80) DAT164 = 1; else DAT164 = 0;
  38   3            CLK164 = CLK164|0x02;
  39   3            CLK164 = CLK164&0xfd;
  40   3            LED <<= 1;
  41   3          }
  42   2          OUTBIT = Pos;  /* 显示一位八段管 */
  43   2          Delay(1);
  44   2          Pos >>= 1;     /* 显示下一位 */
  45   2        }
  46   1      }
  47          
  48          code unsigned char KeyTable[] = {   /* 键码定义 */
  49                     0x00, 0x01, 0x04, 0x07 ,
  50                     0x0f, 0x02, 0x05, 0x08,
  51                     0x0e, 0x03, 0x06, 0x09 ,
  52                     0x0d, 0x0c, 0x0b, 0x0a ,
  53                     0x10,0x11,0x12,0x13,0x14,
  54                     0x15,0x16,
  55          };
C51 COMPILER V7.07   C8155                                                                 06/21/2005 17:13:57 PAGE 2   

  56          
  57          unsigned char TestKey()
  58          {
  59   1         OUTBIT = 0;            /* 输出线置为0 */
  60   1         return (~IN & 0x0f);   /* 读入键状态 (高四位不用) */
  61   1      }
  62          
  63          unsigned char GetKey()
  64          {
  65   1        unsigned char Pos;
  66   1        unsigned char i;
  67   1        unsigned char k;
  68   1      
  69   1        i = 6;
  70   1        Pos = 0x20;     /* 找出键所在列 */
  71   1        do {
  72   2          OUTBIT = ~ Pos;
  73   2          Pos >>= 1;
  74   2          k = ~IN & 0x0f;
  75   2        } while ((--i != 0) && (k == 0));
  76   1      
  77   1        /* 键值 = 列 X 4 + 行 */
  78   1        if (k != 0) {
  79   2          i *= 4;
  80   2          if (k & 2)
  81   2            i += 1;
  82   2          else if (k & 4)
  83   2            i += 2;
  84   2          else if (k & 8)
  85   2            i += 3;
  86   2      
  87   2          OUTBIT = 0;
  88   2          do Delay(10); while (TestKey());  /* 等键释放 */
  89   2      
  90   2          return(KeyTable[i]);  /* 取出键码 */
  91   2        } else return(0xff);
  92   1      }
  93          
  94          void main()
  95          {
  96   1         CAddr = mode;
  97   1         LEDBuf[0] = 0xff;
  98   1         LEDBuf[1] = 0xff;
  99   1         LEDBuf[2] = 0xff;
 100   1         LEDBuf[3] = 0xff;
 101   1         LEDBuf[4] = 0x00;
 102   1         LEDBuf[5] = 0x00;
 103   1      
 104   1         while (1) {
 105   2           DisplayLED();
 106   2           if (TestKey()) LEDBuf[5] = LEDMAP[GetKey() & 0x0f];
 107   2         }
 108   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    239    ----
   CONSTANT SIZE    =     39    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6    ----
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.07   C8155                                                                 06/21/2005 17:13:57 PAGE 3   

   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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