📄 key.lst
字号:
ARM COMPILER V2.42, key 05/01/06 13:35:23 PAGE 1
ARM COMPILER V2.42, COMPILATION OF MODULE key
OBJECT MODULE PLACED IN .\Obj\key.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe key.c THUMB BROWSE DEBUG PRINT(.\LST\KEY.LST) TABS(4) OBJECT(.\Obj\key.obj)
stmt level source
1 #include <LPC214X.H>
2
3 /*============================================================
4 LPC214X 按键功能演示
5 功能:按下键,对应的LED灯点亮。
6 作者: Mingtree ycxms88@163.com http://www.mcu123.com
7 ==============================================================
8 /*
9 引脚分布
10 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
11 TX0 RX0 CS1 K4 K3
12
13 P0.8 P0.9 P0.10 P0.11 P0.12 P0.13 P0.14 P0.15
14 TX1 RX1 RW SCL SDA K1 VRST K2
15
16 P0.16 P0.17 P0.18 P0.19 P0.20 P0.21 P0.22 P0.23
17 BEEP SCK1 MISO MOSI SSEL RS_COM RW VB
18 P0.24 P0.25 P0.26 P0.27 P0.28 P0.29 P0.30 P0.31
19 AOUT D+ D- A_IN1 A_IN2 CS2 ULED
20
21 LED引脚
22 L1---------L8
23 P1.16----P1.23
24 */
25
26 #define KEY1 13
27 #define KEY2 15
28 #define KEY3 7
29 #define KEY4 6
30
31 #define KEY_MASK=(1<<KEY1)|(1<<KEY2)|(1<<KEY3)|(1<<KEY4)
32
33 void init_port(void)
34 {
35 1
36 1 //port initialized
37 1 IODIR1=0x00FF0000;
38 1 IODIR0=0x40600010;
39 1
40 1 }
41 /*
42 unsigned char Scan_Key(void)
43 {
44 unsigned int k;
45 k=IOPIN0;
46 if((k&1<<KEY1)==0)return 1;
47 if((k&1<<KEY2)==0)return 2;
48 if((k&1<<KEY3)==0)return 3;
49 if((k&1<<KEY4)==0)return 4;
50 return 0;
51 }
52 */
53 unsigned char Scan_Key(void)
54 {
55 1 unsigned int k;
56 1 unsigned char key,i;
57 1
58 1 i=0;
59 1 key=0;
ARM COMPILER V2.42, key 05/01/06 13:35:23 PAGE 2
60 1
61 1 k=IOPIN0;
62 1 if((k&1<<KEY4)==0)key+=1;
63 1 key=key<<1;
64 1 if((k&1<<KEY3)==0)key+=1;
65 1 key=key<<1;
66 1 if((k&1<<KEY2)==0)key+=1;
67 1 key=key<<1;
68 1 if((k&1<<KEY1)==0)key+=1;
69 1 switch(key)
70 1 {
71 2 case 0x00:
72 2 i=0;
73 2 break;
74 2 case 0x08:
75 2 i=4;
76 2 break;
77 2
78 2 case 0x04:
79 2 i=3;
80 2 break;
81 2
82 2 case 0x02:
83 2 i=2;
84 2 break;
85 2
86 2 case 0x01:
87 2 i=1;
88 2 break;
89 2
90 2 case 0x0F: //复合键
91 2 i=0XF;
92 2 break;
93 2
94 2 case 0x0E:
95 2 i=0X0E;
96 2 break;
97 2 default:
98 2 i=0;
99 2 break;
100 2 }
101 1 return i;
102 1 }
103
104 /*
105
106 */
107 void delay (unsigned int i) { /* Delay function */
108 1 unsigned int n;
109 1 while(i>1)
110 1 {
111 2 for(n=65535;n>1;n--);
112 2 i--;
113 2 }
114 1 }
115
116
117
118 void main(void)
119 {
120 1 unsigned char i;
121 1 init_port();
122 1 while(1)
123 1 {
124 2 i=Scan_Key();
125 2 if(i!=0)IOCLR1 = (0x00008000<<i);
ARM COMPILER V2.42, key 05/01/06 13:35:23 PAGE 3
126 2
127 2 delay(30);
128 2 IOSET1 = 0x00ff0000; //ALL LED OFF
129 2 //delay(100);
130 2 }
131 1 }
ARM COMPILER V2.42, key 05/01/06 13:35:23 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC init_port?T
PUBLIC Scan_Key?T
PUBLIC delay?T
PUBLIC main
*** CODE SEGMENT '?PR?init_port?T?key':
37: IODIR1=0x00FF0000;
00000000 4800 LDR R1,=0xFF0000
00000002 4800 LDR R0,=0xE0028018
00000004 6001 STR R1,[R0,#0x0]
38: IODIR0=0x40600010;
00000006 4800 LDR R1,=0x40600010
00000008 4800 LDR R0,=0xE0028008
0000000A 6001 STR R1,[R0,#0x0]
40: }
0000000C 4770 BX R14
0000000E ENDP ; 'init_port?T'
*** CODE SEGMENT '?PR?Scan_Key?T?key':
53: unsigned char Scan_Key(void)
00000000 B430 PUSH {R4-R5}
54: {
00000002 ; SCOPE-START
58: i=0;
00000002 2000 MOV R0,#0x0
00000004 1C01 MOV R1,R0 ; i
00000006 ---- Variable 'i' assigned to Register 'R1' ----
59: key=0;
00000006 1C03 MOV R3,R0 ; key
00000008 ---- Variable 'key' assigned to Register 'R3' ----
61: k=IOPIN0;
00000008 4800 LDR R2,=0xE0028000
0000000A 6815 LDR R5,[R2,#0x0]
0000000C ---- Variable 'k' assigned to Register 'R5' ----
62: if((k&1<<KEY4)==0)key+=1;
0000000C 1C2A MOV R2,R5 ; k
0000000E 2440 MOV R4,#0x40
00000010 4222 TST R2,R4 ; k
00000012 D102 BNE L_1 ; T=0x0000001A
00000014 3301 ADD R3,#0x1
00000016 061B LSL R3,R3,#0x18
00000018 0E1B LSR R3,R3,#0x18
0000001A L_1:
63: key=key<<1;
0000001A 1C1A MOV R2,R3 ; key
0000001C 0613 LSL R3,R2,#0x18 ; key
0000001E 0E1B LSR R3,R3,#0x18
00000020 005B LSL R3,R3,#0x1
00000022 061B LSL R3,R3,#0x18
00000024 0E1B LSR R3,R3,#0x18
64: if((k&1<<KEY3)==0)key+=1;
00000026 1C2A MOV R2,R5 ; k
00000028 2480 MOV R4,#0x80
0000002A 4222 TST R2,R4 ; k
0000002C D102 BNE L_2 ; T=0x00000034
0000002E 3301 ADD R3,#0x1
00000030 061B LSL R3,R3,#0x18
00000032 0E1B LSR R3,R3,#0x18
00000034 L_2:
65: key=key<<1;
ARM COMPILER V2.42, key 05/01/06 13:35:23 PAGE 5
00000034 1C1A MOV R2,R3 ; key
00000036 0613 LSL R3,R2,#0x18 ; key
00000038 0E1B LSR R3,R3,#0x18
0000003A 005B LSL R3,R3,#0x1
0000003C 061B LSL R3,R3,#0x18
0000003E 0E1B LSR R3,R3,#0x18
66: if((k&1<<KEY2)==0)key+=1;
00000040 1C2A MOV R2,R5 ; k
00000042 4800 LDR R4,=0x8000
00000044 4222 TST R2,R4 ; k
00000046 D102 BNE L_3 ; T=0x0000004E
00000048 3301 ADD R3,#0x1
0000004A 061B LSL R3,R3,#0x18
0000004C 0E1B LSR R3,R3,#0x18
0000004E L_3:
67: key=key<<1;
0000004E 1C1A MOV R2,R3 ; key
00000050 0613 LSL R3,R2,#0x18 ; key
00000052 0E1B LSR R3,R3,#0x18
00000054 005B LSL R3,R3,#0x1
00000056 061B LSL R3,R3,#0x18
00000058 0E1B LSR R3,R3,#0x18
68: if((k&1<<KEY1)==0)key+=1;
0000005A 1C2A MOV R2,R5 ; k
0000005C 4800 LDR R4,=0x2000
0000005E 4222 TST R2,R4 ; k
00000060 D102 BNE L_4 ; T=0x00000068
00000062 3301 ADD R3,#0x1
00000064 061B LSL R3,R3,#0x18
00000066 0E1B LSR R3,R3,#0x18
00000068 L_4:
69: switch(key)
00000068 1C1A MOV R2,R3 ; key
0000006A 2A01 CMP R2,#0x1 ; key
0000006C D013 BEQ L_8 ; T=0x00000096
0000006E 2A02 CMP R2,#0x2 ; key
00000070 D00F BEQ L_9 ; T=0x00000092
00000072 2A04 CMP R2,#0x4 ; key
00000074 D00B BEQ L_10 ; T=0x0000008E
00000076 2A08 CMP R2,#0x8 ; key
00000078 D007 BEQ L_11 ; T=0x0000008A
0000007A 2A0E CMP R2,#0xE ; key
0000007C D00F BEQ L_12 ; T=0x0000009E
0000007E 2A0F CMP R2,#0xF ; key
00000080 D00B BEQ L_13 ; T=0x0000009A
00000082 2A00 CMP R2,#0x0 ; key
00000084 D10D BNE L_7 ; T=0x000000A2
71: case 0x00:
00000086 L_6:
72: i=0;
00000086 1C01 MOV R1,R0 ; i
73: break;
00000088 E00C B L_5 ; T=0x000000A4
74: case 0x08:
0000008A L_11:
75: i=4;
0000008A 2104 MOV R1,#0x4
76: break;
0000008C E00A B L_5 ; T=0x000000A4
78: case 0x04:
0000008E L_10:
79: i=3;
0000008E 2103 MOV R1,#0x3
80: break;
00000090 E008 B L_5 ; T=0x000000A4
82: case 0x02:
ARM COMPILER V2.42, key 05/01/06 13:35:23 PAGE 6
00000092 L_9:
83: i=2;
00000092 2102 MOV R1,#0x2
84: break;
00000094 E006 B L_5 ; T=0x000000A4
86: case 0x01:
00000096 L_8:
87: i=1;
00000096 2101 MOV R1,#0x1
88: break;
00000098 E004 B L_5 ; T=0x000000A4
90: case 0x0F: //复合键
0000009A L_13:
91: i=0XF;
0000009A 210F MOV R1,#0xF
92: break;
0000009C E002 B L_5 ; T=0x000000A4
94: case 0x0E:
0000009E L_12:
95: i=0X0E;
0000009E 210E MOV R1,#0xE
96: break;
000000A0 E000 B L_5 ; T=0x000000A4
97: default:
000000A2 L_7:
98: i=0;
000000A2 1C01 MOV R1,R0 ; i
100: }
000000A4 L_5:
101: return i;
000000A4 1C08 MOV R0,R1 ; i
000000A6 0600 LSL R0,R0,#0x18 ; i
000000A8 0E00 LSR R0,R0,#0x18
000000AA ; SCOPE-END
102: }
000000AA BC30 POP {R4-R5}
000000AC 4770 BX R14
000000AE ENDP ; 'Scan_Key?T'
*** CODE SEGMENT '?PR?delay?T?key':
107: void delay (unsigned int i) { /* Delay function */
00000000 ---- Variable 'i' assigned to Register 'R0' ----
00000000 ; SCOPE-START
109: while(i>1)
00000000 E005 B L_15 ; T=0x0000000E
111: for(n=65535;n>1;n--);
00000002 L_23:
00000002 4800 LDR R1,=0xFFFF
00000004 ---- Variable 'n' assigned to Register 'R1' ----
00000004 L_19:
00000004 3901 SUB R1,#0x1
00000006 1C0A MOV R2,R1 ; n
00000008 2A01 CMP R2,#0x1 ; n
0000000A D8FB BHI L_19 ; T=0x00000004
112: i--;
0000000C 3801 SUB R0,#0x1
113: }
0000000E L_15:
0000000E 1C01 MOV R1,R0 ; i
00000010 2901 CMP R1,#0x1 ; i
00000012 D8F6 BHI L_23 ; T=0x00000002
00000014 ; SCOPE-END
114: }
00000014 4770 BX R14
00000016 ENDP ; 'delay?T'
*** CODE SEGMENT '?PR?main?key':
118: void main(void)
ARM COMPILER V2.42, key 05/01/06 13:35:23 PAGE 7
00000000 B500 PUSH {LR}
119: {
00000002 ; SCOPE-START
121: init_port();
00000002 F7FF BL init_port?T ; T=0x0001 (1)
00000004 FFFD BL init_port?T ; T=0x0001 (2)
122: while(1)
00000006 L_26:
124: i=Scan_Key();
00000006 F7FF BL Scan_Key?T ; T=0x0001 (1)
00000008 FFFB BL Scan_Key?T ; T=0x0001 (2)
0000000A 1C04 MOV R4,R0 ; i
0000000C ---- Variable 'i' assigned to Register 'R4' ----
125: if(i!=0)IOCLR1 = (0x00008000<<i);
0000000C 1C20 MOV R0,R4 ; i
0000000E 0600 LSL R0,R0,#0x18 ; i
00000010 0E00 LSR R0,R0,#0x18
00000012 2800 CMP R0,#0x0
00000014 D006 BEQ L_28 ; T=0x00000024
00000016 1C20 MOV R0,R4 ; i
00000018 0600 LSL R0,R0,#0x18 ; i
0000001A 0E00 LSR R0,R0,#0x18
0000001C 4800 LDR R1,=0x8000
0000001E 4081 LSL R1,R0
00000020 4800 LDR R0,=0xE002801C
00000022 6001 STR R1,[R0,#0x0]
00000024 L_28:
127: delay(30);
00000024 201E MOV R0,#0x1E
00000026 F7FF BL delay?T ; T=0x0001 (1)
00000028 FFEB BL delay?T ; T=0x0001 (2)
128: IOSET1 = 0x00ff0000; //ALL LED OFF
0000002A 4800 LDR R1,=0xFF0000
0000002C 4800 LDR R0,=0xE0028014
0000002E 6001 STR R1,[R0,#0x0]
130: }
00000030 E7E9 B L_26 ; T=0x00000006
00000032 ; SCOPE-END
00000032 BC08 POP {R3}
00000034 4718 BX R3
00000036 ENDP ; 'main'
Module Information Static
----------------------------------
code size = ------
data size = ------
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 + -