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

📄 lcd_1602_driver.lis

📁 LCD1602四线接口应用范例(AVR_GCC)
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0584 8E83              std y+6,R24
 0586                   .dbline 264
 0586           ;       lcd[7]=s%10+48;
 0586 1AE0              ldi R17,10
 0588 0889              ldd R16,y+16
 058A 00D0              rcall mod8u
 058C 802F              mov R24,R16
 058E 805D              subi R24,208    ; addi 48
 0590 8F83              std y+7,R24
 0592                   .dbline 270
 0592           ; /*时和分之间的:的闪动效果
 0592           ;       if(lcd[7]%2)
 0592           ;          lcd[2]=':';
 0592           ;          else
 0592           ;          lcd[2]=' ';*/
 0592           ;    for (i=0;i<8;i++) 
 0592 4427              clr R20
 0594 25C0              rjmp L91
 0596           L88:
 0596                   .dbline 271
 0596           ;       {
 0596                   .dbline 272
 0596           ;               if(lcd_data[add]==lcd[i])
 0596 CE01              movw R24,R28
 0598 E42F              mov R30,R20
 059A FF27              clr R31
 059C E80F              add R30,R24
 059E F91F              adc R31,R25
 05A0 2080              ldd R2,z+0
 05A2 80E0              ldi R24,<_lcd_data
 05A4 90E0              ldi R25,>_lcd_data
 05A6 E0910000          lds R30,_add
 05AA FF27              clr R31
 05AC E80F              add R30,R24
 05AE F91F              adc R31,R25
 05B0 3080              ldd R3,z+0
 05B2 3214              cp R3,R2
 05B4 09F4              brne L92
 05B6                   .dbline 273
 05B6           ;                            {}
 05B6                   .dbline 273
 05B6 0EC0              rjmp L93
 05B8           L92:
 05B8                   .dbline 275
 05B8           ;                         else
 05B8           ;                            {data[add]=lcd[i];}    
 05B8                   .dbline 275
 05B8 CE01              movw R24,R28
 05BA E42F              mov R30,R20
 05BC FF27              clr R31
 05BE E80F              add R30,R24
 05C0 F91F              adc R31,R25
 05C2 2080              ldd R2,z+0
 05C4 80E0              ldi R24,<_data
 05C6 90E0              ldi R25,>_data
 05C8 E0910000          lds R30,_add
 05CC FF27              clr R31
 05CE E80F              add R30,R24
 05D0 F91F              adc R31,R25
 05D2 2082              std z+0,R2
 05D4                   .dbline 275
 05D4           L93:
 05D4                   .dbline 276
 05D4 80910000          lds R24,_add
 05D8 8F5F              subi R24,255    ; addi 1
 05DA 80930000          sts _add,R24
 05DE                   .dbline 277
 05DE           L89:
 05DE                   .dbline 270
 05DE 4395              inc R20
 05E0           L91:
 05E0                   .dbline 270
 05E0 4830              cpi R20,8
 05E2 C8F2              brlo L88
 05E4                   .dbline 278
 05E4           ;                         add++;
 05E4           ;       }
 05E4           ;       LCD_updata;
 05E4 2224              clr R2
 05E6 20920000          sts _new,R2
 05EA                   .dbline -2
 05EA           L77:
 05EA 2896              adiw R28,8
 05EC 00D0              rcall pop_gset2
 05EE                   .dbline 0 ; func end
 05EE 0895              ret
 05F0                   .dbsym l lcd 0 A[8:8]c
 05F0                   .dbsym r i 20 c
 05F0                   .dbsym l s 16 c
 05F0                   .dbsym l m 14 c
 05F0                   .dbsym l h 12 c
 05F0                   .dbsym r y 22 c
 05F0                   .dbsym r x 20 c
 05F0                   .dbend
 05F0                   .dbfunc e LCD_write_new _LCD_write_new fV
 05F0           ;        address -> R20
 05F0           ;        new_add -> R22
                        .even
 05F0           _LCD_write_new::
 05F0 00D0              rcall push_gset2
 05F2                   .dbline -1
 05F2                   .dbline 287
 05F2           ;   }
 05F2           ; /*----------------------------------------------------
 05F2           ;     LCD_write_new:写显存函数
 05F2           ;       data[]:32字节的显存
 05F2           ;       new:显存标号
 05F2           ;       编写日期:2005/10/18
 05F2           ; -----------------------------------------------------*/  
 05F2           ; void  LCD_write_new(void)
 05F2           ;   {   
 05F2                   .dbline 289
 05F2           ;     unsigned char address;
 05F2           ;       unsigned char new_add=1;//1表示要更新地址
 05F2 61E0              ldi R22,1
 05F4 4FC0              rjmp L96
 05F6           L95:
 05F6                   .dbline 291
 05F6           ;       while(new<32)//显存共32个字节,标号从0--31 
 05F6           ;       {    
 05F6                   .dbline 292
 05F6           ;                if(new==16)//换行
 05F6 80910000          lds R24,_new
 05FA 8031              cpi R24,16
 05FC 09F4              brne L98
 05FE                   .dbline 293
 05FE           ;                   new_add=1;     
 05FE 61E0              ldi R22,1
 0600           L98:
 0600                   .dbline 294
 0600           ;            if(data[new])//跳过为0的显存
 0600 80E0              ldi R24,<_data
 0602 90E0              ldi R25,>_data
 0604 E0910000          lds R30,_new
 0608 FF27              clr R31
 060A E80F              add R30,R24
 060C F91F              adc R31,R25
 060E 2080              ldd R2,z+0
 0610 2220              tst R2
 0612 09F4              brne X5
 0614 39C0              rjmp L100
 0616           X5:
 0616                   .dbline 295
 0616           ;             {  
 0616                   .dbline 296
 0616           ;                       if(new_add)//当new_add=0时表示无需更新地址
 0616 6623              tst R22
 0618 81F0              breq L102
 061A                   .dbline 297
 061A           ;                     {
 061A                   .dbline 298
 061A           ;                        if(new>15)
 061A 8FE0              ldi R24,15
 061C 20900000          lds R2,_new
 0620 8215              cp R24,R2
 0622 18F4              brsh L104
 0624                   .dbline 299
 0624           ;                              address=0xb0+new;
 0624 422D              mov R20,R2
 0626 4055              subi R20,80    ; addi 176
 0628 03C0              rjmp L105
 062A           L104:
 062A                   .dbline 301
 062A           ;                                else
 062A           ;                              address=0x80+new;
 062A 40910000          lds R20,_new
 062E 4058              subi R20,128    ; addi 128
 0630           L105:
 0630                   .dbline 302
 0630           ;                              LCD_write_char(0,address);//设置起始地址
 0630 242F              mov R18,R20
 0632 3327              clr R19
 0634 0027              clr R16
 0636 1127              clr R17
 0638 22DD              rcall _LCD_write_char
 063A                   .dbline 303
 063A           ;                      }                          
 063A           L102:
 063A                   .dbline 304
 063A           ;                         LCD_write_char(1,data[new]);//写数据
 063A 80E0              ldi R24,<_data
 063C 90E0              ldi R25,>_data
 063E E0910000          lds R30,_new
 0642 FF27              clr R31
 0644 E80F              add R30,R24
 0646 F91F              adc R31,R25
 0648 2081              ldd R18,z+0
 064A 3327              clr R19
 064C 01E0              ldi R16,1
 064E 10E0              ldi R17,0
 0650 16DD              rcall _LCD_write_char
 0652                   .dbline 305
 0652           ;                         lcd_data[new]=data[new];
 0652 80E0              ldi R24,<_data
 0654 90E0              ldi R25,>_data
 0656 E0910000          lds R30,_new
 065A FF27              clr R31
 065C E80F              add R30,R24
 065E F91F              adc R31,R25
 0660 2080              ldd R2,z+0
 0662 80E0              ldi R24,<_lcd_data
 0664 90E0              ldi R25,>_lcd_data
 0666 E0910000          lds R30,_new
 066A FF27              clr R31
 066C E80F              add R30,R24
 066E F91F              adc R31,R25
 0670 2082              std z+0,R2
 0672                   .dbline 306
 0672           ;                         data[new]=0;//写完数据后,显存清0
 0672 80E0              ldi R24,<_data
 0674 90E0              ldi R25,>_data
 0676 E0910000          lds R30,_new
 067A FF27              clr R31
 067C E80F              add R30,R24
 067E F91F              adc R31,R25
 0680 2224              clr R2
 0682 2082              std z+0,R2
 0684                   .dbline 307
 0684           ;                         new_add=0;
 0684 6627              clr R22
 0686                   .dbline 308
 0686           ;                       }
 0686 01C0              rjmp L101
 0688           L100:
 0688                   .dbline 310
 0688           ;               else
 0688           ;                  new_add=1;
 0688 61E0              ldi R22,1
 068A           L101:
 068A                   .dbline 311
 068A 80910000          lds R24,_new
 068E 8F5F              subi R24,255    ; addi 1
 0690 80930000          sts _new,R24
 0694                   .dbline 312
 0694           L96:
 0694                   .dbline 290
 0694 80910000          lds R24,_new
 0698 8032              cpi R24,32
 069A 08F4              brsh X6
 069C ACCF              rjmp L95
 069E           X6:
 069E                   .dbline -2
 069E           L94:
 069E 00D0              rcall pop_gset2
 06A0                   .dbline 0 ; func end
 06A0 0895              ret
 06A2                   .dbsym r address 20 c
 06A2                   .dbsym r new_add 22 c
 06A2                   .dbend
 06A2                   .dbfunc e LCD_write_CGRAM _LCD_write_CGRAM fV
 06A2           ;              n -> R20
 06A2           ;              y -> R18
 06A2           ;              x -> R16
                        .even
 06A2           _LCD_write_CGRAM::
 06A2 00D0              rcall push_gset1
 06A4 4A81              ldd R20,y+2
 06A6                   .dbline -1
 06A6                   .dbline 322
 06A6           ;                  new++;//
 06A6           ;       }
 06A6           ;   } 
 06A6           ; /*----------------------------------------------------
 06A6           ;     LCD_write_CGRAM:写CGRAM的函数
 06A6           ;       输入参数:
 06A6           ;           X、Y    : 显示数据的起始的位置
 06A6           ;                       n    : 存入LCD的图案的编号
 06A6           ;       编写日期:2005/10/18
 06A6           ; -----------------------------------------------------*/ 
 06A6           ; void LCD_write_CGRAM(unsigned char x,unsigned char y,unsigned char n) 
 06A6           ; {  
 06A6                   .dbline 323
 06A6           ;    if(y<2)
 06A6 2230              cpi R18,2
 06A8 30F4              brsh L107
 06AA                   .dbline 324
 06AA           ;    add=y*16+x;//设置起始座标
 06AA 80E1              ldi R24,16
 06AC 829F              mul R24,R18
 06AE 202C              mov R2,R0
 06B0 200E              add R2,R16
 06B2 20920000          sts _add,R2
 06B6           L107:
 06B6                   .dbline 325
 06B6           ;     if(n==0)//0表示空数据
 06B6 4423              tst R20
 06B8 09F4              brne L109
 06BA                   .dbline 326
 06BA           ;       n+=8;//所以要加上8  (0>8/1>9/2>10...7>15)  
 06BA 485F              subi R20,248    ; addi 8
 06BC           L109:
 06BC                   .dbline 327
 06BC           ;       data[add]=n;      
 06BC 80E0              ldi R24,<_data
 06BE 90E0              ldi R25,>_data
 06C0 E0910000          lds R30,_add
 06C4 FF27              clr R31
 06C6 E80F              add R30,R24
 06C8 F91F              adc R31,R25
 06CA 4083              std z+0,R20
 06CC                   .dbline 328
 06CC           ;       LCD_updata;
 06CC 2224              clr R2
 06CE 20920000          sts _new,R2
 06D2                   .dbline -2
 06D2           L106:
 06D2 00D0              rcall pop_gset1
 06D4                   .dbline 0 ; func end
 06D4 0895              ret
 06D6                   .dbsym r n 20 c
 06D6                   .dbsym r y 18 c
 06D6                   .dbsym r x 16 c
 06D6                   .dbend
                        .area lit(rom, con, rel)
 0014           L112:
 0014 3F01              .byte 63,1
 0016 0101              .byte 1,1
 0018 0101              .byte 1,1
 001A 3F00              .byte 63,0
 001C 0004              .byte 0,4
 001E 021F              .byte 2,31
 0020 0204              .byte 2,4
 0022 0000              .byte 0,0
 0024 0004              .byte 0,4
 0026 0E15              .byte 14,21
 0028 0404              .byte 4,4
 002A 0400           

⌨️ 快捷键说明

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