?? 2x8_key.lst
字號:
1 .file "2X8_key.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
74 .global key_init
76 key_init:
1:2X8_key.c **** /*---------------------------------------
2:2X8_key.c **** 2X8鍵盤掃描程序
3:2X8_key.c **** M16的PA5~PA7接74HC138的A.B.C輸入端,74HC138的輸出端接鍵盤的8列
4:2X8_key.c **** M16的PC6.PC7接鍵盤的2行
5:2X8_key.c **** 用定時器0定時中斷來進行鍵盤掃描,返回鍵值,不能多鍵同時按,不能長按
6:2X8_key.c **** -----------------------------------------*/
7:2X8_key.c **** //定義MCU與按鍵的接口
8:2X8_key.c **** #include <avr/io.h>
9:2X8_key.c **** #include "2X8_key.h"
10:2X8_key.c **** #include "type.h"
11:2X8_key.c ****
12:2X8_key.c **** #define key_SEL_PORT PORTA
13:2X8_key.c **** #define key_SEL_DDR DDRA
14:2X8_key.c **** #define key_PORT PORTC
15:2X8_key.c **** #define key_DDR DDRC
16:2X8_key.c **** #define key_PIN PINC
17:2X8_key.c ****
18:2X8_key.c **** #define key_SELA PA5 //portA5
19:2X8_key.c **** #define key_SELB PA6 //portA6
20:2X8_key.c **** #define key_SELC PA7 //portA7
21:2X8_key.c **** #define key_KIN0 PC6 //portC6
22:2X8_key.c **** #define key_KIN1 PC7 //portC7
23:2X8_key.c ****
24:2X8_key.c ****
25:2X8_key.c **** /*----------------------------------------------------------
26:2X8_key.c **** key_init :按鍵相關端口初始化函數
27:2X8_key.c **** 輸入參數 :無
28:2X8_key.c **** 輸出參數 :無
29:2X8_key.c **** 作者 :ken
30:2X8_key.c **** 日期 :2007-08-15
31:2X8_key.c **** --------------------------------------------------------------*/
32:2X8_key.c **** void key_init(void)
33:2X8_key.c **** {
78 .LM1:
79 /* prologue: frame size=0 */
80 0000 CF93 push r28
81 0002 DF93 push r29
82 0004 CDB7 in r28,__SP_L__
83 0006 DEB7 in r29,__SP_H__
84 /* prologue end (size=4) */
34:2X8_key.c **** key_SEL_DDR|=((1<<key_SELA)|(1<<key_SELB)|(1<<key_SELC)); //設置為輸出
86 .LM2:
87 0008 8091 3A00 lds r24,58
88 000c 806E ori r24,lo8(-32)
89 000e 8093 3A00 sts 58,r24
35:2X8_key.c **** key_SEL_PORT&=~(1<<key_SELA);
91 .LM3:
92 0012 8091 3B00 lds r24,59
93 0016 8F7D andi r24,lo8(-33)
94 0018 8093 3B00 sts 59,r24
36:2X8_key.c **** key_SEL_PORT&=~(1<<key_SELB);
96 .LM4:
97 001c 8091 3B00 lds r24,59
98 0020 8F7B andi r24,lo8(-65)
99 0022 8093 3B00 sts 59,r24
37:2X8_key.c **** key_SEL_PORT&=~(1<<key_SELC);
101 .LM5:
102 0026 9FE7 ldi r25,lo8(127)
103 0028 8091 3B00 lds r24,59
104 002c 8923 and r24,r25
105 002e 8093 3B00 sts 59,r24
38:2X8_key.c **** key_PORT|=((1<<key_KIN0)|(1<<key_KIN1)); //設置內部上拉電阻
107 .LM6:
108 0032 8091 3500 lds r24,53
109 0036 806C ori r24,lo8(-64)
110 0038 8093 3500 sts 53,r24
39:2X8_key.c **** key_DDR&=~(1<<key_KIN0); //設置為輸入
112 .LM7:
113 003c 8091 3400 lds r24,52
114 0040 8F7B andi r24,lo8(-65)
115 0042 8093 3400 sts 52,r24
40:2X8_key.c **** key_DDR&=~(1<<key_KIN1);
117 .LM8:
118 0046 9FE7 ldi r25,lo8(127)
119 0048 8091 3400 lds r24,52
120 004c 8923 and r24,r25
121 004e 8093 3400 sts 52,r24
122 /* epilogue: frame size=0 */
123 0052 DF91 pop r29
124 0054 CF91 pop r28
125 0056 0895 ret
126 /* epilogue end (size=3) */
127 /* function key_init size 44 (37) */
129 .Lscope0:
131 .global key
133 key:
41:2X8_key.c **** }
42:2X8_key.c ****
43:2X8_key.c ****
44:2X8_key.c **** /*-------------------------------------------------------------------
45:2X8_key.c **** key :按鍵掃描函數
46:2X8_key.c **** 輸入參數 :無
47:2X8_key.c **** 輸出參數 :鍵碼
48:2X8_key.c **** 作者 :ken
49:2X8_key.c **** 日期 :2007-08-15
50:2X8_key.c **** ---------------------------------------------------------------*/
51:2X8_key.c **** unsigned char key(void)
52:2X8_key.c **** {
135 .LM9:
136 /* prologue: frame size=3 */
137 0058 CF93 push r28
138 005a DF93 push r29
139 005c CDB7 in r28,__SP_L__
140 005e DEB7 in r29,__SP_H__
141 0060 2397 sbiw r28,3
142 0062 0FB6 in __tmp_reg__,__SREG__
143 0064 F894 cli
144 0066 DEBF out __SP_H__,r29
145 0068 0FBE out __SREG__,__tmp_reg__
146 006a CDBF out __SP_L__,r28
147 /* prologue end (size=10) */
53:2X8_key.c **** unsigned char row; //col表示行,row表示列
54:2X8_key.c **** for(row=0;row<8;row++)
149 .LM10:
150 006c 1982 std Y+1,__zero_reg__
151 .L3:
153 .LM11:
154 006e 8981 ldd r24,Y+1
155 0070 8830 cpi r24,lo8(8)
156 0072 70F5 brsh .L4
55:2X8_key.c **** {
56:2X8_key.c **** key_SEL_PORT&=0x1f;
158 .LM12:
159 0074 8091 3B00 lds r24,59
160 0078 8F71 andi r24,lo8(31)
161 007a 8093 3B00 sts 59,r24
57:2X8_key.c **** key_SEL_PORT|=(row<<5); //把row值送到高3位
163 .LM13:
164 007e 8981 ldd r24,Y+1
165 0080 9927 clr r25
166 0082 880F lsl r24
167 0084 991F rol r25
168 0086 8295 swap r24
169 0088 9295 swap r25
170 008a 907F andi r25,0xf0
171 008c 9827 eor r25,r24
172 008e 807F andi r24,0xf0
173 0090 9827 eor r25,r24
174 0092 2091 3B00 lds r18,59
175 0096 822B or r24,r18
176 0098 8093 3B00 sts 59,r24
58:2X8_key.c ****
59:2X8_key.c **** if((key_PIN&(1<<key_KIN1))==0) //第二行有按鍵按下
178 .LM14:
179 009c 8091 3300 lds r24,51
180 00a0 8823 tst r24
181 00a2 34F0 brlt .L6
60:2X8_key.c **** {
61:2X8_key.c **** return(10+row); //返回第二行鍵值10-17
183 .LM15:
184 00a4 8981 ldd r24,Y+1
185 00a6 865F subi r24,lo8(-(10))
186 00a8 9927 clr r25
187 00aa 9B83 std Y+3,r25
188 00ac 8A83 std Y+2,r24
189 00ae 14C0 rjmp .L2
190 .L6:
62:2X8_key.c **** }
63:2X8_key.c ****
64:2X8_key.c **** if((key_PIN&(1<<key_KIN0))==0) //第一行有按鍵按下
192 .LM16:
193 00b0 8091 3300 lds r24,51
194 00b4 9927 clr r25
195 00b6 8074 andi r24,lo8(64)
196 00b8 9070 andi r25,hi8(64)
197 00ba 0097 sbiw r24,0
198 00bc 29F4 brne .L5
65:2X8_key.c **** {
66:2X8_key.c **** return(row); //返回第一行鍵值00-07
200 .LM17:
201 00be 8981 ldd r24,Y+1
202 00c0 9927 clr r25
203 00c2 9B83 std Y+3,r25
204 00c4 8A83 std Y+2,r24
205 00c6 08C0 rjmp .L2
206 .L5:
208 .LM18:
209 00c8 8981 ldd r24,Y+1
210 00ca 8F5F subi r24,lo8(-(1))
211 00cc 8983 std Y+1,r24
212 00ce CFCF rjmp .L3
213 .L4:
67:2X8_key.c **** }
68:2X8_key.c ****
69:2X8_key.c **** }
70:2X8_key.c **** return(9);
215 .LM19:
216 00d0 89E0 ldi r24,lo8(9)
217 00d2 90E0 ldi r25,hi8(9)
218 00d4 9B83 std Y+3,r25
219 00d6 8A83 std Y+2,r24
220 .L2:
71:2X8_key.c **** }
222 .LM20:
223 00d8 8A81 ldd r24,Y+2
224 00da 9B81 ldd r25,Y+3
225 /* epilogue: frame size=3 */
226 00dc 2396 adiw r28,3
227 00de 0FB6 in __tmp_reg__,__SREG__
228 00e0 F894 cli
229 00e2 DEBF out __SP_H__,r29
230 00e4 0FBE out __SREG__,__tmp_reg__
231 00e6 CDBF out __SP_L__,r28
232 00e8 DF91 pop r29
233 00ea CF91 pop r28
234 00ec 0895 ret
235 /* epilogue end (size=9) */
236 /* function key size 75 (56) */
241 .Lscope1:
242 .text
244 Letext:
245 /* File "2X8_key.c": code 119 = 0x0077 ( 93), prologues 14, epilogues 12 */
DEFINED SYMBOLS
*ABS*:00000000 2X8_key.c
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:76 .text:00000000 key_init
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:133 .text:00000058 key
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccohbaaa.s:244 .text:000000ee Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -