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

📄 car1.lst

📁 基于m16的寻迹小车(包含小车题目
💻 LST
📖 第 1 页 / 共 5 页
字号:
     3D2 DFEF      RCALL	_delay_1ms
     3D3 5F4F      SUBI	R20,0xFF
     3D4 4F5F      SBCI	R21,0xFF
     3D5 154A      CP	R20,R10
     3D6 055B      CPC	R21,R11
     3D7 F3D0      BCS	0x03D2
     3D8 940C 0781 JMP	pop_xgset300C
_delay_ns:
  i                    --> R10
  n                    --> R12
     3DA 92AA      ST	R10,-Y
     3DB 92CA      ST	R12,-Y
     3DC 2EC0      MOV	R12,R16
(0036) }
(0037) 
(0038) //延时1S
(0039) void delay_ns( uchar n )
(0040) {
(0041)     uchar i;
(0042) 	for( i = 0; i < n; i++ )
     3DD 24AA      CLR	R10
     3DE C004      RJMP	0x03E3
(0043) 	{
(0044)   	 	delay_nms( 1000 );
     3DF EE08      LDI	R16,0xE8
     3E0 E013      LDI	R17,3
     3E1 DFEA      RCALL	_delay_nms
     3E2 94A3      INC	R10
     3E3 14AC      CP	R10,R12
     3E4 F3D0      BCS	0x03DF
     3E5 90C9      LD	R12,Y+
     3E6 90A9      LD	R10,Y+
     3E7 9508      RET
_long_to_string:
  p1                   --> R10
  k2                   --> R14
  datachar2            --> Y,+14
  n                    --> Y,+25
  k1                   --> R12
  datachar1            --> Y,+4
  i                    --> Y,+24
  datainttmp           --> Y,+0
  p                    --> Y,+40
  dataint              --> Y,+36
     3E8 940E 06C3 CALL	push_arg4
     3EA 940E 0771 CALL	push_xgsetF0FC
     3EC 976A      SBIW	R28,0x1A
FILE: d:\我的文档\桌面\小车\car1\lcd.c
(0001) #define _LCD_C_
(0002) #include "LCD.h"
(0003) #include <iom16v.h>
(0004) 
(0005) /*****************************************
(0006) ** 将一个整型数据转化为字符串
(0007) ** 入口参数 要转换的整型数: dataint, 数组p[10]
(0008) ** 改变思路:整数 -->字符串-->加字符串结束标志
(0009) ** 可以转换小于0的整数
(0010) *****************************************/
(0011) void long_to_string( long int dataint, char *p  )
(0012) {
(0013)     long int datainttmp;
(0014)     char *p1;             //指向转换成为数组时用到
(0015)     char datachar1[10];
(0016)     char datachar2[10];
(0017)     uchar n = 0;         //取整型数据的位数
     3ED 2400      CLR	R0
     3EE 8E09      STD	Y+25,R0
(0018)     uchar i = 0;
     3EF 8E08      STD	Y+24,R0
(0019)     uchar k1 = 0;         //取字符个数
     3F0 24CC      CLR	R12
(0020)     uchar k2 = 0;         //取字符个数
     3F1 24EE      CLR	R14
(0021) 
(0022)     if( dataint >= 0 )
     3F2 E040      LDI	R20,0
     3F3 E050      LDI	R21,0
     3F4 E060      LDI	R22,0
     3F5 E070      LDI	R23,0
     3F6 A02C      LDD	R2,Y+36
     3F7 A03D      LDD	R3,Y+37
     3F8 A04E      LDD	R4,Y+38
     3F9 A05F      LDD	R5,Y+39
     3FA 1624      CP	R2,R20
     3FB 0635      CPC	R3,R21
     3FC 0646      CPC	R4,R22
     3FD 0657      CPC	R5,R23
     3FE F02C      BLT	0x0404
(0023)     datainttmp = ( long int )dataint;
     3FF 8228      STD	Y+0,R2
     400 8239      STD	Y+1,R3
     401 824A      STD	Y+2,R4
     402 825B      STD	Y+3,R5
     403 C014      RJMP	0x0418
(0024)     else datainttmp = ( long int )dataint * ( -1 );
     404 A02C      LDD	R2,Y+36
     405 A03D      LDD	R3,Y+37
     406 A04E      LDD	R4,Y+38
     407 A05F      LDD	R5,Y+39
     408 EF4F      LDI	R20,0xFF
     409 EF5F      LDI	R21,0xFF
     40A EF6F      LDI	R22,0xFF
     40B EF7F      LDI	R23,0xFF
     40C 925A      ST	R5,-Y
     40D 924A      ST	R4,-Y
     40E 923A      ST	R3,-Y
     40F 922A      ST	R2,-Y
     410 018A      MOVW	R16,R20
     411 019B      MOVW	R18,R22
     412 940E 0732 CALL	empy32u
     414 8308      STD	Y+0,R16
     415 8319      STD	Y+1,R17
     416 832A      STD	Y+2,R18
     417 833B      STD	Y+3,R19
(0025) 
(0026)     p1 = datachar2;
     418 01CE      MOVW	R24,R28
     419 960E      ADIW	R24,0xE
     41A 015C      MOVW	R10,R24
     41B C037      RJMP	0x0453
(0027) 
(0028) 
(0029)     while( datainttmp != 0 )
(0030)     {
(0031)         datachar1[n++] = ( datainttmp % 10 ) + 0x30;  //转换为字符并取得这个整型数据的位数 n
     41C 8C29      LDD	R2,Y+25
     41D 2433      CLR	R3
     41E 0131      MOVW	R6,R2
     41F 2D82      MOV	R24,R2
     420 5F8F      SUBI	R24,0xFF
     421 8F89      STD	Y+25,R24
     422 E04A      LDI	R20,0xA
     423 E050      LDI	R21,0
     424 E060      LDI	R22,0
     425 E070      LDI	R23,0
     426 8108      LDD	R16,Y+0
     427 8119      LDD	R17,Y+1
     428 812A      LDD	R18,Y+2
     429 813B      LDD	R19,Y+3
     42A 937A      ST	R23,-Y
     42B 936A      ST	R22,-Y
     42C 935A      ST	R21,-Y
     42D 934A      ST	R20,-Y
     42E 940E 06D0 CALL	mod32s
     430 0118      MOVW	R2,R16
     431 0129      MOVW	R4,R18
     432 E340      LDI	R20,0x30
     433 E050      LDI	R21,0
     434 E060      LDI	R22,0
     435 E070      LDI	R23,0
     436 0E24      ADD	R2,R20
     437 1E35      ADC	R3,R21
     438 1E46      ADC	R4,R22
     439 1E57      ADC	R5,R23
     43A 01CE      MOVW	R24,R28
     43B 9604      ADIW	R24,4
     43C 2DE6      MOV	R30,R6
     43D 27FF      CLR	R31
     43E 0FE8      ADD	R30,R24
     43F 1FF9      ADC	R31,R25
     440 8220      STD	Z+0,R2
(0032)         datainttmp /= 10;
     441 E04A      LDI	R20,0xA
     442 E050      LDI	R21,0
     443 E060      LDI	R22,0
     444 E070      LDI	R23,0
     445 8108      LDD	R16,Y+0
     446 8119      LDD	R17,Y+1
     447 812A      LDD	R18,Y+2
     448 813B      LDD	R19,Y+3
     449 937A      ST	R23,-Y
     44A 936A      ST	R22,-Y
     44B 935A      ST	R21,-Y
     44C 934A      ST	R20,-Y
     44D 940E 06CE CALL	div32s
     44F 8308      STD	Y+0,R16
     450 8319      STD	Y+1,R17
     451 832A      STD	Y+2,R18
     452 833B      STD	Y+3,R19
     453 8028      LDD	R2,Y+0
     454 8039      LDD	R3,Y+1
     455 804A      LDD	R4,Y+2
     456 805B      LDD	R5,Y+3
     457 9488      BCLR	0
     458 2022      TST	R2
     459 0432      CPC	R3,R2
     45A 0442      CPC	R4,R2
     45B 0452      CPC	R5,R2
     45C F009      BEQ	0x045E
     45D CFBE      RJMP	0x041C
(0033)     }
(0034) 
(0035)     if( dataint > 0 )          //如果要转换的整型数据>0
     45E E040      LDI	R20,0
     45F E050      LDI	R21,0
     460 E060      LDI	R22,0
     461 E070      LDI	R23,0
     462 A02C      LDD	R2,Y+36
     463 A03D      LDD	R3,Y+37
     464 A04E      LDD	R4,Y+38
     465 A05F      LDD	R5,Y+39
     466 1542      CP	R20,R2
     467 0553      CPC	R21,R3
     468 0564      CPC	R22,R4
     469 0575      CPC	R23,R5
     46A F52C      BGE	0x0490
(0036)     {
(0037)         k1 = n - 1;
     46B 8D89      LDD	R24,Y+25
     46C 5081      SUBI	R24,1
     46D 2EC8      MOV	R12,R24
(0038)         k2 = n;
     46E 8CE9      LDD	R14,Y+25
(0039) 
(0040)         for( i = 0; i < k2; i++, k1-- )
     46F 2400      CLR	R0
     470 8E08      STD	Y+24,R0
     471 C012      RJMP	0x0484
(0041)         {
(0042)             datachar2[k1] = datachar1[i];               //将数字符串倒过来
     472 01CE      MOVW	R24,R28
     473 9604      ADIW	R24,4
     474 8DE8      LDD	R30,Y+24
     475 27FF      CLR	R31
     476 0FE8      ADD	R30,R24
     477 1FF9      ADC	R31,R25
     478 8020      LDD	R2,Z+0
     479 01CE      MOVW	R24,R28
     47A 960E      ADIW	R24,0xE
     47B 2DEC      MOV	R30,R12
     47C 27FF      CLR	R31
     47D 0FE8      ADD	R30,R24
     47E 1FF9      ADC	R31,R25
     47F 8220      STD	Z+0,R2
     480 8C08      LDD	R0,Y+24
     481 9403      INC	R0
     482 8E08      STD	Y+24,R0
     483 94CA      DEC	R12
     484 8C08      LDD	R0,Y+24
     485 140E      CP	R0,R14
     486 F358      BCS	0x0472
(0043)         }
(0044)         datachar2[n] = '\0';      //字符串结束标志
     487 01CE      MOVW	R24,R28
     488 960E      ADIW	R24,0xE
     489 8DE9      LDD	R30,Y+25
     48A 27FF      CLR	R31
     48B 0FE8      ADD	R30,R24
     48C 1FF9      ADC	R31,R25
     48D 2422      CLR	R2
     48E 8220      STD	Z+0,R2
(0045)     }
     48F C042      RJMP	0x04D2
(0046) 
(0047)     else if( dataint < 0 )       //<0
     490 E040      LDI	R20,0
     491 E050      LDI	R21,0
     492 E060      LDI	R22,0
     493 E070      LDI	R23,0
     494 A02C      LDD	R2,Y+36
     495 A03D      LDD	R3,Y+37
     496 A04E      LDD	R4,Y+38
     497 A05F      LDD	R5,Y+39
     498 1624      CP	R2,R20
     499 0635      CPC	R3,R21
     49A 0646      CPC	R4,R22
     49B 0657      CPC	R5,R23
     49C F53C      BGE	0x04C4
(0048)     {
(0049)         k1 = n;
     49D 8CC9      LDD	R12,Y+25
(0050)         k2 = n + 1;
     49E 2D8C      MOV	R24,R12
     49F 5F8F      SUBI	R24,0xFF
     4A0 2EE8      MOV	R14,R24
(0051) 
(0052)         for( i = 0; i < k2; i++, k1-- )
     4A1 2400      CLR	R0
     4A2 8E08      STD	Y+24,R0
     4A3 C012      RJMP	0x04B6
(0053)         {
(0054)             datachar2[k1] = datachar1[i];
     4A4 01CE      MOVW	R24,R28
     4A5 9604      ADIW	R24,4
     4A6 8DE8      LDD	R30,Y+24
     4A7 27FF      CLR	R31
     4A8 0FE8      ADD	R30,R24
     4A9 1FF9      ADC	R31,R25
     4AA 8020      LDD	R2,Z+0
     4AB 01CE      MOVW	R24,R28
     4AC 960E      ADIW	R24,0xE
     4AD 2DEC      MOV	R30,R12
     4AE 27FF      CLR	R31
     4AF 0FE8      ADD	R30,R24
     4B0 1FF9      ADC	R31,R25
     4B1 8220      STD	Z+0,R2
     4B2 8C08      LDD	R0,Y+24
     4B3 9403      INC	R0
     4B4 8E08      STD	Y+24,R0
     4B5 94CA      DEC	R12
     4B6 8C08      LDD	R0,Y+24
     4B7 140E      CP	R0,R14
     4B8 F358      BCS	0x04A4
(0055)         }
(0056)         datachar2[n + 1] = '\0';
     4B9 01CE      MOVW	R24,R28
     4BA 960F      ADIW	R24,0xF
     4BB 8DE9      LDD	R30,Y+25
     4BC 27FF      CLR	R31
     4BD 0FE8      ADD	R30,R24
     4BE 1FF9      ADC	R31,R25
     4BF 2422      CLR	R2
     4C0 8220      STD	Z+0,R2
(0057)         datachar2[0] = '-';      //加上负号
     4C1 E28D      LDI	R24,0x2D
     4C2 878E      STD	Y+14,R24
(0058)     }
     4C3 C00E      RJMP	0x04D2
(0059) 
(0060)     else if( dataint == 0 )        //=0
     4C4 A02C      LDD	R2,Y+36
     4C5 A03D      LDD	R3,Y+37
     4C6 A04E      LDD	R4,Y+38
     4C7 A05F      LDD	R5,Y+39
     4C8 9488      BCLR	0
     4C9 2022      TST	R2
     4CA 0432      CPC	R3,R2
     4CB 0442      CPC	R4,R2
     4CC 0452      CPC	R5,R2
     4CD F421      BNE	0x04D2
(0061)     {
(0062)         datachar2[0] = 0x30;
     4CE E380      LDI	R24,0x30
     4CF 878E      STD	Y+14,R24
(0063)         datachar2[1] = '\0';
     4D0 2422      CLR	R2
     4D1 862F      STD	Y+15,R2
(0064)     }
(0065) 
(0066)     p1 = datachar2;
     4D2 01CE      MOVW	R24,R28
     4D3 960E      ADIW	R24,0xE
     4D4 015C      MOVW	R10,R24
(0067) 
(0068)     strcpy( p, p1 );
     4D5 019C      MOVW	R18,R24
     4D6 A508      LDD	R16,Y+40
     4D7 A519      LDD	R17,Y+41
     4D8 940E 06AE CALL	_strcpy
     4DA 966A      ADIW	R28,0x1A
     4DB 940E 0766 CALL	pop_xgsetF0FC
     4DD 9624      ADIW	R28,4
     4DE 9508      RET
_float_2_string:
  flag2                --> R12
  flag1                --> R14
  k                    --> R10
  dataftmp             --> Y,+12
  datastr1             --> Y,+2
  i                    --> R20
  p                    --> R22
  datastr              --> Y,+30
  dataf                --> Y,+26
     4DF 940E 06C3 CALL	push_arg4
     4E1 940E 0771 CALL	push_xgsetF0FC
     4E3 9760      SBIW	R28,0x10
     4E4 A168      LDD	R22,Y+32
(0069) }
(0070) 
(0071) /*****************************************
(0072) ** 将一个浮点型数据转化为字符串
(0073) ** 入口参数 要转换的浮点数: dataf, 数组datastr[10], 小数位数 P
(0074) ** 最好小数位数不是
(0075) ** 改变思路:浮点数 --> 整数 -->字符串-->根据各种类型的浮点数不同调整字符位置
(0076) ** 可以转换小于0的浮点数
(0077) *****************************************/
(0078) void float_2_string( float dataf, char *datastr, uchar p )
(0079) {
(0080)     float dataftmp  = dataf;
     4E5 8C2A      LDD	R2,Y+26
     4E6 8C3B      LDD	R3,Y+27
     4E7 8C4C      LDD	R4,Y+28
     4E8 8C5D      LDD	R5,Y+29
     4E9 862C      STD	Y+12,R2
     4EA 863D      STD	Y+13,R3
     4EB 864E      STD	Y+14,R4
     4EC 865F      STD	Y+15,R5
(0081)     char datastr1[10];
(0082)     uchar flag1 = 0;
     4ED 24EE      CLR	R14
(0083)     uchar flag2 = 0;
     4EE 24CC      CLR	R12
(0084)     uchar k;
(0085)     uchar i = 0;
     4EF 2744      CLR	R20
(0086) 
(0087)     if( (long int)dataf == 0 )       // dataf为 -1 --- 1 之间的数
     4F0 8D0A      LDD	R16,Y+26
     4F1 8D1B      LDD	R17,Y+27
     4F2 8D2C      LDD	R18,Y+28
     4F3 8D3D      LDD	R19,Y+29
     4F4 940E 087E CALL	fpint
     4F6 9488      BCLR	0
     4F7 2300      TST	R16
     4F8 0710      CPC	R17,R16
     4F9 0720      CPC	R18,R16
     4FA 0730      CPC	R19,R16
     4FB F009      BEQ	0x04FD
     4FC C03E      RJMP	0x053B
(0088)     {
(0089)         dataftmp += 2;          //随便一个整数 只是为了扩大为首位不为0的数
     4FD 842C      LDD	R2,Y+12
     4FE 843D      LDD	R3,Y+13
     4FF 844E      LDD	R4,Y+14
     500 845F      LDD	R5,Y+15
     501 E600      LDI	R16,0x60
     502 E010      LDI	R17,0
     503 940E 07EC CALL	lpm32
     505 933A      ST	R19,-Y
     506 932A      ST	R18,-Y
     507 931A      ST	R17,-Y

⌨️ 快捷键说明

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