📄 lcd.lis
字号:
0472 ; //==========================================
0472 ; //函数名称:写字符串
0472 ; //函数作用: 在指定位置写一串字符串
0472 ; //入口参数: 行位置r, 列位置c, 字符串*s
0472 ; //返回类型:无
0472 ; //示例 : LCD_write_string( 1, 2, "dongxixiaonanbei" );
0472 ; //==========================================
0472 ; void LCD_write_string(uchar r, uchar c, uchar *s)
0472 ; {
0472 .dbline 229
0472 ; LCD_set_rc( r, c ); //写地址
0472 2C2D mov R18,R12
0474 0A2D mov R16,R10
0476 E4DF xcall _LCD_set_rc
0478 05C0 xjmp L59
047A L58:
047A .dbline 232
047A ;
047A ; while( *s ) // 写显示字符
047A ; {
047A .dbline 233
047A ; LCD_write_data( *s );
047A FA01 movw R30,R20
047C 0081 ldd R16,z+0
047E A9DF xcall _LCD_write_data
0480 .dbline 234
0480 ; s++;
0480 4F5F subi R20,255 ; offset = 1
0482 5F4F sbci R21,255
0484 .dbline 235
0484 ; }
0484 L59:
0484 .dbline 231
0484 FA01 movw R30,R20
0486 2080 ldd R2,z+0
0488 2220 tst R2
048A B9F7 brne L58
048C X18:
048C .dbline -2
048C L57:
048C .dbline 0 ; func end
048C 0C940000 xjmp pop_xgset303C
0490 .dbsym r s 20 pc
0490 .dbsym r c 12 c
0490 .dbsym r r 10 c
0490 .dbend
0490 .dbfunc e LCD_write_char _LCD_write_char fV
0490 ; DATA -> y+2
0490 ; c -> R12
0490 ; r -> R10
.even
0490 _LCD_write_char::
0490 AA92 st -y,R10
0492 CA92 st -y,R12
0494 C22E mov R12,R18
0496 A02E mov R10,R16
0498 .dbline -1
0498 .dbline 241
0498 ; }
0498 ;
0498 ; //写字符
0498 ; //示例 : LCD_write_char( 1, 2, 'a' );
0498 ; void LCD_write_char(uchar r, uchar c, uchar DATA)
0498 ; {
0498 .dbline 242
0498 ; LCD_set_rc( r, c );
0498 2C2D mov R18,R12
049A 0A2D mov R16,R10
049C D1DF xcall _LCD_set_rc
049E .dbline 243
049E ; LCD_write_data( DATA );
049E 0A81 ldd R16,y+2
04A0 98DF xcall _LCD_write_data
04A2 .dbline -2
04A2 L61:
04A2 .dbline 0 ; func end
04A2 C990 ld R12,y+
04A4 A990 ld R10,y+
04A6 0895 ret
04A8 .dbsym l DATA 2 c
04A8 .dbsym r c 12 c
04A8 .dbsym r r 10 c
04A8 .dbend
04A8 .dbfunc e LCD_write_array _LCD_write_array fV
04A8 ; i -> R10
04A8 ; array -> R12,R13
04A8 ; c -> R22
04A8 ; r -> R20
.even
04A8 _LCD_write_array::
04A8 0E940000 xcall push_xgsetF03C
04AC 622F mov R22,R18
04AE 402F mov R20,R16
04B0 2197 sbiw R28,1
04B2 C984 ldd R12,y+9
04B4 DA84 ldd R13,y+10
04B6 .dbline -1
04B6 .dbline 255
04B6 ; }
04B6 ;
04B6 ; //==========================================
04B6 ; //函数名称:写字符数组
04B6 ; //函数作用: 在指定位置写一串字符串
04B6 ; //入口参数: 行位置r, 列位置c, 字符数组chardata[], 字符个数
04B6 ; //返回类型:无
04B6 ; //示例 : uchar a[] = "dongxixiaonanbei@163.com"
04B6 ; // LCD_write_array( 1, 2, a );
04B6 ; //==========================================
04B6 ; void LCD_write_array( uchar r, uchar c, uchar array[] )
04B6 ; {
04B6 .dbline 256
04B6 ; uchar i = 0;
04B6 AA24 clr R10
04B8 2AC0 xjmp L64
04BA L63:
04BA .dbline 258
04BA ; while( array[i] != '\0' )
04BA ; {
04BA .dbline 259
04BA ; LCD_write_char( r, c, array[i] );
04BA EA2D mov R30,R10
04BC FF27 clr R31
04BE EC0D add R30,R12
04C0 FD1D adc R31,R13
04C2 2080 ldd R2,z+0
04C4 2882 std y+0,R2
04C6 262F mov R18,R22
04C8 042F mov R16,R20
04CA E2DF xcall _LCD_write_char
04CC .dbline 260
04CC ; if( ++c == 16 )
04CC 862F mov R24,R22
04CE 8F5F subi R24,255 ; addi 1
04D0 682F mov R22,R24
04D2 6031 cpi R22,16
04D4 D9F4 brne L66
04D6 X19:
04D6 .dbline 261
04D6 ; {
04D6 .dbline 262
04D6 ; if( r == 1 )
04D6 4130 cpi R20,1
04D8 61F4 brne L68
04DA X20:
04DA .dbline 263
04DA ; {
04DA .dbline 264
04DA ; c = 0;
04DA 6627 clr R22
04DC .dbline 265
04DC ; r = 2;
04DC 42E0 ldi R20,2
04DE .dbline 266
04DE ; LCD_write_char( r, c, array[i] );
04DE EA2D mov R30,R10
04E0 FF27 clr R31
04E2 EC0D add R30,R12
04E4 FD1D adc R31,R13
04E6 2080 ldd R2,z+0
04E8 2882 std y+0,R2
04EA 262F mov R18,R22
04EC 042F mov R16,R20
04EE D0DF xcall _LCD_write_char
04F0 .dbline 267
04F0 ; }
04F0 0DC0 xjmp L69
04F2 L68:
04F2 .dbline 269
04F2 ;
04F2 ; else if( r == 2 )
04F2 4230 cpi R20,2
04F4 59F4 brne L70
04F6 X21:
04F6 .dbline 270
04F6 ; {
04F6 .dbline 271
04F6 ; c = 0;
04F6 6627 clr R22
04F8 .dbline 272
04F8 ; r = 1;
04F8 41E0 ldi R20,1
04FA .dbline 273
04FA ; LCD_write_char( r, c, array[i] );
04FA EA2D mov R30,R10
04FC FF27 clr R31
04FE EC0D add R30,R12
0500 FD1D adc R31,R13
0502 2080 ldd R2,z+0
0504 2882 std y+0,R2
0506 262F mov R18,R22
0508 042F mov R16,R20
050A C2DF xcall _LCD_write_char
050C .dbline 274
050C ; }
050C L70:
050C L69:
050C .dbline 275
050C ; }
050C L66:
050C .dbline 276
050C ; i++;
050C A394 inc R10
050E .dbline 277
050E ; }
050E L64:
050E .dbline 257
050E EA2D mov R30,R10
0510 FF27 clr R31
0512 EC0D add R30,R12
0514 FD1D adc R31,R13
0516 2080 ldd R2,z+0
0518 2220 tst R2
051A 09F0 breq X23
051C CECF xjmp L63
051E X23:
051E X22:
051E .dbline -2
051E L62:
051E .dbline 0 ; func end
051E 2196 adiw R28,1
0520 0C940000 xjmp pop_xgsetF03C
0524 .dbsym r i 10 c
0524 .dbsym r array 12 pc
0524 .dbsym r c 22 c
0524 .dbsym r r 20 c
0524 .dbend
0524 .dbfunc e LCD_write_datalongint _LCD_write_datalongint fV
0524 ; a -> y+2
0524 ; datalongint -> y+14
0524 ; c -> R12
0524 ; r -> R10
.even
0524 _LCD_write_datalongint::
0524 AA92 st -y,R10
0526 CA92 st -y,R12
0528 C22E mov R12,R18
052A A02E mov R10,R16
052C 2C97 sbiw R28,12
052E .dbline -1
052E .dbline 283
052E ; }
052E ;
052E ; //写整数
052E ; //例子: LCD_write_datalongint( 1, 5, 89 ); 在液晶第一行,第5列显示89
052E ; void LCD_write_datalongint( uchar r, uchar c, long int datalongint )
052E ; {
052E .dbline 285
052E ; char a[10];
052E ; long_to_string( datalongint, a ) ;
052E CE01 movw R24,R28
0530 0296 adiw R24,2
0532 9983 std y+1,R25
0534 8883 std y+0,R24
0536 0E85 ldd R16,y+14
0538 1F85 ldd R17,y+15
053A 2889 ldd R18,y+16
053C 3989 ldd R19,y+17
053E 60DD xcall _long_to_string
0540 .dbline 286
0540 ; LCD_write_string( r, c, a );
0540 CE01 movw R24,R28
0542 0296 adiw R24,2
0544 9983 std y+1,R25
0546 8883 std y+0,R24
0548 2C2D mov R18,R12
054A 0A2D mov R16,R10
054C 8CDF xcall _LCD_write_string
054E .dbline -2
054E L72:
054E .dbline 0 ; func end
054E 2C96 adiw R28,12
0550 C990 ld R12,y+
0552 A990 ld R10,y+
0554 0895 ret
0556 .dbsym l a 2 A[10:10]c
0556 .dbsym l datalongint 14 L
0556 .dbsym r c 12 c
0556 .dbsym r r 10 c
0556 .dbend
0556 .dbfunc e LCD_write_datafloat _LCD_write_datafloat fV
0556 ; a -> y+3
0556 ; p -> y+19
0556 ; dataf -> y+15
0556 ; c -> R12
0556 ; r -> R10
.even
0556 _LCD_write_datafloat::
0556 AA92 st -y,R10
0558 CA92 st -y,R12
055A C22E mov R12,R18
055C A02E mov R10,R16
055E 2D97 sbiw R28,13
0560 .dbline -1
0560 .dbline 292
0560 ; }
0560 ;
0560 ; //写浮点型数据
0560 ; //例子: LCD_write_datafloat( 1, 5, -0.33, 4 ); 在液晶第一行,第5列显示-0.33, 显示小数点后4位。
0560 ; void LCD_write_datafloat( uchar r, uchar c, float dataf, uchar p )
0560 ; {
0560 .dbline 294
0560 ; char a[10];
0560 ; float_2_string( dataf, a, p );
0560 0B88 ldd R0,y+19
0562 0A82 std y+2,R0
0564 CE01 movw R24,R28
0566 0396 adiw R24,3
0568 9983 std y+1,R25
056A 8883 std y+0,R24
056C 0F85 ldd R16,y+15
056E 1889 ldd R17,y+16
0570 2989 ldd R18,y+17
0572 3A89 ldd R19,y+18
0574 3CDE xcall _float_2_string
0576 .dbline 295
0576 ; LCD_write_string( r, c, a );
0576 CE01 movw R24,R28
0578 0396 adiw R24,3
057A 9983 std y+1,R25
057C 8883 std y+0,R24
057E 2C2D mov R18,R12
0580 0A2D mov R16,R10
0582 71DF xcall _LCD_write_string
0584 .dbline -2
0584 L73:
0584 .dbline 0 ; func end
0584 2D96 adiw R28,13
0586 C990 ld R12,y+
0588 A990 ld R10,y+
058A 0895 ret
058C .dbsym l a 3 A[10:10]c
058C .dbsym l p 19 c
058C .dbsym l dataf 15 D
058C .dbsym r c 12 c
058C .dbsym r r 10 c
058C .dbend
.area lit(rom, con, rel)
0000 L35:
0000 00002041 .word 0x0,0x4120
0004 L30:
0004 00008040 .word 0x0,0x4080
0008 L29:
0008 00000000 .word 0x0,0x0
000C L26:
000C 00000040 .word 0x0,0x4000
0010 ; }
0010 ; //******************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -