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

📄 graphic.lis

📁 AVR控制12864液晶画圆弧,在AVR单片机的控制下完成圆弧的绘制。
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module graphic.c
                        .area data(ram, con, rel)
 0000           _l_mask_array::
 0000                   .blkb 2
                        .area idata
 0000 0102              .byte 1,2
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0408              .byte 4,8
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 1020              .byte 16,32
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 4080              .byte 64,128
                        .area data(ram, con, rel)
 0008                   .dbfile C:\ygksb0108\programme2_can_run\graphic.c
 0008                   .dbsym e l_mask_array _l_mask_array A[8:8]c
 0008           _l_display_array::
 0008                   .blkb 2
                        .area idata
 0008 0000              .byte 0,0
                        .area data(ram, con, rel)
 000A                   .dbfile C:\ygksb0108\programme2_can_run\graphic.c
 000A                   .blkb 1
                        .area idata
 000A 00                .byte 0
                        .area data(ram, con, rel)
 000B                   .dbfile C:\ygksb0108\programme2_can_run\graphic.c
 000B                   .blkb 125
                        .area idata
 000B 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0047 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0083 0000000000        .byte 0,0,0,0,0
                        .area data(ram, con, rel)
 0088                   .dbfile C:\ygksb0108\programme2_can_run\graphic.c
 0088                   .blkb 896
                        .area idata
 0088 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 00C4 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0100 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 013C 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0178 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 01B4 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 01F0 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 022C 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0268 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 02A4 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 02E0 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 031C 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0358 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 0394 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000  .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 03D0 00000000000000000000      .word 0,0,0,0,0
 03DA 00000000000000000000      .word 0,0,0,0,0
 03E4 00000000000000000000      .word 0,0,0,0,0
 03EE 00000000000000000000      .word 0,0,0,0,0
 03F8 00000000000000000000      .word 0,0,0,0,0
 0402 000000000000      .byte 0,0,0,0,0,0
                        .area data(ram, con, rel)
 0408                   .dbfile C:\ygksb0108\programme2_can_run\graphic.c
 0408                   .dbsym e l_display_array _l_display_array A[1024:8:128]c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\ygksb0108\programme2_can_run\graphic.c
 0000                   .dbfunc e lcd_fill _lcd_fill fV
 0000           ;           page -> R20
 0000           ;            col -> R10
 0000           ;        pattern -> R22
                        .even
 0000           _lcd_fill::
 0000 0E940000          xcall push_gset3
 0004 602F              mov R22,R16
 0006                   .dbline -1
 0006                   .dbline 14
 0006           ; //*****************************************************************
 0006           ; //本头文件实现了用于液晶显示的缓冲区和基本的图形函数
 0006           ; //包括了画点,画线,画圆,画矩形等函数,每种函数都有三种方式画
 0006           ; //即 LCD_MODE_CLEAR, LCD_MODE_SET, LCD_MODE_XOR(清除,置位,异或)
 0006           ; //             ---北京交通大学电气学院 杨罡 2008.8
 0006           ; //*****************************************************************
 0006           ; #include  "graphic.h"
 0006           ; 
 0006           ;  unsigned char l_mask_array[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
 0006           ;  unsigned char l_display_array[LCD_Y_BYTES][LCD_X_BYTES]={0,0,0};
 0006           ;  /* TODO: avoid or PROGMEM */
 0006           ;  /* fill buffer and LCD with pattern */
 0006           ; void lcd_fill( unsigned char pattern)
 0006           ;  { unsigned char page, col;
 0006                   .dbline 16
 0006           ; 
 0006           ;    for (page=0; page<LCD_Y_BYTES; page++) 
 0006 4427              clr R20
 0008 13C0              xjmp L5
 000A           L2:
 000A                   .dbline 17
 000A           ;     { for (col=0; col<LCD_X_BYTES; col++) 
 000A                   .dbline 17
 000A AA24              clr R10
 000C 0DC0              xjmp L9
 000E           L6:
 000E                   .dbline 18
 000E 80E8              ldi R24,128
 0010 849F              mul R24,R20
 0012 1001              movw R2,R0
 0014 80E0              ldi R24,<_l_display_array
 0016 90E0              ldi R25,>_l_display_array
 0018 280E              add R2,R24
 001A 391E              adc R3,R25
 001C EA2D              mov R30,R10
 001E FF27              clr R31
 0020 E20D              add R30,R2
 0022 F31D              adc R31,R3
 0024 6083              std z+0,R22
 0026           L7:
 0026                   .dbline 17
 0026 A394              inc R10
 0028           L9:
 0028                   .dbline 17
 0028 8A2D              mov R24,R10
 002A 8038              cpi R24,128
 002C 80F3              brlo L6
 002E                   .dbline 19
 002E           L3:
 002E                   .dbline 16
 002E 4395              inc R20
 0030           L5:
 0030                   .dbline 16
 0030 4830              cpi R20,8
 0032 58F3              brlo L2
 0034                   .dbline 20
 0034           ;          l_display_array[page][col]=pattern;
 0034           ;     }
 0034           ;    lcd_update_all();
 0034 3ED0              xcall _lcd_update_all
 0036                   .dbline -2
 0036           L1:
 0036 0E940000          xcall pop_gset3
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbsym r page 20 c
 003C                   .dbsym r col 10 c
 003C                   .dbsym r pattern 22 c
 003C                   .dbend
 003C                   .dbfunc e lcd_erase _lcd_erase fV
                        .even
 003C           _lcd_erase::
 003C                   .dbline -1
 003C                   .dbline 25
 003C           ;  }
 003C           ; 
 003C           ; 
 003C           ; void lcd_erase(void)
 003C           ;  { lcd_fill(0x00);
 003C                   .dbline 25
 003C 0027              clr R16
 003E E0DF              xcall _lcd_fill
 0040                   .dbline 26
 0040           ;    lcd_update_all();
 0040 38D0              xcall _lcd_update_all
 0042                   .dbline -2
 0042           L10:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbend
 0044                   .dbfunc e lcd_update _lcd_update fV
 0044           ;             yt -> R10
 0044           ;             yb -> R20
 0044           ;              y -> R22
 0044           ;         colptr -> R10,R11
 0044           ;              x -> R12
 0044           ;         bottom -> R20
 0044           ;            top -> R22
                        .even
 0044           _lcd_update::
 0044 0E940000          xcall push_gset4
 0048 422F              mov R20,R18
 004A 602F              mov R22,R16
 004C                   .dbline -1
 004C                   .dbline 41
 004C           ;  }
 004C           ; 
 004C           ; /*
 004C           ; **
 004C           ; ** Updates area of the display. Writes data from "framebuffer" 
 004C           ; ** RAM to the lcd display controller RAM.
 004C           ; ** 
 004C           ; ** Arguments Used:
 004C           ; **    top     top line of area to update.
 004C           ; **    bottom  bottom line of area to update.
 004C           ; **    from MJK-Code
 004C           ; **
 004C           ; */
 004C           ; void lcd_update( unsigned char top,  unsigned char bottom)
 004C           ;  { unsigned char x;
 004C                   .dbline 48
 004C           ;    unsigned char y;
 004C           ;    unsigned char yt;
 004C           ;    unsigned char yb;
 004C           ;    unsigned char *colptr;
 004C           ;   
 004C           ;    /* setup bytes of range */
 004C           ;    yb = bottom >> 3;
 004C 4695              lsr R20
 004E 4695              lsr R20
 0050 4695              lsr R20
 0052                   .dbline 49
 0052           ;    yt = top >> 3;             
 0052 A62E              mov R10,R22
 0054 A694              lsr R10
 0056 A694              lsr R10
 0058 A694              lsr R10
 005A                   .dbline 51
 005A           ; 
 005A           ;    for(y = yt; y <= yb; y++)
 005A 6A2D              mov R22,R10
 005C 25C0              xjmp L15
 005E           L12:
 005E                   .dbline 52
 005E           ;     {lcd_out_ctl(LCD_SET_PAGE+y,3);       /* set page */
 005E                   .dbline 52
 005E 23E0              ldi R18,3
 0060 062F              mov R16,R22
 0062 0854              subi R16,72    ; addi 184
 0064 0E940000          xcall _lcd_out_ctl
 0068                   .dbline 54
 0068           ;                                        //     lcd_out_ctl(LCD_SET_COL+LCD_STARTCOL_REVERSE,3);
 0068           ;      lcd_out_ctl(LCD_SET_COL+0,3);
 0068 23E0              ldi R18,3
 006A 00E4              ldi R16,64
 006C 0E940000          xcall _lcd_out_ctl
 0070                   .dbline 56
 0070           ;        
 0070           ;      colptr = &l_display_array[y][0];
 0070 80E8              ldi R24,128
 0072 869F              mul R24,R22
 0074 5001              movw R10,R0
 0076 80E0              ldi R24,<_l_display_array
 0078 90E0              ldi R25,>_l_display_array
 007A A80E              add R10,R24
 007C B91E              adc R11,R25
 007E                   .dbline 58
 007E           ; 
 007E           ;       for (x=0; x < LCD_X_BYTES; x++)
 007E CC24              clr R12
 0080 0FC0              xjmp L19
 0082           L16:
 0082                   .dbline 59
 0082           ;        { if ( x <LCD_X_BYTES/2 ) 
 0082                   .dbline 59
 0082 8C2D              mov R24,R12
 0084 8034              cpi R24,64
 0086 30F4              brsh L20
 0088                   .dbline 60
 0088           ;             lcd_out_dat_l(*colptr++);
 0088 F501              movw R30,R10
 008A 0191              ld R16,Z+
 008C 5F01              movw R10,R30
 008E 0E940000          xcall _lcd_out_dat_l
 0092 05C0              xjmp L21
 0094           L20:
 0094                   .dbline 62
 0094           ;          else 
 0094           ;             lcd_out_dat_r(*colptr++);
 0094 F501              movw R30,R10
 0096 0191              ld R16,Z+
 0098 5F01              movw R10,R30
 009A 0E940000          xcall _lcd_out_dat_r
 009E           L21:
 009E                   .dbline 63
 009E           L17:
 009E                   .dbline 58
 009E C394              inc R12
 00A0           L19:
 00A0                   .dbline 58
 00A0 8C2D              mov R24,R12
 00A2 8038              cpi R24,128
 00A4 70F3              brlo L16
 00A6                   .dbline 65
 00A6           L13:
 00A6                   .dbline 51
 00A6 6395              inc R22
 00A8           L15:
 00A8                   .dbline 51
 00A8 4617              cp R20,R22
 00AA C8F6              brsh L12
 00AC                   .dbline -2
 00AC           L11:
 00AC 0E940000          xcall pop_gset4
 00B0                   .dbline 0 ; func end
 00B0 0895              ret
 00B2                   .dbsym r yt 10 c
 00B2                   .dbsym r yb 20 c
 00B2                   .dbsym r y 22 c
 00B2                   .dbsym r colptr 10 pc
 00B2                   .dbsym r x 12 c
 00B2                   .dbsym r bottom 20 c
 00B2                   .dbsym r top 22 c
 00B2                   .dbend
 00B2                   .dbfunc e lcd_update_all _lcd_update_all fV
                        .even
 00B2           _lcd_update_all::
 00B2                   .dbline -1
 00B2                   .dbline 71
 00B2           ;        }
 00B2           ;  
 00B2           ;     }
 00B2           ;  }
 00B2           ; 
 00B2           ; 
 00B2           ; 
 00B2           ; void lcd_update_all(void)
 00B2           ;  { lcd_update(SCRN_TOP,SCRN_BOTTOM);
 00B2                   .dbline 71
 00B2 2FE3              ldi R18,63
 00B4 0027              clr R16
 00B6 C6DF              xcall _lcd_update
 00B8                   .dbline -2
 00B8           L22:
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbend
 00BA                   .dbfunc e lcd_dot _lcd_dot fV
 00BA           ;        pBuffer -> R20,R21
 00BA           ;        bitmask -> R22
 00BA           ;          yByte -> R20
 00BA           ;         bitnum -> R22
 00BA           ;           mode -> y+6
 00BA           ;              y -> R18
 00BA           ;              x -> R16
                        .even
 00BA           _lcd_dot::
 00BA 0E940000          xcall push_gset3
 00BE                   .dbline -1
 00BE                   .dbline 78
 00BE           ;  }
 00BE           ; 
 00BE           ; 
 00BE           ; 
 00BE           ; /* sets/clears/switchs(XOR) dot at (x,y) */
 00BE           ; void lcd_dot( unsigned char x,  unsigned char y,  unsigned char mode) 
 00BE           ;  { unsigned char bitnum, bitmask, yByte;
 00BE                   .dbline 81
 00BE 8FE7              ldi R24,127
 00C0 8017              cp R24,R16
 00C2 18F0              brlo L26
 00C4 8FE3              ldi R24,63
 00C6 8217              cp R24,R18
 00C8 08F4              brsh L24
 00CA           L26:
 00CA                   .dbline 81
 00CA           ;    unsigned char *pBuffer; /* pointer used for optimisation */
 00CA           ; 
 00CA           ;    if ( ( x > SCRN_RIGHT ) || ( y > SCRN_BOTTOM ) ) return;
 00CA 38C0              xjmp L23
 00CC           L24:
 00CC                   .dbline 83
 00CC           ; 
 00CC           ;    yByte   = y >> 3; 

⌨️ 快捷键说明

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