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

📄 font.lis

📁 AVR控制12864液晶画圆弧,在AVR单片机的控制下完成圆弧的绘制。
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 029A           ;    store_width -> y+14
 029A           ;         height -> R22
 029A           ;          width -> R10
 029A           ;              x -> y+13
 029A           ;          glyph -> R14
 029A           ;            str -> y+32
 029A           ;           font -> y+30
 029A           ;            top -> y+28
 029A           ;           left -> R20
                        .even
 029A           _lcd_text_p::
 029A 3A93              st -y,r19
 029C 2A93              st -y,r18
 029E 0E940000          xcall push_gset5
 02A2 402F              mov R20,R16
 02A4 6297              sbiw R28,18
 02A6                   .dbline -1
 02A6                   .dbline 151
 02A6           ;        
 02A6           ;     }
 02A6           ;  }
 02A6           ; void lcd_text_p(uint8_t left, uint8_t top, uint8_t font,  const char *str)
 02A6           ;  { uint8_t x = left;
 02A6                   .dbline 151
 02A6 4D87              std y+13,R20
 02A8                   .dbline 161
 02A8           ;    uint8_t glyph;
 02A8           ;    uint8_t width;
 02A8           ;    uint8_t height, defaultheight;
 02A8           ;    uint8_t store_width;
 02A8           ;    uint8_t *glyph_ptr;
 02A8           ;    uint8_t *width_table_ptr;
 02A8           ;    uint8_t *glyph_table_ptr;
 02A8           ;    uint8_t glyph_beg, glyph_end;
 02A8           ;    uint8_t fixedwidth;
 02A8           ;    uint8_t inprogmem=1;//mine
 02A8 0024              clr R0
 02AA 0394              inc R0
 02AC 088A              std y+16,R0
 02AE                   .dbline 163
 02AE           ;    
 02AE           ;    defaultheight = (fonts[font].glyph_height);//pgm_read_byte ( &(fonts[font].glyph_height) );
 02AE 8AE0              ldi R24,10
 02B0 0E8C              ldd R0,y+30
 02B2 809D              mul R24,R0
 02B4 F001              movw R30,R0
 02B6 80E0              ldi R24,<_fonts+1
 02B8 90E0              ldi R25,>_fonts+1
 02BA E80F              add R30,R24
 02BC F91F              adc R31,R25
 02BE E491              lpm R30,Z
 02C0 E98B              std y+17,R30
 02C2                   .dbline 164
 02C2           ;    store_width =   (fonts[font].store_width);//pgm_read_byte ( &(fonts[font].store_width) );
 02C2 8AE0              ldi R24,10
 02C4 0E8C              ldd R0,y+30
 02C6 809D              mul R24,R0
 02C8 F001              movw R30,R0
 02CA 80E0              ldi R24,<_fonts
 02CC 90E0              ldi R25,>_fonts
 02CE E80F              add R30,R24
 02D0 F91F              adc R31,R25
 02D2 E491              lpm R30,Z
 02D4 EE87              std y+14,R30
 02D6                   .dbline 165
 02D6           ;    width_table_ptr = (uint8_t*)(fonts[font].width_table);//(uint8_t*) pgm_read_word( &(fonts[font].width_table) );
 02D6 8AE0              ldi R24,10
 02D8 0E8C              ldd R0,y+30
 02DA 809D              mul R24,R0
 02DC F001              movw R30,R0
 02DE 80E0              ldi R24,<_fonts+5
 02E0 90E0              ldi R25,>_fonts+5
 02E2 E80F              add R30,R24
 02E4 F91F              adc R31,R25
 02E6 0590              lpm R0,Z+
 02E8 1490              lpm R1,Z
 02EA F001              movw R30,R0
 02EC FC87              std y+12,R31
 02EE EB87              std y+11,R30
 02F0                   .dbline 166
 02F0           ;    glyph_table_ptr = (uint8_t*)(fonts[font].glyph_table);//(uint8_t*)pgm_read_word( &(fonts[font].glyph_table) );
 02F0 8AE0              ldi R24,10
 02F2 0E8C              ldd R0,y+30
 02F4 809D              mul R24,R0
 02F6 F001              movw R30,R0
 02F8 80E0              ldi R24,<_fonts+2
 02FA 90E0              ldi R25,>_fonts+2
 02FC E80F              add R30,R24
 02FE F91F              adc R31,R25
 0300 0590              lpm R0,Z+
 0302 1490              lpm R1,Z
 0304 F001              movw R30,R0
 0306 FA87              std y+10,R31
 0308 E987              std y+9,R30
 030A                   .dbline 167
 030A           ;    glyph_beg  = (fonts[font].glyph_beg);//pgm_read_byte( &(fonts[font].glyph_beg) );
 030A 8AE0              ldi R24,10
 030C 0E8C              ldd R0,y+30
 030E 809D              mul R24,R0
 0310 F001              movw R30,R0
 0312 80E0              ldi R24,<_fonts+7
 0314 90E0              ldi R25,>_fonts+7
 0316 E80F              add R30,R24
 0318 F91F              adc R31,R25
 031A E491              lpm R30,Z
 031C EF87              std y+15,R30
 031E                   .dbline 168
 031E           ;    glyph_end  = (fonts[font].glyph_end);//pgm_read_byte( &(fonts[font].glyph_end) );
 031E 8AE0              ldi R24,10
 0320 0E8C              ldd R0,y+30
 0322 809D              mul R24,R0
 0324 F001              movw R30,R0
 0326 80E0              ldi R24,<_fonts+8
 0328 90E0              ldi R25,>_fonts+8
 032A E80F              add R30,R24
 032C F91F              adc R31,R25
 032E 4491              lpm R20,Z
 0330                   .dbline 169
 0330           ;    fixedwidth = (fonts[font].fixed_width);//pgm_read_byte( &(fonts[font].fixed_width) );
 0330 8AE0              ldi R24,10
 0332 0E8C              ldd R0,y+30
 0334 809D              mul R24,R0
 0336 F001              movw R30,R0
 0338 80E0              ldi R24,<_fonts+4
 033A 90E0              ldi R25,>_fonts+4
 033C E80F              add R30,R24
 033E F91F              adc R31,R25
 0340 C490              lpm R12,Z
 0342                   .dbline 171
 0342           ; 
 0342           ;    if (inprogmem) 
 0342 0888              ldd R0,y+16
 0344 0020              tst R0
 0346 31F0              breq L54
 0348                   .dbline 172
 0348           ;       glyph = pgm_read_byte(str);
 0348 08A1              ldd R16,y+32
 034A 19A1              ldd R17,y+33
 034C 0E940000          xcall _pgm_read_byte
 0350 E02E              mov R14,R16
 0352 67C0              xjmp L57
 0354           L54:
 0354                   .dbline 175
 0354           ;     
 0354           ;    else 
 0354           ;       glyph = (uint8_t)*str;
 0354 E8A1              ldd R30,y+32
 0356 F9A1              ldd R31,y+33
 0358 E490              lpm R14,Z
 035A 63C0              xjmp L57
 035C           L56:
 035C                   .dbline 178
 035C           ;       
 035C           ;    while(glyph != 0x00) // while(*str != 0x00)
 035C           ;     { /* check to make sure the symbol is a legal one */
 035C                   .dbline 180
 035C           ;       /* if not then just replace it with the default character */
 035C           ;       if((glyph < glyph_beg) || (glyph > glyph_end))
 035C 0F84              ldd R0,y+15
 035E E014              cp R14,R0
 0360 10F0              brlo L61
 0362 4E15              cp R20,R14
 0364 48F4              brsh L59
 0366           L61:
 0366                   .dbline 181
 0366           ;          glyph = (fonts[font].glyph_def);//pgm_read_byte( &(fonts[font].glyph_def) ) ;
 0366 8AE0              ldi R24,10
 0368 0E8C              ldd R0,y+30
 036A 809D              mul R24,R0
 036C F001              movw R30,R0
 036E 80E0              ldi R24,<_fonts+9
 0370 90E0              ldi R25,>_fonts+9
 0372 E80F              add R30,R24
 0374 F91F              adc R31,R25
 0376 E490              lpm R14,Z
 0378           L59:
 0378                   .dbline 184
 0378           ; 
 0378           ;       /* make zero based index into the font data arrays */
 0378           ;       glyph -= glyph_beg;
 0378 0F84              ldd R0,y+15
 037A E018              sub R14,R0
 037C                   .dbline 185
 037C           ;       if(fixedwidth == 0)
 037C CC20              tst R12
 037E 51F4              brne L63
 0380                   .dbline 187
 0380           ;          // width=fonts[font].width_table[glyph];     /* get the variable width instead */
 0380           ;          width=pgm_read_byte(width_table_ptr+glyph);
 0380 2B84              ldd R2,y+11
 0382 3C84              ldd R3,y+12
 0384 0E2D              mov R16,R14
 0386 1127              clr R17
 0388 020D              add R16,R2
 038A 131D              adc R17,R3
 038C 0E940000          xcall _pgm_read_byte
 0390 A02E              mov R10,R16
 0392 01C0              xjmp L64
 0394           L63:
 0394                   .dbline 189
 0394           ;       else 
 0394           ;          width = fixedwidth;
 0394 AC2C              mov R10,R12
 0396           L64:
 0396                   .dbline 191
 0396           ;               
 0396           ;       height = defaultheight;
 0396 6989              ldd R22,y+17
 0398                   .dbline 193
 0398           ;       //glyph_ptr = fonts[font].glyph_table + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height);
 0398           ;       glyph_ptr = glyph_table_ptr + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height) ;
 0398 0E84              ldd R0,y+14
 039A E09C              mul R14,R0
 039C 069E              mul R0,R22
 039E 1001              movw R2,R0
 03A0 4984              ldd R4,y+9
 03A2 5A84              ldd R5,y+10
 03A4 240C              add R2,R4
 03A6 351C              adc R3,R5
 03A8 3886              std y+8,R3
 03AA 2F82              std y+7,R2
 03AC                   .dbline 196
 03AC           ; 
 03AC           ;       /* range check / limit things here */
 03AC           ;       if(x > SCRN_RIGHT)
 03AC 8FE7              ldi R24,127
 03AE 0D84              ldd R0,y+13
 03B0 8015              cp R24,R0
 03B2 08F4              brsh L65
 03B4                   .dbline 197
 03B4           ;          x = SCRN_RIGHT;
 03B4 8D87              std y+13,R24
 03B6           L65:
 03B6                   .dbline 199
 03B6           ;        
 03B6           ;       if((x + width) > SCRN_RIGHT+1)
 03B6 2D84              ldd R2,y+13
 03B8 2A0C              add R2,R10
 03BA 80E8              ldi R24,128
 03BC 8215              cp R24,R2
 03BE 28F4              brsh L67
 03C0                   .dbline 200
 03C0           ;          width = SCRN_RIGHT - x + 1;
 03C0 8FE7              ldi R24,127
 03C2 0D84              ldd R0,y+13
 03C4 8019              sub R24,R0
 03C6 8F5F              subi R24,255    ; addi 1
 03C8 A82E              mov R10,R24
 03CA           L67:
 03CA                   .dbline 202
 03CA           ;        
 03CA           ;       if(top > SCRN_BOTTOM)
 03CA 8FE3              ldi R24,63
 03CC 0C8C              ldd R0,y+28
 03CE 8015              cp R24,R0
 03D0 08F4              brsh L69
 03D2                   .dbline 203
 03D2           ;          top = SCRN_BOTTOM;
 03D2 8C8F              std y+28,R24
 03D4           L69:
 03D4                   .dbline 205
 03D4           ;        
 03D4           ;       if((top + height) > SCRN_BOTTOM+1)
 03D4 2C8C              ldd R2,y+28
 03D6 260E              add R2,R22
 03D8 80E4              ldi R24,64
 03DA 8215              cp R24,R2
 03DC 20F4              brsh L71
 03DE                   .dbline 206
 03DE           ;          height = SCRN_BOTTOM - top + 1;
 03DE 6FE3              ldi R22,63
 03E0 0C8C              ldd R0,y+28
 03E2 6019              sub R22,R0
 03E4 6F5F              subi R22,255    ; addi 1
 03E6           L71:
 03E6                   .dbline 208
 03E6           ;        
 03E6           ;       lcd_glyph(x,top,width,height,glyph_ptr,store_width);  /* plug symbol into buffer */
 03E6 0E84              ldd R0,y+14
 03E8 0E82              std y+6,R0
 03EA 2F80              ldd R2,y+7
 03EC 3884              ldd R3,y+8
 03EE 3D82              std y+5,R3
 03F0 2C82              std y+4,R2
 03F2 6A83              std y+2,R22
 03F4 A882              std y+0,R10
 03F6 2C8D              ldd R18,y+28
 03F8 0D85              ldd R16,y+13
 03FA 02DE              xcall _lcd_glyph
 03FC                   .dbline 210
 03FC           ; 
 03FC           ;       x += width;             /* move right for next character */
 03FC 0D84              ldd R0,y+13
 03FE 0A0C              add R0,R10
 0400 0D86              std y+13,R0
 0402                   .dbline 211
 0402           ;       str++;                  /* point to next character in string */
 0402 88A1              ldd R24,y+32
 0404 99A1              ldd R25,y+33
 0406 0196              adiw R24,1
 0408 99A3              std y+33,R25
 040A 88A3              std y+32,R24
 040C                   .dbline 212
 040C           ;       if (inprogmem) 
 040C 0888              ldd R0,y+16
 040E 0020              tst R0
 0410 29F0              breq L73
 0412                   .dbline 213
 0412           ;          glyph = pgm_read_byte(str);
 0412 8C01              movw R16,R24
 0414 0E940000          xcall _pgm_read_byte
 0418 E02E              mov R14,R16
 041A 03C0              xjmp L74
 041C           L73:
 041C                   .dbline 215
 041C           ;       else 
 041C           ;          glyph = (uint8_t)*str;
 041C E8A1              ldd R30,y+32
 041E F9A1              ldd R31,y+33
 0420 E490              lpm R14,Z
 0422           L74:
 0422                   .dbline 217
 0422           L57:
 0422                   .dbline 177
 0422 EE20              tst R14
 0424 09F0              breq X3
 0426 9ACF              xjmp L56
 0428           X3:
 0428                   .dbline -2
 0428           L47:
 0428 6296              adiw R28,18
 042A 0E940000          xcall pop_gset5

⌨️ 快捷键说明

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