📄 计算器.lis
字号:
0352 .dbline 99
0352 A394 inc R10
0354 L46:
0354 .dbline 99
0354 8A2D mov R24,R10
0356 8830 cpi R24,8
0358 C8F2 brlo L43
035A X12:
035A .dbline 104
035A ;
035A ; for(wei=7-t;wei+1>0;wei--)//小数部分显示
035A 87E0 ldi R24,7
035C A82E mov R10,R24
035E AC18 sub R10,R12
0360 22C0 xjmp L50
0362 L47:
0362 .dbline 105
0362 ; {
0362 .dbline 106
0362 ; n*=10;
0362 00E0 ldi R16,<L51
0364 10E0 ldi R17,>L51
0366 0E940000 xcall lpm32
036A CE01 movw R24,R28
036C 0496 adiw R24,4
036E 9A93 st -y,R25
0370 8A93 st -y,R24
0372 0E940000 xcall fpmule1
0376 0C83 std y+4,R16
0378 1D83 std y+5,R17
037A 2E83 std y+6,R18
037C 3F83 std y+7,R19
037E .dbline 107
037E ; show(wei,(long)n%10);
037E 4AE0 ldi R20,10
0380 50E0 ldi R21,0
0382 60E0 ldi R22,0
0384 70E0 ldi R23,0
0386 0C81 ldd R16,y+4
0388 1D81 ldd R17,y+5
038A 2E81 ldd R18,y+6
038C 3F81 ldd R19,y+7
038E 0E940000 xcall fpint
0392 7A93 st -y,R23
0394 6A93 st -y,R22
0396 5A93 st -y,R21
0398 4A93 st -y,R20
039A 0E940000 xcall mod32s
039E 202F mov R18,R16
03A0 0A2D mov R16,R10
03A2 9DDE xcall _show
03A4 .dbline 108
03A4 ; }
03A4 L48:
03A4 .dbline 104
03A4 AA94 dec R10
03A6 L50:
03A6 .dbline 104
03A6 80E0 ldi R24,0
03A8 9A2D mov R25,R10
03AA 9F5F subi R25,255 ; addi 1
03AC 8917 cp R24,R25
03AE C8F2 brlo L47
03B0 X13:
03B0 .dbline 109
03B0 ; }
03B0 L36:
03B0 .dbline -2
03B0 L34:
03B0 .dbline 0 ; func end
03B0 2C96 adiw R28,12
03B2 0E940000 xcall pop_xgsetF0FC
03B6 2496 adiw R28,4
03B8 0895 ret
03BA .dbsym r t 12 c
03BA .dbsym l j 8 L
03BA .dbsym r x 10 c
03BA .dbsym r wei 10 c
03BA .dbsym l n 4 D
03BA .dbsym l i 0 L
03BA .dbsym l a 22 D
03BA .dbend
03BA .dbfunc e keyscan _keyscan fi
03BA ; j -> R22,R23
03BA ; i -> R20,R21
.even
03BA _keyscan::
03BA 0E940000 xcall push_xgsetF000
03BE .dbline -1
03BE .dbline 117
03BE ; }
03BE ;
03BE ;
03BE ;
03BE ;
03BE ;
03BE ; uint keyscan()
03BE ; {
03BE .dbline 119
03BE ; uint i,j;
03BE ; InitC_0();
03BE 85DE xcall _InitC_0
03C0 .dbline 121
03C0 ; //delay(10);
03C0 ; i=PINC;
03C0 43B3 in R20,0x13
03C2 5527 clr R21
03C4 .dbline 122
03C4 ; if(i==0x0f)return 0xff;
03C4 4F30 cpi R20,15
03C6 E0E0 ldi R30,0
03C8 5E07 cpc R21,R30
03CA 19F4 brne L53
03CC X14:
03CC .dbline 122
03CC 0FEF ldi R16,255
03CE 10E0 ldi R17,0
03D0 7BC0 xjmp L52
03D2 L53:
03D2 .dbline 123
03D2 ; i&=0x0f;
03D2 4F70 andi R20,15
03D4 5070 andi R21,0
03D6 .dbline 124
03D6 ; InitC_1();
03D6 7EDE xcall _InitC_1
03D8 .dbline 125
03D8 ; j=PINC;
03D8 63B3 in R22,0x13
03DA 7727 clr R23
03DC .dbline 126
03DC ; j&=0xf0;
03DC 607F andi R22,240
03DE 7070 andi R23,0
03E0 .dbline 127
03E0 ; i|=j;
03E0 462B or R20,R22
03E2 572B or R21,R23
03E4 .dbline 128
03E4 ; if(i==0xD7)return 0; //0 11010111
03E4 473D cpi R20,215
03E6 E0E0 ldi R30,0
03E8 5E07 cpc R21,R30
03EA 19F4 brne L55
03EC X15:
03EC .dbline 128
03EC 0027 clr R16
03EE 1127 clr R17
03F0 6BC0 xjmp L52
03F2 L55:
03F2 .dbline 129
03F2 ; if(i==0xEB)return 1; //1 11101011
03F2 4B3E cpi R20,235
03F4 E0E0 ldi R30,0
03F6 5E07 cpc R21,R30
03F8 19F4 brne L57
03FA X16:
03FA .dbline 129
03FA 01E0 ldi R16,1
03FC 10E0 ldi R17,0
03FE 64C0 xjmp L52
0400 L57:
0400 .dbline 130
0400 ; if(i==0xDB)return 2; //2 11011011
0400 4B3D cpi R20,219
0402 E0E0 ldi R30,0
0404 5E07 cpc R21,R30
0406 19F4 brne L59
0408 X17:
0408 .dbline 130
0408 02E0 ldi R16,2
040A 10E0 ldi R17,0
040C 5DC0 xjmp L52
040E L59:
040E .dbline 131
040E ; if(i==0xBB)return 3; //3 10111011
040E 4B3B cpi R20,187
0410 E0E0 ldi R30,0
0412 5E07 cpc R21,R30
0414 19F4 brne L61
0416 X18:
0416 .dbline 131
0416 03E0 ldi R16,3
0418 10E0 ldi R17,0
041A 56C0 xjmp L52
041C L61:
041C .dbline 132
041C ; if(i==0xED)return 4; //4 11101101
041C 4D3E cpi R20,237
041E E0E0 ldi R30,0
0420 5E07 cpc R21,R30
0422 19F4 brne L63
0424 X19:
0424 .dbline 132
0424 04E0 ldi R16,4
0426 10E0 ldi R17,0
0428 4FC0 xjmp L52
042A L63:
042A .dbline 133
042A ; if(i==0xDD)return 5; //5 11011101
042A 4D3D cpi R20,221
042C E0E0 ldi R30,0
042E 5E07 cpc R21,R30
0430 19F4 brne L65
0432 X20:
0432 .dbline 133
0432 05E0 ldi R16,5
0434 10E0 ldi R17,0
0436 48C0 xjmp L52
0438 L65:
0438 .dbline 134
0438 ; if(i==0xBD)return 6; //6 10111101
0438 4D3B cpi R20,189
043A E0E0 ldi R30,0
043C 5E07 cpc R21,R30
043E 19F4 brne L67
0440 X21:
0440 .dbline 134
0440 06E0 ldi R16,6
0442 10E0 ldi R17,0
0444 41C0 xjmp L52
0446 L67:
0446 .dbline 135
0446 ; if(i==0xEE)return 7; //7 11101110
0446 4E3E cpi R20,238
0448 E0E0 ldi R30,0
044A 5E07 cpc R21,R30
044C 19F4 brne L69
044E X22:
044E .dbline 135
044E 07E0 ldi R16,7
0450 10E0 ldi R17,0
0452 3AC0 xjmp L52
0454 L69:
0454 .dbline 136
0454 ; if(i==0xDE)return 8; //8 11011110
0454 4E3D cpi R20,222
0456 E0E0 ldi R30,0
0458 5E07 cpc R21,R30
045A 19F4 brne L71
045C X23:
045C .dbline 136
045C 08E0 ldi R16,8
045E 10E0 ldi R17,0
0460 33C0 xjmp L52
0462 L71:
0462 .dbline 137
0462 ; if(i==0xBE)return 9; //9 10111110
0462 4E3B cpi R20,190
0464 E0E0 ldi R30,0
0466 5E07 cpc R21,R30
0468 19F4 brne L73
046A X24:
046A .dbline 137
046A 09E0 ldi R16,9
046C 10E0 ldi R17,0
046E 2CC0 xjmp L52
0470 L73:
0470 .dbline 138
0470 ; if(i==0xB7)return '='; //= 10110111
0470 473B cpi R20,183
0472 E0E0 ldi R30,0
0474 5E07 cpc R21,R30
0476 19F4 brne L75
0478 X25:
0478 .dbline 138
0478 0DE3 ldi R16,61
047A 10E0 ldi R17,0
047C 25C0 xjmp L52
047E L75:
047E .dbline 139
047E ; if(i==0x77)return '+'; //+ 01110111
047E 4737 cpi R20,119
0480 E0E0 ldi R30,0
0482 5E07 cpc R21,R30
0484 19F4 brne L77
0486 X26:
0486 .dbline 139
0486 0BE2 ldi R16,43
0488 10E0 ldi R17,0
048A 1EC0 xjmp L52
048C L77:
048C .dbline 140
048C ; if(i==0x7B)return '-'; //- 01111011
048C 4B37 cpi R20,123
048E E0E0 ldi R30,0
0490 5E07 cpc R21,R30
0492 19F4 brne L79
0494 X27:
0494 .dbline 140
0494 0DE2 ldi R16,45
0496 10E0 ldi R17,0
0498 17C0 xjmp L52
049A L79:
049A .dbline 141
049A ; if(i==0x7D)return '*'; //* 01111101
049A 4D37 cpi R20,125
049C E0E0 ldi R30,0
049E 5E07 cpc R21,R30
04A0 19F4 brne L81
04A2 X28:
04A2 .dbline 141
04A2 0AE2 ldi R16,42
04A4 10E0 ldi R17,0
04A6 10C0 xjmp L52
04A8 L81:
04A8 .dbline 142
04A8 ; if(i==0x7E)return '/'; /// 01111110
04A8 4E37 cpi R20,126
04AA E0E0 ldi R30,0
04AC 5E07 cpc R21,R30
04AE 19F4 brne L83
04B0 X29:
04B0 .dbline 142
04B0 0FE2 ldi R16,47
04B2 10E0 ldi R17,0
04B4 09C0 xjmp L52
04B6 L83:
04B6 .dbline 143
04B6 ; if(i==0xe7)return 'C';
04B6 473E cpi R20,231
04B8 E0E0 ldi R30,0
04BA 5E07 cpc R21,R30
04BC 19F4 brne L85
04BE X30:
04BE .dbline 143
04BE 03E4 ldi R16,67
04C0 10E0 ldi R17,0
04C2 02C0 xjmp L52
04C4 L85:
04C4 .dbline 144
04C4 ; else return 0xff;
04C4 0FEF ldi R16,255
04C6 10E0 ldi R17,0
04C8 .dbline -2
04C8 L52:
04C8 .dbline 0 ; func end
04C8 0C940000 xjmp pop_xgsetF000
04CC .dbsym r j 22 i
04CC .dbsym r i 20 i
04CC .dbend
04CC .dbfunc e main _main fV
04CC ; key -> <dead>
04CC ; n -> R22,R23
04CC ; b -> y+4
04CC ; t -> R20
04CC ; a -> y+0
.even
04CC _main::
04CC 2897 sbiw R28,8
04CE .dbline -1
04CE .dbline 152
04CE ; }
04CE ;
04CE ;
04CE ;
04CE ;
04CE ;
04CE ; void main(void)
04CE ; {
04CE .dbline 154
04CE ; float a,b;
04CE ; uchar t=0xff;
04CE 4FEF ldi R20,255
04D0 .dbline 155
04D0 ; uint n=5821;
04D0 6DEB ldi R22,5821
04D2 76E1 ldi R23,22
04D4 .dbline 157
04D4 ; uint key;
04D4 ; DDRA=0XFF;
04D4 8FEF ldi R24,255
04D6 8ABB out 0x1a,R24
04D8 .dbline 158
04D8 ; PORTA=0Xff;
04D8 8BBB out 0x1b,R24
04DA .dbline 159
04DA ; DDRB=0X03;
04DA 83E0 ldi R24,3
04DC 87BB out 0x17,R24
04DE .dbline 160
04DE ; InitC_0();
04DE F5DD xcall _InitC_0
04E0 .dbline 161
04E0 ; MCUCR=2; //设置INT0为下降沿触发中断
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -