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

📄 keys.lst

📁 uCOS在LPC213X上的移植。适合ARM嵌入式系统初学者。
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.50a,  KEYS                                                                 25/08/06  23:22:56  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 DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************************************
    2            KEYS.c file
    3          
    4            按键处理程序
    5          
    6            作者:Computer-lov
    7            建立日期:2006-4-11
    8            修改日期:2006-5-12
    9            最后修改时间:2006-08-25
   10            版本:V1.0
   11            版权所有,盗版必究。
   12            任何技术问题可到我的博客上留言:    http://computer00.21ic.org
   13            Copyright(C) Computer-lov 2006-2016
   14            All rights reserved
   15          **********************************************************************************************/
   16          
   17          
   18          #include "CPU.H"
   19          
   20          #include "KEYS.h"
   21          
   22          KEYBoard Key;   //定义一个Key结构体。
   23          
   24          /*********************************************************************************************/
   25          void KEYBoardInit(void)
   26          {
   27   1       PINSEL1 &= ~0xFFF;   //将按键对对应的IO口设置为GPIO口. P0.16--P0.21
   28   1      
   29   1       IO0DIR &= ~0x001F0000;   //将按键对应的IO设置为输入口
   30   1      
   31   1       Key.Value=0;              //Key初始化
   32   1       Key.OldValue=0;
   33   1       Key.NewValue=0;
   34   1       Key.PressedTime=0;
   35   1      }
   36          ///////////////////////////////////////////////////////////////////////////////////////////////
   37          
   38          /**********************************************************************************************
   39          功能:延时x毫秒。
   40          入口参数:x。要延时的毫秒数。
   41          返回:无。
   42          备注:纯软件延时,不同的指令执行速度,运行结果会不一样。
   43          **********************************************************************************************/
   44          void DelayXms(uint32 x)
   45          {
   46   1       uint32 i;
   47   1       while(x--)
   48   1        {
   49   2         i=9000;
   50   2         while(i--);
   51   2        }
   52   1      }
   53          ///////////////////////////////////////////////////////////////////////////////////////////////
   54          
   55          
   56          /**********************************************************************************************
   57          功能:键盘扫描程序。
   58          入口参数:无。
   59          返回:无。
ARM COMPILER V2.50a,  KEYS                                                                 25/08/06  23:22:56  PAGE 2   

   60          备注:按键相关信息保存在Key中。请参看KEYBoard结构体。
   61          **********************************************************************************************/
   62          void ScanKey(void)                //键盘扫描
   63          {
   64   1       if(Key.Value)return;         //如果上次按键还未处理,则直接返回,不扫描新的按键
   65   1       
   66   1       if(KEY1IN && KEY2IN && KEY3IN && KEY4IN && KEY5IN && KEY6IN)    //如果输入全部是高,则按键处于释放状态
   67   1        {
   68   2         if(!(Key.OldValue))                        //如果上次无按键按下
   69   2          {
   70   3           return;                           //返回
   71   3          }
   72   2         else                                //如果上次有按键按下
   73   2          {
   74   3           if(Key.PressedTime>100)          //按键时间超过一秒,长按键码
   75   3            {
   76   4             Key.Value=Key.OldValue+0x80;   //长按键码等于普通按键码加0x80
   77   4            }
   78   3           else if(Key.PressedTime>1)
   79   3            {
   80   4             Key.Value=Key.OldValue;        //按键值
   81   4            }
   82   3           Key.OldValue=0;
   83   3          }
   84   2         return;
   85   2        }
   86   1       else                                  //按键按下
   87   1        {
   88   2         Key.NewValue=0;
   89   2         if(!KEY1IN)Key.NewValue=KEY1;        //KEY1键按下
   90   2         if(!KEY2IN)Key.NewValue=KEY2;        //KEY2键按下
   91   2         if(!KEY3IN)Key.NewValue=KEY3;        //KEY3键按下
   92   2         if(!KEY4IN)Key.NewValue=KEY4;        //KEY4键按下
   93   2         if(!KEY5IN)Key.NewValue=KEY5;        //KEY5键按下
   94   2         if(!KEY6IN)Key.NewValue=KEY6;        //KEY6键按下
   95   2      
   96   2         if(Key.NewValue==Key.OldValue)         //如果连续两次扫描到一样的键,即按键按下长于10ms
   97   2          { 
   98   3           if(Key.PressedTime>200)                   //如果按键按下超过2s
   99   3            {
  100   4             Key.PressedTime-=4;                     //则自动按键。相当于每隔50ms按一次
  101   4             Key.Value=Key.NewValue;
  102   4             return;
  103   4            }
  104   3           else
  105   3            {                             
  106   4             Key.PressedTime++;                     //按键按下计时加一
  107   4            }
  108   3          }
  109   2         else
  110   2          {
  111   3           Key.PressedTime=0;                       //如果本次按下跟上次按下不一样,则按键按下时间清零
  112   3          }
  113   2         Key.OldValue=Key.NewValue;                 //保存本次按键值
  114   2        }
  115   1      }
  116          ///////////////////////////////////////////////////////////////////////////////////////////////
  117                                                                                                       
ARM COMPILER V2.50a,  KEYS                                                                 25/08/06  23:22:56  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



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



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



*** CODE SEGMENT '?PR?KEYBoardInit?T?KEYS':
   27:  PINSEL1 &= ~0xFFF;   //将按键对对应的IO口设置为GPIO口. P0.16--P0.21
 00000000  4800      LDR         R2,=0xFFFFF000
 00000002  4800      LDR         R0,=0xE002C004
 00000004  6801      LDR         R1,[R0,#0x0]
 00000006  4011      AND         R1,R2
 00000008  6001      STR         R1,[R0,#0x0]
   29:  IO0DIR &= ~0x001F0000;   //将按键对应的IO设置为输入口
 0000000A  4800      LDR         R2,=0x1F0000
 0000000C  4800      LDR         R0,=0xE0028008
 0000000E  6801      LDR         R1,[R0,#0x0]
 00000010  4391      BIC         R1,R2
 00000012  6001      STR         R1,[R0,#0x0]
   31:  Key.Value=0;              //Key初始化
 00000014  2100      MOV         R1,#0x0
 00000016  4800      LDR         R0,=Key ; Key
 00000018  6001      STR         R1,[R0,#0x0] ; Key
   32:  Key.OldValue=0;
 0000001A  4800      LDR         R0,=Key + 0x4 ; Key+4
 0000001C  6001      STR         R1,[R0,#0x0] ; Key+4
   33:  Key.NewValue=0;
 0000001E  4800      LDR         R0,=Key + 0x8 ; Key+8
 00000020  6001      STR         R1,[R0,#0x0] ; Key+8
   34:  Key.PressedTime=0;
 00000022  4800      LDR         R0,=Key + 0xC ; Key+12
 00000024  6001      STR         R1,[R0,#0x0] ; Key+12
   35: }
 00000026  4770      BX          R14
 00000028          ENDP ; 'KEYBoardInit?T'


*** CODE SEGMENT '?PR?DelayXms?T?KEYS':
   44: void DelayXms(uint32 x)
 00000000  ---- Variable 'x' assigned to Register 'R0' ----
   45: {
 00000000            ; SCOPE-START
   47:  while(x--)
 00000000  E004      B           L_1  ; T=0x0000000C
 00000002          L_3:
   49:    i=9000;
 00000002  4800      LDR         R1,=0x2328
 00000004  ---- Variable 'i' assigned to Register 'R1' ----
   50:    while(i--);
 00000004          L_5:
 00000004  1C0A      MOV         R2,R1 ; i
 00000006  3901      SUB         R1,#0x1
 00000008  2A00      CMP         R2,#0x0 ; i
 0000000A  D1FB      BNE         L_5  ; T=0x00000004
   51:   }
 0000000C          L_1:
 0000000C  1C01      MOV         R1,R0 ; x
 0000000E  3801      SUB         R0,#0x1
 00000010  2900      CMP         R1,#0x0 ; x
 00000012  D1F6      BNE         L_3  ; T=0x00000002
 00000014            ; SCOPE-END
ARM COMPILER V2.50a,  KEYS                                                                 25/08/06  23:22:56  PAGE 4   

   52: }
 00000014  4770      BX          R14
 00000016          ENDP ; 'DelayXms?T'


⌨️ 快捷键说明

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