📄 键盘.lst
字号:
__start:
__text_start:
42 E5CF LDI R28,0x5F
43 E0D4 LDI R29,4
44 BFCD OUT 0x3D,R28
45 BFDE OUT 0x3E,R29
46 51C0 SUBI R28,0x10
47 40D0 SBCI R29,0
48 EA0A LDI R16,0xAA
49 8308 STD Y+0,R16
4A 2400 CLR R0
4B E7E0 LDI R30,0x70
4C E0F0 LDI R31,0
4D E010 LDI R17,0
4E 37E0 CPI R30,0x70
4F 07F1 CPC R31,R17
50 F011 BEQ 0x0053
51 9201 ST R0,Z+
52 CFFB RJMP 0x004E
53 8300 STD Z+0,R16
54 E7E4 LDI R30,0x74
55 E0F0 LDI R31,0
56 E6A0 LDI R26,0x60
57 E0B0 LDI R27,0
58 E010 LDI R17,0
59 E000 LDI R16,0
5A BF0B OUT 0x3B,R16
5B 38E4 CPI R30,0x84
5C 07F1 CPC R31,R17
5D F021 BEQ 0x0062
5E 95C8 LPM
5F 9631 ADIW R30,1
60 920D ST R0,X+
61 CFF9 RJMP 0x005B
62 940E 00B0 CALL _main
_exit:
64 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
x --> R16
65 940E 0114 CALL push_xgsetF000
FILE: D:\学习工具\单片机程序\键盘\键盘.c
(0001) //ICC-AVR application builder : 2008-10-16 19:41:41
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) unsigned char A[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7f,0x39,0x3f,0x79,0x71};
(0008)
(0009) void delay(unsigned int x)
(0010) {
(0011) int i,j;
(0012) for(i=0;i<x;i++)
67 2744 CLR R20
68 2755 CLR R21
69 C00A RJMP 0x0074
(0013) for(j=0;j<8000;j++)
6A 2766 CLR R22
6B 2777 CLR R23
6C 5F6F SUBI R22,0xFF
6D 4F7F SBCI R23,0xFF
6E 3460 CPI R22,0x40
6F E1EF LDI R30,0x1F
70 077E CPC R23,R30
71 F3D4 BLT 0x006C
72 5F4F SUBI R20,0xFF
73 4F5F SBCI R21,0xFF
74 1740 CP R20,R16
75 0751 CPC R21,R17
76 F398 BCS 0x006A
77 940C 0119 JMP pop_xgsetF000
_read_key:
l --> Y,+1
k --> Y,+1
key_value --> R10
j --> R22
i --> R20
79 940E 011E CALL push_xgsetF00C
7B 2F40 MOV R20,R16
(0014) ;
(0015) }
(0016)
(0017) unsigned char read_key(unsigned char i)
(0018) {
(0019) unsigned char j,k,l,key_value=0;
7C 24AA CLR R10
(0020) PORTD=0x0F;
7D E08F LDI R24,0xF
7E BB82 OUT 0x12,R24
(0021) //DDRD=0xF0;
(0022) if((PIND&0X0f)==0x0f) return 0xff;
7F B380 IN R24,0x10
80 708F ANDI R24,0xF
81 308F CPI R24,0xF
82 F411 BNE 0x0085
83 EF0F LDI R16,0xFF
84 C029 RJMP 0x00AE
(0023) else
(0024) {delay(5);
85 E005 LDI R16,5
86 E010 LDI R17,0
87 DFDD RCALL _delay
(0025) if((PIND&0x0f)==0x0f) return 0xff;
88 B380 IN R24,0x10
89 708F ANDI R24,0xF
8A 308F CPI R24,0xF
8B F411 BNE 0x008E
8C EF0F LDI R16,0xFF
8D C020 RJMP 0x00AE
(0026) else
(0027) for(i=4;i<8;i++)
8E E044 LDI R20,4
8F C01B RJMP 0x00AB
(0028) {
(0029) PORTD=~(1<<i)| 0x0f;
90 E001 LDI R16,1
91 2F14 MOV R17,R20
92 940E 012C CALL lsl8
94 2F80 MOV R24,R16
95 9580 COM R24
96 608F ORI R24,0xF
97 BB82 OUT 0x12,R24
(0030) for(j=0;j<4;j++)
98 2766 CLR R22
99 C00E RJMP 0x00A8
(0031) {
(0032) if((PIND&(1<<j))==0)
9A E001 LDI R16,1
9B 2F16 MOV R17,R22
9C 940E 012C CALL lsl8
9E B220 IN R2,0x10
9F 2220 AND R2,R16
A0 F431 BNE 0x00A7
(0033) key_value=(i-4)*4+j;
A1 2F84 MOV R24,R20
A2 5084 SUBI R24,4
A3 2EA8 MOV R10,R24
A4 0CAA LSL R10
A5 0CAA LSL R10
A6 0EA6 ADD R10,R22
A7 9563 INC R22
A8 3064 CPI R22,4
A9 F380 BCS 0x009A
AA 9543 INC R20
AB 3048 CPI R20,0x8
AC F318 BCS 0x0090
(0034) }
(0035) }
(0036) return key_value;
AD 2D0A MOV R16,R10
AE 940C 0125 JMP pop_xgsetF00C
(0037) }
(0038) }
(0039) void main()
(0040) {
(0041) unsigned char m;
(0042) PORTA=0xFF;
_main:
m --> R10
B0 EF8F LDI R24,0xFF
B1 BB8B OUT 0x1B,R24
(0043) DDRA=0xFF;
B2 BB8A OUT 0x1A,R24
(0044) PORTD=0x0F;
B3 E08F LDI R24,0xF
B4 BB82 OUT 0x12,R24
(0045) DDRD=0xF0;
B5 EF80 LDI R24,0xF0
B6 BB81 OUT 0x11,R24
B7 C05A RJMP 0x0112
(0046) while(1)
(0047) {
(0048) m=read_key(4);
B8 E004 LDI R16,4
B9 DFBF RCALL _read_key
BA 2EA0 MOV R10,R16
(0049) switch(m)
BB 2D4A MOV R20,R10
BC 2755 CLR R21
BD 3040 CPI R20,0
BE E0E0 LDI R30,0
BF 075E CPC R21,R30
C0 F40C BGE 0x00C2
C1 C050 RJMP 0x0112
C2 E08F LDI R24,0xF
C3 E090 LDI R25,0
C4 1784 CP R24,R20
C5 0795 CPC R25,R21
C6 F40C BGE 0x00C8
C7 C04A RJMP 0x0112
C8 E584 LDI R24,0x54
C9 E090 LDI R25,0
CA 01FA MOVW R30,R20
CB 0FEE LSL R30
CC 1FFF ROL R31
CD 0FE8 ADD R30,R24
CE 1FF9 ADC R31,R25
CF 9025 LPM R2,Z+
D0 9034 LPM R3,0(Z)
D1 01F1 MOVW R30,R2
D2 9409 IJMP
(0050) {
(0051)
(0052) case 0:PORTA=A[0];break;
D3 9020 0060 LDS R2,A
D5 BA2B OUT 0x1B,R2
D6 C03B RJMP 0x0112
(0053) case 1:PORTA=A[1];break;
D7 9020 0061 LDS R2,A+1
D9 BA2B OUT 0x1B,R2
DA C037 RJMP 0x0112
(0054) case 2:PORTA=A[2];break;
DB 9020 0062 LDS R2,A+2
DD BA2B OUT 0x1B,R2
DE C033 RJMP 0x0112
(0055) case 3:PORTA=A[3];break;
DF 9020 0063 LDS R2,A+3
E1 BA2B OUT 0x1B,R2
E2 C02F RJMP 0x0112
(0056) case 4:PORTA=A[4];break;
E3 9020 0064 LDS R2,0x0064
E5 BA2B OUT 0x1B,R2
E6 C02B RJMP 0x0112
(0057) case 5:PORTA=A[5];break;
E7 9020 0065 LDS R2,0x0065
E9 BA2B OUT 0x1B,R2
EA C027 RJMP 0x0112
(0058) case 6:PORTA=A[6];break;
EB 9020 0066 LDS R2,0x0066
ED BA2B OUT 0x1B,R2
EE C023 RJMP 0x0112
(0059) case 7:PORTA=A[7];break;
EF 9020 0067 LDS R2,0x0067
F1 BA2B OUT 0x1B,R2
F2 C01F RJMP 0x0112
(0060) case 8:PORTA=A[8];break;
F3 9020 0068 LDS R2,0x0068
F5 BA2B OUT 0x1B,R2
F6 C01B RJMP 0x0112
(0061) case 9:PORTA=A[9];break;
F7 9020 0069 LDS R2,0x0069
F9 BA2B OUT 0x1B,R2
FA C017 RJMP 0x0112
(0062) case 10:PORTA=A[10];break;
FB 9020 006A LDS R2,0x006A
FD BA2B OUT 0x1B,R2
FE C013 RJMP 0x0112
(0063) case 11:PORTA=A[11];break;
FF 9020 006B LDS R2,0x006B
101 BA2B OUT 0x1B,R2
102 C00F RJMP 0x0112
(0064) case 12:PORTA=A[12];break;
103 9020 006C LDS R2,0x006C
105 BA2B OUT 0x1B,R2
106 C00B RJMP 0x0112
(0065) case 13:PORTA=A[13];break;
107 9020 006D LDS R2,0x006D
109 BA2B OUT 0x1B,R2
10A C007 RJMP 0x0112
(0066) case 14:PORTA=A[14];break;
10B 9020 006E LDS R2,0x006E
10D BA2B OUT 0x1B,R2
10E C003 RJMP 0x0112
(0067) case 15:PORTA=A[15];break;
FILE: <library>
10F 9020 006F LDS R2,0x006F
111 BA2B OUT 0x1B,R2
112 CFA5 RJMP 0x00B8
113 9508 RET
push_xgsetF000:
114 937A ST R23,-Y
115 936A ST R22,-Y
116 935A ST R21,-Y
117 934A ST R20,-Y
118 9508 RET
pop_xgsetF000:
119 9149 LD R20,Y+
11A 9159 LD R21,Y+
11B 9169 LD R22,Y+
11C 9179 LD R23,Y+
11D 9508 RET
push_xgsetF00C:
11E 937A ST R23,-Y
11F 936A ST R22,-Y
120 935A ST R21,-Y
121 934A ST R20,-Y
122 92BA ST R11,-Y
123 92AA ST R10,-Y
124 9508 RET
pop_xgsetF00C:
125 90A9 LD R10,Y+
126 90B9 LD R11,Y+
127 9149 LD R20,Y+
128 9159 LD R21,Y+
129 9169 LD R22,Y+
12A 9179 LD R23,Y+
12B 9508 RET
lsl8:
12C 2311 TST R17
12D F019 BEQ 0x0131
12E 0F00 LSL R16
12F 951A DEC R17
130 CFFB RJMP lsl8
131 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -