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

📄 key.lst

📁 STC51系列的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   KEY                                                                   10/01/2008 00:06:24 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN .\KEY.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\KEY\KEY.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\KEY.lst) OBJECT(.\KEY.
                    -obj)

line level    source

   1          /********************************************************************************/
   2          /* filename : KEY.c                                                             */
   3          /* created  : xillinx                                                           */
   4          /* descript : 处理与键盘扫描相关的函数                                          */
   5          /********************************************************************************/
   6          #include "../CPU/CPU.h"
   7          #include "../CFG/CFG.h"
   8          #include "../UART/UART.h"
   9          #include "../KEY/KEY.h"
  10          
  11          key_put_on_hook  key_put_on_proc=c51_key_put_on_null;
  12          key_off_hook     key_off_proc=c51_key_off_null;
  13          
  14          /********************************************************************************/
  15          /* fun_name : c51_key_put_on_null()                                             */
  16          /* version  : v1.00                                                             */
  17          /* created  : xillinx                                                           */
  18          /********************************************************************************/
  19          void c51_key_put_on_null(unsigned char key_val) 
  20          {   key_val=key_val;
  21   1      } 
  22          
  23          /********************************************************************************/
  24          /* fun_name : c51_key_off_null()                                                */
  25          /* version  : v1.00                                                             */
  26          /* created  : xillinx                                                           */
  27          /********************************************************************************/
  28          void c51_key_off_null(void) 
  29          {   ;
  30   1      } 
  31          
  32          /********************************************************************************/
  33          /* 键盘是4X4的行列扫描,键盘扫描的输出是U7<74HC573>的低四位,输入端是U12<74HC245> */
  34          /* 的低四位,所以建立一个表                                                      */
  35          /********************************************************************************/
  36          volatile unsigned char KEY_scan_timer=0x0;
  37          
  38          /********************************************************************************/
  39          /* 键值查找表 */
  40          /********************************************************************************/
  41          unsigned char code key_table[KEY_LINE_MAX][KEY_ROW_MAX]=
  42          {   { '1', '2', '3', 'A'},
  43              { '4', '4', '6', 'B'},
  44              { '7', '8', '9', 'C'},
  45              { '*', '0', '#', 'D'}
  46          };
  47          
  48          unsigned char code key_line_table[]={0xE,0xD,0xB,0x7};  //* 对应的行数据
  49          
  50          /********************************************************************************/
  51          /* fun_name : c51_key_write()                                                   */
  52          /* version  : v1.00                                                             */
  53          /* created  : hw-chen                                                           */
  54          /* descript : 向KEY的锁存器里面写入低四位控制KEY的扫描                          */
C51 COMPILER V8.02   KEY                                                                   10/01/2008 00:06:24 PAGE 2   

  55          /********************************************************************************/
  56          void c51_key_write(unsigned char mdata)
  57          {   c51_U07_latch&=0xF0;
  58   1          c51_U07_latch|=(mdata&0xF);
  59   1          c51_hc138_cs_keyw[0x0]=c51_U07_latch;
  60   1      }
  61          
  62          /********************************************************************************/
  63          /* fun_name : c51_key_read_lo()                                                 */
  64          /* version  : v1.00                                                             */
  65          /* created  : hw-chen                                                           */
  66          /* descript : 出KEY的缓冲区读出KEY的低四位作为键盘扫描                          */
  67          /********************************************************************************/
  68          unsigned char c51_key_read_lo(void)
  69          {   return (c51_hc138_cs_keyr[0x0]&0x0F);
  70   1      }
  71          
  72          
  73          /********************************************************************************/
  74          /* fun_name : c51_key_read_hi()                                                 */
  75          /* version  : v1.00                                                             */
  76          /* created  : hw-chen                                                           */
  77          /* descript : 出KEY的缓冲区读出KEY的高四位作为键盘扫描                          */
  78          /********************************************************************************/
  79          unsigned char c51_key_read_hi(void)
  80          {   return (c51_hc138_cs_keyr[0x0]&0xF0);
  81   1      }
  82          
  83          /********************************************************************************/
  84          /* fun_name : c51_key_scan_operate()                                            */
  85          /* version  : v1.00                                                             */
  86          /* created  : hw-chen                                                           */
  87          /* descript : 键盘扫描操作,先把写的行变成低电平,如果有键按下,那么读取的列就会   */
  88          /*  变成低电平                                                                  */
  89          /********************************************************************************/
  90          unsigned char c51_key_scan_operate(void)
  91          {   unsigned char mdata,find=0x0;
  92   1          unsigned char i,j;
  93   1          unsigned char pos;
  94   1          
  95   1          /****************************************************************************/
  96   1          /* 先把所有的行输出都变成低电平,检查是否有按键按下,如果有就检查是那一行的   */
  97   1          /* 那一列按下的,否则直接返回                                                */
  98   1          /****************************************************************************/
  99   1          c51_key_write(0x0);
 100   1          mdata=c51_key_read_lo();
 101   1          if (mdata==0xF) //* 没有任何按键按下
 102   1          {   return 0x0;
 103   2          }
 104   1          
 105   1          /****************************************************************************/
 106   1          /* 先让行输出低电平,然后读取列数据,如果列数据不为0xF<四列>,就有一列键被按下 */
 107   1          /* 根据前面的行编号和现在的列编号就可以确定被按下的键                       */
 108   1          /****************************************************************************/
 109   1          for(i=0x0;i<KEY_LINE_MAX;i++)
 110   1          {   c51_key_write(key_line_table[i]);   //* 每一行扫描
 111   2              mdata=c51_key_read_lo();
 112   2              if( mdata==0xF)
 113   2              {   continue;
 114   3              }
 115   2              pos=0x1;
 116   2              for(j=0x0;j<KEY_ROW_MAX;j++)
C51 COMPILER V8.02   KEY                                                                   10/01/2008 00:06:24 PAGE 3   

 117   2              {   if((mdata&pos)==0x0)
 118   3                  {   break;
 119   4                  }
 120   3                  pos<<=0x1;
 121   3              }
 122   2              if(j>=KEY_ROW_MAX)
 123   2              {   return 0x0; //* 这儿不可能发生
 124   3              }
 125   2              else
 126   2              {   find=0x1;
 127   3                  break;
 128   3              }
 129   2          }
 130   1          if( find==0x0)
 131   1          {   return 0x0;
 132   2          }
 133   1          else

⌨️ 快捷键说明

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