📄 jzjp.lst
字号:
Interrupt Vectors
00000 940C 0037 JMP __text_start|__start
Program Code (text area)
__text_start|__start:
00037 E5CF LDI R28,0x5F
00038 E0D4 LDI R29,4
00039 BFCD OUT 0x3D,R28
0003A BFDE OUT 0x3E,R29
0003B 51CE SUBI R28,0x1E
0003C 40D0 SBCI R29,0
0003D EA0A LDI R16,0xAA
0003E 8308 ST Y,R16
0003F 2400 CLR R0
00040 E7E9 LDI R30,0x79
00041 E0F0 LDI R31,0
00042 E010 LDI R17,0
00043 37E9 CPI R30,0x79
00044 07F1 CPC R31,R17
00045 F011 BEQ 0x0048
00046 9201 ST Z+,R0
00047 CFFB RJMP 0x0043
00048 8300 ST Z,R16
00049 E5E4 LDI R30,0x54
0004A E0F0 LDI R31,0
0004B E6A0 LDI R26,0x60
0004C E0B0 LDI R27,0
0004D E010 LDI R17,0
0004E E000 LDI R16,0
0004F BF0B OUT 0x3B,R16
00050 36ED CPI R30,0x6D
00051 07F1 CPC R31,R17
00052 F021 BEQ 0x0057
00053 95C8 LPM
00054 9631 ADIW R30,1
00055 920D ST X+,R0
00056 CFF9 RJMP 0x0050
00057 940E 0139 CALL _main
_exit:
00059 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
0005A 940E 0146 CALL push_xgsetF000
FILE: E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0007) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
(0008) uchar const LED_W[8] = {0,1,2,3,4,5,6,7};
(0009) void delay(uint ms)
(0010) {
(0011) uint i,j;
(0012) for(i=0;i<ms;i++)
0005C 2744 CLR R20
0005D 2755 CLR R21
0005E C00B RJMP 0x006A
(0013) {
(0014) for(j=0;j<1141;j++);
0005F 2766 CLR R22
00060 2777 CLR R23
00061 C002 RJMP 0x0064
00062 5F6F SUBI R22,0xFF
00063 4F7F SBCI R23,0xFF
00064 3765 CPI R22,0x75
00065 E0E4 LDI R30,4
00066 077E CPC R23,R30
00067 F3D0 BCS 0x0062
00068 5F4F SUBI R20,0xFF
00069 4F5F SBCI R21,0xFF
0006A 1740 CP R20,R16
0006B 0751 CPC R21,R17
0006C F390 BCS 0x005F
0006D 940C 014B JMP pop_xgsetF000
_show:
k --> R10
j --> R12
0006F 92AA ST -Y,R10
00070 92CA ST -Y,R12
00071 2EA2 MOV R10,R18
00072 2EC0 MOV R12,R16
(0015) }
(0016) }
(0017) void show(uchar j,uchar k)
(0018) {
(0019) PORTA = table[j]; // i 值的 个位数
00073 E680 LDI R24,0x60
00074 E090 LDI R25,0
00075 2DEC MOV R30,R12
00076 27FF CLR R31
00077 0FE8 ADD R30,R24
00078 1FF9 ADC R31,R25
00079 8020 LD R2,Z
0007A BA2B OUT 0x1B,R2
(0020) PORTC = LED_W[k]; //点亮第一位数码管
0007B E781 LDI R24,0x71
0007C E090 LDI R25,0
0007D 2DEA MOV R30,R10
0007E 27FF CLR R31
0007F 0FE8 ADD R30,R24
00080 1FF9 ADC R31,R25
00081 8020 LD R2,Z
00082 BA25 OUT 0x15,R2
(0021)
(0022) delay(2);
00083 E002 LDI R16,2
00084 E010 LDI R17,0
00085 DFD4 RCALL _delay
00086 90C9 LD R12,Y+
00087 90A9 LD R10,Y+
00088 9508 RET
(0023) }
(0024) uchar key_press()
(0025) {
(0026) uchar i;
(0027) DDRB=0XFF;
_key_press:
i --> R16
00089 EF8F LDI R24,0xFF
0008A BB87 OUT 0x17,R24
(0028) PORTB=0XF0;
0008B EF80 LDI R24,0xF0
0008C BB88 OUT 0x18,R24
(0029)
(0030) DDRB=0X0F;
0008D E08F LDI R24,0xF
0008E BB87 OUT 0x17,R24
(0031)
(0032) i=PINB;
0008F B306 IN R16,0x16
(0033) if(i==0XF0)
00090 3F00 CPI R16,0xF0
00091 F421 BNE 0x0096
(0034) {
(0035) DDRB=0XFF;
00092 EF8F LDI R24,0xFF
00093 BB87 OUT 0x17,R24
(0036) return 0;
00094 2700 CLR R16
00095 C003 RJMP 0x0099
(0037) }
(0038) else
(0039) {
(0040) DDRB=0XFF;
00096 EF8F LDI R24,0xFF
00097 BB87 OUT 0x17,R24
(0041) return 1;
00098 E001 LDI R16,1
00099 9508 RET
_key_scan:
j --> R10
key --> R20
i --> R22
0009A 940E 0150 CALL push_xgsetF00C
(0042) }
(0043) }
(0044)
(0045) uchar key_scan()
(0046) {
(0047) uchar key,i=0X7F,j;
0009C E76F LDI R22,0x7F
(0048) delay(10);
0009D E00A LDI R16,0xA
0009E E010 LDI R17,0
0009F DFBA RCALL _delay
(0049) if(key_press())
000A0 DFE8 RCALL _key_press
000A1 2300 TST R16
000A2 F409 BNE 0x00A4
000A3 C091 RJMP 0x0135
(0050) {
(0051) do
(0052) {
(0053) i=(i<<1|i>>7);
000A4 2E26 MOV R2,R22
000A5 9426 LSR R2
000A6 9426 LSR R2
000A7 9426 LSR R2
000A8 9426 LSR R2
000A9 9426 LSR R2
000AA 9426 LSR R2
000AB 9426 LSR R2
000AC 2E36 MOV R3,R22
000AD 0C33 LSL R3
000AE 2832 OR R3,R2
000AF 2D63 MOV R22,R3
(0054) PORTB=i;
000B0 BA38 OUT 0x18,R3
(0055) DDRB=0X0F;
000B1 E08F LDI R24,0xF
000B2 BB87 OUT 0x17,R24
(0056)
(0057) key=PINB;
000B3 B346 IN R20,0x16
(0058) j=key&0XF0;
000B4 2F84 MOV R24,R20
000B5 7F80 ANDI R24,0xF0
000B6 2EA8 MOV R10,R24
(0059)
(0060) }while(j==0XF0);
000B7 2D8A MOV R24,R10
000B8 3F80 CPI R24,0xF0
000B9 F351 BEQ 0x00A4
(0061)
(0062) while(key_press());
000BA DFCE RCALL _key_press
000BB 2300 TST R16
000BC F7E9 BNE 0x00BA
(0063) switch(key)
000BD 2F64 MOV R22,R20
000BE 2777 CLR R23
000BF 3B67 CPI R22,0xB7
000C0 E0E0 LDI R30,0
000C1 077E CPC R23,R30
000C2 F409 BNE 0x00C4
000C3 C06B RJMP 0x012F
000C4 3B6B CPI R22,0xBB
000C5 E0E0 LDI R30,0
000C6 077E CPC R23,R30
000C7 F409 BNE 0x00C9
000C8 C05E RJMP 0x0127
000C9 3B6D CPI R22,0xBD
000CA E0E0 LDI R30,0
000CB 077E CPC R23,R30
000CC F409 BNE 0x00CE
000CD C051 RJMP 0x011F
000CE 3B6E CPI R22,0xBE
000CF E0E0 LDI R30,0
000D0 077E CPC R23,R30
000D1 F409 BNE 0x00D3
000D2 C044 RJMP 0x0117
000D3 EB8E LDI R24,0xBE
000D4 E090 LDI R25,0
000D5 1786 CP R24,R22
000D6 0797 CPC R25,R23
000D7 F0A4 BLT 0x00EC
000D8 3767 CPI R22,0x77
000D9 E0E0 LDI R30,0
000DA 077E CPC R23,R30
000DB F409 BNE 0x00DD
000DC C054 RJMP 0x0131
000DD 376B CPI R22,0x7B
000DE E0E0 LDI R30,0
000DF 077E CPC R23,R30
000E0 F409 BNE 0x00E2
000E1 C047 RJMP 0x0129
000E2 376D CPI R22,0x7D
000E3 E0E0 LDI R30,0
000E4 077E CPC R23,R30
000E5 F409 BNE 0x00E7
000E6 C03A RJMP 0x0121
000E7 376E CPI R22,0x7E
000E8 E0E0 LDI R30,0
000E9 077E CPC R23,R30
000EA F171 BEQ 0x0119
000EB C047 RJMP 0x0133
000EC 3D67 CPI R22,0xD7
000ED E0E0 LDI R30,0
000EE 077E CPC R23,R30
000EF F409 BNE 0x00F1
000F0 C03C RJMP 0x012D
000F1 3D6B CPI R22,0xDB
000F2 E0E0 LDI R30,0
000F3 077E CPC R23,R30
000F4 F181 BEQ 0x0125
000F5 3D6D CPI R22,0xDD
000F6 E0E0 LDI R30,0
000F7 077E CPC R23,R30
000F8 F121 BEQ 0x011D
000F9 3D6E CPI R22,0xDE
000FA E0E0 LDI R30,0
000FB 077E CPC R23,R30
000FC F0C1 BEQ 0x0115
000FD 3D67 CPI R22,0xD7
000FE E0E0 LDI R30,0
000FF 077E CPC R23,R30
00100 F40C BGE 0x0102
00101 C031 RJMP 0x0133
00102 3E67 CPI R22,0xE7
00103 E0E0 LDI R30,0
00104 077E CPC R23,R30
00105 F129 BEQ 0x012B
00106 3E6B CPI R22,0xEB
00107 E0E0 LDI R30,0
00108 077E CPC R23,R30
00109 F0C9 BEQ 0x0123
0010A 3E6D CPI R22,0xED
0010B E0E0 LDI R30,0
0010C 077E CPC R23,R30
0010D F069 BEQ 0x011B
0010E 3E6E CPI R22,0xEE
0010F E0E0 LDI R30,0
00110 077E CPC R23,R30
00111 F009 BEQ 0x0113
00112 C020 RJMP 0x0133
(0064) {
(0065) case 0xEE:
(0066) key=0x0;
00113 2744 CLR R20
(0067) break;
00114 C021 RJMP 0x0136
(0068) case 0xDE:
(0069) key=0x1;
00115 E041 LDI R20,1
(0070) break;
00116 C01F RJMP 0x0136
(0071) case 0xBE:
(0072) key=0x2;
00117 E042 LDI R20,2
(0073) break;
00118 C01D RJMP 0x0136
(0074) case 0x7E:
(0075) key=0x3;
00119 E043 LDI R20,3
(0076) break;
0011A C01B RJMP 0x0136
(0077) case 0xED:
(0078) key=0x4;
0011B E044 LDI R20,4
(0079) break;
0011C C019 RJMP 0x0136
(0080) case 0xDD:
(0081) key=0x5;
0011D E045 LDI R20,5
(0082) break;
0011E C017 RJMP 0x0136
(0083) case 0xBD:
(0084) key=0x6;
0011F E046 LDI R20,6
(0085) break;
00120 C015 RJMP 0x0136
(0086) case 0x7D:
(0087) key=0x7;
00121 E047 LDI R20,7
(0088) break;
00122 C013 RJMP 0x0136
(0089) case 0xEB:
(0090) key=0x8;
00123 E048 LDI R20,0x8
(0091) break;
00124 C011 RJMP 0x0136
(0092) case 0xDB:
(0093) key=0x9;
00125 E049 LDI R20,0x9
(0094) break;
00126 C00F RJMP 0x0136
(0095) case 0xBB:
(0096) key=0xA;
00127 E04A LDI R20,0xA
(0097) break;
00128 C00D RJMP 0x0136
(0098) case 0x7B:
(0099) key=0xB;
00129 E04B LDI R20,0xB
(0100) break;
0012A C00B RJMP 0x0136
(0101) case 0xE7:
(0102) key=0xC;
0012B E04C LDI R20,0xC
(0103) break;
0012C C009 RJMP 0x0136
(0104) case 0xD7:
(0105) key=0xD;
0012D E04D LDI R20,0xD
(0106) break;
0012E C007 RJMP 0x0136
(0107) case 0xB7:
(0108) key=0xE;
0012F E04E LDI R20,0xE
(0109) break;
00130 C005 RJMP 0x0136
(0110) case 0x77:
(0111) key=0xF;
00131 E04F LDI R20,0xF
(0112) break;
00132 C003 RJMP 0x0136
(0113) default:
(0114) key=16;
00133 E140 LDI R20,0x10
(0115) }
(0116) }
00134 C001 RJMP 0x0136
(0117) else
(0118) {
(0119) key=16;
00135 E140 LDI R20,0x10
(0120) }
(0121) return key;
00136 2F04 MOV R16,R20
00137 940C 0157 JMP pop_xgsetF00C
(0122) }
(0123) void main()
(0124) {
(0125) uchar l;
(0126) DDRA=0xff;// 0001 1000
_main:
l --> R10
00139 EF8F LDI R24,0xFF
0013A BB8A OUT 0x1A,R24
(0127) DDRB=0XFF;
0013B BB87 OUT 0x17,R24
0013C C007 RJMP 0x0144
(0128) while(1)
(0129) {
(0130) if(key_press())
0013D DF4B RCALL _key_press
0013E 2300 TST R16
0013F F021 BEQ 0x0144
(0131) {
(0132) l=key_scan();
00140 DF59 RCALL _key_scan
00141 2EA0 MOV R10,R16
(0133) show(l,0);
FILE: <library>
00142 2722 CLR R18
00143 DF2B RCALL _show
00144 CFF8 RJMP 0x013D
00145 9508 RET
push_xgsetF000:
00146 937A ST -Y,R23
00147 936A ST -Y,R22
00148 935A ST -Y,R21
00149 934A ST -Y,R20
0014A 9508 RET
pop_xgsetF000:
0014B 9149 LD R20,Y+
0014C 9159 LD R21,Y+
0014D 9169 LD R22,Y+
0014E 9179 LD R23,Y+
0014F 9508 RET
push_xgsetF00C:
00150 937A ST -Y,R23
00151 936A ST -Y,R22
00152 935A ST -Y,R21
00153 934A ST -Y,R20
00154 92BA ST -Y,R11
00155 92AA ST -Y,R10
00156 9508 RET
pop_xgsetF00C:
00157 90A9 LD R10,Y+
00158 90B9 LD R11,Y+
00159 9149 LD R20,Y+
0015A 9159 LD R21,Y+
0015B 9169 LD R22,Y+
0015C 9179 LD R23,Y+
0015D 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -