⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 计算器.lst

📁 通过单片机实现计算器的功能
💻 LST
📖 第 1 页 / 共 5 页
字号:
    03D8 1F9F      ADC	R25,R31
    03D9 939000A4  STS	data2+1,R25
    03DB 938000A3  STS	data2,R24
    03DD C011      RJMP	0x03EF
(0115) 	 else if(a2[0]!=32){data2=a2[0]-48;}
    03DE 91800065  LDS	R24,a2
    03E0 3280      CPI	R24,0x20
    03E1 F039      BEQ	0x03E9
    03E2 2799      CLR	R25
    03E3 97C0      SBIW	R24,0x30
    03E4 939000A4  STS	data2+1,R25
    03E6 938000A3  STS	data2,R24
    03E8 C006      RJMP	0x03EF
(0116) 	   else data2=0;
    03E9 2422      CLR	R2
    03EA 2433      CLR	R3
    03EB 923000A4  STS	data2+1,R3
    03ED 922000A3  STS	data2,R2
(0117) 	
(0118) process_count();//数据处理完毕调用运算函数
    03EF D001      RCALL	_process_count
    03F0 9508      RET
(0119) }
(0120) 
(0121) void process_count(void)//运算函数
(0122) {if(flag_count=='+')result=data1+data2;
_process_count:
    03F1 91800074  LDS	R24,flag_count
    03F3 328B      CPI	R24,0x2B
    03F4 F4C9      BNE	0x040E
    03F5 902000A3  LDS	R2,data2
    03F7 903000A4  LDS	R3,data2+1
    03F9 904000A5  LDS	R4,data1
    03FB 905000A6  LDS	R5,data1+1
    03FD 0C42      ADD	R4,R2
    03FE 1C53      ADC	R5,R3
    03FF 0112      MOVW	R2,R4
    0400 2444      CLR	R4
    0401 FC37      SBRC	R3,7
    0402 9440      COM	R4
    0403 2455      CLR	R5
    0404 FC47      SBRC	R4,7
    0405 9450      COM	R5
    0406 923000A0  STS	result+1,R3
    0408 9220009F  STS	result,R2
    040A 925000A2  STS	result+3,R5
    040C 924000A1  STS	result+2,R4
(0123) if(flag_count=='-')result=data1-data2;
    040E 91800074  LDS	R24,flag_count
    0410 328D      CPI	R24,0x2D
    0411 F4C9      BNE	0x042B
    0412 902000A3  LDS	R2,data2
    0414 903000A4  LDS	R3,data2+1
    0416 904000A5  LDS	R4,data1
    0418 905000A6  LDS	R5,data1+1
    041A 1842      SUB	R4,R2
    041B 0853      SBC	R5,R3
    041C 0112      MOVW	R2,R4
    041D 2444      CLR	R4
    041E FC37      SBRC	R3,7
    041F 9440      COM	R4
    0420 2455      CLR	R5
    0421 FC47      SBRC	R4,7
    0422 9450      COM	R5
    0423 923000A0  STS	result+1,R3
    0425 9220009F  STS	result,R2
    0427 925000A2  STS	result+3,R5
    0429 924000A1  STS	result+2,R4
(0124) if(flag_count=='*')result=data1*data2;
    042B 91800074  LDS	R24,flag_count
    042D 328A      CPI	R24,0x2A
    042E F4C9      BNE	0x0448
    042F 912000A3  LDS	R18,data2
    0431 913000A4  LDS	R19,data2+1
    0433 910000A5  LDS	R16,data1
    0435 911000A6  LDS	R17,data1+1
    0437 940E0680  CALL	empy16s
    0439 0118      MOVW	R2,R16
    043A 2444      CLR	R4
    043B FC37      SBRC	R3,7
    043C 9440      COM	R4
    043D 2455      CLR	R5
    043E FC47      SBRC	R4,7
    043F 9450      COM	R5
    0440 923000A0  STS	result+1,R3
    0442 9220009F  STS	result,R2
    0444 925000A2  STS	result+3,R5
    0446 924000A1  STS	result+2,R4
(0125) if(flag_count=='/')result=data1/data2;
    0448 91800074  LDS	R24,flag_count
    044A 328F      CPI	R24,0x2F
    044B F4C9      BNE	0x0465
    044C 912000A3  LDS	R18,data2
    044E 913000A4  LDS	R19,data2+1
    0450 910000A5  LDS	R16,data1
    0452 911000A6  LDS	R17,data1+1
    0454 940E05D9  CALL	div16s
    0456 0118      MOVW	R2,R16
    0457 2444      CLR	R4
    0458 FC37      SBRC	R3,7
    0459 9440      COM	R4
    045A 2455      CLR	R5
    045B FC47      SBRC	R4,7
    045C 9450      COM	R5
    045D 923000A0  STS	result+1,R3
    045F 9220009F  STS	result,R2
    0461 925000A2  STS	result+3,R5
    0463 924000A1  STS	result+2,R4
(0126) display_result();//运算完毕调用结果处理函数
    0465 D001      RCALL	_display_result
    0466 9508      RET
_display_result:
    0467 940E06CC  CALL	push_gset2
    0469 9722      SBIW	R28,2
(0127) }
(0128) 
(0129) void display_result(void)//结果处理函数
(0130) {if(result>9999)error=1;//溢出
    046A E04F      LDI	R20,0xF
    046B E257      LDI	R21,0x27
    046C E060      LDI	R22,0
    046D E070      LDI	R23,0
    046E 904000A1  LDS	R4,result+2
    0470 905000A2  LDS	R5,result+3
    0472 9020009F  LDS	R2,result
    0474 903000A0  LDS	R3,result+1
    0476 1542      CP	R20,R2
    0477 0553      CPC	R21,R3
    0478 0564      CPC	R22,R4
    0479 0575      CPC	R23,R5
    047A F41C      BGE	0x047E
    047B E081      LDI	R24,1
    047C 93800076  STS	error,R24
(0131) if(result<0&&flag_count=='-'){result_dp[0]='-';result=result*(-1);}//符号处理
    047E E040      LDI	R20,0
    047F E050      LDI	R21,0
    0480 E060      LDI	R22,0
    0481 E070      LDI	R23,0
    0482 904000A1  LDS	R4,result+2
    0484 905000A2  LDS	R5,result+3
    0486 9020009F  LDS	R2,result
    0488 903000A0  LDS	R3,result+1
    048A 1624      CP	R2,R20
    048B 0635      CPC	R3,R21
    048C 0646      CPC	R4,R22
    048D 0657      CPC	R5,R23
    048E F4DC      BGE	0x04AA
    048F 91800074  LDS	R24,flag_count
    0491 328D      CPI	R24,0x2D
    0492 F4B9      BNE	0x04AA
    0493 E28D      LDI	R24,0x2D
    0494 9380006A  STS	result_dp,R24
    0496 EF4F      LDI	R20,0xFF
    0497 EF5F      LDI	R21,0xFF
    0498 EF6F      LDI	R22,0xFF
    0499 EF7F      LDI	R23,0xFF
    049A 925A      ST	R5,-Y
    049B 924A      ST	R4,-Y
    049C 923A      ST	R3,-Y
    049D 922A      ST	R2,-Y
    049E 018A      MOVW	R16,R20
    049F 019B      MOVW	R18,R22
    04A0 940E0690  CALL	empy32s
    04A2 931000A0  STS	result+1,R17
    04A4 9300009F  STS	result,R16
    04A6 933000A2  STS	result+3,R19
    04A8 932000A1  STS	result+2,R18
(0132) if(result<0&&flag_count!='-')error=1; //只有减法有可能出现负数
    04AA E040      LDI	R20,0
    04AB E050      LDI	R21,0
    04AC E060      LDI	R22,0
    04AD E070      LDI	R23,0
    04AE 904000A1  LDS	R4,result+2
    04B0 905000A2  LDS	R5,result+3
    04B2 9020009F  LDS	R2,result
    04B4 903000A0  LDS	R3,result+1
    04B6 1624      CP	R2,R20
    04B7 0635      CPC	R3,R21
    04B8 0646      CPC	R4,R22
    04B9 0657      CPC	R5,R23
    04BA F43C      BGE	0x04C2
    04BB 91800074  LDS	R24,flag_count
    04BD 328D      CPI	R24,0x2D
    04BE F019      BEQ	0x04C2
    04BF E081      LDI	R24,1
    04C0 93800076  STS	error,R24
(0133) if(flag_count=='/'&&data2==0)error=1;//除法时除数不能为0
    04C2 91800074  LDS	R24,flag_count
    04C4 328F      CPI	R24,0x2F
    04C5 F459      BNE	0x04D1
    04C6 902000A3  LDS	R2,data2
    04C8 903000A4  LDS	R3,data2+1
    04CA 2022      TST	R2
    04CB F429      BNE	0x04D1
    04CC 2033      TST	R3
    04CD F419      BNE	0x04D1
    04CE E081      LDI	R24,1
    04CF 93800076  STS	error,R24
(0134) 
(0135) 
(0136) result_dp[1]=result/10000+48;//显示处理
    04D1 E140      LDI	R20,0x10
    04D2 E257      LDI	R21,0x27
    04D3 E060      LDI	R22,0
    04D4 E070      LDI	R23,0
    04D5 904000A1  LDS	R4,result+2
    04D7 905000A2  LDS	R5,result+3
    04D9 9020009F  LDS	R2,result
    04DB 903000A0  LDS	R3,result+1
    04DD 937A      ST	R23,-Y
    04DE 936A      ST	R22,-Y
    04DF 935A      ST	R21,-Y
    04E0 934A      ST	R20,-Y
    04E1 0181      MOVW	R16,R2
    04E2 0192      MOVW	R18,R4
    04E3 940E0615  CALL	div32s
    04E5 0118      MOVW	R2,R16
    04E6 0129      MOVW	R4,R18
    04E7 E340      LDI	R20,0x30
    04E8 E050      LDI	R21,0
    04E9 E060      LDI	R22,0
    04EA E070      LDI	R23,0
    04EB 0E24      ADD	R2,R20
    04EC 1E35      ADC	R3,R21
    04ED 1E46      ADC	R4,R22
    04EE 1E57      ADC	R5,R23
    04EF 9220006B  STS	result_dp+1,R2
(0137) result_dp[2]=result/1000%10+48;
    04F1 EE48      LDI	R20,0xE8
    04F2 E053      LDI	R21,3
    04F3 E060      LDI	R22,0
    04F4 E070      LDI	R23,0
    04F5 904000A1  LDS	R4,result+2
    04F7 905000A2  LDS	R5,result+3
    04F9 9020009F  LDS	R2,result
    04FB 903000A0  LDS	R3,result+1
    04FD 937A      ST	R23,-Y
    04FE 936A      ST	R22,-Y
    04FF 935A      ST	R21,-Y
    0500 934A      ST	R20,-Y
    0501 0181      MOVW	R16,R2
    0502 0192      MOVW	R18,R4
    0503 940E0615  CALL	div32s
    0505 E04A      LDI	R20,0xA
    0506 E050      LDI	R21,0
    0507 E060      LDI	R22,0
    0508 E070      LDI	R23,0
    0509 937A      ST	R23,-Y
    050A 936A      ST	R22,-Y
    050B 935A      ST	R21,-Y
    050C 934A      ST	R20,-Y
    050D 940E0617  CALL	mod32s
    050F 0118      MOVW	R2,R16
    0510 0129      MOVW	R4,R18
    0511 E340      LDI	R20,0x30
    0512 E050      LDI	R21,0
    0513 E060      LDI	R22,0
    0514 E070      LDI	R23,0
    0515 0E24      ADD	R2,R20
    0516 1E35      ADC	R3,R21
    0517 1E46      ADC	R4,R22
    0518 1E57      ADC	R5,R23
    0519 9220006C  STS	result_dp+2,R2
(0138) result_dp[3]=result/100%10+48;
    051B E644      LDI	R20,0x64
    051C E050      LDI	R21,0
    051D E060      LDI	R22,0
    051E E070      LDI	R23,0
    051F 904000A1  LDS	R4,result+2
    0521 905000A2  LDS	R5,result+3
    0523 9020009F  LDS	R2,result
    0525 903000A0  LDS	R3,result+1
    0527 937A      ST	R23,-Y
    0528 936A      ST	R22,-Y
    0529 935A      ST	R21,-Y
    052A 934A      ST	R20,-Y
    052B 0181      MOVW	R16,R2
    052C 0192      MOVW	R18,R4
    052D 940E0615  CALL	div32s
    052F E04A      LDI	R20,0xA
    0530 E050      LDI	R21,0
    0531 E060      LDI	R22,0
    0532 E070      LDI	R23,0
    0533 937A      ST	R23,-Y
    0534 936A      ST	R22,-Y
    0535 935A      ST	R21,-Y
    0536 934A      ST	R20,-Y
    0537 940E0617  CALL	mod32s
    0539 0118      MOVW	R2,R16
    053A 0129      MOVW	R4,R18
    053B E340      LDI	R20,0x30
    053C E050      LDI	R21,0
    053D E060      LDI	R22,0
    053E E070      LDI	R23,0
    053F 0E24      ADD	R2,R20
    0540 1E35      ADC	R3,R21
    0541 1E46      ADC	R4,R22
    0542 1E57      ADC	R5,R23
    0543 9220006D  STS	result_dp+3,R2
(0139) result_dp[4]=result/10%10+48;
    0545 E04A      LDI	R20,0xA
    0546 E050      LDI	R21,0
    0547 E060      LDI	R22,0
    0548 E070      LDI	R23,0
    0549 904000A1  LDS	R4,result+2
    054B 905000A2  LDS	R5,result+3
    054D 9020009F  LDS	R2,result
    054F 903000A0  LDS	R3,result+1
    0551 937A      ST	R23,-Y
    0552 936A      ST	R22,-Y
    0553 935A      ST	R21,-Y
    0554 934A      ST	R20,-Y
    0555 0181      MOVW	R16,R2
    0556 0192      MOVW	R18,R4
    0557 940E0615  CALL	div32s
    0559 E04A      LDI	R20,0xA
    055A E050      LDI	R21,0
    055B E060      LDI	R22,0
    055C E070      LDI	R23,0
    055D 937A      ST	R23,-Y
    055E 936A      ST	R22,-Y
    055F 935A      ST	R21,-Y
    0560 934A      ST	R20,-Y
    0561 940E0617  CALL	mod32s
    0563 0118      MOVW	R2,R16
    0564 0129      MOVW	R4,R18
    0565 E340      LDI	R20,0x30
    0566 E050      LDI	R21,0
    0567 E060      LDI	R22,0
    0568 E070      LDI	R23,0
    0569 0E24      ADD	R2,R20
    056A 1E35      ADC	R3,R21
    056B 1E46      ADC	R4,R22
    056C 1E57      ADC	R5,R23
    056D 9220006E  STS	0x6E,R2
(0140) result_dp[5]=result%10+48;
    056F E04A      LDI	R20,0xA
    0570 E050      LDI	R21,0
    0571 E060      LDI	R22,0
    0572 E070      LDI	R23,0
    0573 904000A1  LDS	R4,result+2
    0575 905000A2  LDS	R5,result+3
    0577 9020009F  LDS	R2,result
    0579 903000A0  LDS	R3,result+1
    057B 937A      ST	R23,-Y
    057C 936A      ST	R22,-Y
    057D 935A      ST	R21,-Y
    057E 934A      ST	R20,-Y
    057F 0181      MOVW	R16,R2
    0580 0192      MOVW	R18,R4
    0581 940E0617  CALL	mod32s
    0583 0118      MOVW	R2,R16
    0584 0129      MOVW	R4,R18
    0585 E340      LDI	R20,0x30
    0586 E050      LDI	R21,0
    0587 E060      LDI	R22,0
    0588 E070      LDI	R23,0
    0589 0E24      ADD	R2,R20
    058A 1E35      ADC	R3,R21
    058B 1E46      ADC	R4,R22
    058C 1E57      ADC	R5,R23
    058D 9220006F  STS	0x6F,R2
(0141)  if(result_dp[1]==48)//显示修正,首位不能显示0
    058F 9180006B  LDS	R24,result_dp+1
    0591 3380      CPI	R24,0x30
    0592 F4C1      BNE	0x05AB
(0142)  {result_dp[1]=32;
    0593 E280      LDI	R24,0x20
    0594 9380006B  STS	result_dp+1,R24
(0143)  if(result_dp[2]==48)
    0596 9180006C  LDS	R24,result_dp+2
    0598 3380      CPI	R24,0x30
    0599 F489      BNE	0x05AB
(0144)    {result_dp[2]=32;
    059A E280      LDI	R24,0x20
    059B 9380006C  STS	result_dp+2,R24
(0145)     if(result_dp[3]==48)
    059D 9180006D  LDS	R24,result_dp+3
    059F 3380      CPI	R24,0x30
    05A0 F451      BNE	0x05AB
(0146) 	{result_dp[3]=32;
    05A1 E280      LDI	R24,0x20
    05A2 9380006D  STS	result_dp+3,R24
(0147)      if(result_dp[4]==48)
    05A4 9180006E  LDS	R24,0x6E
    05A6 3380      CPI	R24,0x30
    05A7 F419      BNE	0x05AB
(0148) 	 {result_dp[4]=32;
    05A8 E280      LDI	R24,0x20
    05A9 9380006E  STS	0x6E,R24
(0149)        
(0150) 	  }
(0151) 	 }
(0152) 	}
(0153)   }
(0154) 
(0155) if(error==1)//错误显示

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -