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

📄 lcd_1602_driver.lis

📁 这是一个电池放电器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 045E           ; LCD_write_time  : 数字显示函数
 045E           ; 
 045E           ; 输入参数:
 045E           ;           X、Y    : 显示数据的起始的位置
 045E           ;                 h,m,s   :时,分,秒
 045E           ; 编写日期          :2005-10-19                
 045E           ; -----------------------------------------------------------------------*/ 
 045E           ; void LCD_write_time(unsigned char x,unsigned char y,unsigned char h,unsigned char m,unsigned char s,unsigned char z)
 045E           ;   { 
 045E                   .dbline 253
 045E           ;     unsigned char  i;
 045E           ;       unsigned char  lcd[8]={0};
 045E 80E0              ldi R24,<L69
 0460 90E0              ldi R25,>L69
 0462 FE01              movw R30,R28
 0464 08E0              ldi R16,8
 0466 10E0              ldi R17,0
 0468 FA93              st -y,R31
 046A EA93              st -y,R30
 046C 9A93              st -y,R25
 046E 8A93              st -y,R24
 0470 00D0              rcall asgncblk
 0472                   .dbline 254
 0472           ;       if(y<2)
 0472 8A2D              mov R24,R10
 0474 8230              cpi R24,2
 0476 30F4              brsh L70
 0478                   .dbline 255
 0478           ;       add=y*16+x;//设置起始座标LCD_set_xy( X, Y );  
 0478 80E1              ldi R24,16
 047A 8A9D              mul R24,R10
 047C 202C              mov R2,R0
 047E 240E              add R2,R20
 0480 20920000          sts _add,R2
 0484           L70:
 0484                   .dbline 256
 0484           ;       lcd[0]=h/10+48;
 0484 1AE0              ldi R17,10
 0486 0E85              ldd R16,y+14
 0488 00D0              rcall div8u
 048A 802F              mov R24,R16
 048C 805D              subi R24,208    ; addi 48
 048E 8883              std y+0,R24
 0490                   .dbline 257
 0490           ;       lcd[1]=h%10+48;
 0490 1AE0              ldi R17,10
 0492 0E85              ldd R16,y+14
 0494 00D0              rcall mod8u
 0496 802F              mov R24,R16
 0498 805D              subi R24,208    ; addi 48
 049A 8983              std y+1,R24
 049C                   .dbline 258
 049C           ;       lcd[2]=':';
 049C 8AE3              ldi R24,58
 049E 8A83              std y+2,R24
 04A0                   .dbline 259
 04A0           ;       lcd[3]=m/10+48;
 04A0 1AE0              ldi R17,10
 04A2 0889              ldd R16,y+16
 04A4 00D0              rcall div8u
 04A6 802F              mov R24,R16
 04A8 805D              subi R24,208    ; addi 48
 04AA 8B83              std y+3,R24
 04AC                   .dbline 260
 04AC           ;       lcd[4]=m%10+48;
 04AC 1AE0              ldi R17,10
 04AE 0889              ldd R16,y+16
 04B0 00D0              rcall mod8u
 04B2 802F              mov R24,R16
 04B4 805D              subi R24,208    ; addi 48
 04B6 8C83              std y+4,R24
 04B8                   .dbline 261
 04B8           ;       lcd[5]=':';  
 04B8 8AE3              ldi R24,58
 04BA 8D83              std y+5,R24
 04BC                   .dbline 262
 04BC           ;       lcd[6]=s/10+48;
 04BC 1AE0              ldi R17,10
 04BE 0A89              ldd R16,y+18
 04C0 00D0              rcall div8u
 04C2 802F              mov R24,R16
 04C4 805D              subi R24,208    ; addi 48
 04C6 8E83              std y+6,R24
 04C8                   .dbline 263
 04C8           ;       lcd[7]=s%10+48;
 04C8 1AE0              ldi R17,10
 04CA 0A89              ldd R16,y+18
 04CC 00D0              rcall mod8u
 04CE 802F              mov R24,R16
 04D0 805D              subi R24,208    ; addi 48
 04D2 8F83              std y+7,R24
 04D4                   .dbline 264
 04D4           ;  if(z==5){if(lcd[7]%2)
 04D4 6530              cpi R22,5
 04D6 51F4              brne L79
 04D8                   .dbline 264
 04D8                   .dbline 264
 04D8 12E0              ldi R17,2
 04DA 082F              mov R16,R24
 04DC 00D0              rcall mod8u
 04DE 0023              tst R16
 04E0 19F0              breq L81
 04E2                   .dbline 265
 04E2           ;                 lcd[2]=':';
 04E2 8AE3              ldi R24,58
 04E4 8A83              std y+2,R24
 04E6 02C0              rjmp L82
 04E8           L81:
 04E8                   .dbline 267
 04E8 80E2              ldi R24,32
 04EA 8A83              std y+2,R24
 04EC           L82:
 04EC                   .dbline 267
 04EC           ;              else
 04EC           ;                 lcd[2]=' ';}
 04EC           L79:
 04EC                   .dbline 269
 04EC           ;       
 04EC           ;    for (i=0;i<z;i++)  
 04EC 4427              clr R20
 04EE 25C0              rjmp L89
 04F0           L86:
 04F0                   .dbline 270
 04F0           ;       {
 04F0                   .dbline 271
 04F0           ;               if(lcd_data[add]==lcd[i])
 04F0 CE01              movw R24,R28
 04F2 E42F              mov R30,R20
 04F4 FF27              clr R31
 04F6 E80F              add R30,R24
 04F8 F91F              adc R31,R25
 04FA 2080              ldd R2,z+0
 04FC 80E0              ldi R24,<_lcd_data
 04FE 90E0              ldi R25,>_lcd_data
 0500 E0910000          lds R30,_add
 0504 FF27              clr R31
 0506 E80F              add R30,R24
 0508 F91F              adc R31,R25
 050A 3080              ldd R3,z+0
 050C 3214              cp R3,R2
 050E 09F4              brne L90
 0510                   .dbline 272
 0510           ;                            {}
 0510                   .dbline 272
 0510 0EC0              rjmp L91
 0512           L90:
 0512                   .dbline 274
 0512           ;                         else
 0512           ;                            {data[add]=lcd[i];}    
 0512                   .dbline 274
 0512 CE01              movw R24,R28
 0514 E42F              mov R30,R20
 0516 FF27              clr R31
 0518 E80F              add R30,R24
 051A F91F              adc R31,R25
 051C 2080              ldd R2,z+0
 051E 80E0              ldi R24,<_data
 0520 90E0              ldi R25,>_data
 0522 E0910000          lds R30,_add
 0526 FF27              clr R31
 0528 E80F              add R30,R24
 052A F91F              adc R31,R25
 052C 2082              std z+0,R2
 052E                   .dbline 274
 052E           L91:
 052E                   .dbline 275
 052E 80910000          lds R24,_add
 0532 8F5F              subi R24,255    ; addi 1
 0534 80930000          sts _add,R24
 0538                   .dbline 276
 0538           L87:
 0538                   .dbline 269
 0538 4395              inc R20
 053A           L89:
 053A                   .dbline 269
 053A 4617              cp R20,R22
 053C C8F2              brlo L86
 053E                   .dbline 277
 053E           ;                         add++;
 053E           ;       }
 053E           ;       LCD_updata;
 053E 2224              clr R2
 0540 20920000          sts _new,R2
 0544                   .dbline -2
 0544           L68:
 0544 2896              adiw R28,8
 0546 00D0              rcall pop_gset3
 0548                   .dbline 0 ; func end
 0548 0895              ret
 054A                   .dbsym l lcd 0 A[8:8]c
 054A                   .dbsym r i 20 c
 054A                   .dbsym r z 22 c
 054A                   .dbsym l s 18 c
 054A                   .dbsym l m 16 c
 054A                   .dbsym l h 14 c
 054A                   .dbsym r y 10 c
 054A                   .dbsym r x 20 c
 054A                   .dbend
 054A                   .dbfunc e LCD_write_new _LCD_write_new fV
 054A           ;        address -> R20
 054A           ;        new_add -> R22
                        .even
 054A           _LCD_write_new::
 054A 00D0              rcall push_gset2
 054C                   .dbline -1
 054C                   .dbline 286
 054C           ;   }
 054C           ; /*----------------------------------------------------
 054C           ;     LCD_write_new:写显存函数
 054C           ;       data[]:32字节的显存
 054C           ;       new:显存标号
 054C           ;       编写日期:2005/10/18
 054C           ; -----------------------------------------------------*/  
 054C           ; void  LCD_write_new(void)
 054C           ;   {   
 054C                   .dbline 288
 054C           ;     unsigned char address;
 054C           ;       unsigned char new_add=1;//1表示要更新地址
 054C 61E0              ldi R22,1
 054E 4FC0              rjmp L94
 0550           L93:
 0550                   .dbline 290
 0550           ;       while(new<32)//显存共32个字节,标号从0--31 
 0550           ;       {    
 0550                   .dbline 291
 0550           ;                if(new==16)//换行
 0550 80910000          lds R24,_new
 0554 8031              cpi R24,16
 0556 09F4              brne L96
 0558                   .dbline 292
 0558           ;                   new_add=1;     
 0558 61E0              ldi R22,1
 055A           L96:
 055A                   .dbline 293
 055A           ;            if(data[new])//跳过为0的显存
 055A 80E0              ldi R24,<_data
 055C 90E0              ldi R25,>_data
 055E E0910000          lds R30,_new
 0562 FF27              clr R31
 0564 E80F              add R30,R24
 0566 F91F              adc R31,R25
 0568 2080              ldd R2,z+0
 056A 2220              tst R2
 056C 09F4              brne X5
 056E 39C0              rjmp L98
 0570           X5:
 0570                   .dbline 294
 0570           ;             {  
 0570                   .dbline 295
 0570           ;                       if(new_add)//当new_add=0时表示无需更新地址
 0570 6623              tst R22
 0572 81F0              breq L100
 0574                   .dbline 296
 0574           ;                     {
 0574                   .dbline 297
 0574           ;                        if(new>15)
 0574 8FE0              ldi R24,15
 0576 20900000          lds R2,_new
 057A 8215              cp R24,R2
 057C 18F4              brsh L102
 057E                   .dbline 298
 057E           ;                              address=0xb0+new;
 057E 422D              mov R20,R2
 0580 4055              subi R20,80    ; addi 176
 0582 03C0              rjmp L103
 0584           L102:
 0584                   .dbline 300
 0584           ;                                else
 0584           ;                              address=0x80+new;
 0584 40910000          lds R20,_new
 0588 4058              subi R20,128    ; addi 128
 058A           L103:
 058A                   .dbline 301
 058A           ;                              LCD_write_char(0,address);//设置起始地址
 058A 242F              mov R18,R20
 058C 3327              clr R19
 058E 0027              clr R16
 0590 1127              clr R17
 0592 71DD              rcall _LCD_write_char
 0594                   .dbline 302
 0594           ;                      }                          
 0594           L100:
 0594                   .dbline 303
 0594           ;                         LCD_write_char(1,data[new]);//写数据
 0594 80E0              ldi R24,<_data
 0596 90E0              ldi R25,>_data
 0598 E0910000          lds R30,_new
 059C FF27              clr R31
 059E E80F              add R30,R24
 05A0 F91F              adc R31,R25
 05A2 2081              ldd R18,z+0
 05A4 3327              clr R19
 05A6 01E0              ldi R16,1
 05A8 10E0              ldi R17,0
 05AA 65DD              rcall _LCD_write_char
 05AC                   .dbline 304
 05AC           ;                         lcd_data[new]=data[new];
 05AC 80E0              ldi R24,<_data
 05AE 90E0              ldi R25,>_data
 05B0 E0910000          lds R30,_new
 05B4 FF27              clr R31
 05B6 E80F              add R30,R24
 05B8 F91F              adc R31,R25
 05BA 2080              ldd R2,z+0
 05BC 80E0              ldi R24,<_lcd_data
 05BE 90E0              ldi R25,>_lcd_data
 05C0 E0910000          lds R30,_new
 05C4 FF27              clr R31
 05C6 E80F              add R30,R24
 05C8 F91F              adc R31,R25
 05CA 2082              std z+0,R2
 05CC                   .dbline 305
 05CC           ;                         data[new]=0;//写完数据后,显存清0
 05CC 80E0              ldi R24,<_data
 05CE 90E0              ldi R25,>_data
 05D0 E0910000          lds R30,_new
 05D4 FF27              clr R31
 05D6 E80F              add R30,R24
 05D8 F91F              adc R31,R25
 05DA 2224              clr R2
 05DC 2082              std z+0,R2
 05DE                   .dbline 306
 05DE           ;                         new_add=0;
 05DE 6627              clr R22
 05E0                   .dbline 307
 05E0           ;                       }
 05E0 01C0              rjmp L99
 05E2           L98:
 05E2                   .dbline 309
 05E2           ;               else
 05E2           ;                  new_add=1;
 05E2 61E0              ldi R22,1
 05E4           L99:
 05E4                   .dbline 310
 05E4 80910000          lds R24,_new
 05E8 8F5F              subi R24,255    ; addi 1
 05EA 80930000          sts _new,R24
 05EE                   .dbline 311
 05EE           L94:
 05EE                   .dbline 289
 05EE 80910000          lds R24,_new
 05F2 8032              cpi R24,32
 05F4 08F4              brsh X6
 05F6 ACCF              rjmp L93
 05F8           X6:
 05F8                   .dbline -2
 05F8           L92:
 05F8 00D0              rcall pop_gset2
 05FA                   .dbline 0 ; func end
 05FA 0895              ret
 05FC                   .dbsym r address 20 c
 05FC                   .dbsym r new_add 22 c
 05FC                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\LCD_1602_Driver.c
 0000           _add::
 0000                   .blkb 1
 0001                   .dbsym e add _add c
 0001           _data::
 0001                   .blkb 32
 0021                   .dbsym e data _data A[32:32]c
 0021           _lcd_data::
 0021                   .blkb 32
 0041                   .dbsym e lcd_data _lcd_data A[32:32]c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -