📄 graphic.lis
字号:
.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 + -