📄 mkey.lst
字号:
__start:
__text_start:
3B E5CF LDI R28,0x5F
3C E0D4 LDI R29,4
3D BFCD OUT 0x3D,R28
3E BFDE OUT 0x3E,R29
3F 51C0 SUBI R28,0x10
40 40D0 SBCI R29,0
41 EA0A LDI R16,0xAA
42 8308 STD Y+0,R16
43 2400 CLR R0
44 E6E0 LDI R30,0x60
45 E0F0 LDI R31,0
46 E010 LDI R17,0
47 36E0 CPI R30,0x60
48 07F1 CPC R31,R17
49 F011 BEQ 0x004C
4A 9201 ST R0,Z+
4B CFFB RJMP 0x0047
4C 8300 STD Z+0,R16
4D E7E6 LDI R30,0x76
4E E0F0 LDI R31,0
4F E6A0 LDI R26,0x60
50 E0B0 LDI R27,0
51 E010 LDI R17,0
52 E000 LDI R16,0
53 BF0B OUT 0x3B,R16
54 37E6 CPI R30,0x76
55 07F1 CPC R31,R17
56 F021 BEQ 0x005B
57 95C8 LPM
58 9631 ADIW R30,1
59 920D ST R0,X+
5A CFF9 RJMP 0x0054
5B 940E 0141 CALL _main
_exit:
5D CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
5E D0FF RCALL push_xgsetF000
FILE: G:\学习\avr\天祥电子AVR视频教程\chengxu\mkey\mkey.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #pragma data:code
(0006) const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0007) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
(0008) void delay(uint ms)
(0009) {
(0010) uint i,j;
(0011) for(i=0;i<ms;i++)
5F 2744 CLR R20
60 2755 CLR R21
61 C00B RJMP 0x006D
(0012) {
(0013) for(j=0;j<1141;j++);
62 2766 CLR R22
63 2777 CLR R23
64 C002 RJMP 0x0067
65 5F6F SUBI R22,0xFF
66 4F7F SBCI R23,0xFF
67 3765 CPI R22,0x75
68 E0E4 LDI R30,4
69 077E CPC R23,R30
6A F3D0 BCS 0x0065
6B 5F4F SUBI R20,0xFF
6C 4F5F SBCI R21,0xFF
6D 1740 CP R20,R16
6E 0751 CPC R21,R17
6F F390 BCS 0x0062
70 C0F2 RJMP pop_xgsetF000
_show:
k --> R10
j --> R12
71 92AA ST R10,-Y
72 92CA ST R12,-Y
73 2EA2 MOV R10,R18
74 2EC0 MOV R12,R16
(0014) }
(0015) }
(0016) void show(uchar j,uchar k)
(0017) {
(0018) PORTA|=BIT(3);
75 9ADB SBI 0x1B,3
(0019) PORTB=table[j];
76 E584 LDI R24,0x54
77 E090 LDI R25,0
78 2D0C MOV R16,R12
79 2711 CLR R17
7A 0F00 LSL R16
7B 1F11 ROL R17
7C 0F08 ADD R16,R24
7D 1F19 ADC R17,R25
7E D0D1 RCALL elpm16
7F BB08 OUT 0x18,R16
(0020) PORTA&=~BIT(3);
80 98DB CBI 0x1B,3
(0021)
(0022) PORTB=0XFF;
81 EF8F LDI R24,0xFF
82 BB88 OUT 0x18,R24
(0023) PORTB&=~BIT(k);
83 E001 LDI R16,1
84 2D1A MOV R17,R10
85 D0F0 RCALL lsl8
86 2E20 MOV R2,R16
87 9420 COM R2
88 B238 IN R3,0x18
89 2032 AND R3,R2
8A BA38 OUT 0x18,R3
(0024) PORTA|=BIT(4);
8B 9ADC SBI 0x1B,4
(0025) PORTA&=~BIT(4);
8C 98DC CBI 0x1B,4
(0026) delay(1);
8D E001 LDI R16,1
8E E010 LDI R17,0
8F DFCE RCALL _delay
90 90C9 LD R12,Y+
91 90A9 LD R10,Y+
92 9508 RET
(0027) }
(0028) uchar key_press()
(0029) {
(0030) uchar i;
(0031) DDRD=0XFF;
_key_press:
i --> R16
93 EF8F LDI R24,0xFF
94 BB81 OUT 0x11,R24
(0032) PORTD=0XF0;
95 EF80 LDI R24,0xF0
96 BB82 OUT 0x12,R24
(0033)
(0034) DDRD=0X0F;
97 E08F LDI R24,0xF
98 BB81 OUT 0x11,R24
(0035)
(0036) i=PIND;
99 B300 IN R16,0x10
(0037) if(i==0XF0)
9A 3F00 CPI R16,0xF0
9B F421 BNE 0x00A0
(0038) {
(0039) DDRD=0XFF;
9C EF8F LDI R24,0xFF
9D BB81 OUT 0x11,R24
(0040) return 0;
9E 2700 CLR R16
9F C003 RJMP 0x00A3
(0041) }
(0042) else
(0043) {
(0044) DDRD=0XFF;
A0 EF8F LDI R24,0xFF
A1 BB81 OUT 0x11,R24
(0045) return 1;
A2 E001 LDI R16,1
A3 9508 RET
_key_scan:
j --> R10
key --> R20
i --> R22
A4 D0C3 RCALL push_xgsetF00C
(0046) }
(0047) }
(0048)
(0049) uchar key_scan()
(0050) {
(0051) uchar key,i=0X7F,j;
A5 E76F LDI R22,0x7F
(0052) delay(10);
A6 E00A LDI R16,0xA
A7 E010 LDI R17,0
A8 DFB5 RCALL _delay
(0053) if(key_press())
A9 DFE9 RCALL _key_press
AA 2300 TST R16
AB F409 BNE 0x00AD
AC C091 RJMP 0x013E
(0054) {
(0055) do
(0056) {
(0057) i=(i<<1|i>>7);
AD 2E26 MOV R2,R22
AE 9426 LSR R2
AF 9426 LSR R2
B0 9426 LSR R2
B1 9426 LSR R2
B2 9426 LSR R2
B3 9426 LSR R2
B4 9426 LSR R2
B5 2E36 MOV R3,R22
B6 0C33 LSL R3
B7 2832 OR R3,R2
B8 2D63 MOV R22,R3
(0058) PORTD=i;
B9 BA32 OUT 0x12,R3
(0059) DDRD=0X0F;
BA E08F LDI R24,0xF
BB BB81 OUT 0x11,R24
(0060)
(0061) key=PIND;
BC B340 IN R20,0x10
(0062) j=key&0XF0;
BD 2F84 MOV R24,R20
BE 7F80 ANDI R24,0xF0
BF 2EA8 MOV R10,R24
(0063)
(0064) }while(j==0XF0);
C0 2D8A MOV R24,R10
C1 3F80 CPI R24,0xF0
C2 F351 BEQ 0x00AD
(0065)
(0066) while(key_press());
C3 DFCF RCALL _key_press
C4 2300 TST R16
C5 F7E9 BNE 0x00C3
(0067) switch(key)
C6 2F64 MOV R22,R20
C7 2777 CLR R23
C8 3B67 CPI R22,0xB7
C9 E0E0 LDI R30,0
CA 077E CPC R23,R30
CB F409 BNE 0x00CD
CC C06B RJMP 0x0138
CD 3B6B CPI R22,0xBB
CE E0E0 LDI R30,0
CF 077E CPC R23,R30
D0 F409 BNE 0x00D2
D1 C05E RJMP 0x0130
D2 3B6D CPI R22,0xBD
D3 E0E0 LDI R30,0
D4 077E CPC R23,R30
D5 F409 BNE 0x00D7
D6 C051 RJMP 0x0128
D7 3B6E CPI R22,0xBE
D8 E0E0 LDI R30,0
D9 077E CPC R23,R30
DA F409 BNE 0x00DC
DB C044 RJMP 0x0120
DC EB8E LDI R24,0xBE
DD E090 LDI R25,0
DE 1786 CP R24,R22
DF 0797 CPC R25,R23
E0 F0A4 BLT 0x00F5
E1 3767 CPI R22,0x77
E2 E0E0 LDI R30,0
E3 077E CPC R23,R30
E4 F409 BNE 0x00E6
E5 C054 RJMP 0x013A
E6 376B CPI R22,0x7B
E7 E0E0 LDI R30,0
E8 077E CPC R23,R30
E9 F409 BNE 0x00EB
EA C047 RJMP 0x0132
EB 376D CPI R22,0x7D
EC E0E0 LDI R30,0
ED 077E CPC R23,R30
EE F409 BNE 0x00F0
EF C03A RJMP 0x012A
F0 376E CPI R22,0x7E
F1 E0E0 LDI R30,0
F2 077E CPC R23,R30
F3 F171 BEQ 0x0122
F4 C047 RJMP 0x013C
F5 3D67 CPI R22,0xD7
F6 E0E0 LDI R30,0
F7 077E CPC R23,R30
F8 F409 BNE 0x00FA
F9 C03C RJMP 0x0136
FA 3D6B CPI R22,0xDB
FB E0E0 LDI R30,0
FC 077E CPC R23,R30
FD F181 BEQ 0x012E
FE 3D6D CPI R22,0xDD
FF E0E0 LDI R30,0
100 077E CPC R23,R30
101 F121 BEQ 0x0126
102 3D6E CPI R22,0xDE
103 E0E0 LDI R30,0
104 077E CPC R23,R30
105 F0C1 BEQ 0x011E
106 3D67 CPI R22,0xD7
107 E0E0 LDI R30,0
108 077E CPC R23,R30
109 F40C BGE 0x010B
10A C031 RJMP 0x013C
10B 3E67 CPI R22,0xE7
10C E0E0 LDI R30,0
10D 077E CPC R23,R30
10E F129 BEQ 0x0134
10F 3E6B CPI R22,0xEB
110 E0E0 LDI R30,0
111 077E CPC R23,R30
112 F0C9 BEQ 0x012C
113 3E6D CPI R22,0xED
114 E0E0 LDI R30,0
115 077E CPC R23,R30
116 F069 BEQ 0x0124
117 3E6E CPI R22,0xEE
118 E0E0 LDI R30,0
119 077E CPC R23,R30
11A F009 BEQ 0x011C
11B C020 RJMP 0x013C
(0068) {
(0069) case 0xEE:
(0070) key=0x0;
11C 2744 CLR R20
(0071) break;
11D C021 RJMP 0x013F
(0072) case 0xDE:
(0073) key=0x1;
11E E041 LDI R20,1
(0074) break;
11F C01F RJMP 0x013F
(0075) case 0xBE:
(0076) key=0x2;
120 E042 LDI R20,2
(0077) break;
121 C01D RJMP 0x013F
(0078) case 0x7E:
(0079) key=0x3;
122 E043 LDI R20,3
(0080) break;
123 C01B RJMP 0x013F
(0081) case 0xED:
(0082) key=0x4;
124 E044 LDI R20,4
(0083) break;
125 C019 RJMP 0x013F
(0084) case 0xDD:
(0085) key=0x5;
126 E045 LDI R20,5
(0086) break;
127 C017 RJMP 0x013F
(0087) case 0xBD:
(0088) key=0x6;
128 E046 LDI R20,6
(0089) break;
129 C015 RJMP 0x013F
(0090) case 0x7D:
(0091) key=0x7;
12A E047 LDI R20,7
(0092) break;
12B C013 RJMP 0x013F
(0093) case 0xEB:
(0094) key=0x8;
12C E048 LDI R20,0x8
(0095) break;
12D C011 RJMP 0x013F
(0096) case 0xDB:
(0097) key=0x9;
12E E049 LDI R20,0x9
(0098) break;
12F C00F RJMP 0x013F
(0099) case 0xBB:
(0100) key=0xA;
130 E04A LDI R20,0xA
(0101) break;
131 C00D RJMP 0x013F
(0102) case 0x7B:
(0103) key=0xB;
132 E04B LDI R20,0xB
(0104) break;
133 C00B RJMP 0x013F
(0105) case 0xE7:
(0106) key=0xC;
134 E04C LDI R20,0xC
(0107) break;
135 C009 RJMP 0x013F
(0108) case 0xD7:
(0109) key=0xD;
136 E04D LDI R20,0xD
(0110) break;
137 C007 RJMP 0x013F
(0111) case 0xB7:
(0112) key=0xE;
138 E04E LDI R20,0xE
(0113) break;
139 C005 RJMP 0x013F
(0114) case 0x77:
(0115) key=0xF;
13A E04F LDI R20,0xF
(0116) break;
13B C003 RJMP 0x013F
(0117) default:
(0118) key=16;
13C E140 LDI R20,0x10
(0119) }
(0120) }
13D C001 RJMP 0x013F
(0121) else
(0122) {
(0123) key=16;
13E E140 LDI R20,0x10
(0124) }
(0125) return key;
13F 2F04 MOV R16,R20
140 C02E RJMP pop_xgsetF00C
(0126) }
(0127) void main()
(0128) {
(0129) uchar l;
(0130) DDRA|=0X18;// 0001 1000
_main:
l --> R10
141 B38A IN R24,0x1A
142 6188 ORI R24,0x18
143 BB8A OUT 0x1A,R24
(0131) DDRB=0XFF;
144 EF8F LDI R24,0xFF
145 BB87 OUT 0x17,R24
146 C007 RJMP 0x014E
(0132) while(1)
(0133) {
(0134) if(key_press())
147 DF4B RCALL _key_press
148 2300 TST R16
149 F021 BEQ 0x014E
(0135) {
(0136) l=key_scan();
14A DF59 RCALL _key_scan
14B 2EA0 MOV R10,R16
(0137) show(l,0);
FILE: <library>
14C 2722 CLR R18
14D DF23 RCALL _show
14E CFF8 RJMP 0x0147
14F 9508 RET
elpm16:
150 93EA ST R30,-Y
151 93FA ST R31,-Y
152 920A ST R0,-Y
153 2FE0 MOV R30,R16
154 2FF1 MOV R31,R17
155 95D8 ELPM
156 2D00 MOV R16,R0
157 9631 ADIW R30,1
158 95D8 ELPM
159 2D10 MOV R17,R0
15A 9009 LD R0,Y+
15B 91F9 LD R31,Y+
15C 91E9 LD R30,Y+
15D 9508 RET
push_xgsetF000:
15E 937A ST R23,-Y
15F 936A ST R22,-Y
160 935A ST R21,-Y
161 934A ST R20,-Y
162 9508 RET
pop_xgsetF000:
163 9149 LD R20,Y+
164 9159 LD R21,Y+
165 9169 LD R22,Y+
166 9179 LD R23,Y+
167 9508 RET
push_xgsetF00C:
168 937A ST R23,-Y
169 936A ST R22,-Y
16A 935A ST R21,-Y
16B 934A ST R20,-Y
16C 92BA ST R11,-Y
16D 92AA ST R10,-Y
16E 9508 RET
pop_xgsetF00C:
16F 90A9 LD R10,Y+
170 90B9 LD R11,Y+
171 9149 LD R20,Y+
172 9159 LD R21,Y+
173 9169 LD R22,Y+
174 9179 LD R23,Y+
175 9508 RET
lsl8:
176 2311 TST R17
177 F019 BEQ 0x017B
178 0F00 LSL R16
179 951A DEC R17
17A CFFB RJMP lsl8
17B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -