📄 xkey.lst
字号:
__start:
__text_start:
0030 E5CF LDI R28,0x5F
0031 E0D4 LDI R29,4
0032 BFCD OUT P3D,R28
0033 BFDE OUT P3E,R29
0034 51C0 SUBI R28,0x10
0035 40D0 SBCI R29,0
0036 EA0A LDI R16,0xAA
0037 8308 STD R16,0+Y
0038 2400 CLR R0
0039 E6E0 LDI R30,0x60
003A E0F0 LDI R31,0
003B E010 LDI R17,0
003C 36E0 CPI R30,0x60
003D 07F1 CPC R31,R17
003E F011 BEQ 0x0041
003F 9201 ST R0,Z+
0040 CFFB RJMP 0x003C
0041 8300 STD R16,0+Z
0042 E6E0 LDI R30,0x60
0043 E0F0 LDI R31,0
0044 E6A0 LDI R26,0x60
0045 E0B0 LDI R27,0
0046 E010 LDI R17,0
0047 36E0 CPI R30,0x60
0048 07F1 CPC R31,R17
0049 F021 BEQ 0x004E
004A 95C8 LPM
004B 9631 ADIW R30,1
004C 920D ST R0,X+
004D CFF9 RJMP 0x0047
004E 940E00A3 CALL _main
_exit:
0050 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
0051 D0B8 RCALL push_gset2
FILE: I:\AVR视频教程\视频教程\lesson7\XKEY\lesson5.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) void delay(uint ms)
(0007) {
(0008) uint i,j;
(0009) for(i=0;i<ms;i++)
0052 2744 CLR R20
0053 2755 CLR R21
0054 C00B RJMP 0x0060
(0010) {
(0011) for(j=0;j<1141;j++);
0055 2766 CLR R22
0056 2777 CLR R23
0057 C002 RJMP 0x005A
0058 5F6F SUBI R22,0xFF
0059 4F7F SBCI R23,0xFF
005A 3765 CPI R22,0x75
005B E0E4 LDI R30,4
005C 077E CPC R23,R30
005D F3D0 BCS 0x0058
005E 5F4F SUBI R20,0xFF
005F 4F5F SBCI R21,0xFF
0060 1740 CP R20,R16
0061 0751 CPC R21,R17
0062 F390 BCS 0x0055
(0012) }
(0013) }
0063 D0AA RCALL pop_gset2
0064 9508 RET
(0014)
(0015) uchar key_press()
(0016) {
(0017) uchar j;
(0018) DDRD|=0X0F;
_key_press:
j --> R16
0065 B381 IN R24,P11
0066 608F ORI R24,0xF
0067 BB81 OUT P11,R24
(0019) PORTD|=0X0F;
0068 B382 IN R24,P12
0069 608F ORI R24,0xF
006A BB82 OUT P12,R24
(0020)
(0021) DDRD&=0XF0;
006B B381 IN R24,P11
006C 7F80 ANDI R24,0xF0
006D BB81 OUT P11,R24
(0022)
(0023) j=PIND;
006E B300 IN R16,P10
(0024) j=j&0X0F;//00001111
006F 700F ANDI R16,0xF
(0025) if(j==0X0F)
0070 300F CPI R16,0xF
0071 F411 BNE 0x0074
(0026) {
(0027) return 0;
0072 2700 CLR R16
0073 C001 RJMP 0x0075
(0028) }
(0029) else
(0030) {
(0031) return 1;
0074 E001 LDI R16,1
0075 9508 RET
_key_scan:
key --> R20
0076 D093 RCALL push_gset2
(0032) }
(0033)
(0034) }
(0035)
(0036) uchar key_scan()
(0037) {
(0038) uchar key;
(0039) delay(10);
0077 E00A LDI R16,0xA
0078 E010 LDI R17,0
0079 DFD7 RCALL _delay
(0040) if(key_press())
007A DFEA RCALL _key_press
007B 2300 TST R16
007C F111 BEQ 0x009F
(0041) {
(0042) key=PIND;
007D B340 IN R20,P10
(0043) key&=0X0F;
007E 704F ANDI R20,0xF
(0044) switch(key)
007F 2F64 MOV R22,R20
0080 2777 CLR R23
0081 3067 CPI R22,7
0082 E0E0 LDI R30,0
0083 077E CPC R23,R30
0084 F099 BEQ 0x0098
0085 306B CPI R22,0xB
0086 E0E0 LDI R30,0
0087 077E CPC R23,R30
0088 F069 BEQ 0x0096
0089 306D CPI R22,0xD
008A E0E0 LDI R30,0
008B 077E CPC R23,R30
008C F039 BEQ 0x0094
008D 306E CPI R22,0xE
008E E0E0 LDI R30,0
008F 077E CPC R23,R30
0090 F009 BEQ 0x0092
0091 C008 RJMP 0x009A
(0045) {
(0046) case 0X0E:
(0047) key=1;
0092 E041 LDI R20,1
(0048) break;
0093 C007 RJMP 0x009B
(0049) case 0X0D:
(0050) key=2;
0094 E042 LDI R20,2
(0051) break;
0095 C005 RJMP 0x009B
(0052) case 0X0B:
(0053) key=3;
0096 E043 LDI R20,3
(0054) break;
0097 C003 RJMP 0x009B
(0055) case 0X07:
(0056) key=4;
0098 E044 LDI R20,4
(0057) break;
0099 C001 RJMP 0x009B
(0058) default:
(0059) key=16;
009A E140 LDI R20,0x10
(0060) }
(0061) while(key_press());
009B DFC9 RCALL _key_press
009C 2300 TST R16
009D F7E9 BNE 0x009B
(0062) }
009E C001 RJMP 0x00A0
(0063) else
(0064) {
(0065) key=16;
009F E140 LDI R20,0x10
(0066) }
(0067) return key;
00A0 2F04 MOV R16,R20
00A1 D06C RCALL pop_gset2
00A2 9508 RET
FILE: I:\AVR视频教程\视频教程\lesson7\XKEY\XKEY.C
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "lesson5.c"
(0004) void main()
(0005) {
(0006) uchar i;
(0007) DDRD|=0X30;
_main:
i --> R22
00A3 B381 IN R24,P11
00A4 6380 ORI R24,0x30
00A5 BB81 OUT P11,R24
(0008)
(0009) TCCR1A=0X63;
00A6 E683 LDI R24,0x63
00A7 BD8F OUT P2F,R24
(0010) TCCR1B=0X13;
00A8 E183 LDI R24,0x13
00A9 BD8E OUT P2E,R24
(0011)
(0012) OCR1A=1249;
00AA EE81 LDI R24,0xE1
00AB E094 LDI R25,4
00AC 9390004B STS R25,0x4B
00AE 9380004A STS R24,0x4A
(0013) OCR1B=31;
00B0 E18F LDI R24,0x1F
00B1 E090 LDI R25,0
00B2 93900049 STS R25,0x49
00B4 93800048 STS R24,0x48
00B6 C03A RJMP 0x00F1
(0014)
(0015) while(1)
(0016) {
(0017) if(key_press())
00B7 DFAD RCALL _key_press
00B8 2300 TST R16
00B9 F1B9 BEQ 0x00F1
(0018) {
(0019) i=key_scan();
00BA DFBB RCALL _key_scan
00BB 2F60 MOV R22,R16
(0020) switch(i)
00BC 2F46 MOV R20,R22
00BD 2755 CLR R21
00BE 3041 CPI R20,1
00BF E0E0 LDI R30,0
00C0 075E CPC R21,R30
00C1 F069 BEQ 0x00CF
00C2 3042 CPI R20,2
00C3 E0E0 LDI R30,0
00C4 075E CPC R21,R30
00C5 F081 BEQ 0x00D6
00C6 3043 CPI R20,3
00C7 E0E0 LDI R30,0
00C8 075E CPC R21,R30
00C9 F099 BEQ 0x00DD
00CA 3044 CPI R20,4
00CB E0E0 LDI R30,0
00CC 075E CPC R21,R30
00CD F0B1 BEQ 0x00E4
00CE C01C RJMP 0x00EB
(0021) {
(0022) case 1:
(0023) OCR1B=31;
00CF E18F LDI R24,0x1F
00D0 E090 LDI R25,0
00D1 93900049 STS R25,0x49
00D3 93800048 STS R24,0x48
(0024) break;
00D5 C01B RJMP 0x00F1
(0025) case 2:
(0026) OCR1B=62;
00D6 E38E LDI R24,0x3E
00D7 E090 LDI R25,0
00D8 93900049 STS R25,0x49
00DA 93800048 STS R24,0x48
(0027) break;
00DC C014 RJMP 0x00F1
(0028) case 3:
(0029) OCR1B=93;
00DD E58D LDI R24,0x5D
00DE E090 LDI R25,0
00DF 93900049 STS R25,0x49
00E1 93800048 STS R24,0x48
(0030) break;
00E3 C00D RJMP 0x00F1
(0031) case 4:
(0032) OCR1B=124;
00E4 E78C LDI R24,0x7C
00E5 E090 LDI R25,0
00E6 93900049 STS R25,0x49
00E8 93800048 STS R24,0x48
(0033) break;
00EA C006 RJMP 0x00F1
(0034) default:
(0035) OCR1B=31;
00EB E18F LDI R24,0x1F
00EC E090 LDI R25,0
00ED 93900049 STS R25,0x49
00EF 93800048 STS R24,0x48
00F1 CFC5 RJMP 0x00B7
(0036) }
(0037) }
(0038) }
(0039) }FILE: <library>
00F2 9508 RET
push_gset1:
00F3 935A ST R21,-Y
00F4 934A ST R20,-Y
00F5 9508 RET
pop_gset1:
00F6 E0E1 LDI R30,1
pop:
00F7 9149 LD R20,Y+
00F8 9159 LD R21,Y+
00F9 FDE0 SBRC R30,0
00FA 9508 RET
00FB 9169 LD R22,Y+
00FC 9179 LD R23,Y+
00FD FDE1 SBRC R30,1
00FE 9508 RET
00FF 90A9 LD R10,Y+
0100 90B9 LD R11,Y+
0101 FDE2 SBRC R30,2
0102 9508 RET
0103 90C9 LD R12,Y+
0104 90D9 LD R13,Y+
0105 FDE3 SBRC R30,3
0106 9508 RET
0107 90E9 LD R14,Y+
0108 90F9 LD R15,Y+
0109 9508 RET
push_gset2:
010A 937A ST R23,-Y
010B 936A ST R22,-Y
010C 940C00F3 JMP push_gset1
pop_gset2:
010E E0E2 LDI R30,2
010F 940C00F7 JMP pop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -