⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.lis

📁 基于M16的字符液晶1602的驱动
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -