?? 計算器.lst
字號:
1B8 809B LDD R9,Y+3
1B9 1462 CP R6,R2
1BA 0473 CPC R7,R3
1BB 0484 CPC R8,R4
1BC 0495 CPC R9,R5
1BD F024 BLT 0x01C2
1BE E081 LDI R24,1
1BF E090 LDI R25,0
1C0 017C MOVW R14,R24
1C1 C002 RJMP 0x01C4
1C2 24EE CLR R14
1C3 24FF CLR R15
1C4 2CAE MOV R10,R14
(0094) j/=10;
1C5 E04A LDI R20,0xA
1C6 E050 LDI R21,0
1C7 E060 LDI R22,0
1C8 E070 LDI R23,0
1C9 8508 LDD R16,Y+8
1CA 8519 LDD R17,Y+9
1CB 852A LDD R18,Y+10
1CC 853B LDD R19,Y+11
1CD 937A ST R23,-Y
1CE 936A ST R22,-Y
1CF 935A ST R21,-Y
1D0 934A ST R20,-Y
1D1 940E 03DF CALL div32s
1D3 8708 STD Y+8,R16
1D4 8719 STD Y+9,R17
1D5 872A STD Y+10,R18
1D6 873B STD Y+11,R19
(0095) t--;
1D7 94CA DEC R12
1D8 20AA TST R10
1D9 F2B9 BEQ 0x01B1
(0096) }
(0097)
(0098) show(8-t,10);
1DA E02A LDI R18,0xA
1DB E008 LDI R16,0x8
1DC 190C SUB R16,R12
1DD DEED RCALL _show
(0099) for(wei=8-t;wei<8;wei++) //先確定最低位在數碼管的位置,然后從低位到高位依次顯示
1DE E088 LDI R24,0x8
1DF 2EA8 MOV R10,R24
1E0 18AC SUB R10,R12
1E1 C024 RJMP 0x0206
(0100) { show(wei,i%10); //整數部分
1E2 E04A LDI R20,0xA
1E3 E050 LDI R21,0
1E4 E060 LDI R22,0
1E5 E070 LDI R23,0
1E6 8108 LDD R16,Y+0
1E7 8119 LDD R17,Y+1
1E8 812A LDD R18,Y+2
1E9 813B LDD R19,Y+3
1EA 937A ST R23,-Y
1EB 936A ST R22,-Y
1EC 935A ST R21,-Y
1ED 934A ST R20,-Y
1EE 940E 03E1 CALL mod32s
1F0 2F20 MOV R18,R16
1F1 2D0A MOV R16,R10
1F2 DED8 RCALL _show
(0101) i/=10;
1F3 E04A LDI R20,0xA
1F4 E050 LDI R21,0
1F5 E060 LDI R22,0
1F6 E070 LDI R23,0
1F7 8108 LDD R16,Y+0
1F8 8119 LDD R17,Y+1
1F9 812A LDD R18,Y+2
1FA 813B LDD R19,Y+3
1FB 937A ST R23,-Y
1FC 936A ST R22,-Y
1FD 935A ST R21,-Y
1FE 934A ST R20,-Y
1FF 940E 03DF CALL div32s
201 8308 STD Y+0,R16
202 8319 STD Y+1,R17
203 832A STD Y+2,R18
204 833B STD Y+3,R19
205 94A3 INC R10
206 2D8A MOV R24,R10
207 3088 CPI R24,0x8
208 F2C8 BCS 0x01E2
(0102) }
(0103)
(0104) for(wei=7-t;wei+1>0;wei--)//小數部分顯示
209 E087 LDI R24,7
20A 2EA8 MOV R10,R24
20B 18AC SUB R10,R12
20C C022 RJMP 0x022F
(0105) {
(0106) n*=10;
20D E504 LDI R16,0x54
20E E010 LDI R17,0
20F 940E 046C CALL lpm32
211 01CE MOVW R24,R28
212 9604 ADIW R24,4
213 939A ST R25,-Y
214 938A ST R24,-Y
215 940E 06EC CALL fpmule1
217 830C STD Y+4,R16
218 831D STD Y+5,R17
219 832E STD Y+6,R18
21A 833F STD Y+7,R19
(0107) show(wei,(long)n%10);
21B E04A LDI R20,0xA
21C E050 LDI R21,0
21D E060 LDI R22,0
21E E070 LDI R23,0
21F 810C LDD R16,Y+4
220 811D LDD R17,Y+5
221 812E LDD R18,Y+6
222 813F LDD R19,Y+7
223 940E 0518 CALL fpint
225 937A ST R23,-Y
226 936A ST R22,-Y
227 935A ST R21,-Y
228 934A ST R20,-Y
229 940E 03E1 CALL mod32s
22B 2F20 MOV R18,R16
22C 2D0A MOV R16,R10
22D DE9D RCALL _show
22E 94AA DEC R10
22F E080 LDI R24,0
230 2D9A MOV R25,R10
231 5F9F SUBI R25,0xFF
232 1789 CP R24,R25
233 F2C8 BCS 0x020D
(0108) }
(0109) }
234 962C ADIW R28,0xC
235 940E 0443 CALL pop_xgsetF0FC
237 9624 ADIW R28,4
238 9508 RET
_keyscan:
j --> R22
i --> R20
239 940E 0459 CALL push_xgsetF000
(0110) }
(0111)
(0112)
(0113)
(0114)
(0115)
(0116) uint keyscan()
(0117) {
(0118) uint i,j;
(0119) InitC_0();
23B DE85 RCALL _InitC_0
(0120) //delay(10);
(0121) i=PINC;
23C B343 IN R20,0x13
23D 2755 CLR R21
(0122) if(i==0x0f)return 0xff;
23E 304F CPI R20,0xF
23F E0E0 LDI R30,0
240 075E CPC R21,R30
241 F419 BNE 0x0245
242 EF0F LDI R16,0xFF
243 E010 LDI R17,0
244 C07B RJMP 0x02C0
(0123) i&=0x0f;
245 704F ANDI R20,0xF
246 7050 ANDI R21,0
(0124) InitC_1();
247 DE7E RCALL _InitC_1
(0125) j=PINC;
248 B363 IN R22,0x13
249 2777 CLR R23
(0126) j&=0xf0;
24A 7F60 ANDI R22,0xF0
24B 7070 ANDI R23,0
(0127) i|=j;
24C 2B46 OR R20,R22
24D 2B57 OR R21,R23
(0128) if(i==0xD7)return 0; //0 11010111
24E 3D47 CPI R20,0xD7
24F E0E0 LDI R30,0
250 075E CPC R21,R30
251 F419 BNE 0x0255
252 2700 CLR R16
253 2711 CLR R17
254 C06B RJMP 0x02C0
(0129) if(i==0xEB)return 1; //1 11101011
255 3E4B CPI R20,0xEB
256 E0E0 LDI R30,0
257 075E CPC R21,R30
258 F419 BNE 0x025C
259 E001 LDI R16,1
25A E010 LDI R17,0
25B C064 RJMP 0x02C0
(0130) if(i==0xDB)return 2; //2 11011011
25C 3D4B CPI R20,0xDB
25D E0E0 LDI R30,0
25E 075E CPC R21,R30
25F F419 BNE 0x0263
260 E002 LDI R16,2
261 E010 LDI R17,0
262 C05D RJMP 0x02C0
(0131) if(i==0xBB)return 3; //3 10111011
263 3B4B CPI R20,0xBB
264 E0E0 LDI R30,0
265 075E CPC R21,R30
266 F419 BNE 0x026A
267 E003 LDI R16,3
268 E010 LDI R17,0
269 C056 RJMP 0x02C0
(0132) if(i==0xED)return 4; //4 11101101
26A 3E4D CPI R20,0xED
26B E0E0 LDI R30,0
26C 075E CPC R21,R30
26D F419 BNE 0x0271
26E E004 LDI R16,4
26F E010 LDI R17,0
270 C04F RJMP 0x02C0
(0133) if(i==0xDD)return 5; //5 11011101
271 3D4D CPI R20,0xDD
272 E0E0 LDI R30,0
273 075E CPC R21,R30
274 F419 BNE 0x0278
275 E005 LDI R16,5
276 E010 LDI R17,0
277 C048 RJMP 0x02C0
(0134) if(i==0xBD)return 6; //6 10111101
278 3B4D CPI R20,0xBD
279 E0E0 LDI R30,0
27A 075E CPC R21,R30
27B F419 BNE 0x027F
27C E006 LDI R16,6
27D E010 LDI R17,0
27E C041 RJMP 0x02C0
(0135) if(i==0xEE)return 7; //7 11101110
27F 3E4E CPI R20,0xEE
280 E0E0 LDI R30,0
281 075E CPC R21,R30
282 F419 BNE 0x0286
283 E007 LDI R16,7
284 E010 LDI R17,0
285 C03A RJMP 0x02C0
(0136) if(i==0xDE)return 8; //8 11011110
286 3D4E CPI R20,0xDE
287 E0E0 LDI R30,0
288 075E CPC R21,R30
289 F419 BNE 0x028D
28A E008 LDI R16,0x8
28B E010 LDI R17,0
28C C033 RJMP 0x02C0
(0137) if(i==0xBE)return 9; //9 10111110
28D 3B4E CPI R20,0xBE
28E E0E0 LDI R30,0
28F 075E CPC R21,R30
290 F419 BNE 0x0294
291 E009 LDI R16,0x9
292 E010 LDI R17,0
293 C02C RJMP 0x02C0
(0138) if(i==0xB7)return '='; //= 10110111
294 3B47 CPI R20,0xB7
295 E0E0 LDI R30,0
296 075E CPC R21,R30
297 F419 BNE 0x029B
298 E30D LDI R16,0x3D
299 E010 LDI R17,0
29A C025 RJMP 0x02C0
(0139) if(i==0x77)return '+'; //+ 01110111
29B 3747 CPI R20,0x77
29C E0E0 LDI R30,0
29D 075E CPC R21,R30
29E F419 BNE 0x02A2
29F E20B LDI R16,0x2B
2A0 E010 LDI R17,0
2A1 C01E RJMP 0x02C0
(0140) if(i==0x7B)return '-'; //- 01111011
2A2 374B CPI R20,0x7B
2A3 E0E0 LDI R30,0
2A4 075E CPC R21,R30
2A5 F419 BNE 0x02A9
2A6 E20D LDI R16,0x2D
2A7 E010 LDI R17,0
2A8 C017 RJMP 0x02C0
(0141) if(i==0x7D)return '*'; //* 01111101
2A9 374D CPI R20,0x7D
2AA E0E0 LDI R30,0
2AB 075E CPC R21,R30
2AC F419 BNE 0x02B0
2AD E20A LDI R16,0x2A
2AE E010 LDI R17,0
2AF C010 RJMP 0x02C0
(0142) if(i==0x7E)return '/'; /// 01111110
2B0 374E CPI R20,0x7E
2B1 E0E0 LDI R30,0
2B2 075E CPC R21,R30
2B3 F419 BNE 0x02B7
2B4 E20F LDI R16,0x2F
2B5 E010 LDI R17,0
2B6 C009 RJMP 0x02C0
(0143) if(i==0xe7)return 'C';
2B7 3E47 CPI R20,0xE7
2B8 E0E0 LDI R30,0
2B9 075E CPC R21,R30
2BA F419 BNE 0x02BE
2BB E403 LDI R16,0x43
2BC E010 LDI R17,0
2BD C002 RJMP 0x02C0
(0144) else return 0xff;
2BE EF0F LDI R16,0xFF
2BF E010 LDI R17,0
2C0 940C 045E JMP pop_xgsetF000
_main:
key --> Y,+1
n --> R22
b --> Y,+4
t --> R20
a --> Y,+0
2C2 9728 SBIW R28,0x8
(0145) }
(0146)
(0147)
(0148)
(0149)
(0150)
(0151) void main(void)
(0152) {
(0153) float a,b;
(0154) uchar t=0xff;
2C3 EF4F LDI R20,0xFF
(0155) uint n=5821;
2C4 EB6D LDI R22,0xBD
2C5 E176 LDI R23,0x16
(0156) uint key;
(0157) DDRA=0XFF;
2C6 EF8F LDI R24,0xFF
2C7 BB8A OUT 0x1A,R24
(0158) PORTA=0Xff;
2C8 BB8B OUT 0x1B,R24
(0159) DDRB=0X03;
2C9 E083 LDI R24,3
2CA BB87 OUT 0x17,R24
(0160) InitC_0();
2CB DDF5 RCALL _InitC_0
(0161) MCUCR=2; //設置INT0為下降沿觸發中斷
2CC E082 LDI R24,2
2CD BF85 OUT 0x35,R24
(0162) GICR|=BIT(6);
2CE B78B IN R24,0x3B
2CF 6480 ORI R24,0x40
2D0 BF8B OUT 0x3B,R24
(0163) SREG|=BIT(7);
2D1 9478 BSET 7
2D2 C0FE RJMP 0x03D1
(0164)
(0165) while(1)
(0166) {
(0167) if(i!=0xff)
2D3 9180 0074 LDS R24,i
2D5 3F8F CPI R24,0xFF
2D6 F409 BNE 0x02D8
2D7 C0ED RJMP 0x03C5
(0168) {
(0169) if(i<10){ a=10*a+i;i=0xff;}
2D8 308A CPI R24,0xA
2D9 F500 BCC 0x02FA
2DA E504 LDI R16,0x54
2DB E010 LDI R17,0
2DC 940E 046C CALL lpm32
2DE 01CE MOVW R24,R28
2DF 939A ST R25,-Y
2E0 938A ST R24,-Y
2E1 940E 06EC CALL fpmule1
2E3 0118 MOVW R2,R16
2E4 0129 MOVW R4,R18
2E5 9100 0074 LDS R16,i
2E7 2711 CLR R17
2E8 940E 0546 CALL int2fp
2EA 933A ST R19,-Y
2EB 932A ST R18,-Y
2EC 931A ST R17,-Y
2ED 930A ST R16,-Y
2EE 0181 MOVW R16,R2
2EF 0192 MOVW R18,R4
2F0 940E 04F8 CALL fpadd2
2F2 8308 STD Y+0,R16
2F3 8319 STD Y+1,R17
2F4 832A STD Y+2,R18
2F5 833B STD Y+3,R19
2F6 EF8F LDI R24,0xFF
2F7 9380 0074 STS i,R24
2F9 C0CB RJMP 0x03C5
(0170) else
(0171) {
(0172) if(i=='+'){ sign=1;b=a;a=0;}
2FA 9180 0074 LDS R24,i
2FC 328B CPI R24,0x2B
2FD F499 BNE 0x0311
2FE E081 LDI R24,1
2FF 9380 0075 STS sign,R24
301 8028 LDD R2,Y+0
302 8039 LDD R3,Y+1
303 804A LDD R4,Y+2
304 805B LDD R5,Y+3
305 822C STD Y+4,R2
306 823D STD Y+5,R3
307 824E STD Y+6,R4
308 825F STD Y+7,R5
309 E508 LDI R16,0x58
30A E010 LDI R17,0
30B 940E 046C CALL lpm32
30D 8308 STD Y+0,R16
30E 8319 STD Y+1,R17
30F 832A STD Y+2,R18
310 833B STD Y+3,R19
(0173) if(i=='-'){ sign=2;b=a;a=0;}
311 9180 0074 LDS R24,i
313 328D CPI R24,0x2D
314 F499 BNE 0x0328
315 E082 LDI R24,2
316 9380 0075 STS sign,R24
318 8028 LDD R2,Y+0
319 8039 LDD R3,Y+1
31A 804A LDD R4,Y+2
31B 805B LDD R5,Y+3
31C 822C STD Y+4,R2
31D 823D STD Y+5,R3
31E 824E STD Y+6,R4
31F 825F STD Y+7,R5
320 E508 LDI R16,0x58
321 E010 LDI R17,0
322 940E 046C CALL lpm32
324 8308 STD Y+0,R16
325 8319 STD Y+1,R17
326 832A STD Y+2,R18
327 833B STD Y+3,R19
(0174) if(i=='*'){ sign=3;b=a;a=0;}
328 9180 0074 LDS R24,i
32A 328A CPI R24,0x2A
32B F499 BNE 0x033F
32C E083 LDI R24,3
32D 9380 0075 STS sign,R24
32F 8028 LDD R2,Y+0
330 8039 LDD R3,Y+1
331 804A LDD R4,Y+2
332 805B LDD R5,Y+3
333 822C STD Y+4,R2
334 823D STD Y+5,R3
335 824E STD Y+6,R4
336 825F STD Y+7,R5
337 E508 LDI R16,0x58
338 E010 LDI R17,0
339 940E 046C CALL lpm32
33B 8308 STD Y+0,R16
33C 8319 STD Y+1,R17
33D 832A STD Y+2,R18
33E 833B STD Y+3,R19
(0175) if(i=='/'){ sign=4;b=a;a=0;}
33F 9180 0074 LDS R24,i
341 328F CPI R24,0x2F
342 F499 BNE 0x0356
343 E084 LDI R24,4
344 9380 0075 STS sign,R24
346 8028 LDD R2,Y+0
347 8039 LDD R3,Y+1
348 804A LDD R4,Y+2
349 805B LDD R5,Y+3
34A 822C STD Y+4,R2
34B 823D STD Y+5,R3
34C 824E STD Y+6,R4
34D 825F STD Y+7,R5
34E E508 LDI R16,0x58
34F E010 LDI R17,0
350 940E 046C CALL lpm32
352 8308 STD Y+0,R16
353 8319 STD Y+1,R17
354 832A STD Y+2,R18
355 833B STD Y+3,R19
(0176) if(i=='C'){ sign=0;a=0;b=0;}
356 9180 0074 LDS R24,i
358 3483 CPI R24,0x43
359 F499 BNE 0x036D
35A 2422 CLR R2
35B 9220 0075 STS sign,R2
35D E508 LDI R16,0x58
35E E010 LDI R17,0
35F 940E 046C CALL lpm32
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -