📄 lcd.s
字号:
ldd R3,y+36
ldd R4,y+37
ldd R5,y+38
std y+1,R2
std y+2,R3
std y+3,R4
std y+4,R5
xjmp L33
L32:
.dbline 184
;
; while( datainttmp != 0 )
; {
.dbline 185
; datachar1[n++] = ( datainttmp % 10 ) + 0x30; //转换为字符
mov R2,R10
clr R3
movw R6,R2
mov R24,R2
subi R24,255 ; addi 1
mov R10,R24
ldi R24,10
ldi R25,0
ldi R26,0
ldi R27,0
ldd R16,y+1
ldd R17,y+2
ldd R18,y+3
ldd R19,y+4
st -y,R27
st -y,R26
st -y,R25
st -y,R24
xcall mod32s
movw R2,R16
movw R4,R18
ldi R24,48
ldi R25,0
ldi R26,0
ldi R27,0
add R2,R24
adc R3,R25
adc R4,R26
adc R5,R27
movw R24,R28
adiw R24,5
mov R30,R6
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 186
; datainttmp /= 10;
ldi R24,10
ldi R25,0
ldi R26,0
ldi R27,0
ldd R16,y+1
ldd R17,y+2
ldd R18,y+3
ldd R19,y+4
st -y,R27
st -y,R26
st -y,R25
st -y,R24
xcall div32s
std y+1,R16
std y+2,R17
std y+3,R18
std y+4,R19
.dbline 187
; }
L33:
.dbline 183
ldd R2,y+1
ldd R3,y+2
ldd R4,y+3
ldd R5,y+4
clc
tst R2
cpc R3,R2
cpc R4,R2
cpc R5,R2
breq X14
xjmp L32
X14:
X10:
.dbline 189
;
; if( dataint != 0 ) //*/*//*/
ldd R2,y+35
ldd R3,y+36
ldd R4,y+37
ldd R5,y+38
clc
tst R2
cpc R3,R2
cpc R4,R2
cpc R5,R2
brne X15
xjmp L35
X15:
X11:
.dbline 190
; {
.dbline 191
; k = n - 1;
mov R22,R10
subi R22,1
.dbline 192
; kk = n;
mov R14,R10
.dbline 194
;
; for( i = 0; i < kk; i++, k-- )
clr R12
xjmp L40
L37:
.dbline 195
; {
.dbline 196
; datachar2[k] = datachar1[i]; //将数字符串倒过来
movw R24,R28
adiw R24,5
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
movw R24,R28
adiw R24,13
mov R30,R22
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 197
; }
L38:
.dbline 194
inc R12
dec R22
L40:
.dbline 194
cp R12,R14
brlo L37
X12:
.dbline 199
;
; LCD_set_rc( r, c );
mov R18,R20
ldd R16,y+31
xcall _LCD_set_rc
.dbline 200
; for( i = 0; i < kk; i++ )
clr R12
xjmp L44
L41:
.dbline 201
; {
.dbline 202
; LCD_write_char( r, c++, datachar2[i] );
movw R24,R28
adiw R24,13
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
std y+0,R2
mov R2,R20
subi R20,255 ; addi 1
mov R18,R2
ldd R16,y+31
xcall _LCD_write_char
.dbline 203
; }
L42:
.dbline 200
inc R12
L44:
.dbline 200
cp R12,R14
brlo L41
X13:
.dbline 204
; }
xjmp L36
L35:
.dbline 207
;
; else
; LCD_write_char( r, c, '0' );
ldi R24,48
std y+0,R24
mov R18,R20
ldd R16,y+31
xcall _LCD_write_char
L36:
.dbline -2
L31:
.dbline 0 ; func end
adiw R28,21
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym l datachar2 13 A[8:8]c
.dbsym r kk 14 c
.dbsym r k 22 c
.dbsym r n 10 c
.dbsym l datachar1 5 A[8:8]c
.dbsym l datainttmp 1 L
.dbsym r i 12 c
.dbsym l dataint 35 L
.dbsym r c 20 c
.dbsym l r 31 c
.dbend
.dbfunc e LCD_write_datafloat _LCD_write_datafloat fV
; datawholetmp -> y+34
; xiaoxhu -> <dead>
; datatemp2_f -> y+30
; xiaoshu_n -> R10
; whole_fact_n -> R10
; zhengshu_no -> R10
; datawhole_n -> R10
; datatemp1_f -> y+26
; zhengshu_n -> R20
; zhengshu -> R12,R13
; ling_n -> R22
; xiaoshu_act_n -> R10
; n -> y+41
; datachar2 -> y+17
; datachar1 -> y+8
; kk -> y+40
; k -> y+39
; datawhole -> y+4
; i -> y+38
; mm -> R14,R15
; p -> y+60
; datafloat -> y+56
; c -> y+54
; r -> y+52
.even
_LCD_write_datafloat::
xcall push_arg4
xcall push_xgsetF0FC
sbiw R28,42
ldd R14,y+62
ldd R15,y+63
.dbline -1
.dbline 218
; }
;
; //==========================================
; //函数名称:显示一个实型数据
; //函数作用: 在指定位置显示实型数据
; //入口参数: 行位置r, 列位置c, 浮点型数据datafloat, 放大倍p, 倍数mm,
; //返回类型:无
; //示例 :LCD_write_datafloat( 1, 2, 0.0123, 10000, 4)
; //==========================================
; void LCD_write_datafloat( uchar r, uchar c, float datafloat, uint p, uint mm)
; {
.dbline 219
; uchar zhengshu_no = 0;
.dbline 225
; uchar whole_fact_n;
; uchar xiaoshu_act_n;
; uchar ling_n;
;
;
; uchar i = 0;
clr R0
std y+38,R0
.dbline 226
; uchar n = 0;
std y+41,R0
.dbline 227
; uchar k = 0;
std y+39,R0
.dbline 228
; uchar kk = 0;
std y+40,R0
.dbline 237
; uchar datachar1[9];
; uchar datachar2[9];
; uint zhengshu; //定义变量zhengshu来存放实数的整数部分
; uint xiaoxhu; //定义变量xiaoshu来存放实数的小数部分
;
; long int datawhole;
; long int datawholetmp;
;
; uchar zhengshu_n = 0; //定义整数部分整数位数
.dbline 238
; uchar xiaoshu_n = 0; //定义小数部分整数位数
.dbline 239
; uchar datawhole_n = 0; //定义实数放大后的位数
.dbline 243
; float datatemp1_f;
; float datatemp2_f;
;
; datatemp1_f = datafloat;
ldd R2,y+56
ldd R3,y+57
ldd R4,y+58
ldd R5,y+59
std y+26,R2
std y+27,R3
std y+28,R4
std y+29,R5
.dbline 244
; datatemp2_f = datafloat;
ldd R2,y+56
ldd R3,y+57
ldd R4,y+58
ldd R5,y+59
std y+30,R2
std y+31,R3
std y+32,R4
std y+33,R5
.dbline 246
;
; zhengshu = ( uint )datatemp1_f; //取实数的整数部分
ldd R16,y+26
ldd R17,y+27
ldd R18,y+28
ldd R19,y+29
xcall fpint
movw R12,R16
.dbline 248
;
; zhengshu_n = lengh_longint( zhengshu ); //如果整数部分为0, 则只有一位整数, 取整数位数
movw R16,R12
movw R18,R14
clr R18
clr R19
xcall _lengh_longint
mov R20,R16
.dbline 250
;
; datawhole = datatemp1_f * p; //将实数放大,变成整数, datawhole为放大后的数
ldd R2,y+26
ldd R3,y+27
ldd R4,y+28
ldd R5,y+29
ldd R16,y+60
ldd R17,y+61
xcall uint2fp
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpmule2
xcall fpint
std y+4,R16
std y+5,R17
std y+6,R18
std y+7,R19
.dbline 252
;
; datawhole_n = lengh_longint( datawhole ); //如果整数部分为0, datawhole_n 不一定等于小数的位数
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
xcall _lengh_longint
.dbline 254
;
; whole_fact_n = mm + zhengshu_n; ///*/*实际
mov R2,R20
clr R3
mov R10,R14
add R10,R2
adc R11,R3
.dbline 256
;
; if( zhengshu == 0 )
tst R12
brne L46
tst R13
brne L46
X16:
.dbline 257
; {
.dbline 258
; xiaoshu_act_n = lengh_longint( datawhole );
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
xcall _lengh_longint
mov R10,R16
.dbline 259
; ling_n = mm - xiaoshu_act_n; //如果整数为0, 小数有效位为xiaoshu_act_n
mov R2,R10
clr R3
mov R22,R14
sub R22,R2
sbc R23,R3
.dbline 260
; }
xjmp L47
L46:
.dbline 262
;
; else xiaoshu_act_n = mm;
mov R10,R14
L47:
.dbline 264
;
; ling_n = mm - xiaoshu_act_n; //用ling_0记录小数部分前面0的位数
mov R2,R10
clr R3
mov R22,R14
sub R22,R2
sbc R23,R3
.dbline 266
;
; for( i = 0; i < xiaoshu_act_n; i++ )
clr R0
std y+38,R0
xjmp L51
L48:
.dbline 267
; {
.dbline 268
; datachar1[n++] = ( datawhole % 10 ) + 0x30; //转换为字符
ldd R14,y+41
clr R15
mov R24,R14
subi R24,255 ; addi 1
std y+41,R24
ldi R24,10
ldi R25,0
ldi R26,0
ldi R27,0
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
st -y,R27
st -y,R26
st -y,R25
st -y,R24
xcall mod32s
movw R2,R16
movw R4,R18
ldi R24,48
ldi R25,0
ldi R26,0
ldi R27,0
add R2,R24
adc R3,R25
adc R4,R26
adc R5,R27
movw R24,R28
adiw R24,8
mov R30,R14
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 269
; datawhole /= 10;
ldi R24,10
ldi R25,0
ldi R26,0
ldi R27,0
ldd R16,y+4
ldd R17,y+5
ldd R18,y+6
ldd R19,y+7
st -y,R27
st -y,R26
st -y,R25
st -y,R24
xcall div32s
std y+4,R16
std y+5,R17
std y+6,R18
std y+7,R19
.dbline 270
; }
L49:
.dbline 266
ldd R0,y+38
inc R0
std y+38,R0
L51:
.dbline 266
ldd R0,y+38
cp R0,R10
brsh X21
xjmp L48
X21:
X17:
.dbline 272
;
; k = n - 1;
ldd R24,y+41
subi R24,1
std y+39,R24
.dbline 273
; kk = n; //记录存入的个数
ldd R0,y+41
std y+40,R0
.dbline 275
;
; for( i = 0; i < kk; i++, k-- )
clr R0
std y+38,R0
xjmp L55
L52:
.dbline 276
; {
.dbline 277
; datachar2[k] = datachar1[i]; //将数字符串倒过来
movw R24,R28
adiw R24,8
ldd R30,y+38
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
movw R24,R28
adiw R24,17
ldd R30,y+39
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 278
; }
L53:
.dbline 275
ldd R0,y+38
inc R0
std y+38,R0
ldd R0,y+39
dec R0
std y+39,R0
L55:
.dbline 275
ldd R0,y+38
ldd R16,y+40
cp R0,R16
brlo L52
X18:
.dbline 280
;
; LCD_write_datalongint( r, c, zhengshu ); //显示整数部分
movw R2,R12
clr R4
clr R5
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
ldd R18,y+54
ldd R16,y+52
xcall _LCD_write_datalongint
.dbline 281
; c = c + zhengshu_n;
ldd R0,y+54
add R0,R20
std y+54,R0
.dbline 282
; LCD_write_char( r, c, '.' );
ldi R24,46
std y+0,R24
mov R18,R0
ldd R16,y+52
xcall _LCD_write_char
.dbline 283
; c++;
ldd R0,y+54
inc R0
std y+54,R0
.dbline 284
; for( i = 0; i < ling_n; i++ )
clr R0
std y+38,R0
xjmp L59
L56:
.dbline 285
; {
.dbline 286
; LCD_write_char( r, c++, '0' );
ldi R24,48
std y+0,R24
ldd R20,y+54
mov R24,R20
subi R24,255 ; addi 1
std y+54,R24
mov R18,R20
ldd R16,y+52
xcall _LCD_write_char
.dbline 287
; }
L57:
.dbline 284
ldd R0,y+38
inc R0
std y+38,R0
L59:
.dbline 284
ldd R0,y+38
cp R0,R22
brlo L56
X19:
.dbline 289
;
; for( i = 0; i < kk; i++ )
clr R0
std y+38,R0
xjmp L63
L60:
.dbline 290
; {
.dbline 291
; LCD_write_char( r, c++, datachar2[i] );
movw R24,R28
adiw R24,17
ldd R30,y+38
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
std y+0,R2
ldd R22,y+54
mov R24,R22
subi R24,255 ; addi 1
std y+54,R24
mov R18,R22
ldd R16,y+52
xcall _LCD_write_char
.dbline 292
; }
L61:
.dbline 289
ldd R0,y+38
inc R0
std y+38,R0
L63:
.dbline 289
ldd R0,y+38
ldd R16,y+40
cp R0,R16
brlo L60
X20:
.dbline -2
L45:
.dbline 0 ; func end
adiw R28,42
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym l datawholetmp 34 L
.dbsym l xiaoxhu 5 i
.dbsym l datatemp2_f 30 D
.dbsym r xiaoshu_n 10 c
.dbsym r whole_fact_n 10 c
.dbsym r zhengshu_no 10 c
.dbsym r datawhole_n 10 c
.dbsym l datatemp1_f 26 D
.dbsym r zhengshu_n 20 c
.dbsym r zhengshu 12 i
.dbsym r ling_n 22 c
.dbsym r xiaoshu_act_n 10 c
.dbsym l n 41 c
.dbsym l datachar2 17 A[9:9]c
.dbsym l datachar1 8 A[9:9]c
.dbsym l kk 40 c
.dbsym l k 39 c
.dbsym l datawhole 4 L
.dbsym l i 38 c
.dbsym r mm 14 i
.dbsym l p 60 i
.dbsym l datafloat 56 D
.dbsym l c 54 c
.dbsym l r 52 c
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -