📄 nrf.lst
字号:
310 8119 LDD R17,Y+1
311 812A LDD R18,Y+2
312 813B LDD R19,Y+3
313 93BA ST R27,-Y
314 93AA ST R26,-Y
315 939A ST R25,-Y
316 938A ST R24,-Y
317 940E 04DE CALL div32s
319 8308 STD Y+0,R16
31A 8319 STD Y+1,R17
31B 832A STD Y+2,R18
31C 833B STD Y+3,R19
(0155) data_n++;
31D 9543 INC R20
31E 8028 LDD R2,Y+0
31F 8039 LDD R3,Y+1
320 804A LDD R4,Y+2
321 805B LDD R5,Y+3
322 9488 BCLR 0
323 2022 TST R2
324 0432 CPC R3,R2
325 0442 CPC R4,R2
326 0452 CPC R5,R2
327 F719 BNE 0x030B
(0156) }
(0157)
(0158) if( datalongint == 0 )
328 802D LDD R2,Y+5
329 803E LDD R3,Y+6
32A 804F LDD R4,Y+7
32B 8458 LDD R5,Y+8
32C 9488 BCLR 0
32D 2022 TST R2
32E 0432 CPC R3,R2
32F 0442 CPC R4,R2
330 0452 CPC R5,R2
331 F409 BNE 0x0333
(0159) {
(0160) data_n = 1;
332 E041 LDI R20,1
(0161) }
(0162)
(0163) return data_n;
333 2F04 MOV R16,R20
334 9624 ADIW R28,4
335 9149 LD R20,Y+
336 9624 ADIW R28,4
337 9508 RET
_LCD_write_datalongint:
datachar2 --> Y,+13
kk --> R14
k --> R22
n --> R10
datachar1 --> Y,+5
datainttmp --> Y,+1
i --> R12
dataint --> Y,+35
c --> R20
r --> Y,+31
338 940E 04D3 CALL push_arg4
33A 940E 054D CALL push_xgsetF0FC
33C 2F42 MOV R20,R18
33D 9765 SBIW R28,0x15
(0164) }
(0165)
(0166)
(0167) //==========================================
(0168) //函数名称:显示一个整型数据
(0169) //函数作用: 在指定位置显示整数
(0170) //入口参数: 行位置r, 列位置c, 字符数组dataint[]
(0171) //返回类型:无
(0172) //==========================================
(0173) void LCD_write_datalongint( uchar r, uchar c, long int dataint )
(0174) {
(0175) uchar datachar1[8];
(0176) uchar datachar2[8];
(0177) uchar n = 0;
33E 24AA CLR R10
(0178) uchar i =0;
33F 24CC CLR R12
(0179) uchar k =0; //取字符个数
340 2766 CLR R22
(0180) uchar kk = 0; //取字符个数
341 24EE CLR R14
(0181) long int datainttmp = dataint;
342 A02B LDD R2,Y+35
343 A03C LDD R3,Y+36
344 A04D LDD R4,Y+37
345 A05E LDD R5,Y+38
346 8229 STD Y+1,R2
347 823A STD Y+2,R3
348 824B STD Y+3,R4
349 825C STD Y+4,R5
34A C037 RJMP 0x0382
(0182)
(0183) while( datainttmp != 0 )
(0184) {
(0185) datachar1[n++] = ( datainttmp % 10 ) + 0x30; //转换为字符
34B 2C2A MOV R2,R10
34C 2433 CLR R3
34D 0131 MOVW R6,R2
34E 2D82 MOV R24,R2
34F 5F8F SUBI R24,0xFF
350 2EA8 MOV R10,R24
351 E08A LDI R24,0xA
352 E090 LDI R25,0
353 E0A0 LDI R26,0
354 E0B0 LDI R27,0
355 8109 LDD R16,Y+1
356 811A LDD R17,Y+2
357 812B LDD R18,Y+3
358 813C LDD R19,Y+4
359 93BA ST R27,-Y
35A 93AA ST R26,-Y
35B 939A ST R25,-Y
35C 938A ST R24,-Y
35D 940E 04E0 CALL mod32s
35F 0118 MOVW R2,R16
360 0129 MOVW R4,R18
361 E380 LDI R24,0x30
362 E090 LDI R25,0
363 E0A0 LDI R26,0
364 E0B0 LDI R27,0
365 0E28 ADD R2,R24
366 1E39 ADC R3,R25
367 1E4A ADC R4,R26
368 1E5B ADC R5,R27
369 01CE MOVW R24,R28
36A 9605 ADIW R24,5
36B 2DE6 MOV R30,R6
36C 27FF CLR R31
36D 0FE8 ADD R30,R24
36E 1FF9 ADC R31,R25
36F 8220 STD Z+0,R2
(0186) datainttmp /= 10;
370 E08A LDI R24,0xA
371 E090 LDI R25,0
372 E0A0 LDI R26,0
373 E0B0 LDI R27,0
374 8109 LDD R16,Y+1
375 811A LDD R17,Y+2
376 812B LDD R18,Y+3
377 813C LDD R19,Y+4
378 93BA ST R27,-Y
379 93AA ST R26,-Y
37A 939A ST R25,-Y
37B 938A ST R24,-Y
37C 940E 04DE CALL div32s
37E 8309 STD Y+1,R16
37F 831A STD Y+2,R17
380 832B STD Y+3,R18
381 833C STD Y+4,R19
382 8029 LDD R2,Y+1
383 803A LDD R3,Y+2
384 804B LDD R4,Y+3
385 805C LDD R5,Y+4
386 9488 BCLR 0
387 2022 TST R2
388 0432 CPC R3,R2
389 0442 CPC R4,R2
38A 0452 CPC R5,R2
38B F009 BEQ 0x038D
38C CFBE RJMP 0x034B
(0187) }
(0188)
(0189) if( dataint != 0 ) //*/*//*/
38D A02B LDD R2,Y+35
38E A03C LDD R3,Y+36
38F A04D LDD R4,Y+37
390 A05E LDD R5,Y+38
391 9488 BCLR 0
392 2022 TST R2
393 0432 CPC R3,R2
394 0442 CPC R4,R2
395 0452 CPC R5,R2
396 F409 BNE 0x0398
397 C02D RJMP 0x03C5
(0190) {
(0191) k = n - 1;
398 2D6A MOV R22,R10
399 5061 SUBI R22,1
(0192) kk = n;
39A 2CEA MOV R14,R10
(0193)
(0194) for( i = 0; i < kk; i++, k-- )
39B 24CC CLR R12
39C C010 RJMP 0x03AD
(0195) {
(0196) datachar2[k] = datachar1[i]; //将数字符串倒过来
39D 01CE MOVW R24,R28
39E 9605 ADIW R24,5
39F 2DEC MOV R30,R12
3A0 27FF CLR R31
3A1 0FE8 ADD R30,R24
3A2 1FF9 ADC R31,R25
3A3 8020 LDD R2,Z+0
3A4 01CE MOVW R24,R28
3A5 960D ADIW R24,0xD
3A6 2FE6 MOV R30,R22
3A7 27FF CLR R31
3A8 0FE8 ADD R30,R24
3A9 1FF9 ADC R31,R25
3AA 8220 STD Z+0,R2
3AB 94C3 INC R12
3AC 956A DEC R22
3AD 14CE CP R12,R14
3AE F370 BCS 0x039D
(0197) }
(0198)
(0199) LCD_set_rc( r, c );
3AF 2F24 MOV R18,R20
3B0 8D0F LDD R16,Y+31
3B1 DED9 RCALL _LCD_set_rc
(0200) for( i = 0; i < kk; i++ )
3B2 24CC CLR R12
3B3 C00E RJMP 0x03C2
(0201) {
(0202) LCD_write_char( r, c++, datachar2[i] );
3B4 01CE MOVW R24,R28
3B5 960D ADIW R24,0xD
3B6 2DEC MOV R30,R12
3B7 27FF CLR R31
3B8 0FE8 ADD R30,R24
3B9 1FF9 ADC R31,R25
3BA 8020 LDD R2,Z+0
3BB 8228 STD Y+0,R2
3BC 2E24 MOV R2,R20
3BD 5F4F SUBI R20,0xFF
3BE 2D22 MOV R18,R2
3BF 8D0F LDD R16,Y+31
3C0 DEF2 RCALL _LCD_write_char
3C1 94C3 INC R12
3C2 14CE CP R12,R14
3C3 F380 BCS 0x03B4
(0203) }
(0204) }
3C4 C005 RJMP 0x03CA
(0205)
(0206) else
(0207) LCD_write_char( r, c, '0' );
3C5 E380 LDI R24,0x30
3C6 8388 STD Y+0,R24
3C7 2F24 MOV R18,R20
3C8 8D0F LDD R16,Y+31
3C9 DEE9 RCALL _LCD_write_char
3CA 9665 ADIW R28,0x15
3CB 940E 0542 CALL pop_xgsetF0FC
3CD 9624 ADIW R28,4
3CE 9508 RET
_LCD_write_datafloat:
datawholetmp --> Y,+34
xiaoxhu --> Y,+5
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
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
p --> Y,+60
datafloat --> Y,+56
c --> Y,+54
r --> Y,+52
3CF 940E 04D3 CALL push_arg4
3D1 940E 054D CALL push_xgsetF0FC
3D3 97AA SBIW R28,0x2A
3D4 ACEE LDD R14,Y+62
3D5 ACFF LDD R15,Y+63
(0208) }
(0209)
(0210) //==========================================
(0211) //函数名称:显示一个实型数据
(0212) //函数作用: 在指定位置显示实型数据
(0213) //入口参数: 行位置r, 列位置c, 浮点型数据datafloat, 放大倍p, 倍数mm,
(0214) //返回类型:无
(0215) //示例 :LCD_write_datafloat( 1, 2, 0.0123, 10000, 4)
(0216) //==========================================
(0217) void LCD_write_datafloat( uchar r, uchar c, float datafloat, uint p, uint mm)
(0218) {
(0219) uchar zhengshu_no = 0;
(0220) uchar whole_fact_n;
(0221) uchar xiaoshu_act_n;
(0222) uchar ling_n;
(0223)
(0224)
(0225) uchar i = 0;
3D6 2400 CLR R0
3D7 A20E STD Y+38,R0
(0226) uchar n = 0;
3D8 A609 STD Y+41,R0
(0227) uchar k = 0;
3D9 A20F STD Y+39,R0
(0228) uchar kk = 0;
3DA A608 STD Y+40,R0
(0229) uchar datachar1[9];
(0230) uchar datachar2[9];
(0231) uint zhengshu; //定义变量zhengshu来存放实数的整数部分
(0232) uint xiaoxhu; //定义变量xiaoshu来存放实数的小数部分
(0233)
(0234) long int datawhole;
(0235) long int datawholetmp;
(0236)
(0237) uchar zhengshu_n = 0; //定义整数部分整数位数
(0238) uchar xiaoshu_n = 0; //定义小数部分整数位数
(0239) uchar datawhole_n = 0; //定义实数放大后的位数
(0240) float datatemp1_f;
(0241) float datatemp2_f;
(0242)
(0243) datatemp1_f = datafloat;
3DB AC28 LDD R2,Y+56
3DC AC39 LDD R3,Y+57
3DD AC4A LDD R4,Y+58
3DE AC5B LDD R5,Y+59
3DF 8E2A STD Y+26,R2
3E0 8E3B STD Y+27,R3
3E1 8E4C STD Y+28,R4
3E2 8E5D STD Y+29,R5
(0244) datatemp2_f = datafloat;
3E3 AC28 LDD R2,Y+56
3E4 AC39 LDD R3,Y+57
3E5 AC4A LDD R4,Y+58
3E6 AC5B LDD R5,Y+59
3E7 8E2E STD Y+30,R2
3E8 8E3F STD Y+31,R3
3E9 A248 STD Y+32,R4
3EA A259 STD Y+33,R5
(0245)
(0246) zhengshu = ( uint )datatemp1_f; //取实数的整数部分
3EB 8D0A LDD R16,Y+26
3EC 8D1B LDD R17,Y+27
3ED 8D2C LDD R18,Y+28
3EE 8D3D LDD R19,Y+29
3EF 940E 0599 CALL fpint
3F1 0168 MOVW R12,R16
(0247)
(0248) zhengshu_n = lengh_longint( zhengshu ); //如果整数部分为0, 则只有一位整数, 取整数位数
3F2 0186 MOVW R16,R12
3F3 0197 MOVW R18,R14
3F4 2722 CLR R18
3F5 2733 CLR R19
3F6 DF06 RCALL _lengh_longint
3F7 2F40 MOV R20,R16
(0249)
(0250) datawhole = datatemp1_f * p; //将实数放大,变成整数, datawhole为放大后的数
3F8 8C2A LDD R2,Y+26
3F9 8C3B LDD R3,Y+27
3FA 8C4C LDD R4,Y+28
3FB 8C5D LDD R5,Y+29
3FC AD0C LDD R16,Y+60
3FD AD1D LDD R17,Y+61
3FE 940E 05C5 CALL uint2fp
400 933A ST R19,-Y
401 932A ST R18,-Y
402 931A ST R17,-Y
403 930A ST R16,-Y
404 0181 MOVW R16,R2
405 0192 MOVW R18,R4
406 940E 06BD CALL fpmule2
408 940E 0599 CALL fpint
40A 830C STD Y+4,R16
40B 831D STD Y+5,R17
40C 832E STD Y+6,R18
40D 833F STD Y+7,R19
(0251)
(0252) datawhole_n = lengh_longint( datawhole ); //如果整数部分为0, datawhole_n 不一定等于小数的位数
40E 810C LDD R16,Y+4
40F 811D LDD R17,Y+5
410 812E LDD R18,Y+6
411 813F LDD R19,Y+7
412 DEEA RCALL _lengh_longint
(0253)
(0254) whole_fact_n = mm + zhengshu_n; ///*/*实际
413 2E24 MOV R2,R20
414 2433 CLR R3
415 2CAE MOV R10,R14
416 0CA2 ADD R10,R2
417 1CB3 ADC R11,R3
(0255)
(0256) if( zhengshu == 0 )
418 20CC TST R12
419 F471 BNE 0x0428
41A 20DD TST R13
41B F461 BNE 0x0428
(0257) {
(0258) xiaoshu_act_n = lengh_longint( datawhole );
41C 810C LDD R16,Y+4
41D 811D LDD R17,Y+5
41E 812E LDD R18,Y+6
41F 813F LDD R19,Y+7
420 DEDC RCALL _lengh_longint
421 2EA0 MOV R10,R16
(0259) ling_n = mm - xiaoshu_act_n; //如果整数为0, 小数有效位为xiaoshu_act_n
422 2C2A MOV R2,R10
423 2433 CLR R3
424 2D6E MOV R22,R14
425 1962 SUB R22,R2
426 0973 SBC R23,R3
(0260) }
427 C001 RJMP 0x0429
(0261)
(0262) else xiaoshu_act_n = mm;
428 2CAE MOV R10,R14
(0263)
(0264) ling_n = mm - xiaoshu_act_n; //用ling_0记录小数部分前面0的位数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -