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

📄 keys.lst

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.50a,  KEYS                                                                 12/04/06  12:37:10  PAGE 1   


ARM COMPILER V2.50a, COMPILATION OF MODULE KEYS
OBJECT MODULE PLACED IN KEYS.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe KEYS.C THUMB BROWSE DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************************************
    2            KEYS.c file
    3          
    4            按键处理程序
    5          
    6            作者:Computer-lov
    7            建立日期:2006-4-11
    8            修改日期:2006-4-12
    9            版本:V1.0
   10            版权所有,盗版必究。
   11            任何技术问题可到我的博客上留言:    http://computer00.21ic.org
   12            Copyright(C) Computer-lov 2006-2016
   13            All rights reserved
   14          **********************************************************************************************/
   15          
   16          #include "KEYS.h"
   17          #include <ADuC7027.H>
   18          
   19          KEYBoard Key;
   20          
   21          /*********************************************************************************************/
   22          void KEYBoardInit(void)
   23          {
   24   1       GP0CON &= ~(0x00330000);   //将按键对对应的IO口设置为GPIO口
   25   1       GP1CON &= ~(0x00330000);
   26   1      
   27   1       GP0DAT &= ~(0x30000000);   //将按键对应的IO设置为输入口
   28   1       GP1DAT &= ~(0x30000000);
   29   1      
   30   1       GP0PAR &= ~(0x00110000);   //打开按键对应的IO口的上拉电阻
   31   1       GP1PAR &= ~(0x00110000);
   32   1      
   33   1       Key.Value=0;              //Key初始化
   34   1       Key.OldValue=0;
   35   1       Key.NewValue=0;
   36   1       Key.PressedTime=0;
   37   1      }
   38          ///////////////////////////////////////////////////////////////////////////////////////////////
   39          
   40          /*********************************************************************************************/
   41          void ScanKey(void)                //键盘扫描
   42          {
   43   1       if(Key.Value)return;         //如果上次按键还未处理,则直接返回,不扫描新的按键
   44   1      
   45   1       if(KEY1IN && KEY2IN && KEY3IN && KEY4IN)    //如果输入全部是高,则按键处于释放状态
   46   1        {
   47   2         if(!(Key.OldValue))                        //如果上次无按键按下
   48   2          {
   49   3           return;                           //返回
   50   3          }
   51   2         else                                //如果上次有按键按下
   52   2          {
   53   3           if(Key.PressedTime>100)          //按键时间超过一秒,长按键码
   54   3            {
   55   4             Key.Value=Key.OldValue+0x80;   //长按键码等于普通按键码加0x80
   56   4            }
   57   3           else if(Key.PressedTime>1)
   58   3            {
   59   4             Key.Value=Key.OldValue;        //按键值
ARM COMPILER V2.50a,  KEYS                                                                 12/04/06  12:37:10  PAGE 2   

   60   4            }
   61   3           Key.OldValue=0;
   62   3          }
   63   2         return;
   64   2        }
   65   1       else                                  //按键按下
   66   1        {
   67   2         Key.NewValue=0;
   68   2         if(!KEY1IN)Key.NewValue=KEY1;        //KEY1键按下
   69   2         if(!KEY2IN)Key.NewValue=KEY2;        //KEY2键按下
   70   2         if(!KEY3IN)Key.NewValue=KEY3;        //KEY3键按下
   71   2         if(!KEY4IN)Key.NewValue=KEY4;        //KEY4键按下
   72   2      
   73   2         if(Key.NewValue==Key.OldValue)         //如果连续两次扫描到一样的键,即按键按下长于10ms
   74   2          { 
   75   3           if(Key.PressedTime>200)                   //如果按键按下超过2s
   76   3            {
   77   4             Key.PressedTime-=4;                     //则自动按键。相当于每隔50ms按一次
   78   4             Key.Value=Key.NewValue;
   79   4             return;
   80   4            }
   81   3           else
   82   3            {                             
   83   4             Key.PressedTime++;                     //按键按下计时加一
   84   4            }
   85   3          }
   86   2         else
   87   2          {
   88   3           Key.PressedTime=0;                       //如果本次按下跟上次按下不一样,则按键按下时间清零
   89   3          }
   90   2         Key.OldValue=Key.NewValue;                 //保存本次按键值
   91   2        }
   92   1      }
   93          ///////////////////////////////////////////////////////////////////////////////////////////////
   94                                                                                                       
ARM COMPILER V2.50a,  KEYS                                                                 12/04/06  12:37:10  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** PUBLICS:
 PUBLIC         ScanKey?T
 PUBLIC         KEYBoardInit?T
 PUBLIC         Key



*** DATA SEGMENT '?DT0?KEYS':
 00000000          Key:
 00000000            DS          16



*** CODE SEGMENT '?PR?KEYBoardInit?T?KEYS':
   24:  GP0CON &= ~(0x00330000);   //将按键对对应的IO口设置为GPIO口
 00000000  4800      LDR         R2,=0x330000
 00000002  4800      LDR         R0,=0xFFFFF400
 00000004  6801      LDR         R1,[R0,#0x0]
 00000006  4391      BIC         R1,R2
 00000008  6001      STR         R1,[R0,#0x0]
   25:  GP1CON &= ~(0x00330000);
 0000000A  4800      LDR         R0,=0xFFFFF404
 0000000C  6801      LDR         R1,[R0,#0x0]
 0000000E  4391      BIC         R1,R2
 00000010  6001      STR         R1,[R0,#0x0]
   27:  GP0DAT &= ~(0x30000000);   //将按键对应的IO设置为输入口
 00000012  4800      LDR         R2,=0x30000000
 00000014  4800      LDR         R0,=0xFFFFF420
 00000016  6801      LDR         R1,[R0,#0x0]
 00000018  4391      BIC         R1,R2
 0000001A  6001      STR         R1,[R0,#0x0]
   28:  GP1DAT &= ~(0x30000000);
 0000001C  4800      LDR         R0,=0xFFFFF430
 0000001E  6801      LDR         R1,[R0,#0x0]
 00000020  4391      BIC         R1,R2
 00000022  6001      STR         R1,[R0,#0x0]
   30:  GP0PAR &= ~(0x00110000);   //打开按键对应的IO口的上拉电阻
 00000024  4800      LDR         R2,=0x110000
 00000026  4800      LDR         R0,=0xFFFFF42C
 00000028  6801      LDR         R1,[R0,#0x0]
 0000002A  4391      BIC         R1,R2
 0000002C  6001      STR         R1,[R0,#0x0]
   31:  GP1PAR &= ~(0x00110000);
 0000002E  4800      LDR         R0,=0xFFFFF43C
 00000030  6801      LDR         R1,[R0,#0x0]
 00000032  4391      BIC         R1,R2
 00000034  6001      STR         R1,[R0,#0x0]
   33:  Key.Value=0;              //Key初始化
 00000036  2100      MOV         R1,#0x0
 00000038  4800      LDR         R0,=Key ; Key
 0000003A  6001      STR         R1,[R0,#0x0] ; Key
   34:  Key.OldValue=0;
 0000003C  4800      LDR         R0,=Key + 0x4 ; Key+4
 0000003E  6001      STR         R1,[R0,#0x0] ; Key+4
   35:  Key.NewValue=0;
 00000040  4800      LDR         R0,=Key + 0x8 ; Key+8
 00000042  6001      STR         R1,[R0,#0x0] ; Key+8
   36:  Key.PressedTime=0;
 00000044  4800      LDR         R0,=Key + 0xC ; Key+12
 00000046  6001      STR         R1,[R0,#0x0] ; Key+12
   37: }

⌨️ 快捷键说明

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