📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile d:\我的文档\桌面\小车\car1\lcd.c
0000 .dbfunc e long_to_string _long_to_string fV
0000 ; p1 -> R10,R11
0000 ; k2 -> R14
0000 ; datachar2 -> y+14
0000 ; n -> y+25
0000 ; k1 -> R12
0000 ; datachar1 -> y+4
0000 ; i -> y+24
0000 ; datainttmp -> y+0
0000 ; p -> y+40
0000 ; dataint -> y+36
.even
0000 _long_to_string::
0000 0E940000 xcall push_arg4
0004 0E940000 xcall push_xgsetF0FC
0008 6A97 sbiw R28,26
000A .dbline -1
000A .dbline 12
000A ; #define _LCD_C_
000A ; #include "LCD.h"
000A ; #include <iom16v.h>
000A ;
000A ; /*****************************************
000A ; ** 将一个整型数据转化为字符串
000A ; ** 入口参数 要转换的整型数: dataint, 数组p[10]
000A ; ** 改变思路:整数 -->字符串-->加字符串结束标志
000A ; ** 可以转换小于0的整数
000A ; *****************************************/
000A ; void long_to_string( long int dataint, char *p )
000A ; {
000A .dbline 17
000A ; long int datainttmp;
000A ; char *p1; //指向转换成为数组时用到
000A ; char datachar1[10];
000A ; char datachar2[10];
000A ; uchar n = 0; //取整型数据的位数
000A 0024 clr R0
000C 098E std y+25,R0
000E .dbline 18
000E ; uchar i = 0;
000E 088E std y+24,R0
0010 .dbline 19
0010 ; uchar k1 = 0; //取字符个数
0010 CC24 clr R12
0012 .dbline 20
0012 ; uchar k2 = 0; //取字符个数
0012 EE24 clr R14
0014 .dbline 22
0014 ;
0014 ; if( dataint >= 0 )
0014 40E0 ldi R20,0
0016 50E0 ldi R21,0
0018 60E0 ldi R22,0
001A 70E0 ldi R23,0
001C 2CA0 ldd R2,y+36
001E 3DA0 ldd R3,y+37
0020 4EA0 ldd R4,y+38
0022 5FA0 ldd R5,y+39
0024 2416 cp R2,R20
0026 3506 cpc R3,R21
0028 4606 cpc R4,R22
002A 5706 cpc R5,R23
002C 2CF0 brlt L2
002E X0:
002E .dbline 23
002E ; datainttmp = ( long int )dataint;
002E 2882 std y+0,R2
0030 3982 std y+1,R3
0032 4A82 std y+2,R4
0034 5B82 std y+3,R5
0036 14C0 xjmp L3
0038 L2:
0038 .dbline 24
0038 ; else datainttmp = ( long int )dataint * ( -1 );
0038 2CA0 ldd R2,y+36
003A 3DA0 ldd R3,y+37
003C 4EA0 ldd R4,y+38
003E 5FA0 ldd R5,y+39
0040 4FEF ldi R20,255
0042 5FEF ldi R21,255
0044 6FEF ldi R22,255
0046 7FEF ldi R23,255
0048 5A92 st -y,R5
004A 4A92 st -y,R4
004C 3A92 st -y,R3
004E 2A92 st -y,R2
0050 8A01 movw R16,R20
0052 9B01 movw R18,R22
0054 0E940000 xcall empy32s
0058 0883 std y+0,R16
005A 1983 std y+1,R17
005C 2A83 std y+2,R18
005E 3B83 std y+3,R19
0060 L3:
0060 .dbline 26
0060 ;
0060 ; p1 = datachar2;
0060 CE01 movw R24,R28
0062 0E96 adiw R24,14
0064 5C01 movw R10,R24
0066 37C0 xjmp L5
0068 L4:
0068 .dbline 30
0068 ;
0068 ;
0068 ; while( datainttmp != 0 )
0068 ; {
0068 .dbline 31
0068 ; datachar1[n++] = ( datainttmp % 10 ) + 0x30; //转换为字符并取得这个整型数据的位数 n
0068 298C ldd R2,y+25
006A 3324 clr R3
006C 3101 movw R6,R2
006E 822D mov R24,R2
0070 8F5F subi R24,255 ; addi 1
0072 898F std y+25,R24
0074 4AE0 ldi R20,10
0076 50E0 ldi R21,0
0078 60E0 ldi R22,0
007A 70E0 ldi R23,0
007C 0881 ldd R16,y+0
007E 1981 ldd R17,y+1
0080 2A81 ldd R18,y+2
0082 3B81 ldd R19,y+3
0084 7A93 st -y,R23
0086 6A93 st -y,R22
0088 5A93 st -y,R21
008A 4A93 st -y,R20
008C 0E940000 xcall mod32s
0090 1801 movw R2,R16
0092 2901 movw R4,R18
0094 40E3 ldi R20,48
0096 50E0 ldi R21,0
0098 60E0 ldi R22,0
009A 70E0 ldi R23,0
009C 240E add R2,R20
009E 351E adc R3,R21
00A0 461E adc R4,R22
00A2 571E adc R5,R23
00A4 CE01 movw R24,R28
00A6 0496 adiw R24,4
00A8 E62D mov R30,R6
00AA FF27 clr R31
00AC E80F add R30,R24
00AE F91F adc R31,R25
00B0 2082 std z+0,R2
00B2 .dbline 32
00B2 ; datainttmp /= 10;
00B2 4AE0 ldi R20,10
00B4 50E0 ldi R21,0
00B6 60E0 ldi R22,0
00B8 70E0 ldi R23,0
00BA 0881 ldd R16,y+0
00BC 1981 ldd R17,y+1
00BE 2A81 ldd R18,y+2
00C0 3B81 ldd R19,y+3
00C2 7A93 st -y,R23
00C4 6A93 st -y,R22
00C6 5A93 st -y,R21
00C8 4A93 st -y,R20
00CA 0E940000 xcall div32s
00CE 0883 std y+0,R16
00D0 1983 std y+1,R17
00D2 2A83 std y+2,R18
00D4 3B83 std y+3,R19
00D6 .dbline 33
00D6 ; }
00D6 L5:
00D6 .dbline 29
00D6 2880 ldd R2,y+0
00D8 3980 ldd R3,y+1
00DA 4A80 ldd R4,y+2
00DC 5B80 ldd R5,y+3
00DE 8894 clc
00E0 2220 tst R2
00E2 3204 cpc R3,R2
00E4 4204 cpc R4,R2
00E6 5204 cpc R5,R2
00E8 09F0 breq X7
00EA BECF xjmp L4
00EC X7:
00EC X1:
00EC .dbline 35
00EC ;
00EC ; if( dataint > 0 ) //如果要转换的整型数据>0
00EC 40E0 ldi R20,0
00EE 50E0 ldi R21,0
00F0 60E0 ldi R22,0
00F2 70E0 ldi R23,0
00F4 2CA0 ldd R2,y+36
00F6 3DA0 ldd R3,y+37
00F8 4EA0 ldd R4,y+38
00FA 5FA0 ldd R5,y+39
00FC 4215 cp R20,R2
00FE 5305 cpc R21,R3
0100 6405 cpc R22,R4
0102 7505 cpc R23,R5
0104 2CF5 brge L7
0106 X2:
0106 .dbline 36
0106 ; {
0106 .dbline 37
0106 ; k1 = n - 1;
0106 898D ldd R24,y+25
0108 8150 subi R24,1
010A C82E mov R12,R24
010C .dbline 38
010C ; k2 = n;
010C E98C ldd R14,y+25
010E .dbline 40
010E ;
010E ; for( i = 0; i < k2; i++, k1-- )
010E 0024 clr R0
0110 088E std y+24,R0
0112 12C0 xjmp L12
0114 L9:
0114 .dbline 41
0114 ; {
0114 .dbline 42
0114 ; datachar2[k1] = datachar1[i]; //将数字符串倒过来
0114 CE01 movw R24,R28
0116 0496 adiw R24,4
0118 E88D ldd R30,y+24
011A FF27 clr R31
011C E80F add R30,R24
011E F91F adc R31,R25
0120 2080 ldd R2,z+0
0122 CE01 movw R24,R28
0124 0E96 adiw R24,14
0126 EC2D mov R30,R12
0128 FF27 clr R31
012A E80F add R30,R24
012C F91F adc R31,R25
012E 2082 std z+0,R2
0130 .dbline 43
0130 ; }
0130 L10:
0130 .dbline 40
0130 088C ldd R0,y+24
0132 0394 inc R0
0134 088E std y+24,R0
0136 CA94 dec R12
0138 L12:
0138 .dbline 40
0138 088C ldd R0,y+24
013A 0E14 cp R0,R14
013C 58F3 brlo L9
013E X3:
013E .dbline 44
013E ; datachar2[n] = '\0'; //字符串结束标志
013E CE01 movw R24,R28
0140 0E96 adiw R24,14
0142 E98D ldd R30,y+25
0144 FF27 clr R31
0146 E80F add R30,R24
0148 F91F adc R31,R25
014A 2224 clr R2
014C 2082 std z+0,R2
014E .dbline 45
014E ; }
014E 42C0 xjmp L8
0150 L7:
0150 .dbline 47
0150 ;
0150 ; else if( dataint < 0 ) //<0
0150 40E0 ldi R20,0
0152 50E0 ldi R21,0
0154 60E0 ldi R22,0
0156 70E0 ldi R23,0
0158 2CA0 ldd R2,y+36
015A 3DA0 ldd R3,y+37
015C 4EA0 ldd R4,y+38
015E 5FA0 ldd R5,y+39
0160 2416 cp R2,R20
0162 3506 cpc R3,R21
0164 4606 cpc R4,R22
0166 5706 cpc R5,R23
0168 3CF5 brge L13
016A X4:
016A .dbline 48
016A ; {
016A .dbline 49
016A ; k1 = n;
016A C98C ldd R12,y+25
016C .dbline 50
016C ; k2 = n + 1;
016C 8C2D mov R24,R12
016E 8F5F subi R24,255 ; addi 1
0170 E82E mov R14,R24
0172 .dbline 52
0172 ;
0172 ; for( i = 0; i < k2; i++, k1-- )
0172 0024 clr R0
0174 088E std y+24,R0
0176 12C0 xjmp L18
0178 L15:
0178 .dbline 53
0178 ; {
0178 .dbline 54
0178 ; datachar2[k1] = datachar1[i];
0178 CE01 movw R24,R28
017A 0496 adiw R24,4
017C E88D ldd R30,y+24
017E FF27 clr R31
0180 E80F add R30,R24
0182 F91F adc R31,R25
0184 2080 ldd R2,z+0
0186 CE01 movw R24,R28
0188 0E96 adiw R24,14
018A EC2D mov R30,R12
018C FF27 clr R31
018E E80F add R30,R24
0190 F91F adc R31,R25
0192 2082 std z+0,R2
0194 .dbline 55
0194 ; }
0194 L16:
0194 .dbline 52
0194 088C ldd R0,y+24
0196 0394 inc R0
0198 088E std y+24,R0
019A CA94 dec R12
019C L18:
019C .dbline 52
019C 088C ldd R0,y+24
019E 0E14 cp R0,R14
01A0 58F3 brlo L15
01A2 X5:
01A2 .dbline 56
01A2 ; datachar2[n + 1] = '\0';
01A2 CE01 movw R24,R28
01A4 0F96 adiw R24,15
01A6 E98D ldd R30,y+25
01A8 FF27 clr R31
01AA E80F add R30,R24
01AC F91F adc R31,R25
01AE 2224 clr R2
01B0 2082 std z+0,R2
01B2 .dbline 57
01B2 ; datachar2[0] = '-'; //加上负号
01B2 8DE2 ldi R24,45
01B4 8E87 std y+14,R24
01B6 .dbline 58
01B6 ; }
01B6 0EC0 xjmp L14
01B8 L13:
01B8 .dbline 60
01B8 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -