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

📄 keys.lst

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 00000048  4770      BX          R14
 0000004A          ENDP ; 'KEYBoardInit?T'


*** CODE SEGMENT '?PR?ScanKey?T?KEYS':
   41: void ScanKey(void)                //键盘扫描
 00000000  B410      PUSH        {R4}
   43:  if(Key.Value)return;         //如果上次按键还未处理,则直接返回,不扫描新的按键
ARM COMPILER V2.50a,  KEYS                                                                 12/04/06  12:37:10  PAGE 4   

 00000002  4800      LDR         R0,=Key ; Key
 00000004  6800      LDR         R0,[R0,#0x0] ; Key
 00000006  2800      CMP         R0,#0x0
 00000008  D15F      BNE         L_2  ; T=0x000000CA
   45:  if(KEY1IN && KEY2IN && KEY3IN && KEY4IN)    //如果输入全部是高,则按键处于释放状态
 0000000A  4800      LDR         R0,=0xFFFFF420
 0000000C  6800      LDR         R0,[R0,#0x0]
 0000000E  2310      MOV         R3,#0x10
 00000010  4218      TST         R0,R3
 00000012  D021      BEQ         L_3  ; T=0x00000058
 00000014  4800      LDR         R0,=0xFFFFF420
 00000016  6800      LDR         R0,[R0,#0x0]
 00000018  2120      MOV         R1,#0x20
 0000001A  4208      TST         R0,R1
 0000001C  D01C      BEQ         L_3  ; T=0x00000058
 0000001E  4800      LDR         R0,=0xFFFFF430
 00000020  6800      LDR         R0,[R0,#0x0]
 00000022  4218      TST         R0,R3
 00000024  D018      BEQ         L_3  ; T=0x00000058
 00000026  4800      LDR         R0,=0xFFFFF430
 00000028  6800      LDR         R0,[R0,#0x0]
 0000002A  4208      TST         R0,R1
 0000002C  D014      BEQ         L_3  ; T=0x00000058
   47:    if(!(Key.OldValue))                        //如果上次无按键按下
 0000002E  4800      LDR         R0,=Key + 0x4 ; Key+4
 00000030  6801      LDR         R1,[R0,#0x0] ; Key+4
 00000032  2900      CMP         R1,#0x0
 00000034  D049      BEQ         L_2  ; T=0x000000CA
   50:     }
 00000036          L_4:
   53:      if(Key.PressedTime>100)          //按键时间超过一秒,长按键码
 00000036  4800      LDR         R0,=Key + 0xC ; Key+12
 00000038  6800      LDR         R0,[R0,#0x0] ; Key+12
 0000003A  2864      CMP         R0,#0x64
 0000003C  D904      BLS         L_6  ; T=0x00000048
   55:        Key.Value=Key.OldValue+0x80;   //长按键码等于普通按键码加0x80
 0000003E  1C0C      MOV         R4,R1
 00000040  3480      ADD         R4,#0x80
 00000042  4800      LDR         R2,=Key ; Key
 00000044  6014      STR         R4,[R2,#0x0] ; Key
   56:       }
 00000046  E003      B           L_7  ; T=0x00000050
 00000048          L_6:
   57:      else if(Key.PressedTime>1)
 00000048  2801      CMP         R0,#0x1
 0000004A  D901      BLS         L_7  ; T=0x00000050
   59:        Key.Value=Key.OldValue;        //按键值
 0000004C  4800      LDR         R0,=Key ; Key
 0000004E  6001      STR         R1,[R0,#0x0] ; Key
   60:       }
 00000050          L_7:
   61:      Key.OldValue=0;
 00000050  2100      MOV         R1,#0x0
 00000052  4800      LDR         R0,=Key + 0x4 ; Key+4
 00000054  6001      STR         R1,[R0,#0x0] ; Key+4
   63:    return;
 00000056  E038      B           L_2  ; T=0x000000CA
   64:   }
 00000058          L_3:
   67:    Key.NewValue=0;
 00000058  2200      MOV         R2,#0x0
 0000005A  4800      LDR         R0,=Key + 0x8 ; Key+8
 0000005C  6002      STR         R2,[R0,#0x0] ; Key+8
   68:    if(!KEY1IN)Key.NewValue=KEY1;        //KEY1键按下
 0000005E  4800      LDR         R0,=0xFFFFF420
 00000060  6800      LDR         R0,[R0,#0x0]
ARM COMPILER V2.50a,  KEYS                                                                 12/04/06  12:37:10  PAGE 5   

 00000062  4218      TST         R0,R3
 00000064  D102      BNE         L_10  ; T=0x0000006C
 00000066  2101      MOV         R1,#0x1
 00000068  4800      LDR         R0,=Key + 0x8 ; Key+8
 0000006A  6001      STR         R1,[R0,#0x0] ; Key+8
 0000006C          L_10:
   69:    if(!KEY2IN)Key.NewValue=KEY2;        //KEY2键按下
 0000006C  4800      LDR         R0,=0xFFFFF420
 0000006E  6800      LDR         R0,[R0,#0x0]
 00000070  2120      MOV         R1,#0x20
 00000072  4208      TST         R0,R1
 00000074  D102      BNE         L_11  ; T=0x0000007C
 00000076  2402      MOV         R4,#0x2
 00000078  4800      LDR         R0,=Key + 0x8 ; Key+8
 0000007A  6004      STR         R4,[R0,#0x0] ; Key+8
 0000007C          L_11:
   70:    if(!KEY3IN)Key.NewValue=KEY3;        //KEY3键按下
 0000007C  4800      LDR         R0,=0xFFFFF430
 0000007E  6800      LDR         R0,[R0,#0x0]
 00000080  4218      TST         R0,R3
 00000082  D102      BNE         L_12  ; T=0x0000008A
 00000084  2303      MOV         R3,#0x3
 00000086  4800      LDR         R0,=Key + 0x8 ; Key+8
 00000088  6003      STR         R3,[R0,#0x0] ; Key+8
 0000008A          L_12:
   71:    if(!KEY4IN)Key.NewValue=KEY4;        //KEY4键按下
 0000008A  4800      LDR         R0,=0xFFFFF430
 0000008C  6800      LDR         R0,[R0,#0x0]
 0000008E  4208      TST         R0,R1
 00000090  D102      BNE         L_13  ; T=0x00000098
 00000092  2104      MOV         R1,#0x4
 00000094  4800      LDR         R0,=Key + 0x8 ; Key+8
 00000096  6001      STR         R1,[R0,#0x0] ; Key+8
 00000098          L_13:
   73:    if(Key.NewValue==Key.OldValue)         //如果连续两次扫描到一样的键,即按键按下长于10ms
 00000098  4800      LDR         R0,=Key + 0x4 ; Key+4
 0000009A  6800      LDR         R0,[R0,#0x0] ; Key+4
 0000009C  4800      LDR         R1,=Key + 0x8 ; Key+8
 0000009E  6809      LDR         R1,[R1,#0x0] ; Key+8
 000000A0  4281      CMP         R1,R0
 000000A2  D10E      BNE         L_14  ; T=0x000000C2
   75:      if(Key.PressedTime>200)                   //如果按键按下超过2s
 000000A4  4800      LDR         R0,=Key + 0xC ; Key+12
 000000A6  6803      LDR         R3,[R0,#0x0] ; Key+12
 000000A8  2BC8      CMP         R3,#0xC8
 000000AA  D906      BLS         L_15  ; T=0x000000BA
   77:        Key.PressedTime-=4;                     //则自动按键。相当于每隔50ms按一次
 000000AC  1C1C      MOV         R4,R3
 000000AE  3C04      SUB         R4,#0x4
 000000B0  4800      LDR         R0,=Key + 0xC ; Key+12
 000000B2  6004      STR         R4,[R0,#0x0] ; Key+12
   78:        Key.Value=Key.NewValue;
 000000B4  4800      LDR         R0,=Key ; Key
 000000B6  6001      STR         R1,[R0,#0x0] ; Key
   79:        return;
 000000B8  E007      B           L_2  ; T=0x000000CA
   80:       }
 000000BA          L_15:
   83:        Key.PressedTime++;                     //按键按下计时加一
 000000BA  4800      LDR         R0,=Key + 0xC ; Key+12
 000000BC  3301      ADD         R3,#0x1
 000000BE  6003      STR         R3,[R0,#0x0] ; Key+12
   85:     }
 000000C0  E001      B           L_17  ; T=0x000000C6
 000000C2          L_14:
   88:      Key.PressedTime=0;                       //如果本次按下跟上次按下不一样,则按键按下时间清零
ARM COMPILER V2.50a,  KEYS                                                                 12/04/06  12:37:10  PAGE 6   

 000000C2  4800      LDR         R0,=Key + 0xC ; Key+12
 000000C4  6002      STR         R2,[R0,#0x0] ; Key+12
   89:     }
 000000C6          L_17:
   90:    Key.OldValue=Key.NewValue;                 //保存本次按键值
 000000C6  4800      LDR         R0,=Key + 0x4 ; Key+4
 000000C8  6001      STR         R1,[R0,#0x0] ; Key+4
   92: }
 000000CA          L_2:
 000000CA  BC10      POP         {R4}
 000000CC  4770      BX          R14
 000000CE          ENDP ; 'ScanKey?T'



Module Information          Static
----------------------------------
  code size            =    ------
  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 + -