📄 lcd.lis
字号:
01B8 ; else if( dataint == 0 ) //=0
01B8 2CA0 ldd R2,y+36
01BA 3DA0 ldd R3,y+37
01BC 4EA0 ldd R4,y+38
01BE 5FA0 ldd R5,y+39
01C0 8894 clc
01C2 2220 tst R2
01C4 3204 cpc R3,R2
01C6 4204 cpc R4,R2
01C8 5204 cpc R5,R2
01CA 21F4 brne L20
01CC X6:
01CC .dbline 61
01CC ; {
01CC .dbline 62
01CC ; datachar2[0] = 0x30;
01CC 80E3 ldi R24,48
01CE 8E87 std y+14,R24
01D0 .dbline 63
01D0 ; datachar2[1] = '\0';
01D0 2224 clr R2
01D2 2F86 std y+15,R2
01D4 .dbline 64
01D4 ; }
01D4 L20:
01D4 L14:
01D4 L8:
01D4 .dbline 66
01D4 ;
01D4 ; p1 = datachar2;
01D4 CE01 movw R24,R28
01D6 0E96 adiw R24,14
01D8 5C01 movw R10,R24
01DA .dbline 68
01DA ;
01DA ; strcpy( p, p1 );
01DA 9C01 movw R18,R24
01DC 08A5 ldd R16,y+40
01DE 19A5 ldd R17,y+41
01E0 0E940000 xcall _strcpy
01E4 .dbline -2
01E4 L1:
01E4 .dbline 0 ; func end
01E4 6A96 adiw R28,26
01E6 0E940000 xcall pop_xgsetF0FC
01EA 2496 adiw R28,4
01EC 0895 ret
01EE .dbsym r p1 10 pc
01EE .dbsym r k2 14 c
01EE .dbsym l datachar2 14 A[10:10]c
01EE .dbsym l n 25 c
01EE .dbsym r k1 12 c
01EE .dbsym l datachar1 4 A[10:10]c
01EE .dbsym l i 24 c
01EE .dbsym l datainttmp 0 L
01EE .dbsym l p 40 pc
01EE .dbsym l dataint 36 L
01EE .dbend
01EE .dbfunc e float_2_string _float_2_string fV
01EE ; flag2 -> R12
01EE ; flag1 -> R14
01EE ; k -> R10
01EE ; dataftmp -> y+12
01EE ; datastr1 -> y+2
01EE ; i -> R20
01EE ; p -> R22
01EE ; datastr -> y+30
01EE ; dataf -> y+26
.even
01EE _float_2_string::
01EE 0E940000 xcall push_arg4
01F2 0E940000 xcall push_xgsetF0FC
01F6 6097 sbiw R28,16
01F8 68A1 ldd R22,y+32
01FA .dbline -1
01FA .dbline 79
01FA ; }
01FA ;
01FA ; /*****************************************
01FA ; ** 将一个浮点型数据转化为字符串
01FA ; ** 入口参数 要转换的浮点数: dataf, 数组datastr[10], 小数位数 P
01FA ; ** 最好小数位数不是
01FA ; ** 改变思路:浮点数 --> 整数 -->字符串-->根据各种类型的浮点数不同调整字符位置
01FA ; ** 可以转换小于0的浮点数
01FA ; *****************************************/
01FA ; void float_2_string( float dataf, char *datastr, uchar p )
01FA ; {
01FA .dbline 80
01FA ; float dataftmp = dataf;
01FA 2A8C ldd R2,y+26
01FC 3B8C ldd R3,y+27
01FE 4C8C ldd R4,y+28
0200 5D8C ldd R5,y+29
0202 2C86 std y+12,R2
0204 3D86 std y+13,R3
0206 4E86 std y+14,R4
0208 5F86 std y+15,R5
020A .dbline 82
020A ; char datastr1[10];
020A ; uchar flag1 = 0;
020A EE24 clr R14
020C .dbline 83
020C ; uchar flag2 = 0;
020C CC24 clr R12
020E .dbline 85
020E ; uchar k;
020E ; uchar i = 0;
020E 4427 clr R20
0210 .dbline 87
0210 ;
0210 ; if( (long int)dataf == 0 ) // dataf为 -1 --- 1 之间的数
0210 0A8D ldd R16,y+26
0212 1B8D ldd R17,y+27
0214 2C8D ldd R18,y+28
0216 3D8D ldd R19,y+29
0218 0E940000 xcall fpint
021C 8894 clc
021E 0023 tst R16
0220 1007 cpc R17,R16
0222 2007 cpc R18,R16
0224 3007 cpc R19,R16
0226 09F0 breq X15
0228 3EC0 xjmp L24
022A X15:
022A X8:
022A .dbline 88
022A ; {
022A .dbline 89
022A ; dataftmp += 2; //随便一个整数 只是为了扩大为首位不为0的数
022A 2C84 ldd R2,y+12
022C 3D84 ldd R3,y+13
022E 4E84 ldd R4,y+14
0230 5F84 ldd R5,y+15
0232 00E0 ldi R16,<L26
0234 10E0 ldi R17,>L26
0236 0E940000 xcall lpm32
023A 3A93 st -y,R19
023C 2A93 st -y,R18
023E 1A93 st -y,R17
0240 0A93 st -y,R16
0242 8101 movw R16,R2
0244 9201 movw R18,R4
0246 0E940000 xcall fpadd2
024A 0C87 std y+12,R16
024C 1D87 std y+13,R17
024E 2E87 std y+14,R18
0250 3F87 std y+15,R19
0252 .dbline 90
0252 ; flag1 = 1;
0252 EE24 clr R14
0254 E394 inc R14
0256 .dbline 91
0256 ; if( dataf < 0 )
0256 2A8C ldd R2,y+26
0258 3B8C ldd R3,y+27
025A 4C8C ldd R4,y+28
025C 5D8C ldd R5,y+29
025E 00E0 ldi R16,<L29
0260 10E0 ldi R17,>L29
0262 0E940000 xcall lpm32
0266 3A93 st -y,R19
0268 2A93 st -y,R18
026A 1A93 st -y,R17
026C 0A93 st -y,R16
026E 8101 movw R16,R2
0270 9201 movw R18,R4
0272 0E940000 xcall fpcmp2
0276 BCF4 brge L27
0278 X9:
0278 .dbline 92
0278 ; {
0278 .dbline 93
0278 ; flag2 = 1;
0278 CC24 clr R12
027A C394 inc R12
027C .dbline 94
027C ; dataftmp -= 4; //随便一个整数 只是为了扩大为首位不为0的数
027C 2C84 ldd R2,y+12
027E 3D84 ldd R3,y+13
0280 4E84 ldd R4,y+14
0282 5F84 ldd R5,y+15
0284 00E0 ldi R16,<L30
0286 10E0 ldi R17,>L30
0288 0E940000 xcall lpm32
028C 3A93 st -y,R19
028E 2A93 st -y,R18
0290 1A93 st -y,R17
0292 0A93 st -y,R16
0294 8101 movw R16,R2
0296 9201 movw R18,R4
0298 0E940000 xcall fpsub2
029C 0C87 std y+12,R16
029E 1D87 std y+13,R17
02A0 2E87 std y+14,R18
02A2 3F87 std y+15,R19
02A4 .dbline 95
02A4 ; flag1 = 0;
02A4 EE24 clr R14
02A6 .dbline 96
02A6 ; }
02A6 L27:
02A6 .dbline 97
02A6 ; }
02A6 L24:
02A6 .dbline 99
02A6 ;
02A6 ; for( i = 0; i < p + 1; i++ )
02A6 4427 clr R20
02A8 0FC0 xjmp L34
02AA L31:
02AA .dbline 100
02AA ; dataftmp = dataftmp * 10;
02AA 00E0 ldi R16,<L35
02AC 10E0 ldi R17,>L35
02AE 0E940000 xcall lpm32
02B2 CE01 movw R24,R28
02B4 0C96 adiw R24,12
02B6 9A93 st -y,R25
02B8 8A93 st -y,R24
02BA 0E940000 xcall fpmule1
02BE 0C87 std y+12,R16
02C0 1D87 std y+13,R17
02C2 2E87 std y+14,R18
02C4 3F87 std y+15,R19
02C6 L32:
02C6 .dbline 99
02C6 4395 inc R20
02C8 L34:
02C8 .dbline 99
02C8 862F mov R24,R22
02CA 8F5F subi R24,255 ; addi 1
02CC 4817 cp R20,R24
02CE 68F3 brlo L31
02D0 X10:
02D0 .dbline 102
02D0 ;
02D0 ; long_to_string( (long int)dataftmp, datastr1 );
02D0 CE01 movw R24,R28
02D2 0296 adiw R24,2
02D4 9983 std y+1,R25
02D6 8883 std y+0,R24
02D8 0C85 ldd R16,y+12
02DA 1D85 ldd R17,y+13
02DC 2E85 ldd R18,y+14
02DE 3F85 ldd R19,y+15
02E0 0E940000 xcall fpint
02E4 8DDE xcall _long_to_string
02E6 .dbline 103
02E6 ; k = strlen( datastr1 );
02E6 8E01 movw R16,R28
02E8 0E5F subi R16,254 ; offset = 2
02EA 1F4F sbci R17,255
02EC 0E940000 xcall _strlen
02F0 A02E mov R10,R16
02F2 .dbline 105
02F2 ;
02F2 ; for( i = 1; i < p + 1; i++ )
02F2 41E0 ldi R20,1
02F4 13C0 xjmp L39
02F6 L36:
02F6 .dbline 106
02F6 ; *( datastr1 + (k-i) ) = *( datastr1 + (k-i-1) );
02F6 242E mov R2,R20
02F8 3324 clr R3
02FA 4A2C mov R4,R10
02FC 5524 clr R5
02FE 4218 sub R4,R2
0300 5308 sbc R5,R3
0302 CE01 movw R24,R28
0304 0196 adiw R24,1
0306 F201 movw R30,R4
0308 E80F add R30,R24
030A F91F adc R31,R25
030C 2080 ldd R2,z+0
030E CE01 movw R24,R28
0310 0296 adiw R24,2
0312 F201 movw R30,R4
0314 E80F add R30,R24
0316 F91F adc R31,R25
0318 2082 std z+0,R2
031A L37:
031A .dbline 105
031A 4395 inc R20
031C L39:
031C .dbline 105
031C 862F mov R24,R22
031E 8F5F subi R24,255 ; addi 1
0320 4817 cp R20,R24
0322 48F3 brlo L36
0324 X11:
0324 .dbline 108
0324 ;
0324 ; *( datastr1 + (k-i) ) = '.';
0324 242E mov R2,R20
0326 3324 clr R3
0328 EA2D mov R30,R10
032A FF27 clr R31
032C E219 sub R30,R2
032E F309 sbc R31,R3
0330 CE01 movw R24,R28
0332 0296 adiw R24,2
0334 E80F add R30,R24
0336 F91F adc R31,R25
0338 8EE2 ldi R24,46
033A 8083 std z+0,R24
033C .dbline 111
033C ;
033C ;
033C ; if( flag1 ) //如果为0.00820之类的数
033C EE20 tst R14
033E 19F0 breq L41
0340 X12:
0340 .dbline 112
0340 ; {
0340 .dbline 113
0340 ; *datastr1 = '0';
0340 80E3 ldi R24,48
0342 8A83 std y+2,R24
0344 .dbline 114
0344 ; flag1 = 0;
0344 EE24 clr R14
0346 .dbline 115
0346 ; }
0346 L41:
0346 .dbline 117
0346 ;
0346 ; if( flag2 ) //如果为-0.00820之类的数
0346 CC20 tst R12
0348 21F0 breq L43
034A X13:
034A .dbline 118
034A ; {
034A .dbline 119
034A ; *datastr1 = '-';
034A 8DE2 ldi R24,45
034C 8A83 std y+2,R24
034E .dbline 120
034E ; *( datastr1 + 1 ) = '0';
034E 80E3 ldi R24,48
0350 8B83 std y+3,R24
0352 .dbline 121
0352 ; }
0352 L43:
0352 .dbline 123
0352 ;
0352 ; if( p == 0 )
0352 6623 tst R22
0354 61F4 brne L46
0356 X14:
0356 .dbline 124
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -