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

📄 keys.lst

📁 uCOS在LPC213X上的移植。适合ARM嵌入式系统初学者。
💻 LST
📖 第 1 页 / 共 2 页
字号:
*** CODE SEGMENT '?PR?ScanKey?T?KEYS':
   64:  if(Key.Value)return;         //如果上次按键还未处理,则直接返回,不扫描新的按键
 00000000  4800      LDR         R0,=Key ; Key
 00000002  6800      LDR         R0,[R0,#0x0] ; Key
 00000004  2800      CMP         R0,#0x0
 00000006  D000      BNE         $+4
 00000008  E088      B           L_10  ; T=0x0000011C
   66:  if(KEY1IN && KEY2IN && KEY3IN && KEY4IN && KEY5IN && KEY6IN)    //如果输入全部是高,则按键处于释放状态
 0000000C  4800      LDR         R0,=0xE0028000
 0000000E  6800      LDR         R0,[R0,#0x0]
 00000010  4800      LDR         R2,=0x10000
 00000012  4210      TST         R0,R2
 00000014  D031      BEQ         L_11  ; T=0x0000007A
 00000016  4800      LDR         R0,=0xE0028000
 00000018  6800      LDR         R0,[R0,#0x0]
 0000001A  4800      LDR         R1,=0x20000
 0000001C  4208      TST         R0,R1
 0000001E  D02C      BEQ         L_11  ; T=0x0000007A
 00000020  4800      LDR         R0,=0xE0028000
 00000022  6800      LDR         R0,[R0,#0x0]
 00000024  4800      LDR         R1,=0x40000
 00000026  4208      TST         R0,R1
 00000028  D027      BEQ         L_11  ; T=0x0000007A
 0000002A  4800      LDR         R0,=0xE0028000
 0000002C  6800      LDR         R0,[R0,#0x0]
 0000002E  4800      LDR         R1,=0x80000
 00000030  4208      TST         R0,R1
 00000032  D022      BEQ         L_11  ; T=0x0000007A
 00000034  4800      LDR         R0,=0xE0028000
 00000036  6800      LDR         R0,[R0,#0x0]
 00000038  4800      LDR         R1,=0x100000
 0000003A  4208      TST         R0,R1
 0000003C  D01D      BEQ         L_11  ; T=0x0000007A
 0000003E  4800      LDR         R0,=0xE0028000
 00000040  6800      LDR         R0,[R0,#0x0]
 00000042  4800      LDR         R1,=0x200000
 00000044  4208      TST         R0,R1
 00000046  D018      BEQ         L_11  ; T=0x0000007A
   68:    if(!(Key.OldValue))                        //如果上次无按键按下
 00000048  4800      LDR         R0,=Key + 0x4 ; Key+4
 0000004A  6800      LDR         R0,[R0,#0x0] ; Key+4
 0000004C  2800      CMP         R0,#0x0
 0000004E  D065      BEQ         L_10  ; T=0x0000011C
   71:     }
 00000050          L_12:
   74:      if(Key.PressedTime>100)          //按键时间超过一秒,长按键码
 00000050  4800      LDR         R0,=Key + 0xC ; Key+12
 00000052  6800      LDR         R0,[R0,#0x0] ; Key+12
 00000054  2864      CMP         R0,#0x64
 00000056  D904      BLS         L_14  ; T=0x00000062
   76:        Key.Value=Key.OldValue+0x80;   //长按键码等于普通按键码加0x80
 00000058  4800      LDR         R0,=Key + 0x4 ; Key+4
 0000005A  6801      LDR         R1,[R0,#0x0] ; Key+4
 0000005C  3180      ADD         R1,#0x80
 0000005E  4800      LDR         R0,=Key ; Key
 00000060  6001      STR         R1,[R0,#0x0] ; Key
   77:       }
 00000062  E006      B           L_15  ; T=0x00000072
 00000064          L_14:
   78:      else if(Key.PressedTime>1)
 00000064  4800      LDR         R0,=Key + 0xC ; Key+12
 00000066  6800      LDR         R0,[R0,#0x0] ; Key+12
 00000068  2801      CMP         R0,#0x1
ARM COMPILER V2.50a,  KEYS                                                                 25/08/06  23:22:56  PAGE 5   

 0000006A  D902      BLS         L_15  ; T=0x00000072
   80:        Key.Value=Key.OldValue;        //按键值
 0000006C  4800      LDR         R0,=Key + 0x4 ; Key+4
 0000006E  6801      LDR         R1,[R0,#0x0] ; Key+4
 00000070  4800      LDR         R0,=Key ; Key
 00000072  6001      STR         R1,[R0,#0x0] ; Key
   81:       }
 00000074          L_15:
   82:      Key.OldValue=0;
 00000074  2100      MOV         R1,#0x0
 00000076  4800      LDR         R0,=Key + 0x4 ; Key+4
 00000078  6001      STR         R1,[R0,#0x0] ; Key+4
   84:    return;
 0000007A  E04F      B           L_10  ; T=0x0000011C
   85:   }
 0000007C          L_11:
   88:    Key.NewValue=0;
 0000007C  2100      MOV         R1,#0x0
 0000007E  4800      LDR         R0,=Key + 0x8 ; Key+8
 00000080  6001      STR         R1,[R0,#0x0] ; Key+8
   89:    if(!KEY1IN)Key.NewValue=KEY1;        //KEY1键按下
 00000082  4800      LDR         R0,=0xE0028000
 00000084  6800      LDR         R0,[R0,#0x0]
 00000086  4210      TST         R0,R2
 00000088  D101      BNE         L_18  ; T=0x0000008E
 0000008A  2201      MOV         R2,#0x1
 0000008C  4800      LDR         R0,=Key + 0x8 ; Key+8
 0000008E  6002      STR         R2,[R0,#0x0] ; Key+8
 00000090          L_18:
   90:    if(!KEY2IN)Key.NewValue=KEY2;        //KEY2键按下
 00000090  4800      LDR         R0,=0xE0028000
 00000092  6800      LDR         R0,[R0,#0x0]
 00000094  4800      LDR         R2,=0x20000
 00000096  4210      TST         R0,R2
 00000098  D101      BNE         L_19  ; T=0x0000009E
 0000009A  2202      MOV         R2,#0x2
 0000009C  4800      LDR         R0,=Key + 0x8 ; Key+8
 0000009E  6002      STR         R2,[R0,#0x0] ; Key+8
 000000A0          L_19:
   91:    if(!KEY3IN)Key.NewValue=KEY3;        //KEY3键按下
 000000A0  4800      LDR         R0,=0xE0028000
 000000A2  6800      LDR         R0,[R0,#0x0]
 000000A4  4800      LDR         R2,=0x40000
 000000A6  4210      TST         R0,R2
 000000A8  D101      BNE         L_20  ; T=0x000000AE
 000000AA  2203      MOV         R2,#0x3
 000000AC  4800      LDR         R0,=Key + 0x8 ; Key+8
 000000AE  6002      STR         R2,[R0,#0x0] ; Key+8
 000000B0          L_20:
   92:    if(!KEY4IN)Key.NewValue=KEY4;        //KEY4键按下
 000000B0  4800      LDR         R0,=0xE0028000
 000000B2  6800      LDR         R0,[R0,#0x0]
 000000B4  4800      LDR         R2,=0x80000
 000000B6  4210      TST         R0,R2
 000000B8  D101      BNE         L_21  ; T=0x000000BE
 000000BA  2204      MOV         R2,#0x4
 000000BC  4800      LDR         R0,=Key + 0x8 ; Key+8
 000000BE  6002      STR         R2,[R0,#0x0] ; Key+8
 000000C0          L_21:
   93:    if(!KEY5IN)Key.NewValue=KEY5;        //KEY5键按下
 000000C0  4800      LDR         R0,=0xE0028000
 000000C2  6800      LDR         R0,[R0,#0x0]
 000000C4  4800      LDR         R2,=0x100000
 000000C6  4210      TST         R0,R2
 000000C8  D101      BNE         L_22  ; T=0x000000CE
 000000CA  2205      MOV         R2,#0x5
ARM COMPILER V2.50a,  KEYS                                                                 25/08/06  23:22:56  PAGE 6   

 000000CC  4800      LDR         R0,=Key + 0x8 ; Key+8
 000000CE  6002      STR         R2,[R0,#0x0] ; Key+8
 000000D0          L_22:
   94:    if(!KEY6IN)Key.NewValue=KEY6;        //KEY6键按下
 000000D0  4800      LDR         R0,=0xE0028000
 000000D2  6800      LDR         R0,[R0,#0x0]
 000000D4  4800      LDR         R2,=0x200000
 000000D6  4210      TST         R0,R2
 000000D8  D101      BNE         L_23  ; T=0x000000DE
 000000DA  2206      MOV         R2,#0x6
 000000DC  4800      LDR         R0,=Key + 0x8 ; Key+8
 000000DE  6002      STR         R2,[R0,#0x0] ; Key+8
 000000E0          L_23:
   96:    if(Key.NewValue==Key.OldValue)         //如果连续两次扫描到一样的键,即按键按下长于10ms
 000000E0  4800      LDR         R0,=Key + 0x4 ; Key+4
 000000E2  6802      LDR         R2,[R0,#0x0] ; Key+4
 000000E4  4800      LDR         R0,=Key + 0x8 ; Key+8
 000000E6  6800      LDR         R0,[R0,#0x0] ; Key+8
 000000E8  4290      CMP         R0,R2
 000000EA  D111      BNE         L_24  ; T=0x00000110
   98:      if(Key.PressedTime>200)                   //如果按键按下超过2s
 000000EC  4800      LDR         R0,=Key + 0xC ; Key+12
 000000EE  6800      LDR         R0,[R0,#0x0] ; Key+12
 000000F0  28C8      CMP         R0,#0xC8
 000000F2  D908      BLS         L_25  ; T=0x00000106
  100:        Key.PressedTime-=4;                     //则自动按键。相当于每隔50ms按一次
 000000F4  4800      LDR         R0,=Key + 0xC ; Key+12
 000000F6  6802      LDR         R2,[R0,#0x0] ; Key+12
 000000F8  3A04      SUB         R2,#0x4
 000000FA  4800      LDR         R0,=Key + 0xC ; Key+12
 000000FC  6002      STR         R2,[R0,#0x0] ; Key+12
  101:        Key.Value=Key.NewValue;
 000000FE  4800      LDR         R0,=Key + 0x8 ; Key+8
 00000100  6802      LDR         R2,[R0,#0x0] ; Key+8
 00000102  4800      LDR         R0,=Key ; Key
 00000104  6002      STR         R2,[R0,#0x0] ; Key
  102:        return;
 00000106  E009      B           L_10  ; T=0x0000011C
  103:       }
 00000108          L_25:
  106:        Key.PressedTime++;                     //按键按下计时加一
 00000108  4800      LDR         R0,=Key + 0xC ; Key+12
 0000010A  6802      LDR         R2,[R0,#0x0] ; Key+12
 0000010C  3201      ADD         R2,#0x1
 0000010E  6002      STR         R2,[R0,#0x0] ; Key+12
  108:     }
 00000110  E000      B           L_27  ; T=0x00000114
 00000112          L_24:
  111:      Key.PressedTime=0;                       //如果本次按下跟上次按下不一样,则按键按下时间清零
 00000112  4800      LDR         R0,=Key + 0xC ; Key+12
 00000114  6001      STR         R1,[R0,#0x0] ; Key+12
  112:     }
 00000116          L_27:
  113:    Key.OldValue=Key.NewValue;                 //保存本次按键值
 00000116  4800      LDR         R0,=Key + 0x8 ; Key+8
 00000118  6801      LDR         R1,[R0,#0x0] ; Key+8
 0000011A  4800      LDR         R0,=Key + 0x4 ; Key+4
 0000011C  6001      STR         R1,[R0,#0x0] ; Key+4
  115: }
 0000011E          L_10:
 0000011E  4770      BX          R14
 00000120          ENDP ; 'ScanKey?T'



Module Information          Static
----------------------------------
  code size            =    ------
ARM COMPILER V2.50a,  KEYS                                                                 25/08/06  23:22:56  PAGE 7   

  data size            =        16
  const size           =    ------
End of Module Information.


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

⌨️ 快捷键说明

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