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

📄 font.lis

📁 AVR控制12864液晶画圆弧,在AVR单片机的控制下完成圆弧的绘制。
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0112           ;    uint8_t store_width;
 0112           ;    uint8_t *glyph_ptr;
 0112           ;    uint8_t *width_table_ptr;
 0112           ;    uint8_t *glyph_table_ptr;
 0112           ;    uint8_t glyph_beg, glyph_end;
 0112           ;    uint8_t fixedwidth;
 0112           ;    uint8_t inprogmem=0;//mine
 0112 0024              clr R0
 0114 088A              std y+16,R0
 0116                   .dbline 94
 0116           ;   
 0116           ;    defaultheight = (fonts[font].glyph_height);//pgm_read_byte ( &(fonts[font].glyph_height) );
 0116 8AE0              ldi R24,10
 0118 0E8C              ldd R0,y+30
 011A 809D              mul R24,R0
 011C F001              movw R30,R0
 011E 80E0              ldi R24,<_fonts+1
 0120 90E0              ldi R25,>_fonts+1
 0122 E80F              add R30,R24
 0124 F91F              adc R31,R25
 0126 E491              lpm R30,Z
 0128 E98B              std y+17,R30
 012A                   .dbline 95
 012A           ;    store_width =   (fonts[font].store_width);//pgm_read_byte ( &(fonts[font].store_width) );
 012A 8AE0              ldi R24,10
 012C 0E8C              ldd R0,y+30
 012E 809D              mul R24,R0
 0130 F001              movw R30,R0
 0132 80E0              ldi R24,<_fonts
 0134 90E0              ldi R25,>_fonts
 0136 E80F              add R30,R24
 0138 F91F              adc R31,R25
 013A E491              lpm R30,Z
 013C EE87              std y+14,R30
 013E                   .dbline 96
 013E           ;    width_table_ptr = (uint8_t*)(fonts[font].width_table);//(uint8_t*) pgm_read_word( &(fonts[font].width_table) );
 013E 8AE0              ldi R24,10
 0140 0E8C              ldd R0,y+30
 0142 809D              mul R24,R0
 0144 F001              movw R30,R0
 0146 80E0              ldi R24,<_fonts+5
 0148 90E0              ldi R25,>_fonts+5
 014A E80F              add R30,R24
 014C F91F              adc R31,R25
 014E 0590              lpm R0,Z+
 0150 1490              lpm R1,Z
 0152 F001              movw R30,R0
 0154 FC87              std y+12,R31
 0156 EB87              std y+11,R30
 0158                   .dbline 97
 0158           ;    glyph_table_ptr = (uint8_t*)(fonts[font].glyph_table);//(uint8_t*)pgm_read_word( &(fonts[font].glyph_table) );
 0158 8AE0              ldi R24,10
 015A 0E8C              ldd R0,y+30
 015C 809D              mul R24,R0
 015E F001              movw R30,R0
 0160 80E0              ldi R24,<_fonts+2
 0162 90E0              ldi R25,>_fonts+2
 0164 E80F              add R30,R24
 0166 F91F              adc R31,R25
 0168 0590              lpm R0,Z+
 016A 1490              lpm R1,Z
 016C F001              movw R30,R0
 016E FA87              std y+10,R31
 0170 E987              std y+9,R30
 0172                   .dbline 98
 0172           ;    glyph_beg  = (fonts[font].glyph_beg);//pgm_read_byte( &(fonts[font].glyph_beg) );
 0172 8AE0              ldi R24,10
 0174 0E8C              ldd R0,y+30
 0176 809D              mul R24,R0
 0178 F001              movw R30,R0
 017A 80E0              ldi R24,<_fonts+7
 017C 90E0              ldi R25,>_fonts+7
 017E E80F              add R30,R24
 0180 F91F              adc R31,R25
 0182 E491              lpm R30,Z
 0184 EF87              std y+15,R30
 0186                   .dbline 99
 0186           ;    glyph_end  = (fonts[font].glyph_end);//pgm_read_byte( &(fonts[font].glyph_end) );
 0186 8AE0              ldi R24,10
 0188 0E8C              ldd R0,y+30
 018A 809D              mul R24,R0
 018C F001              movw R30,R0
 018E 80E0              ldi R24,<_fonts+8
 0190 90E0              ldi R25,>_fonts+8
 0192 E80F              add R30,R24
 0194 F91F              adc R31,R25
 0196 4491              lpm R20,Z
 0198                   .dbline 100
 0198           ;    fixedwidth = (fonts[font].fixed_width);//pgm_read_byte( &(fonts[font].fixed_width) );
 0198 8AE0              ldi R24,10
 019A 0E8C              ldd R0,y+30
 019C 809D              mul R24,R0
 019E F001              movw R30,R0
 01A0 80E0              ldi R24,<_fonts+4
 01A2 90E0              ldi R25,>_fonts+4
 01A4 E80F              add R30,R24
 01A6 F91F              adc R31,R25
 01A8 C490              lpm R12,Z
 01AA                   .dbline 102
 01AA           ; 
 01AA           ;    if (inprogmem) 
 01AA 0888              ldd R0,y+16
 01AC 0020              tst R0
 01AE 31F0              breq L26
 01B0                   .dbline 103
 01B0           ;       glyph = pgm_read_byte(str);
 01B0 08A1              ldd R16,y+32
 01B2 19A1              ldd R17,y+33
 01B4 0E940000          xcall _pgm_read_byte
 01B8 E02E              mov R14,R16
 01BA 67C0              xjmp L29
 01BC           L26:
 01BC                   .dbline 106
 01BC           ;     
 01BC           ;    else 
 01BC           ;       glyph = (uint8_t)*str;
 01BC E8A1              ldd R30,y+32
 01BE F9A1              ldd R31,y+33
 01C0 E080              ldd R14,z+0
 01C2 63C0              xjmp L29
 01C4           L28:
 01C4                   .dbline 109
 01C4           ;       
 01C4           ;    while(glyph != 0x00) // while(*str != 0x00)
 01C4           ;     { /* check to make sure the symbol is a legal one */
 01C4                   .dbline 111
 01C4           ;       /* if not then just replace it with the default character */
 01C4           ;       if((glyph < glyph_beg) || (glyph > glyph_end))
 01C4 0F84              ldd R0,y+15
 01C6 E014              cp R14,R0
 01C8 10F0              brlo L33
 01CA 4E15              cp R20,R14
 01CC 48F4              brsh L31
 01CE           L33:
 01CE                   .dbline 112
 01CE           ;          glyph = (fonts[font].glyph_def);//pgm_read_byte( &(fonts[font].glyph_def) ) ;
 01CE 8AE0              ldi R24,10
 01D0 0E8C              ldd R0,y+30
 01D2 809D              mul R24,R0
 01D4 F001              movw R30,R0
 01D6 80E0              ldi R24,<_fonts+9
 01D8 90E0              ldi R25,>_fonts+9
 01DA E80F              add R30,R24
 01DC F91F              adc R31,R25
 01DE E490              lpm R14,Z
 01E0           L31:
 01E0                   .dbline 115
 01E0           ; 
 01E0           ;       /* make zero based index into the font data arrays */
 01E0           ;       glyph -= glyph_beg;
 01E0 0F84              ldd R0,y+15
 01E2 E018              sub R14,R0
 01E4                   .dbline 116
 01E4           ;       if(fixedwidth == 0)
 01E4 CC20              tst R12
 01E6 51F4              brne L35
 01E8                   .dbline 118
 01E8           ;          // width=fonts[font].width_table[glyph];     /* get the variable width instead */
 01E8           ;          width=pgm_read_byte(width_table_ptr+glyph);
 01E8 2B84              ldd R2,y+11
 01EA 3C84              ldd R3,y+12
 01EC 0E2D              mov R16,R14
 01EE 1127              clr R17
 01F0 020D              add R16,R2
 01F2 131D              adc R17,R3
 01F4 0E940000          xcall _pgm_read_byte
 01F8 A02E              mov R10,R16
 01FA 01C0              xjmp L36
 01FC           L35:
 01FC                   .dbline 120
 01FC           ;       else 
 01FC           ;          width = fixedwidth;
 01FC AC2C              mov R10,R12
 01FE           L36:
 01FE                   .dbline 122
 01FE           ;               
 01FE           ;       height = defaultheight;
 01FE 6989              ldd R22,y+17
 0200                   .dbline 124
 0200           ;       //glyph_ptr = fonts[font].glyph_table + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height);
 0200           ;       glyph_ptr = glyph_table_ptr + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height) ;
 0200 0E84              ldd R0,y+14
 0202 E09C              mul R14,R0
 0204 069E              mul R0,R22
 0206 1001              movw R2,R0
 0208 4984              ldd R4,y+9
 020A 5A84              ldd R5,y+10
 020C 240C              add R2,R4
 020E 351C              adc R3,R5
 0210 3886              std y+8,R3
 0212 2F82              std y+7,R2
 0214                   .dbline 127
 0214           ; 
 0214           ;       /* range check / limit things here */
 0214           ;       if(x > SCRN_RIGHT)
 0214 8FE7              ldi R24,127
 0216 0D84              ldd R0,y+13
 0218 8015              cp R24,R0
 021A 08F4              brsh L37
 021C                   .dbline 128
 021C           ;          x = SCRN_RIGHT;
 021C 8D87              std y+13,R24
 021E           L37:
 021E                   .dbline 130
 021E           ;        
 021E           ;       if((x + width) > SCRN_RIGHT+1)
 021E 2D84              ldd R2,y+13
 0220 2A0C              add R2,R10
 0222 80E8              ldi R24,128
 0224 8215              cp R24,R2
 0226 28F4              brsh L39
 0228                   .dbline 131
 0228           ;          width = SCRN_RIGHT - x + 1;
 0228 8FE7              ldi R24,127
 022A 0D84              ldd R0,y+13
 022C 8019              sub R24,R0
 022E 8F5F              subi R24,255    ; addi 1
 0230 A82E              mov R10,R24
 0232           L39:
 0232                   .dbline 133
 0232           ;        
 0232           ;       if(top > SCRN_BOTTOM)
 0232 8FE3              ldi R24,63
 0234 0C8C              ldd R0,y+28
 0236 8015              cp R24,R0
 0238 08F4              brsh L41
 023A                   .dbline 134
 023A           ;          top = SCRN_BOTTOM;
 023A 8C8F              std y+28,R24
 023C           L41:
 023C                   .dbline 136
 023C           ;        
 023C           ;       if((top + height) > SCRN_BOTTOM+1)
 023C 2C8C              ldd R2,y+28
 023E 260E              add R2,R22
 0240 80E4              ldi R24,64
 0242 8215              cp R24,R2
 0244 20F4              brsh L43
 0246                   .dbline 137
 0246           ;          height = SCRN_BOTTOM - top + 1;
 0246 6FE3              ldi R22,63
 0248 0C8C              ldd R0,y+28
 024A 6019              sub R22,R0
 024C 6F5F              subi R22,255    ; addi 1
 024E           L43:
 024E                   .dbline 139
 024E           ;        
 024E           ;       lcd_glyph(x,top,width,height,glyph_ptr,store_width);  /* plug symbol into buffer */
 024E 0E84              ldd R0,y+14
 0250 0E82              std y+6,R0
 0252 2F80              ldd R2,y+7
 0254 3884              ldd R3,y+8
 0256 3D82              std y+5,R3
 0258 2C82              std y+4,R2
 025A 6A83              std y+2,R22
 025C A882              std y+0,R10
 025E 2C8D              ldd R18,y+28
 0260 0D85              ldd R16,y+13
 0262 CEDE              xcall _lcd_glyph
 0264                   .dbline 141
 0264           ; 
 0264           ;       x += width;             /* move right for next character */
 0264 0D84              ldd R0,y+13
 0266 0A0C              add R0,R10
 0268 0D86              std y+13,R0
 026A                   .dbline 142
 026A           ;       str++;                  /* point to next character in string */
 026A 88A1              ldd R24,y+32
 026C 99A1              ldd R25,y+33
 026E 0196              adiw R24,1
 0270 99A3              std y+33,R25
 0272 88A3              std y+32,R24
 0274                   .dbline 143
 0274           ;       if (inprogmem) 
 0274 0888              ldd R0,y+16
 0276 0020              tst R0
 0278 29F0              breq L45
 027A                   .dbline 144
 027A           ;          glyph = pgm_read_byte(str);
 027A 8C01              movw R16,R24
 027C 0E940000          xcall _pgm_read_byte
 0280 E02E              mov R14,R16
 0282 03C0              xjmp L46
 0284           L45:
 0284                   .dbline 146
 0284           ;       else 
 0284           ;          glyph = (uint8_t)*str;
 0284 E8A1              ldd R30,y+32
 0286 F9A1              ldd R31,y+33
 0288 E080              ldd R14,z+0
 028A           L46:
 028A                   .dbline 148
 028A           L29:
 028A                   .dbline 108
 028A EE20              tst R14
 028C 09F0              breq X2
 028E 9ACF              xjmp L28
 0290           X2:
 0290                   .dbline -2
 0290           L19:
 0290 6296              adiw R28,18
 0292 0E940000          xcall pop_gset5
 0296 2296              adiw R28,2
 0298                   .dbline 0 ; func end
 0298 0895              ret
 029A                   .dbsym l width_table_ptr 11 pc
 029A                   .dbsym r glyph_end 20 c
 029A                   .dbsym l glyph_table_ptr 9 pc
 029A                   .dbsym l defaultheight 17 c
 029A                   .dbsym l inprogmem 16 c
 029A                   .dbsym r fixedwidth 12 c
 029A                   .dbsym l glyph_ptr 7 pc
 029A                   .dbsym l glyph_beg 15 c
 029A                   .dbsym l store_width 14 c
 029A                   .dbsym r height 22 c
 029A                   .dbsym r width 10 c
 029A                   .dbsym l x 13 c
 029A                   .dbsym r glyph 14 c
 029A                   .dbsym l str 32 pc
 029A                   .dbsym l font 30 c
 029A                   .dbsym l top 28 c
 029A                   .dbsym r left 20 c
 029A                   .dbend
 029A                   .dbfunc e lcd_text_p _lcd_text_p fV
 029A           ; width_table_ptr -> y+11
 029A           ;      glyph_end -> R20
 029A           ; glyph_table_ptr -> y+9
 029A           ;  defaultheight -> y+17
 029A           ;      inprogmem -> y+16
 029A           ;     fixedwidth -> R12
 029A           ;      glyph_ptr -> y+7
 029A           ;      glyph_beg -> y+15

⌨️ 快捷键说明

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