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

📄 keycheck.lst

📁 STC51系列单片机学习板演示程序(汇编语言) 有详细注释 适合初学单片机的朋友
💻 LST
字号:
C51 COMPILER V7.20   KEYCHECK                                                              03/23/2007 23:36:36 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE KEYCHECK
OBJECT MODULE PLACED IN KEYCHECK.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KEYCHECK.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*****************************************************************************
   2                                                          MCU8051学习板演示程序
   3                                                                  
   4                                          (c) Copyright 2007-2007,广州恒芯电子
   5                                                          All Rights Reserved
   6          *****************************************************************************/
   7          
   8          /*****************************************************************************
   9          程序说明
  10          名称: MCU8051学习板演示程序(键盘检测)
  11          功能: 实现键盘检测并在七段数码管里显示
  12          版本:2007-03-01
  13          *****************************************************************************/
  14          
  15          /*****************************************************************************
  16          硬件说明
  17          单片机:   兼容MCS-51单片机/STC89C51
  18          晶振频率: 12MHz
  19          *****************************************************************************/
  20          
  21          #include "regx52.h"
  22          
  23          /****************************************************************************
  24          说明: 程序预定义
  25          *****************************************************************************/
  26          #define LED7A_CTRL P1_0/*数码管第一位控制引脚(0为有效,1为无效)*/
  27          #define LED7B_CTRL P1_1/*数码管第二位控制引脚(0为有效,1为无效)*/
  28          #define LED7C_CTRL P1_2/*数码管第三位控制引脚(0为有效,1为无效)*/
  29          #define LED7D_CTRL P1_3/*数码管第四位控制引脚(0为有效,1为无效)*/
  30          
  31          #define LED7_STATUS     P0/*数码管状态引脚(0为有效,1为无效)*/
  32          #define KEY_STATUS      P2/*键盘引脚*/
  33          
  34          /****************************************************************************
  35          说明: 变量定义
  36          *****************************************************************************/
  37          code unsigned char m_ucLedTab[]=
  38          {
  39                  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
  40                  0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
  41          };/*数码管十六进制编码表*/
  42          
  43          unsigned char code m_ucKeyTab[]=
  44          {
  45                  0x7e, 0xe7, 0xd7, 0xb7, 0x77, 0xeb, 0xdb, 0xbb, 0x7b, 0xed,
  46                  0xdd, 0xbd, 0x7d, 0xee, 0xde, 0xbe
  47          };/*键盘十六进制编码表*/
  48          
  49          unsigned char m_ucLedBuf[4];/*数码管显示值缓存*/
  50                          
  51          /****************************************************************************
  52          名称: KeyCheck()
  53          说明: 键盘检测
  54          参数: 无
  55          返回: 键盘码值,若无键按下则返回16
C51 COMPILER V7.20   KEYCHECK                                                              03/23/2007 23:36:36 PAGE 2   

  56          *****************************************************************************/
  57          unsigned char KeyCheck();
  58          
  59          /****************************************************************************
  60          名称: Led7Scan()
  61          说明: 数码管动态扫描处理程序
  62          参数: 无
  63          返回: 无
  64          *****************************************************************************/
  65          void Led7Scan();
  66          
  67          /*****************************************************************************
  68          程序开始
  69          *****************************************************************************/
  70          void main()
  71          {       
  72   1              unsigned char ucKey;
  73   1      
  74   1                                 /*T0中断设定*/
  75   1              TMOD=0x01; /*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
  76   1              TH0=0xec; /*定时时间为5毫秒*/
  77   1              TL0=0x78;
  78   1              ET0=1; /*允许T0中断*/
  79   1              TR0=1; /*使T0工作*/
  80   1              EA=1; /*总中断开启*/
  81   1      
  82   1              while(1)
  83   1              {
  84   2                      ucKey=KeyCheck(); /*获得键盘值*/
  85   2                      if(ucKey!=16) /*判断是否有键按下,若有则将它在数码管显示出来*/
  86   2                      {
  87   3                              m_ucLedBuf[0]=ucKey;/*在数码管显示键盘值*/
  88   3                              m_ucLedBuf[1]=ucKey;    
  89   3                              m_ucLedBuf[2]=ucKey;    
  90   3                              m_ucLedBuf[3]=ucKey;                    
  91   3                      }
  92   2              }
  93   1      }
  94          
  95          /*****************************************************************************
  96          名称: Interrupt1Handler
  97          说明: T0中断入口
  98          参数: 无
  99          返回 :无
 100          *****************************************************************************/
 101          void Interrupt1Handler() interrupt 1
 102          {
 103   1              Led7Scan(); /*数码管动态扫描*/  
 104   1              TH0=0xec; /*重新设置T0定时值*/
 105   1              TL0=0x78;
 106   1      }
 107          
 108          /****************************************************************************
 109          名称: Led7Scan()
 110          说明: 数码管动态扫描处理程序
 111          参数: 无
 112          返回: 无
 113          *****************************************************************************/
 114          void Led7Scan()
 115          {       
 116   1              static unsigned char a=0;
 117   1      
C51 COMPILER V7.20   KEYCHECK                                                              03/23/2007 23:36:36 PAGE 3   

 118   1              switch(a) /*判断数码管动态扫描值*/
 119   1              {
 120   2              case 0: /*处理数码管第一位*/
 121   2                      LED7D_CTRL=1; /*设置数码管第四位为无效*/
 122   2                      LED7A_CTRL=0; /*设置数码管第一位位有效*/
 123   2                      break; 
 124   2      
 125   2              case 1: /*处理数码管第二位*/
 126   2                      LED7A_CTRL=1; /*设置数码管第一位为无效*/
 127   2                      LED7B_CTRL=0; /*设置数码管第二位位有效*/
 128   2                      break; 
 129   2      
 130   2              case 2: /*处理数码管第三位*/
 131   2                      LED7B_CTRL=1; /*设置数码管第二位为无效*/
 132   2                      LED7C_CTRL=0; /*设置数码管第三位位有效*/
 133   2                      break; 
 134   2      
 135   2              case 3: /*处理数码管第四位*/
 136   2                      LED7C_CTRL=1; /*设置数码管第三位为无效*/
 137   2                      LED7D_CTRL=0; /*设置数码管第四位位有效*/
 138   2                      break; 
 139   2              }
 140   1      
 141   1              LED7_STATUS=m_ucLedTab[m_ucLedBuf[a]]; /*将显示码送数码管状态引脚*/     
 142   1              
 143   1              a++; /*数码管动态扫描值加1,若该值4则置为0*/
 144   1              if(a>3)
 145   1                      a=0;
 146   1      }
 147          
 148          /****************************************************************************
 149          名称: KeyCheck()
 150          说明: 键盘检测
 151          参数: 无
 152          返回: 键盘码值,若无键按下则返回16
 153          *****************************************************************************/
 154          unsigned char KeyCheck()
 155          {
 156   1              unsigned char a,b;
 157   1      
 158   1              for(a=0;a<4;a++) /*循环4次*/
 159   1              {
 160   2                      switch(a) /*改变键盘扫描码*/
 161   2                      {
 162   3                      case 0:KEY_STATUS=0xef;break;
 163   3                      case 1:KEY_STATUS=0xdf;break;
 164   3                      case 2:KEY_STATUS=0xbf;break;
 165   3                      case 3:KEY_STATUS=0x7f;break;
 166   3                      };
 167   2      
 168   2                      b=KEY_STATUS;
 169   2                      if((b&0x0f)!=0x0f) /*判断是否有按键按下*/
 170   2                      {
 171   3                              for(a=0;a<16;a++) /*根据键盘码判断那个键按下*/
 172   3                              {
 173   4                                      if(b==m_ucKeyTab[a])
 174   4                                      {
 175   5                                              return a;
 176   5                                      }
 177   4                              }
 178   3                      }
 179   2              }
C51 COMPILER V7.20   KEYCHECK                                                              03/23/2007 23:36:36 PAGE 4   

 180   1      
 181   1              return 16;
 182   1      }
 183          
 184                                                     


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    228    ----
   CONSTANT SIZE    =     33    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   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 + -