📄 jianpan.lst
字号:
025A E010 LDI R17,0
025B DE03 RCALL _delay
(0283) break;
(0284) }
(0285) }
025C 940E04B5 CALL pop_gset2
025E 9508 RET
_num_bit:
bit --> R20
Val --> R16
025F 940E04BB CALL push_gset1
(0286)
(0287) uchar num_bit( uint Val )
(0288) {
(0289) uchar bit;
(0290) if(Val>=10000) { bit = 5; }
0261 3100 CPI R16,0x10
0262 E2E7 LDI R30,0x27
0263 071E CPC R17,R30
0264 F010 BCS 0x0267
0265 E045 LDI R20,5
0266 C018 RJMP 0x027F
(0291) else if(Val>=1000) { bit = 4; }
0267 3E08 CPI R16,0xE8
0268 E0E3 LDI R30,3
0269 071E CPC R17,R30
026A F010 BCS 0x026D
026B E044 LDI R20,4
026C C012 RJMP 0x027F
(0292) else if(Val>=100 ) { bit = 3; }
026D 3604 CPI R16,0x64
026E E0E0 LDI R30,0
026F 071E CPC R17,R30
0270 F010 BCS 0x0273
0271 E043 LDI R20,3
0272 C00C RJMP 0x027F
(0293) else if(Val>=10 ) { bit = 2; }
0273 300A CPI R16,0xA
0274 E0E0 LDI R30,0
0275 071E CPC R17,R30
0276 F010 BCS 0x0279
0277 E042 LDI R20,2
0278 C006 RJMP 0x027F
(0294) else if( Val ) { bit = 1; }
0279 3000 CPI R16,0
027A 0701 CPC R16,R17
027B F011 BEQ 0x027E
027C E041 LDI R20,1
027D C001 RJMP 0x027F
(0295) else { bit = 1; }
027E E041 LDI R20,1
(0296) return ( bit );
027F 2F04 MOV R16,R20
0280 940E04BE CALL pop_gset1
0282 9508 RET
(0297) }
(0298) //
(0299) void init_transbuf(void)
(0300) {
(0301) uchar tmp;
(0302) for(tmp=0;tmp<20;tmp++)
_init_transbuf:
tmp --> R16
0283 2700 CLR R16
0284 C009 RJMP 0x028E
(0303) trans_buf[tmp]=0xff;
0285 E881 LDI R24,0x81
0286 E090 LDI R25,0
0287 2FE0 MOV R30,R16
0288 27FF CLR R31
0289 0FE8 ADD R30,R24
028A 1FF9 ADC R31,R25
028B EF8F LDI R24,0xFF
028C 8380 STD Z+0,R24
028D 9503 INC R16
028E 3104 CPI R16,0x14
028F F3A8 BCS 0x0285
(0304) }
0290 9508 RET
_edit:
KeyIndex --> R20
flag --> R22
i --> R10
0291 940E04DE CALL push_gset5
(0305) //
(0306) void edit(void)
(0307) {
(0308) uchar flag=STATE;
0293 E06F LDI R22,0xF
(0309) uchar i;
(0310) init_transbuf();
0294 DFEE RCALL _init_transbuf
(0311) numL=0;
0295 2422 CLR R2
0296 2433 CLR R3
0297 92300066 STS 0x66,R3
0299 92200065 STS 0x65,R2
029B C130 RJMP 0x03CC
(0312) while(flag!=0xff)
(0313) {
(0314) if( !(PIND&BIT(PD2)) ) // 检测按键状态
029C 9982 SBIC 0x10,2
029D C12D RJMP 0x03CB
(0315) {
(0316) display(); //延时
029E DE96 RCALL _display
(0317) display(); //延时
029F DE95 RCALL _display
(0318) if( !(PIND & BIT(PD2)) ) //再次检测按键状态
02A0 9982 SBIC 0x10,2
02A1 C129 RJMP 0x03CB
(0319) {
(0320) uchar KeyIndex = scan_key(); // 读取扫描序号
02A2 DDFB RCALL _scan_key
02A3 2F40 MOV R20,R16
02A4 C002 RJMP 0x02A7
(0321) while( !(PIND & BIT(PD2)) ) { WDR(); display(); }; //等待按键松开
02A5 95A8 WDR
02A6 DE8E RCALL _display
02A7 9B82 SBIS 0x10,2
02A8 CFFC RJMP 0x02A5
(0322) for( i = 0; i < 5; i ++ ) { display(); } //延时
02A9 24AA CLR R10
02AA C002 RJMP 0x02AD
02AB DE89 RCALL _display
02AC 94A3 INC R10
02AD 2D8A MOV R24,R10
02AE 3085 CPI R24,5
02AF F3D8 BCS 0x02AB
(0323) //backspace
(0324) if((KeySet[KeyIndex]==1|(KeySet[KeyIndex]==2))&&(flag==STATE))
02B0 E584 LDI R24,0x54
02B1 E090 LDI R25,0
02B2 2FE4 MOV R30,R20
02B3 27FF CLR R31
02B4 0FE8 ADD R30,R24
02B5 1FF9 ADC R31,R25
02B6 91E4 LPM R30,0(Z)
02B7 30E1 CPI R30,1
02B8 F421 BNE 0x02BD
02B9 E081 LDI R24,1
02BA E090 LDI R25,0
02BB 016C MOVW R12,R24
02BC C002 RJMP 0x02BF
02BD 24CC CLR R12
02BE 24DD CLR R13
02BF E584 LDI R24,0x54
02C0 E090 LDI R25,0
02C1 2FE4 MOV R30,R20
02C2 27FF CLR R31
02C3 0FE8 ADD R30,R24
02C4 1FF9 ADC R31,R25
02C5 91E4 LPM R30,0(Z)
02C6 30E2 CPI R30,2
02C7 F421 BNE 0x02CC
02C8 E081 LDI R24,1
02C9 E090 LDI R25,0
02CA 015C MOVW R10,R24
02CB C002 RJMP 0x02CE
02CC 24AA CLR R10
02CD 24BB CLR R11
02CE 0116 MOVW R2,R12
02CF 282A OR R2,R10
02D0 283B OR R3,R11
02D1 2022 TST R2
02D2 F411 BNE 0x02D5
02D3 2033 TST R3
02D4 F0D9 BEQ 0x02F0
02D5 306F CPI R22,0xF
02D6 F4C9 BNE 0x02F0
(0325) {
(0326) trans_buf[0]=KeySet[KeyIndex];
(0327) flag=1;
(0328) numH=10*KeySet[KeyIndex]+flag;
(0329) NumBitH=num_bit(numH);
02D7 E584 LDI R24,0x54
02D8 E090 LDI R25,0
02D9 2E24 MOV R2,R20
02DA 2433 CLR R3
02DB 0E28 ADD R2,R24
02DC 1E39 ADC R3,R25
02DD 01F1 MOVW R30,R2
02DE 91E4 LPM R30,0(Z)
02DF 93E00081 STS _trans_buf,R30
02E1 E061 LDI R22,1
02E2 01F1 MOVW R30,R2
02E3 91E4 LPM R30,0(Z)
02E4 E08A LDI R24,0xA
02E5 9F8E MUL R24,R30
02E6 2C20 MOV R2,R0
02E7 0E26 ADD R2,R22
02E8 92200067 STS 0x67,R2
02EA 2D02 MOV R16,R2
02EB 2711 CLR R17
02EC DF72 RCALL _num_bit
02ED 9300006A STS 0x6A,R16
(0330) }
02EF C0DB RJMP 0x03CB
(0331) else if(KeySet[KeyIndex]==3&&(flag==STATE))
02F0 E584 LDI R24,0x54
02F1 E090 LDI R25,0
02F2 2FE4 MOV R30,R20
02F3 27FF CLR R31
02F4 0FE8 ADD R30,R24
02F5 1FF9 ADC R31,R25
02F6 91E4 LPM R30,0(Z)
02F7 30E3 CPI R30,3
02F8 F461 BNE 0x0305
02F9 306F CPI R22,0xF
02FA F451 BNE 0x0305
(0332) {
(0333) trans_buf[0]=KeySet[KeyIndex];
(0334) transmit();
02FB 2FE4 MOV R30,R20
02FC 27FF CLR R31
02FD 0FE8 ADD R30,R24
02FE 1FF9 ADC R31,R25
02FF 91E4 LPM R30,0(Z)
0300 93E00081 STS _trans_buf,R30
0302 DDC1 RCALL _transmit
(0335) flag=0xff;
0303 EF6F LDI R22,0xFF
(0336) }
0304 C0C6 RJMP 0x03CB
(0337) else if((flag>=PAR1)&&(flag<=PAR7)&&( KeySet[KeyIndex]!=ENTER)&&( KeySet[KeyIndex]!=CANCEL))
0305 3061 CPI R22,1
0306 F160 BCS 0x0333
0307 E087 LDI R24,7
0308 1786 CP R24,R22
0309 F148 BCS 0x0333
030A E584 LDI R24,0x54
030B E090 LDI R25,0
030C 2FE4 MOV R30,R20
030D 27FF CLR R31
030E 0FE8 ADD R30,R24
030F 1FF9 ADC R31,R25
0310 9024 LPM R2,0(Z)
0311 2433 CLR R3
0312 2D82 MOV R24,R2
0313 308F CPI R24,0xF
0314 F0F1 BEQ 0x0333
0315 308C CPI R24,0xC
0316 F0E1 BEQ 0x0333
(0338) {
(0339) numL=10*numL+KeySet[KeyIndex];
(0340) NumBitL=num_bit(numL);
0317 E584 LDI R24,0x54
0318 E090 LDI R25,0
0319 2FE4 MOV R30,R20
031A 27FF CLR R31
031B 0FE8 ADD R30,R24
031C 1FF9 ADC R31,R25
031D 9024 LPM R2,0(Z)
031E 2433 CLR R3
031F 91200065 LDS R18,0x65
0321 91300066 LDS R19,0x66
0323 E00A LDI R16,0xA
0324 E010 LDI R17,0
0325 940E04A5 CALL empy16s
0327 0128 MOVW R4,R16
0328 0C42 ADD R4,R2
0329 1C53 ADC R5,R3
032A 92500066 STS 0x66,R5
032C 92400065 STS 0x65,R4
032E 0182 MOVW R16,R4
032F DF2F RCALL _num_bit
0330 93000069 STS 0x69,R16
(0341) }
0332 C098 RJMP 0x03CB
(0342) else if(KeySet[KeyIndex]==CANCEL)
0333 E584 LDI R24,0x54
0334 E090 LDI R25,0
0335 2FE4 MOV R30,R20
0336 27FF CLR R31
0337 0FE8 ADD R30,R24
0338 1FF9 ADC R31,R25
0339 91E4 LPM R30,0(Z)
033A 30EC CPI R30,0xC
033B F481 BNE 0x034C
(0343) {
(0344) numL = numL/10;
(0345) NumBitL = num_bit(numL);
033C E02A LDI R18,0xA
033D E030 LDI R19,0
033E 91000065 LDS R16,0x65
0340 91100066 LDS R17,0x66
0342 940E0473 CALL div16u
0344 93100066 STS 0x66,R17
0346 93000065 STS 0x65,R16
0348 DF16 RCALL _num_bit
0349 93000069 STS 0x69,R16
(0346) }
034B C07F RJMP 0x03CB
(0347) else if(KeySet[KeyIndex]==ENTER)
034C E584 LDI R24,0x54
034D E090 LDI R25,0
034E 2FE4 MOV R30,R20
034F 27FF CLR R31
0350 0FE8 ADD R30,R24
0351 1FF9 ADC R31,R25
0352 91E4 LPM R30,0(Z)
0353 30EF CPI R30,0xF
0354 F009 BEQ 0x0356
0355 C03C RJMP 0x0392
(0348) {
(0349) trans_buf[flag]=numL;
0356 E881 LDI R24,0x81
0357 E090 LDI R25,0
0358 2FE6 MOV R30,R22
0359 27FF CLR R31
035A 0FE8 ADD R30,R24
035B 1FF9 ADC R31,R25
035C 90200065 LDS R2,0x65
035E 90300066 LDS R3,0x66
0360 8220 STD Z+0,R2
(0350) flag++;
(0351) numH++;
(0352) numL=0;
(0353) NumBitL=0;
(0354) if ((flag==Model1_flag)&&(numH/10==1))//模式1参数个数Model1_flag
0361 9563 INC R22
0362 91800067 LDS R24,0x67
0364 5F8F SUBI R24,0xFF
0365 93800067 STS 0x67,R24
0367 2422 CLR R2
0368 2433 CLR R3
0369 92300066 STS 0x66,R3
036B 92200065 STS 0x65,R2
036D 92200069 STS 0x69,R2
036F 3068 CPI R22,0x8
0370 F471 BNE 0x037F
0371 E01A LDI R17,0xA
0372 2F08 MOV R16,R24
0373 940E048F CALL div8u
0375 3001 CPI R16,1
0376 F441 BNE 0x037F
(0355) {
(0356) flag=0xff;
(0357) transmit();
0377 EF6F LDI R22,0xFF
0378 DD4B RCALL _transmit
(0358) numH=0;
(0359) NumBitH=0;
0379 2422 CLR R2
037A 92200067 STS 0x67,R2
037C 9220006A STS 0x6A,R2
(0360) }
037E C04C RJMP 0x03CB
(0361) else if ((flag==Model2_flag)&&(numH/10==2))//模式2参数个数Model2_flag
037F 3064 CPI R22,4
0380 F009 BEQ 0x0382
0381 C049 RJMP 0x03CB
0382 E01A LDI R17,0xA
0383 91000067 LDS R16,0x67
0385 940E048F CALL div8u
0387 3002 CPI R16,2
0388 F009 BEQ 0x038A
0389 C041 RJMP 0x03CB
(0362) {
(0363) flag=0xff;
(0364) transmit();
038A EF6F LDI R22,0xFF
038B DD38 RCALL _transmit
(0365) numH=0;
(0366) NumBitH=0;
038C 2422 CLR R2
038D 92200067 STS 0x67,R2
038F 9220006A STS 0x6A,R2
(0367) }
(0368) }
0391 C039 RJMP 0x03CB
(0369) else if(((KeySet[KeyIndex]!=1)|(KeySet[KeyIndex]!=2)|(KeySet[KeyIndex]!=3))&&(flag==STATE)) {edit();}
0392 E584 LDI R24,0x54
0393 E090 LDI R25,0
0394 2FE4 MOV R30,R20
0395 27FF CLR R31
0396 0FE8 ADD R30,R24
0397 1FF9 ADC R31,R25
0398 91E4 LPM R30,0(Z)
0399 30E1 CPI R30,1
039A F021 BEQ 0x039F
039B E081 LDI R24,1
039C E090 LDI R25,0
039D 017C MOVW R14,R24
039E C002 RJMP 0x03A1
039F 24EE CLR R14
03A0 24FF CLR R15
03A1 E584 LDI R24,0x54
03A2 E090 LDI R25,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -