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

📄 key.lst

📁 采用C8051F410 的模数转换
💻 LST
字号:
C51 COMPILER V7.02b   KEY                                                                  03/06/2006 15:01:38 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN .\output\key.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key.c LARGE BROWSE DEBUG OBJECTEXTEND TABS(3) OBJECT(.\output\key.obj)

stmt level    source

   1          /************************************************************************************
   2          *  Copyright (c) 2004,西安铭朗电子科技有限责任公司
   3          *            All rights reserved.
   4          *
   5          * 文件名称: key.C
   6          * 文件标识: none
   7          * 适用器件: C8051F120
   8          * 
   9          * 摘 要: 本文件是键盘子程序;使用外部22.1184MHz晶振.
  10          * 
  11          * 当前版本:1.2
  12          * 作 者:张宁强
  13          * 完成日期:2006年1月10日
  14          *
  15          * 历史版本:1.0 
  16          * 原作者 : 李林利 卢阳
  17          * 完成日期:2005年6月1日
  18          *************************************************************************************/
  19          
  20          /************************************************************************************/
  21          // 引用外部头文件
  22          
  23          #include "c8051F040.h"
  24          #include <INTRINS.H>
  25          #include "key.h"
  26          #include "Delay.h"
  27          
  28          
  29          /************************************************************************************/
  30          
  31          /************************************************************************************
  32          // 常量及全局变量定义
  33          *************************************************************************************/
  34          
  35          unsigned char code Key_Value_Table[16]=
  36                   {0xff,0x00,0x01,0xff,0x02,0xff,0xff,0xff,
  37                  0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff
  38                 };
  39          bit  bKeyUp_Flag;
  40          sbit LED=P3^5;
  41          
  42          /************************************************************************************
  43          *  key功能子程序
  44          *************************************************************************************/
  45          
  46          /***********************************************************************************
  47          * 函数名称:Key_Init;
  48          *
  49          * 函数功能描述:键盘初始化,将标志位置1;
  50          *              
  51          * 输入参数:none;
  52          *
  53          * 返回数据:none;
  54          *
  55          * 注意:    none;
C51 COMPILER V7.02b   KEY                                                                  03/06/2006 15:01:38 PAGE 2   

  56          ************************************************************************************/
  57          
  58          void Key_Init(void)
  59          {          
  60   1         bKeyUp_Flag=1;//标志位置1
  61   1      }
  62          
  63          /***********************************************************************************
  64          * 函数名称:GetScanKey;
  65          *
  66          * 函数功能描述:键盘扫描函数,得到键的行列位置;
  67          *              
  68          * 输入参数:none;
  69          *
  70          * 返回数据:none;
  71          *
  72          * 注意:    none;
  73          ************************************************************************************/
  74          
  75          unsigned char GetScanKey(void)
  76          {
  77   1         unsigned char key, i, temp;
  78   1         char data SFRPAGE_SAVE = SFRPAGE;    // Save Current SFR page   
  79   1         SFRPAGE = SFR_PAGE_F;               // set SFR page F
  80   1      
  81   1         key=0xff;
  82   1      
  83   1         for (i=1; i<0x10; i<<=1)//i的低4位为行数位
  84   1         {
  85   2              Key_Scan |= 0x0f;//保留高4位,低4位置1
  86   2            Delay_us(1);
  87   2            Key_Scan &= ~i;  //取行数位
  88   2            Delay_us(1);
  89   2            
  90   2            temp = Key_Scan; //取高4位列数位
  91   2            temp = ~temp;    //取反
  92   2            temp>>=4;       //右移4位
  93   2      
  94   2            if (temp!=0x00)  //有键值
  95   2            {                
  96   3                  key = i<<4;  //左移4位
  97   3               key|=temp;   //取键值
  98   3               break;
  99   3            }
 100   2         }
 101   1         SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page
 102   1         return key;          //返回行位(高四)和列位(低四)
 103   1      }
 104          
 105          /***********************************************************************************
 106          * 函数名称:GetKey;
 107          *
 108          * 函数功能描述:取键值,长按无效;
 109          *              
 110          * 输入参数:none;
 111          *
 112          * 返回数据:none;
 113          *
 114          * 注意:    none;
 115          ************************************************************************************/
 116          
 117          unsigned char GetKey(void)
C51 COMPILER V7.02b   KEY                                                                  03/06/2006 15:01:38 PAGE 3   

 118          {
 119   1         unsigned char key, temp;
 120   1      
 121   1         if (!bKeyUp_Flag)    //判断标志,是1执行
 122   1         {
 123   2            key=GetScanKey();
 124   2            if (key==0xff)    //没有按键,置标志位
 125   2               bKeyUp_Flag=1;
 126   2            else           //保持按键
 127   2               return 0xff;   
 128   2         }
 129   1            
 130   1         key=GetScanKey();
 131   1         if (key==0xff)    //没有按键
 132   1            return key;
 133   1         else
 134   1            temp=key;      //取键值
 135   1         
 136   1         Delay_ms(20);     //延时20ms
 137   1      
 138   1         key=GetScanKey(); //键盘扫描
 139   1         
 140   1         if(key!=temp)     //判断两次键值是否相同
 141   1         {
 142   2             key=0xff;
 143   2            return key;
 144   2         }
 145   1         else           //取键值
 146   1         {
 147   2              temp=Key_Value_Table[key>>4];
 148   2              if (temp==0xff)
 149   2              {
 150   3               key=0xff;
 151   3               return key;
 152   3              }
 153   2              
 154   2              temp=Key_Value_Table[key&0x0f];
 155   2              if (temp==0xff)
 156   2              {
 157   3               key=0xff;
 158   3               return key;
 159   3              }
 160   2              
 161   2              key=Key_Value_Table[key>>4]*4+Key_Value_Table[key&0x0f];
 162   2              if (key>15)
 163   2              {
 164   3               key=0xff;
 165   3               return key;
 166   3              }
 167   2      
 168   2              bKeyUp_Flag=0;
 169   2              return key;
 170   2         } 
 171   1      }
 172          
 173          /***********************************************************************************
 174          * 函数名称:Key_SPI;
 175          *
 176          * 函数功能描述:键值到LED显示码转换;
 177          *              
 178          * 输入参数:none;
 179          *
C51 COMPILER V7.02b   KEY                                                                  03/06/2006 15:01:38 PAGE 4   

 180          * 返回数据:none;
 181          *
 182          * 注意:    none;
 183          ************************************************************************************/
 184          
 185          unsigned char Key_SPI(unsigned char key)
 186          {
 187   1         switch(key)
 188   1         {
 189   2            case 0x00:     return 0x3f;//0
 190   2            case 0x01:     return 0x06;//1
 191   2            case 0x02:     return 0x5b;//2
 192   2            case 0x03:     return 0x4f;//3
 193   2            case 0x04:     return 0x66;//4
 194   2            case 0x05:     return 0x6d;//5
 195   2            case 0x06:     return 0x7d;//6   
 196   2            case 0x07:     return 0x07;//7
 197   2            case 0x08:     return 0x7f;//8
 198   2            case 0x09:     return 0x6f;//9
 199   2            case 0x0a:     return 0x77;//a
 200   2            case 0x0b:     return 0x7c;//b
 201   2            case 0x0c:     return 0x39;//c
 202   2            case 0x0d:     return 0x5e;//d
 203   2            case 0x0e:     return 0x79;//e
 204   2            case 0x0f:     return 0x71;//f
 205   2            default:       return 0x00;
 206   2         }
 207   1      }
 208          
 209          /***********************************************************************************
 210          * 函数名称:Alarm;
 211          *
 212          * 函数功能描述:蜂鸣器开关控制  0:关闭,其他:开启;
 213          *              
 214          * 输入参数:0:关闭,其他:开启;
 215          *
 216          * 返回数据:none;
 217          *
 218          * 注意:    none;
 219          ************************************************************************************/
 220          
 221          void Alarm(unsigned char flag)
 222          {
 223   1         char data SFRPAGE_SAVE = SFRPAGE;    // Save Current SFR page   
 224   1          SFRPAGE = SFR_PAGE_F;              // set SFR page F
 225   1      
 226   1         if(flag)
 227   1            P4|=0x10;
 228   1         else
 229   1            P4&=0xef;
 230   1         
 231   1         SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page
 232   1      }
 233          
 234          /***********************************************************************************
 235          * 函数名称:LED_state;
 236          *
 237          * 函数功能描述:LED开关控制  0:关闭,其他:开启;
 238          *              
 239          * 输入参数:0:关闭,其他:开启;
 240          *
 241          * 返回数据:none;
C51 COMPILER V7.02b   KEY                                                                  03/06/2006 15:01:38 PAGE 5   

 242          *
 243          * 注意:    none;
 244          ************************************************************************************/
 245          
 246          void LED_state(unsigned char flag)
 247          {
 248   1         if(flag)
 249   1            LED=1;
 250   1         else
 251   1            LED=0;
 252   1      }
 253          
 254          /*
 255          SPI0DAT=0x3f;   //显示0
 256          SPI0DAT=0x06;   //显示1
 257          SPI0DAT=0x5b;   //显示2
 258          SPI0DAT=0x4f;   //显示3
 259          SPI0DAT=0x66;   //显示4
 260          SPI0DAT=0x6d;   //显示5
 261          SPI0DAT=0x7d;   //显示6
 262          SPI0DAT=0x07;   //显示7
 263          SPI0DAT=0x7f;   //显示8
 264          SPI0DAT=0x6f;   //显示9
 265          SPI0DAT=0x77;   //显示a
 266          SPI0DAT=0x7c;   //显示b
 267          SPI0DAT=0x39;   //显示c
 268          SPI0DAT=0x5e;   //显示d
 269          SPI0DAT=0x79;   //显示e
 270          SPI0DAT=0x71;   //显示f
 271          SPI0DAT=0x80;   //显示. 
 272          */ 
 273                              
 274          /***********************************************************************************/
 275          // 文件结束
 276          /***********************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    366    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----       4
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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