?? key_new.lst
字號:
__start:
__text_start:
4E EFCF LDI R28,0xFF
4F E1D0 LDI R29,0x10
50 BFCD OUT 0x3D,R28
51 BFDE OUT 0x3E,R29
52 51C0 SUBI R28,0x10
53 40D0 SBCI R29,0
54 EA0A LDI R16,0xAA
55 8308 STD Y+0,R16
56 2400 CLR R0
57 E0E0 LDI R30,0
58 E0F1 LDI R31,1
59 E011 LDI R17,1
5A 30E0 CPI R30,0
5B 07F1 CPC R31,R17
5C F011 BEQ 0x005F
5D 9201 ST R0,Z+
5E CFFB RJMP 0x005A
5F 8300 STD Z+0,R16
60 E9EC LDI R30,0x9C
61 E0F0 LDI R31,0
62 E0A0 LDI R26,0
63 E0B1 LDI R27,1
64 E010 LDI R17,0
65 E000 LDI R16,0
66 BF0B OUT 0x3B,R16
67 39EC CPI R30,0x9C
68 07F1 CPC R31,R17
69 F021 BEQ 0x006E
6A 95C8 LPM
6B 9631 ADIW R30,1
6C 920D ST R0,X+
6D CFF9 RJMP 0x0067
6E 940E 0079 CALL _main
_exit:
70 CFFF RJMP _exit
FILE: F:\AVR最新\HaiFeng\key可用\key_new\ICCAVR\key_new.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) void delay(unsigned int t) //延時函數
(0004) {
(0005) while(t--);
_delay:
t --> R16
71 0118 MOVW R2,R16
72 5001 SUBI R16,1
73 4010 SBCI R17,0
74 2022 TST R2
75 F7D9 BNE 0x0071
76 2033 TST R3
77 F7C9 BNE 0x0071
78 9508 RET
_main:
table --> Y,+0
key --> R20
79 9760 SBIW R28,0x10
(0006) }
(0007)
(0008) void main()
(0009) {
(0010) unsigned char table[]={0x3f,0x06,0x5b,0x4f,//定義顯示數據
7A E88C LDI R24,0x8C
7B E090 LDI R25,0
7C 01FE MOVW R30,R28
7D E100 LDI R16,0x10
7E E010 LDI R17,0
7F 93FA ST R31,-Y
80 93EA ST R30,-Y
81 939A ST R25,-Y
82 938A ST R24,-Y
83 940E 0128 CALL asgncblk
(0011) 0x66,0x6d,0x7d,0x07,
(0012) 0x7f,0x6f,0x77,0x7c,
(0013) 0x39,0x5e,0x79,0x71};
(0014) unsigned char key; //定義鍵值函數
(0015) DDRB=0xf0; //設置高四位為輸出,低四位為輸入
85 EF80 LDI R24,0xF0
86 BB87 OUT 0x17,R24
(0016) PORTB|=0x0f;//打開低四位,關閉高四位,初始化A端口
87 B388 IN R24,0x18
88 608F ORI R24,0xF
89 BB88 OUT 0x18,R24
(0017) DDRD=0xff;
8A EF8F LDI R24,0xFF
8B BB81 OUT 0x11,R24
(0018) PORTD=0x00;
8C 2422 CLR R2
8D BA22 OUT 0x12,R2
8E C096 RJMP 0x0125
(0019) while(1)
(0020) {
(0021) do
(0022) {
(0023) delay(16000); //延時去抖
8F E800 LDI R16,0x80
90 E31E LDI R17,0x3E
91 DFDF RCALL _delay
(0024) PORTB=0xef; //第一次高位輸出1110
92 EE8F LDI R24,0xEF
93 BB88 OUT 0x18,R24
(0025) delay(1600); //讀數延時
94 E400 LDI R16,0x40
95 E016 LDI R17,6
96 DFDA RCALL _delay
(0026) switch((PINB&0x0f))//按鍵識別 (0,1,2,3)
97 B366 IN R22,0x16
98 2777 CLR R23
99 706F ANDI R22,0xF
9A 7070 ANDI R23,0
9B 3067 CPI R22,7
9C E0E0 LDI R30,0
9D 077E CPC R23,R30
9E F099 BEQ 0x00B2
9F 306B CPI R22,0xB
A0 E0E0 LDI R30,0
A1 077E CPC R23,R30
A2 F069 BEQ 0x00B0
A3 306D CPI R22,0xD
A4 E0E0 LDI R30,0
A5 077E CPC R23,R30
A6 F039 BEQ 0x00AE
A7 306E CPI R22,0xE
A8 E0E0 LDI R30,0
A9 077E CPC R23,R30
AA F009 BEQ 0x00AC
AB C007 RJMP 0x00B3
(0027) {
(0028) case 0x0e:key=0;break;
AC 2744 CLR R20
AD C005 RJMP 0x00B3
(0029) case 0x0d:key=1;break;
AE E041 LDI R20,1
AF C003 RJMP 0x00B3
(0030) case 0x0b:key=2;break;
B0 E042 LDI R20,2
B1 C001 RJMP 0x00B3
(0031) case 0x07:key=3;break;
B2 E043 LDI R20,3
(0032) }
(0033) PORTB=0xdf; //第二次高位輸出1101
B3 ED8F LDI R24,0xDF
B4 BB88 OUT 0x18,R24
(0034) delay(1600);
B5 E400 LDI R16,0x40
B6 E016 LDI R17,6
B7 DFB9 RCALL _delay
(0035) switch((PINB&0x0f))//按鍵識別 (4,5,6,7)
B8 B366 IN R22,0x16
B9 2777 CLR R23
BA 706F ANDI R22,0xF
BB 7070 ANDI R23,0
BC 3067 CPI R22,7
BD E0E0 LDI R30,0
BE 077E CPC R23,R30
BF F099 BEQ 0x00D3
C0 306B CPI R22,0xB
C1 E0E0 LDI R30,0
C2 077E CPC R23,R30
C3 F069 BEQ 0x00D1
C4 306D CPI R22,0xD
C5 E0E0 LDI R30,0
C6 077E CPC R23,R30
C7 F039 BEQ 0x00CF
C8 306E CPI R22,0xE
C9 E0E0 LDI R30,0
CA 077E CPC R23,R30
CB F009 BEQ 0x00CD
CC C007 RJMP 0x00D4
(0036) {
(0037) case 0x0e:key=4;break;
CD E044 LDI R20,4
CE C005 RJMP 0x00D4
(0038) case 0x0d:key=5;break;
CF E045 LDI R20,5
D0 C003 RJMP 0x00D4
(0039) case 0x0b:key=6;break;
D1 E046 LDI R20,6
D2 C001 RJMP 0x00D4
(0040) case 0x07:key=7;break;
D3 E047 LDI R20,7
(0041) }
(0042) PORTB=0xbf; //第三次高位輸出1011
D4 EB8F LDI R24,0xBF
D5 BB88 OUT 0x18,R24
(0043) delay(1600);
D6 E400 LDI R16,0x40
D7 E016 LDI R17,6
D8 DF98 RCALL _delay
(0044) switch((PINB&0x0f))//按鍵識別 (8,9,a,b)
D9 B366 IN R22,0x16
DA 2777 CLR R23
DB 706F ANDI R22,0xF
DC 7070 ANDI R23,0
DD 3067 CPI R22,7
DE E0E0 LDI R30,0
DF 077E CPC R23,R30
E0 F099 BEQ 0x00F4
E1 306B CPI R22,0xB
E2 E0E0 LDI R30,0
E3 077E CPC R23,R30
E4 F069 BEQ 0x00F2
E5 306D CPI R22,0xD
E6 E0E0 LDI R30,0
E7 077E CPC R23,R30
E8 F039 BEQ 0x00F0
E9 306E CPI R22,0xE
EA E0E0 LDI R30,0
EB 077E CPC R23,R30
EC F009 BEQ 0x00EE
ED C007 RJMP 0x00F5
(0045) {
(0046) case 0x0e:key=8;break;
EE E048 LDI R20,0x8
EF C005 RJMP 0x00F5
(0047) case 0x0d:key=9;break;
F0 E049 LDI R20,0x9
F1 C003 RJMP 0x00F5
(0048) case 0x0b:key=10;break;
F2 E04A LDI R20,0xA
F3 C001 RJMP 0x00F5
(0049) case 0x07:key=11;break;
F4 E04B LDI R20,0xB
(0050) }
(0051) PORTB=0x7f; //第四次高位輸出0111
F5 E78F LDI R24,0x7F
F6 BB88 OUT 0x18,R24
(0052) delay(1600);
F7 E400 LDI R16,0x40
F8 E016 LDI R17,6
F9 DF77 RCALL _delay
(0053) switch((PINB&0x0f))//按鍵識別 (c,d,e,f)
FA B366 IN R22,0x16
FB 2777 CLR R23
FC 706F ANDI R22,0xF
FD 7070 ANDI R23,0
FE 3067 CPI R22,7
FF E0E0 LDI R30,0
100 077E CPC R23,R30
101 F099 BEQ 0x0115
102 306B CPI R22,0xB
103 E0E0 LDI R30,0
104 077E CPC R23,R30
105 F069 BEQ 0x0113
106 306D CPI R22,0xD
107 E0E0 LDI R30,0
108 077E CPC R23,R30
109 F039 BEQ 0x0111
10A 306E CPI R22,0xE
10B E0E0 LDI R30,0
10C 077E CPC R23,R30
10D F009 BEQ 0x010F
10E C007 RJMP 0x0116
(0054) {
(0055) case 0x0e:key=12;break;
10F E04C LDI R20,0xC
110 C005 RJMP 0x0116
(0056) case 0x0d:key=13;break;
111 E04D LDI R20,0xD
112 C003 RJMP 0x0116
(0057) case 0x0b:key=14;break;
113 E04E LDI R20,0xE
114 C001 RJMP 0x0116
(0058) case 0x07:key=15;break;
115 E04F LDI R20,0xF
(0059) }
(0060) }while((PINB&0x0f)!=0x0f); //按鍵檢測
116 B386 IN R24,0x16
117 708F ANDI R24,0xF
118 308F CPI R24,0xF
119 F009 BEQ 0x011B
11A CF74 RJMP 0x008F
(0061) PORTD=table[key];
11B 01CE MOVW R24,R28
11C 2FE4 MOV R30,R20
11D 27FF CLR R31
11E 0FE8 ADD R30,R24
11F 1FF9 ADC R31,R25
120 8020 LDD R2,Z+0
121 BA22 OUT 0x12,R2
(0062) delay(16000);
FILE: <library>
122 E800 LDI R16,0x80
123 E31E LDI R17,0x3E
124 DF4C RCALL _delay
125 CF69 RJMP 0x008F
126 9660 ADIW R28,0x10
127 9508 RET
asgncblk:
128 93AA ST R26,-Y
129 93BA ST R27,-Y
12A 93EA ST R30,-Y
12B 93FA ST R31,-Y
12C 920A ST R0,-Y
12D 81AF LDD R26,Y+7
12E 85B8 LDD R27,Y+8
12F 81ED LDD R30,Y+5
130 81FE LDD R31,Y+6
131 3000 CPI R16,0
132 0701 CPC R16,R17
133 F031 BEQ 0x013A
134 95C8 LPM
135 920D ST R0,X+
136 9631 ADIW R30,1
137 5001 SUBI R16,1
138 4010 SBCI R17,0
139 CFF7 RJMP 0x0131
13A 9009 LD R0,Y+
13B 91F9 LD R31,Y+
13C 91E9 LD R30,Y+
13D 91B9 LD R27,Y+
13E 91A9 LD R26,Y+
13F 9624 ADIW R28,4
140 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -