📄 keyboard.lis
字号:
00F0 ; value=0x09; // 9 key
00F0 09E0 ldi R16,9
00F2 .dbline 120
00F2 ; break;
00F2 05C0 xjmp L21
00F4 L24:
00F4 .dbline 122
00F4 ; case 0x05: // 8 keyvalue
00F4 ; value=0x08; // 8 key
00F4 08E0 ldi R16,8
00F6 .dbline 123
00F6 ; break;
00F6 03C0 xjmp L21
00F8 L25:
00F8 .dbline 125
00F8 ; case 0x03: // 7 keyvalue
00F8 ; value=0x07; // 7 key
00F8 07E0 ldi R16,7
00FA .dbline 126
00FA ; break;
00FA 01C0 xjmp L21
00FC L20:
00FC .dbline 128
00FC ; default:
00FC ; value=0xff;
00FC 0FEF ldi R16,255
00FE .dbline 129
00FE ; break;
00FE L21:
00FE .dbline 131
00FE ; }
00FE ; return value;
00FE .dbline -2
00FE L19:
00FE .dbline 0 ; func end
00FE 0895 ret
0100 .dbsym r value 16 c
0100 .dbsym r key1 16 c
0100 .dbend
0100 .dbfunc e keyvalue4 _keyvalue4 fc
0100 ; value -> R16
0100 ; key1 -> R16
.even
0100 _keyvalue4::
0100 .dbline -1
0100 .dbline 134
0100 ; }
0100 ; unsigned char keyvalue4(void)
0100 ; {
0100 .dbline 136
0100 ; unsigned char key1,value;
0100 ; DDRC=0xFF;
0100 8FEF ldi R24,255
0102 84BB out 0x14,R24
0104 .dbline 137
0104 ; SET_KEY3();
0104 A398 cbi 0x14,3
0106 .dbline 138
0106 ; SET_KEY4();
0106 A498 cbi 0x14,4
0108 .dbline 139
0108 ; SET_KEY5();
0108 A598 cbi 0x14,5
010A .dbline 140
010A ; CLEAR_KEY6();
010A A69A sbi 0x14,6
010C .dbline 142
010C ;
010C ; SET_KEY0();
010C A098 cbi 0x14,0
010E .dbline 143
010E ; SET_KEY1();
010E A198 cbi 0x14,1
0110 .dbline 144
0110 ; SET_KEY2();
0110 A298 cbi 0x14,2
0112 .dbline 145
0112 ; DDRC=PORTC=0;
0112 2224 clr R2
0114 25BA out 0x15,R2
0116 24BA out 0x14,R2
0118 .dbline 146
0118 ; key1=PINC;
0118 03B3 in R16,0x13
011A .dbline 147
011A ; key1=key1&0x07;
011A 0770 andi R16,7
011C .dbline 149
011C ; // key1=key1<<1;
011C ; switch(key1)
011C 1127 clr R17
011E 0330 cpi R16,3
0120 E0E0 ldi R30,0
0122 1E07 cpc R17,R30
0124 69F0 breq L32
0126 0530 cpi R16,5
0128 E0E0 ldi R30,0
012A 1E07 cpc R17,R30
012C 39F0 breq L31
012E 0630 cpi R16,6
0130 E0E0 ldi R30,0
0132 1E07 cpc R17,R30
0134 09F0 breq L30
0136 06C0 xjmp L27
0138 X3:
0138 .dbline 150
0138 ; {
0138 L30:
0138 .dbline 152
0138 ; case 0x06: // # keyvalue
0138 ; value=0x0b; // # key
0138 0BE0 ldi R16,11
013A .dbline 153
013A ; break;
013A 05C0 xjmp L28
013C L31:
013C .dbline 155
013C ; case 0x05: // 0 keyvalue
013C ; value=0x00; // 0 key
013C 0027 clr R16
013E .dbline 156
013E ; break;
013E 03C0 xjmp L28
0140 L32:
0140 .dbline 158
0140 ; case 0x03: // * keyvalue
0140 ; value=0x0a; // * key
0140 0AE0 ldi R16,10
0142 .dbline 159
0142 ; break;
0142 01C0 xjmp L28
0144 L27:
0144 .dbline 161
0144 ; default:
0144 ; value=0xff;
0144 0FEF ldi R16,255
0146 .dbline 162
0146 ; break;
0146 L28:
0146 .dbline 164
0146 ; }
0146 ; return value;
0146 .dbline -2
0146 L26:
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym r value 16 c
0148 .dbsym r key1 16 c
0148 .dbend
0148 .dbfunc e keyvalue _keyvalue fc
0148 ; cc4 -> R12
0148 ; cc3 -> R10
0148 ; cc2 -> R22
0148 ; cc1 -> R20
.even
0148 _keyvalue::
0148 0E940000 xcall push_gset4
014C .dbline -1
014C .dbline 167
014C ; }
014C ; unsigned char keyvalue(void)
014C ; {
014C .dbline 169
014C ; unsigned char cc1,cc2,cc3,cc4;
014C ; cc1=keyvalue1();
014C 6DDF xcall _keyvalue1
014E 402F mov R20,R16
0150 .dbline 170
0150 ; cc2=keyvalue2();
0150 8FDF xcall _keyvalue2
0152 602F mov R22,R16
0154 .dbline 171
0154 ; cc3=keyvalue3();
0154 B1DF xcall _keyvalue3
0156 A02E mov R10,R16
0158 .dbline 172
0158 ; cc4=keyvalue4();
0158 D3DF xcall _keyvalue4
015A C02E mov R12,R16
015C .dbline 173
015C ; if(cc4!=0xff)
015C 0F3F cpi R16,255
015E 29F0 breq L34
0160 .dbline 174
0160 ; {
0160 .dbline 175
0160 ; beep(1);
0160 01E0 ldi R16,1
0162 0E940000 xcall _beep
0166 .dbline 176
0166 ; return cc4;
0166 0C2D mov R16,R12
0168 17C0 xjmp L33
016A L34:
016A .dbline 178
016A ; }
016A ; if(cc3!=0xff)
016A 8A2D mov R24,R10
016C 8F3F cpi R24,255
016E 29F0 breq L36
0170 .dbline 179
0170 ; {
0170 .dbline 180
0170 ; beep(1);
0170 01E0 ldi R16,1
0172 0E940000 xcall _beep
0176 .dbline 181
0176 ; return cc3;
0176 0A2D mov R16,R10
0178 0FC0 xjmp L33
017A L36:
017A .dbline 183
017A ; }
017A ; if(cc2!=0xff)
017A 6F3F cpi R22,255
017C 29F0 breq L38
017E .dbline 184
017E ; {
017E .dbline 185
017E ; beep(1);
017E 01E0 ldi R16,1
0180 0E940000 xcall _beep
0184 .dbline 186
0184 ; return cc2;
0184 062F mov R16,R22
0186 08C0 xjmp L33
0188 L38:
0188 .dbline 188
0188 ; }
0188 ; if(cc1!=0xff)
0188 4F3F cpi R20,255
018A 29F0 breq L40
018C .dbline 189
018C ; {
018C .dbline 190
018C ; beep(1);
018C 01E0 ldi R16,1
018E 0E940000 xcall _beep
0192 .dbline 191
0192 ; return cc1;
0192 042F mov R16,R20
0194 01C0 xjmp L33
0196 L40:
0196 .dbline 193
0196 ; }
0196 ; return 0xff;
0196 0FEF ldi R16,255
0198 .dbline -2
0198 L33:
0198 0E940000 xcall pop_gset4
019C .dbline 0 ; func end
019C 0895 ret
019E .dbsym r cc4 12 c
019E .dbsym r cc3 10 c
019E .dbsym r cc2 22 c
019E .dbsym r cc1 20 c
019E .dbend
019E .dbfunc e delay1 _delay1 fV
019E ; i -> R20
019E ; j -> R22,R23
019E ; second -> R16
.even
019E _delay1::
019E 0E940000 xcall push_gset2
01A2 .dbline -1
01A2 .dbline 198
01A2 ; }
01A2 ;
01A2 ;
01A2 ; void delay1(unsigned char second)
01A2 ; {
01A2 .dbline 201
01A2 ; unsigned char i;
01A2 ; unsigned int j;
01A2 ; for(i=0;i<second;i++)
01A2 4427 clr R20
01A4 0AC0 xjmp L46
01A6 L43:
01A6 .dbline 202
01A6 6627 clr R22
01A8 7727 clr R23
01AA 02C0 xjmp L50
01AC L47:
01AC .dbline 202
01AC L48:
01AC .dbline 202
01AC 6F5F subi R22,255 ; offset = 1
01AE 7F4F sbci R23,255
01B0 L50:
01B0 .dbline 202
01B0 683E cpi R22,232
01B2 EDEF ldi R30,253
01B4 7E07 cpc R23,R30
01B6 D0F3 brlo L47
01B8 L44:
01B8 .dbline 201
01B8 4395 inc R20
01BA L46:
01BA .dbline 201
01BA 4017 cp R20,R16
01BC A0F3 brlo L43
01BE .dbline -2
01BE L42:
01BE 0E940000 xcall pop_gset2
01C2 .dbline 0 ; func end
01C2 0895 ret
01C4 .dbsym r i 20 c
01C4 .dbsym r j 22 i
01C4 .dbsym r second 16 c
01C4 .dbend
01C4 .dbfunc e CMP_STRING _CMP_STRING fc
01C4 ; ct -> R20
01C4 ; len -> R22
01C4 ; pt2 -> R18,R19
01C4 ; pt1 -> R16,R17
.even
01C4 _CMP_STRING::
01C4 0E940000 xcall push_gset2
01C8 6C81 ldd R22,y+4
01CA .dbline -1
01CA .dbline 206
01CA ; for(j=0;j<65000;j++);
01CA ; }
01CA ; unsigned char CMP_STRING(unsigned char *pt1,
01CA ; unsigned char *pt2,unsigned char len)
01CA ; {
01CA .dbline 208
01CA ; unsigned char ct; // fixed lenth 4.
01CA ; for (ct=0;ct<len;ct++)
01CA 4427 clr R20
01CC 0BC0 xjmp L55
01CE L52:
01CE .dbline 209
01CE ; {
01CE .dbline 210
01CE ; if (*pt1++ != *pt2++)
01CE F901 movw R30,R18
01D0 2190 ld R2,Z+
01D2 9F01 movw R18,R30
01D4 F801 movw R30,R16
01D6 3190 ld R3,Z+
01D8 8F01 movw R16,R30
01DA 3214 cp R3,R2
01DC 11F0 breq L56
01DE .dbline 211
01DE ; return 1;
01DE 01E0 ldi R16,1
01E0 04C0 xjmp L51
01E2 L56:
01E2 .dbline 212
01E2 L53:
01E2 .dbline 208
01E2 4395 inc R20
01E4 L55:
01E4 .dbline 208
01E4 4617 cp R20,R22
01E6 98F3 brlo L52
01E8 .dbline 213
01E8 ; }
01E8 ; return 0; // equal return 0.
01E8 0027 clr R16
01EA .dbline -2
01EA L51:
01EA 0E940000 xcall pop_gset2
01EE .dbline 0 ; func end
01EE 0895 ret
01F0 .dbsym r ct 20 c
01F0 .dbsym r len 22 c
01F0 .dbsym r pt2 18 pc
01F0 .dbsym r pt1 16 pc
01F0 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -