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

📄 keyboard.lst

📁 采用C51语言完成基于74HC595的串口键盘与LED指示灯单元设计
💻 LST
字号:
C51 COMPILER V8.05a   KEYBOARD                                                             10/11/2008 10:55:50 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE KEYBOARD
OBJECT MODULE PLACED IN keyboard.OBJ
COMPILER INVOKED BY: F:\Keil C51 V8\C51\BIN\C51.EXE keyboard.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          
   3          #define CHECK_KEY_DOWN  0          //处在检测按键压下阶段标志
   4          #define CHECK_KEY_UP    1          //处在检测按键抬起阶段标志
   5          #define KEY_UP                  0          //按键抬起标志
   6          #define KEY_DOWN                1          //按键压下标志
   7          
   8          sbit _p33 = P3^3;
   9          sbit _p34 = P3^4;
  10          sbit _p35 = P3^5;
  11          sbit _p36 = P3^6;
  12          
  13          char data_out;
  14          char _key_status = CHECK_KEY_DOWN; //按键检测状态(初值为检测压下阶段)
  15          char _key_idx = 0;                                 //按键序号
  16          
  17          void _delay_1ns() {
  18   1      }
  19          
  20          void _p34_plus() {                                 //发生移位脉冲,SH_CP
  21   1          _p34 = 0;
  22   1          _delay_1ns();
  23   1          _p34 = 1;
  24   1          _delay_1ns();
  25   1          _p34 = 0;
  26   1      }
  27          
  28          void _p35_plus() {                                 //发生锁存脉冲,ST_CP
  29   1          _p35 = 0;
  30   1          _delay_1ns();
  31   1          _p35 = 1;
  32   1          _delay_1ns();
  33   1          _p35 = 0;
  34   1      }
  35          
  36          void serial_output(unsigned char out) {  //通过595串行输出数据
  37   1          char i = 0;
  38   1          for (i = 7; i >= 0 ; i--) {
  39   2              _p33 = (out >> i)& 0x01;                //将数据移到最低位后由P33送出,DS信号
  40   2              _p34_plus();
  41   2          }
  42   1          _p35_plus();
  43   1      }
  44          
  45          char _check_key(unsigned char _key_idx) { //检查按键状态
  46   1      
  47   1              serial_output((~(0x01<<_key_idx))&0x0f);          //将待查按键键码转换成扫描码后输出
  48   1              if (_p36 == 0) {                                          //根据P36状态决定返回值
  49   2                      return KEY_DOWN;
  50   2              } else {
  51   2                      return KEY_UP;
  52   2              }
  53   1      }
  54          
  55          char get_key(void) {                                                    //获取键值
C51 COMPILER V8.05a   KEYBOARD                                                             10/11/2008 10:55:50 PAGE 2   

  56   1              char result = -1;                                                       //无键按下时键值为-1
  57   1              if (_key_status == CHECK_KEY_DOWN) {            //如果当前处于检查压下阶段,进行以下操作
  58   2                      if (_check_key(_key_idx) == KEY_DOWN) { //判断当前扫描键的状态,若为压下标志则
  59   3                              _key_status = CHECK_KEY_UP;                     //将检查阶段标志设置为抬起
  60   3                      } else {                                                                //否则,将检查阶段标志设置为压下
  61   3                              _key_status = CHECK_KEY_DOWN;                   
  62   3                              _key_idx++;                                                 //判断是否4个按键已经轮流扫描一遍
  63   3                              if (_key_idx == 4) {
  64   4                                      _key_idx = 0;                                   //是,则将待扫描按键号设为0
  65   4                              }
  66   3                      }
  67   2              } else if (_key_status == CHECK_KEY_UP) {       //如果当前处于检查抬起阶段,进行以下操作
  68   2                      if (_check_key(_key_idx) == KEY_UP) {   //判断当前扫描键的状态,若为抬起标志则
  69   3                              result = _key_idx;                                      //键值输出
  70   3                              _key_status = CHECK_KEY_DOWN;           //按键检查阶段标志改为压下
  71   3                              if (++_key_idx == 4) {                          //判断是否4个按键已经轮流扫描一遍
  72   4                                      _key_idx = 0;                                   //是,则将待扫描按键号设为0
  73   4                              }
  74   3                      } else {
  75   3                              _key_status = CHECK_KEY_UP;                     
  76   3                      }
  77   2              }
  78   1              return result;
  79   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    150    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   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 + -