📄 sle4442.lst
字号:
031E F430 BCC 0x0325
031F 2D83 MOV R24,R3
0320 508A SUBI R24,0xA
0321 878A STD Y+10,R24
0322 8589 LDD R24,Y+9
0323 5F8F SUBI R24,0xFF
0324 8789 STD Y+9,R24
(0364)
(0365) WriteMainMemory(41,temp[9]);
0325 8529 LDD R18,Y+9
0326 E209 LDI R16,0x29
0327 DE3D RCALL _WriteMainMemory
(0366) WriteMainMemory(42,temp[10]);
0328 852A LDD R18,Y+10
0329 E20A LDI R16,0x2A
032A DE3A RCALL _WriteMainMemory
(0367) WriteMainMemory(43,temp[11]);
032B 852B LDD R18,Y+11
032C E20B LDI R16,0x2B
032D DE37 RCALL _WriteMainMemory
(0368) WriteMainMemory(44,temp[12]);
032E 852C LDD R18,Y+12
032F E20C LDI R16,0x2C
0330 DE34 RCALL _WriteMainMemory
(0369) WriteMainMemory(45,temp[13]);
0331 852D LDD R18,Y+13
0332 E20D LDI R16,0x2D
0333 DE31 RCALL _WriteMainMemory
(0370) }
(0371) }
0334 962E ADIW R28,0xE
0335 D2C3 RCALL pop_gset2
0336 9508 RET
_Sub_Card:
i --> R22
B_Flag --> R22
temp --> Y+0
p --> R20
0337 D2DE RCALL push_gset2
0338 2F40 MOV R20,R16
0339 2F51 MOV R21,R17
033A 972E SBIW R28,0xE
(0372)
(0373) //********************减卡函数***********//
(0374) void Sub_Card(uchar *p)
(0375) {uchar i,B_Flag;
(0376) uchar temp[14];
(0377) i=Read_Card(temp);
033B 2F0C MOV R16,R28
033C 2F1D MOV R17,R29
033D DEE9 RCALL _Read_Card
033E 2F60 MOV R22,R16
(0378) if((i==3)&&(!(temp[9]<p[0])))
033F 3003 CPI R16,3
0340 F009 BEQ 0x0342
0341 C09E RJMP 0x03E0
0342 2FE4 MOV R30,R20
0343 2FF5 MOV R31,R21
0344 8020 LDD R2,Z+0
0345 8439 LDD R3,Y+9
0346 1432 CP R3,R2
0347 F408 BCC 0x0349
0348 C097 RJMP 0x03E0
(0379) {if(temp[13]<p[4]) {temp[13]=temp[13]+10-p[4];B_Flag=1;}
0349 8024 LDD R2,Z+4
034A 843D LDD R3,Y+13
034B 1432 CP R3,R2
034C F448 BCC 0x0356
034D 2FE4 MOV R30,R20
034E 2FF5 MOV R31,R21
034F 8024 LDD R2,Z+4
0350 2D83 MOV R24,R3
0351 5F86 SUBI R24,0xF6
0352 1982 SUB R24,R2
0353 878D STD Y+13,R24
0354 E061 LDI R22,1
0355 C006 RJMP 0x035C
(0380) else temp[13]=temp[13]-p[4];
0356 2FE4 MOV R30,R20
0357 2FF5 MOV R31,R21
0358 8024 LDD R2,Z+4
0359 843D LDD R3,Y+13
035A 1832 SUB R3,R2
035B 863D STD Y+13,R3
(0381) //以上处理小数点右边的数字;
(0382) if(B_Flag==1)
035C 3061 CPI R22,1
035D F451 BNE 0x0368
(0383) {if(temp[12]==0) {temp[12]=9;B_Flag=0;}
035E 842C LDD R2,Y+12
035F 2022 TST R2
0360 F421 BNE 0x0365
0361 E089 LDI R24,0x9
0362 878C STD Y+12,R24
0363 2766 CLR R22
0364 C003 RJMP 0x0368
(0384) else temp[12]=temp[12]-1;}
0365 858C LDD R24,Y+12
0366 5081 SUBI R24,1
0367 878C STD Y+12,R24
(0385) //以上对存在借位情况时对小数点左边第一位进行预处理;
(0386) if(temp[12]<p[3]) {temp[12]=temp[12]+10-p[3];B_Flag=1;}
0368 2FE4 MOV R30,R20
0369 2FF5 MOV R31,R21
036A 8023 LDD R2,Z+3
036B 843C LDD R3,Y+12
036C 1432 CP R3,R2
036D F448 BCC 0x0377
036E 2FE4 MOV R30,R20
036F 2FF5 MOV R31,R21
0370 8023 LDD R2,Z+3
0371 2D83 MOV R24,R3
0372 5F86 SUBI R24,0xF6
0373 1982 SUB R24,R2
0374 878C STD Y+12,R24
0375 E061 LDI R22,1
0376 C006 RJMP 0x037D
(0387) else temp[12]=temp[12]-p[3];
0377 2FE4 MOV R30,R20
0378 2FF5 MOV R31,R21
0379 8023 LDD R2,Z+3
037A 843C LDD R3,Y+12
037B 1832 SUB R3,R2
037C 863C STD Y+12,R3
(0388) //以上处理小数点小数点左边第一位数字;
(0389) if(B_Flag==1)
037D 3061 CPI R22,1
037E F451 BNE 0x0389
(0390) {if(temp[11]==0) {temp[11]=9;B_Flag=0;}
037F 842B LDD R2,Y+11
0380 2022 TST R2
0381 F421 BNE 0x0386
0382 E089 LDI R24,0x9
0383 878B STD Y+11,R24
0384 2766 CLR R22
0385 C003 RJMP 0x0389
(0391) else temp[11]=temp[11]-1;}
0386 858B LDD R24,Y+11
0387 5081 SUBI R24,1
0388 878B STD Y+11,R24
(0392) //以上对存在借位情况时对小数点左边第二位进行预处理;
(0393) if(temp[11]<p[2]) {temp[11]=temp[11]+10-p[2];B_Flag=1;}
0389 2FE4 MOV R30,R20
038A 2FF5 MOV R31,R21
038B 8022 LDD R2,Z+2
038C 843B LDD R3,Y+11
038D 1432 CP R3,R2
038E F448 BCC 0x0398
038F 2FE4 MOV R30,R20
0390 2FF5 MOV R31,R21
0391 8022 LDD R2,Z+2
0392 2D83 MOV R24,R3
0393 5F86 SUBI R24,0xF6
0394 1982 SUB R24,R2
0395 878B STD Y+11,R24
0396 E061 LDI R22,1
0397 C006 RJMP 0x039E
(0394) else temp[11]=temp[11]-p[2];
0398 2FE4 MOV R30,R20
0399 2FF5 MOV R31,R21
039A 8022 LDD R2,Z+2
039B 843B LDD R3,Y+11
039C 1832 SUB R3,R2
039D 863B STD Y+11,R3
(0395) //以上处理小数点小数点左边第二位数字;
(0396) if(B_Flag==1)
039E 3061 CPI R22,1
039F F451 BNE 0x03AA
(0397) {if(temp[10]==0) {temp[10]=9;B_Flag=0;}
03A0 842A LDD R2,Y+10
03A1 2022 TST R2
03A2 F421 BNE 0x03A7
03A3 E089 LDI R24,0x9
03A4 878A STD Y+10,R24
03A5 2766 CLR R22
03A6 C003 RJMP 0x03AA
(0398) else temp[10]=temp[10]-1;}
03A7 858A LDD R24,Y+10
03A8 5081 SUBI R24,1
03A9 878A STD Y+10,R24
(0399) //以上对存在借位情况时对小数点左边第三位进行预处理;
(0400) if(temp[10]<p[1]) {temp[10]=temp[10]+10-p[1];B_Flag=1;}
03AA 2FE4 MOV R30,R20
03AB 2FF5 MOV R31,R21
03AC 8021 LDD R2,Z+1
03AD 843A LDD R3,Y+10
03AE 1432 CP R3,R2
03AF F448 BCC 0x03B9
03B0 2FE4 MOV R30,R20
03B1 2FF5 MOV R31,R21
03B2 8021 LDD R2,Z+1
03B3 2D83 MOV R24,R3
03B4 5F86 SUBI R24,0xF6
03B5 1982 SUB R24,R2
03B6 878A STD Y+10,R24
03B7 E061 LDI R22,1
03B8 C006 RJMP 0x03BF
(0401) else temp[10]=temp[10]-p[1];
03B9 2FE4 MOV R30,R20
03BA 2FF5 MOV R31,R21
03BB 8021 LDD R2,Z+1
03BC 843A LDD R3,Y+10
03BD 1832 SUB R3,R2
03BE 863A STD Y+10,R3
(0402) //以上处理小数点小数点左边第三位数字;
(0403) if(B_Flag==1)
03BF 3061 CPI R22,1
03C0 F451 BNE 0x03CB
(0404) {if(temp[9]==0) {temp[9]=0;B_Flag=0;}
03C1 8429 LDD R2,Y+9
03C2 2022 TST R2
03C3 F421 BNE 0x03C8
03C4 2422 CLR R2
03C5 8629 STD Y+9,R2
03C6 2766 CLR R22
03C7 C003 RJMP 0x03CB
(0405) else temp[9]=temp[9]-1;}
03C8 8589 LDD R24,Y+9
03C9 5081 SUBI R24,1
03CA 8789 STD Y+9,R24
(0406) //以上对存在借位情况时对小数点左边第二位进行预处理;
(0407) temp[9]=temp[9]-p[0];
03CB 2FE4 MOV R30,R20
03CC 2FF5 MOV R31,R21
03CD 8020 LDD R2,Z+0
03CE 8439 LDD R3,Y+9
03CF 1832 SUB R3,R2
03D0 8639 STD Y+9,R3
(0408) //以上处理小数点小数点左边第二位数字;
(0409)
(0410) WriteMainMemory(41,temp[9]);
03D1 2D23 MOV R18,R3
03D2 E209 LDI R16,0x29
03D3 DD91 RCALL _WriteMainMemory
(0411) WriteMainMemory(42,temp[10]);
03D4 852A LDD R18,Y+10
03D5 E20A LDI R16,0x2A
03D6 DD8E RCALL _WriteMainMemory
(0412) WriteMainMemory(43,temp[11]);
03D7 852B LDD R18,Y+11
03D8 E20B LDI R16,0x2B
03D9 DD8B RCALL _WriteMainMemory
(0413) WriteMainMemory(44,temp[12]);
03DA 852C LDD R18,Y+12
03DB E20C LDI R16,0x2C
03DC DD88 RCALL _WriteMainMemory
(0414) WriteMainMemory(45,temp[13]);
03DD 852D LDD R18,Y+13
03DE E20D LDI R16,0x2D
03DF DD85 RCALL _WriteMainMemory
(0415) }
(0416) }
03E0 962E ADIW R28,0xE
03E1 D217 RCALL pop_gset2
03E2 9508 RET
_Display:
i --> R20
sel --> R22
p --> R10
03E3 D235 RCALL push_gset3
03E4 2EA0 MOV R10,R16
03E5 2EB1 MOV R11,R17
(0417)
(0418) //*****************数码管显示函数********************//
(0419) void Display(uchar *p)
(0420) {uchar sel,i;
(0421) sel=0x01;
03E6 E061 LDI R22,1
(0422) for(i=0;i<6;i++)
03E7 2744 CLR R20
03E8 C012 RJMP 0x03FB
(0423) {PORTA=table[p[i]];
03E9 2FE4 MOV R30,R20
03EA 27FF CLR R31
03EB 0DEA ADD R30,R10
03EC 1DFB ADC R31,R11
03ED 81E0 LDD R30,Z+0
03EE 27FF CLR R31
03EF E680 LDI R24,0x60
03F0 E090 LDI R25,0
03F1 0FE8 ADD R30,R24
03F2 1FF9 ADC R31,R25
03F3 8020 LDD R2,Z+0
03F4 BA2B OUT 0x1B,R2
(0424) PORTB=sel;
03F5 BB68 OUT 0x18,R22
(0425) DelayMs(2);
03F6 E002 LDI R16,2
03F7 E010 LDI R17,0
03F8 DC71 RCALL _DelayMs
(0426) sel=sel<<1;}
03F9 0F66 LSL R22
03FA 9543 INC R20
03FB 3046 CPI R20,6
03FC F360 BCS 0x03E9
(0427) }
03FD D1FD RCALL pop_gset3
03FE 9508 RET
_Key_Scan:
recode --> R20
sccode --> R22
03FF D216 RCALL push_gset2
(0428)
(0429)
(0430) //****************键盘扫描函数***********************//
(0431) uchar Key_Scan(void)
(0432) {uchar sccode,recode;
(0433) PORTC=0xf0;
0400 EF80 LDI R24,0xF0
0401 BB85 OUT 0x15,R24
(0434) if((PINC&0xf0)!=0xf0)
0402 B383 IN R24,0x13
0403 7F80 ANDI R24,0xF0
0404 3F80 CPI R24,0xF0
0405 F0D9 BEQ 0x0421
(0435) {DelayMs(10);
0406 E00A LDI R16,0xA
0407 E010 LDI R17,0
0408 DC61 RCALL _DelayMs
(0436) if((PINC&0xf0)!=0xf0)
0409 B383 IN R24,0x13
040A 7F80 ANDI R24,0xF0
040B 3F80 CPI R24,0xF0
040C F0A1 BEQ 0x0421
(0437) {sccode=0xfe;
040D EF6E LDI R22,0xFE
040E C010 RJMP 0x041F
(0438) while(sccode&0x10!=0x00)
(0439) {PORTC=sccode; //对第一行键盘测试
040F BB65 OUT 0x15,R22
(0440) if((PINC&0xf0)!=0xf0)
0410 B383 IN R24,0x13
0411 7F80 ANDI R24,0xF0
0412 3F80 CPI R24,0xF0
0413 F049 BEQ 0x041D
(0441) {recode=(PINC&0xf0)|0x0f;
0414 B343 IN R20,0x13
0415 7F40 ANDI R20,0xF0
0416 604F ORI R20,0xF
(0442) return((~sccode)+(~recode));}
0417 2E24 MOV R2,R20
0418 9420 COM R2
0419 2F06 MOV R16,R22
041A 9500 COM R16
041B 0D02 ADD R16,R2
041C C005 RJMP 0x0422
(0443) else
(0444) sccode=(sccode<<1)|0x01;
041D 0F66 LSL R22
041E 6061 ORI R22,1
041F FD60 SBRC R22,0
0420 CFEE RJMP 0x040F
(0445) }
(0446) }
(0447) }
(0448) return(0x00);
0421 2700 CLR R16
0422 D1D6 RCALL pop_gset2
0423 9508 RET
_Key_Process:
value --> R22
temp --> R22
p --> R20
0424 D1F1 RCALL push_gset2
0425 2F40 MOV R20,R16
0426 2F51 MOV R21,R17
(0449) }
(0450)
(0451) //******************按键处理函数*******************//
(0452) void Key_Process(uchar *p)
(0453) {uchar temp,value;
(0454) temp=Key_Scan();
0427 DFD7 RCALL _Key_Scan
0428 2F60 MOV R22,R16
(0455) switch(temp)
0429 2777 CLR R23
042A 3261 CPI R22,0x21
042B E0E0 LDI R30,0
042C 077E CPC R23,R30
042D F409 BNE 0x042F
042E C05C RJMP 0x048B
042F 3262 CPI R22,0x22
0430 E0E0 LDI R30,0
0431 077E CPC R23,R30
0432 F409 BNE 0x0434
0433 C066 RJMP 0x049A
0434 3264 CPI R22,0x24
0435 E0E0 LDI R30,0
0436 077E CPC R23,R30
0437 F409 BNE 0x0439
0438 C070 RJMP 0x04A9
0439 3268 CPI R22,0x28
043A E0E0 LDI R30,0
043B 077E CPC R23,R30
043C F409 BNE 0x043E
043D C07A RJMP 0x04B8
043E E288 LDI R24,0x28
043F E090 LDI R25,0
0440 1786 CP R24,R22
0441 0797 CPC R25,R23
0442 F0AC BLT 0x0458
0443 3161 CPI R22,0x11
0444 E0E0 LDI R30,0
0445 077E CPC R23,R30
0446 F409 BNE 0x0448
0447 C03E RJMP 0x0486
0448 3162 CPI R22,0x12
0449 E0E0 LDI R30,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -