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

📄 计算器.lst

📁 通过单片机实现计算器的功能
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0243 F459      BNE	0x024F
    0244 2422      CLR	R2
    0245 92200071  STS	flag_a1,R2
    0247 90200073  LDS	R2,key
    0249 92200074  STS	flag_count,R2
    024B 2422      CLR	R2
    024C 92200077  STS	i,R2
    024E C026      RJMP	0x0275
(0052) //运算符号记录,按下运算符号表示第一个数输入完成
(0053) else if(key=='=')
    024F 91800073  LDS	R24,key
    0251 338D      CPI	R24,0x3D
    0252 F4D9      BNE	0x026E
(0054) 	 {
(0055) 	 
(0056) 	 ok='=';
    0253 E38D      LDI	R24,0x3D
    0254 93800075  STS	ok,R24
(0057) 	 if(flag_a2==1&&a2[0]==32)
    0256 91800072  LDS	R24,flag_a2
    0258 3081      CPI	R24,1
    0259 F479      BNE	0x0269
    025A 91800065  LDS	R24,a2
    025C 3280      CPI	R24,0x20
    025D F459      BNE	0x0269
(0058) 	 {error=1;
    025E E081      LDI	R24,1
    025F 93800076  STS	error,R24
(0059) 	
(0060) 	 LCD_write_string(10,1,"ERROR");
    0261 E988      LDI	R24,0x98
    0262 E090      LDI	R25,0
    0263 8399      STD	Y+1,R25
    0264 8388      STD	Y+0,R24
    0265 E021      LDI	R18,1
    0266 E00A      LDI	R16,0xA
    0267 DE97      RCALL	_LCD_write_string
(0061) 	 }//如果第二个数没有输入着输入有错
    0268 C00C      RJMP	0x0275
(0062) 	 else 
(0063) 	 {process_data();
    0269 D0A3      RCALL	_process_data
(0064) 	 flag_a2=0;}//按下等于号表示第二个数输入完成
    026A 2422      CLR	R2
    026B 92200072  STS	flag_a2,R2
(0065) 	 }
    026D C007      RJMP	0x0275
(0066) 	 
(0067) 	 else if(key=='R')i=0;//如果复位着数字位标志也要复位
    026E 91800073  LDS	R24,key
    0270 3582      CPI	R24,0x52
    0271 F419      BNE	0x0275
    0272 2422      CLR	R2
    0273 92200077  STS	i,R2
(0068) key_display();//输入接受完毕,调用显示函数显示输入值
    0275 D002      RCALL	_key_display
    0276 9622      ADIW	R28,2
    0277 9508      RET
_key_display:
  i                    --> R20
    0278 940E06CE  CALL	push_gset1
    027A 9722      SBIW	R28,2
(0069) }
(0070) 
(0071) void key_display(void)//按键显示函数
(0072) {unsigned char i;
(0073) 
(0074) if(key!=0x00&&key!='R')//如果不是按下复位按键着显示,没有输入到的地方都是空格(ASCII=32)
    027B 90200073  LDS	R2,key
    027D 2022      TST	R2
    027E F409      BNE	0x0280
    027F C043      RJMP	0x02C3
    0280 2D82      MOV	R24,R2
    0281 3582      CPI	R24,0x52
    0282 F409      BNE	0x0284
    0283 C03F      RJMP	0x02C3
(0075)  {LCD_write_char(0,1,a1[0]);
    0284 90200060  LDS	R2,a1
    0286 8228      STD	Y+0,R2
    0287 E021      LDI	R18,1
    0288 2700      CLR	R16
    0289 DE8B      RCALL	_LCD_write_char
(0076)   LCD_write_char(1,1,a1[1]);
    028A 90200061  LDS	R2,a1+1
    028C 8228      STD	Y+0,R2
    028D E021      LDI	R18,1
    028E E001      LDI	R16,1
    028F DE85      RCALL	_LCD_write_char
(0077)   LCD_write_char(2,1,a1[2]);
    0290 90200062  LDS	R2,a1+2
    0292 8228      STD	Y+0,R2
    0293 E021      LDI	R18,1
    0294 E002      LDI	R16,2
    0295 DE7F      RCALL	_LCD_write_char
(0078)   LCD_write_char(3,1,a1[3]);
    0296 90200063  LDS	R2,a1+3
    0298 8228      STD	Y+0,R2
    0299 E021      LDI	R18,1
    029A E003      LDI	R16,3
    029B DE79      RCALL	_LCD_write_char
(0079)   LCD_write_char(4,1,flag_count);
    029C 90200074  LDS	R2,flag_count
    029E 8228      STD	Y+0,R2
    029F E021      LDI	R18,1
    02A0 E004      LDI	R16,4
    02A1 DE73      RCALL	_LCD_write_char
(0080)   LCD_write_char(5,1,a2[0]);
    02A2 90200065  LDS	R2,a2
    02A4 8228      STD	Y+0,R2
    02A5 E021      LDI	R18,1
    02A6 E005      LDI	R16,5
    02A7 DE6D      RCALL	_LCD_write_char
(0081)   LCD_write_char(6,1,a2[1]);
    02A8 90200066  LDS	R2,a2+1
    02AA 8228      STD	Y+0,R2
    02AB E021      LDI	R18,1
    02AC E006      LDI	R16,6
    02AD DE67      RCALL	_LCD_write_char
(0082)   LCD_write_char(7,1,a2[2]);
    02AE 90200067  LDS	R2,a2+2
    02B0 8228      STD	Y+0,R2
    02B1 E021      LDI	R18,1
    02B2 E007      LDI	R16,7
    02B3 DE61      RCALL	_LCD_write_char
(0083)   LCD_write_char(8,1,a2[3]);
    02B4 90200068  LDS	R2,a2+3
    02B6 8228      STD	Y+0,R2
    02B7 E021      LDI	R18,1
    02B8 E008      LDI	R16,0x8
    02B9 DE5B      RCALL	_LCD_write_char
(0084)   LCD_write_char(9,1,ok);
    02BA 90200075  LDS	R2,ok
    02BC 8228      STD	Y+0,R2
    02BD E021      LDI	R18,1
    02BE E009      LDI	R16,0x9
    02BF DE55      RCALL	_LCD_write_char
(0085)   
(0086)   key=0x00;
    02C0 2422      CLR	R2
    02C1 92200073  STS	key,R2
(0087)  }
(0088) if(key!=0x00&&key=='R')//复位按键
    02C3 90200073  LDS	R2,key
    02C5 2022      TST	R2
    02C6 F409      BNE	0x02C8
    02C7 C041      RJMP	0x0309
    02C8 2D82      MOV	R24,R2
    02C9 3582      CPI	R24,0x52
    02CA F009      BEQ	0x02CC
    02CB C03D      RJMP	0x0309
(0089)  {
(0090)   LCD_write_string(0,1,"                ");
    02CC E887      LDI	R24,0x87
    02CD E090      LDI	R25,0
    02CE 8399      STD	Y+1,R25
    02CF 8388      STD	Y+0,R24
    02D0 E021      LDI	R18,1
    02D1 2700      CLR	R16
    02D2 DE2C      RCALL	_LCD_write_string
(0091)   for(i=0;i<5;i++)a1[i]=32; 
    02D3 2744      CLR	R20
    02D4 C009      RJMP	0x02DE
    02D5 E680      LDI	R24,0x60
    02D6 E090      LDI	R25,0
    02D7 2FE4      MOV	R30,R20
    02D8 27FF      CLR	R31
    02D9 0FE8      ADD	R30,R24
    02DA 1FF9      ADC	R31,R25
    02DB E280      LDI	R24,0x20
    02DC 8380      STD	Z+0,R24
    02DD 9543      INC	R20
    02DE 3045      CPI	R20,5
    02DF F3A8      BCS	0x02D5
(0092)   for(i=0;i<5;i++)a2[i]=32;
    02E0 2744      CLR	R20
    02E1 C009      RJMP	0x02EB
    02E2 E685      LDI	R24,0x65
    02E3 E090      LDI	R25,0
    02E4 2FE4      MOV	R30,R20
    02E5 27FF      CLR	R31
    02E6 0FE8      ADD	R30,R24
    02E7 1FF9      ADC	R31,R25
    02E8 E280      LDI	R24,0x20
    02E9 8380      STD	Z+0,R24
    02EA 9543      INC	R20
    02EB 3045      CPI	R20,5
    02EC F3A8      BCS	0x02E2
(0093)   for(i=0;i<7;i++)result_dp[i]=32;
    02ED 2744      CLR	R20
    02EE C009      RJMP	0x02F8
    02EF E68A      LDI	R24,0x6A
    02F0 E090      LDI	R25,0
    02F1 2FE4      MOV	R30,R20
    02F2 27FF      CLR	R31
    02F3 0FE8      ADD	R30,R24
    02F4 1FF9      ADC	R31,R25
    02F5 E280      LDI	R24,0x20
    02F6 8380      STD	Z+0,R24
    02F7 9543      INC	R20
    02F8 3047      CPI	R20,7
    02F9 F3A8      BCS	0x02EF
(0094)   flag_a1=1;
    02FA E081      LDI	R24,1
    02FB 93800071  STS	flag_a1,R24
(0095)   flag_a2=1;
    02FD 93800072  STS	flag_a2,R24
(0096)   key=0x00;
    02FF 2422      CLR	R2
    0300 92200073  STS	key,R2
(0097)   flag_count=32;
    0302 E280      LDI	R24,0x20
    0303 93800074  STS	flag_count,R24
(0098)   ok=32;
    0305 93800075  STS	ok,R24
(0099)   error=0;
    0307 92200076  STS	error,R2
(0100)   }
    0309 9622      ADIW	R28,2
    030A 940E06D1  CALL	pop_gset1
    030C 9508      RET
(0101) }
(0102) 
(0103) 
(0104) 
(0105) void process_data(void)//数字处理函数
(0106) {if(a1[3]!=32){data1=(a1[0]-48)*1000+(a1[1]-48)*100+(a1[2]-48)*10+(a1[3]-48);}
_process_data:
    030D 91800063  LDS	R24,a1+3
    030F 3280      CPI	R24,0x20
    0310 F139      BEQ	0x0338
    0311 90200061  LDS	R2,a1+1
    0313 E684      LDI	R24,0x64
    0314 9D82      MUL	R24,R2
    0315 01C0      MOVW	R24,R0
    0316 5C80      SUBI	R24,0xC0
    0317 4192      SBCI	R25,0x12
    0318 91200060  LDS	R18,a1
    031A 2733      CLR	R19
    031B EE08      LDI	R16,0xE8
    031C E013      LDI	R17,3
    031D 940E0680  CALL	empy16s
    031F 01F8      MOVW	R30,R16
    0320 58E0      SUBI	R30,0x80
    0321 4BFB      SBCI	R31,0xBB
    0322 0FE8      ADD	R30,R24
    0323 1FF9      ADC	R31,R25
    0324 90200062  LDS	R2,a1+2
    0326 E08A      LDI	R24,0xA
    0327 9D82      MUL	R24,R2
    0328 01C0      MOVW	R24,R0
    0329 5E80      SUBI	R24,0xE0
    032A 4091      SBCI	R25,1
    032B 0FE8      ADD	R30,R24
    032C 1FF9      ADC	R31,R25
    032D 91800063  LDS	R24,a1+3
    032F 2799      CLR	R25
    0330 97C0      SBIW	R24,0x30
    0331 0FE8      ADD	R30,R24
    0332 1FF9      ADC	R31,R25
    0333 93F000A6  STS	data1+1,R31
    0335 93E000A5  STS	data1,R30
    0337 C046      RJMP	0x037E
(0107)   else if(a1[2]!=32){data1=(a1[0]-48)*100+(a1[1]-48)*10+(a1[2]-48);}
    0338 91800062  LDS	R24,a1+2
    033A 3280      CPI	R24,0x20
    033B F0D9      BEQ	0x0357
    033C 90200061  LDS	R2,a1+1
    033E E08A      LDI	R24,0xA
    033F 9D82      MUL	R24,R2
    0340 01C0      MOVW	R24,R0
    0341 5E80      SUBI	R24,0xE0
    0342 4091      SBCI	R25,1
    0343 90200060  LDS	R2,a1
    0345 E6E4      LDI	R30,0x64
    0346 9DE2      MUL	R30,R2
    0347 01F0      MOVW	R30,R0
    0348 5CE0      SUBI	R30,0xC0
    0349 41F2      SBCI	R31,0x12
    034A 0FE8      ADD	R30,R24
    034B 1FF9      ADC	R31,R25
    034C 91800062  LDS	R24,a1+2
    034E 2799      CLR	R25
    034F 97C0      SBIW	R24,0x30
    0350 0FE8      ADD	R30,R24
    0351 1FF9      ADC	R31,R25
    0352 93F000A6  STS	data1+1,R31
    0354 93E000A5  STS	data1,R30
    0356 C027      RJMP	0x037E
(0108)    else if(a1[1]!=32){data1=(a1[0]-48)*10+(a1[1]-48);}
    0357 91800061  LDS	R24,a1+1
    0359 3280      CPI	R24,0x20
    035A F091      BEQ	0x036D
    035B 90200060  LDS	R2,a1
    035D E08A      LDI	R24,0xA
    035E 9D82      MUL	R24,R2
    035F 01C0      MOVW	R24,R0
    0360 5E80      SUBI	R24,0xE0
    0361 4091      SBCI	R25,1
    0362 91E00061  LDS	R30,a1+1
    0364 27FF      CLR	R31
    0365 97F0      SBIW	R30,0x30
    0366 0F8E      ADD	R24,R30
    0367 1F9F      ADC	R25,R31
    0368 939000A6  STS	data1+1,R25
    036A 938000A5  STS	data1,R24
    036C C011      RJMP	0x037E
(0109) 	 else if(a1[0]!=32){data1=a1[0]-48;}
    036D 91800060  LDS	R24,a1
    036F 3280      CPI	R24,0x20
    0370 F039      BEQ	0x0378
    0371 2799      CLR	R25
    0372 97C0      SBIW	R24,0x30
    0373 939000A6  STS	data1+1,R25
    0375 938000A5  STS	data1,R24
    0377 C006      RJMP	0x037E
(0110) 	   else data1=0;//ASCII-48才是对应的数字
    0378 2422      CLR	R2
    0379 2433      CLR	R3
    037A 923000A6  STS	data1+1,R3
    037C 922000A5  STS	data1,R2
(0111) 	   
(0112) if(a2[3]!=32){data2=(a2[0]-48)*1000+(a2[1]-48)*100+(a2[2]-48)*10+(a2[3]-48);}
    037E 91800068  LDS	R24,a2+3
    0380 3280      CPI	R24,0x20
    0381 F139      BEQ	0x03A9
    0382 90200066  LDS	R2,a2+1
    0384 E684      LDI	R24,0x64
    0385 9D82      MUL	R24,R2
    0386 01C0      MOVW	R24,R0
    0387 5C80      SUBI	R24,0xC0
    0388 4192      SBCI	R25,0x12
    0389 91200065  LDS	R18,a2
    038B 2733      CLR	R19
    038C EE08      LDI	R16,0xE8
    038D E013      LDI	R17,3
    038E 940E0680  CALL	empy16s
    0390 01F8      MOVW	R30,R16
    0391 58E0      SUBI	R30,0x80
    0392 4BFB      SBCI	R31,0xBB
    0393 0FE8      ADD	R30,R24
    0394 1FF9      ADC	R31,R25
    0395 90200067  LDS	R2,a2+2
    0397 E08A      LDI	R24,0xA
    0398 9D82      MUL	R24,R2
    0399 01C0      MOVW	R24,R0
    039A 5E80      SUBI	R24,0xE0
    039B 4091      SBCI	R25,1
    039C 0FE8      ADD	R30,R24
    039D 1FF9      ADC	R31,R25
    039E 91800068  LDS	R24,a2+3
    03A0 2799      CLR	R25
    03A1 97C0      SBIW	R24,0x30
    03A2 0FE8      ADD	R30,R24
    03A3 1FF9      ADC	R31,R25
    03A4 93F000A4  STS	data2+1,R31
    03A6 93E000A3  STS	data2,R30
    03A8 C046      RJMP	0x03EF
(0113)   else if(a2[2]!=32){data2=(a2[0]-48)*100+(a2[1]-48)*10+(a2[2]-48);}
    03A9 91800067  LDS	R24,a2+2
    03AB 3280      CPI	R24,0x20
    03AC F0D9      BEQ	0x03C8
    03AD 90200066  LDS	R2,a2+1
    03AF E08A      LDI	R24,0xA
    03B0 9D82      MUL	R24,R2
    03B1 01C0      MOVW	R24,R0
    03B2 5E80      SUBI	R24,0xE0
    03B3 4091      SBCI	R25,1
    03B4 90200065  LDS	R2,a2
    03B6 E6E4      LDI	R30,0x64
    03B7 9DE2      MUL	R30,R2
    03B8 01F0      MOVW	R30,R0
    03B9 5CE0      SUBI	R30,0xC0
    03BA 41F2      SBCI	R31,0x12
    03BB 0FE8      ADD	R30,R24
    03BC 1FF9      ADC	R31,R25
    03BD 91800067  LDS	R24,a2+2
    03BF 2799      CLR	R25
    03C0 97C0      SBIW	R24,0x30
    03C1 0FE8      ADD	R30,R24
    03C2 1FF9      ADC	R31,R25
    03C3 93F000A4  STS	data2+1,R31
    03C5 93E000A3  STS	data2,R30
    03C7 C027      RJMP	0x03EF
(0114)    else if(a2[1]!=32){data2=(a2[0]-48)*10+(a2[1]-48);}
    03C8 91800066  LDS	R24,a2+1
    03CA 3280      CPI	R24,0x20
    03CB F091      BEQ	0x03DE
    03CC 90200065  LDS	R2,a2
    03CE E08A      LDI	R24,0xA
    03CF 9D82      MUL	R24,R2
    03D0 01C0      MOVW	R24,R0
    03D1 5E80      SUBI	R24,0xE0
    03D2 4091      SBCI	R25,1
    03D3 91E00066  LDS	R30,a2+1
    03D5 27FF      CLR	R31
    03D6 97F0      SBIW	R30,0x30
    03D7 0F8E      ADD	R24,R30

⌨️ 快捷键说明

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