📄 1335.lis
字号:
01B0 ; }
01B0 ;
01B0 ;
01B0 ; /***********************************************************************
01B0 ; Show or hide cursor. 0=Hide, 1=Show.
01B0 ; ***********************************************************************/
01B0 ; void lcd_show_cursor(unsigned char show)
01B0 ; {
01B0 .dbline 232
01B0 ; lcd_write_command(0x59);
01B0 09E5 ldi R16,89
01B2 3BDF xcall _lcd_write_command
01B4 .dbline 233
01B4 ; if (show == 0) lcd_write_data(0x14);
01B4 AA20 tst R10
01B6 19F4 brne L29
01B8 X5:
01B8 .dbline 233
01B8 04E1 ldi R16,20
01BA 3CDF xcall _lcd_write_data
01BC 02C0 xjmp L30
01BE L29:
01BE .dbline 234
01BE ; else lcd_write_data(0x16);
01BE 06E1 ldi R16,22
01C0 39DF xcall _lcd_write_data
01C2 L30:
01C2 .dbline -2
01C2 L28:
01C2 .dbline 0 ; func end
01C2 A990 ld R10,y+
01C4 0895 ret
01C6 .dbsym r show 10 c
01C6 .dbend
01C6 .dbfunc e lcd_clear_graphics _lcd_clear_graphics fV
01C6 ; i -> R20,R21
.even
01C6 _lcd_clear_graphics::
01C6 4A93 st -y,R20
01C8 5A93 st -y,R21
01CA .dbline -1
01CA .dbline 242
01CA ; }
01CA ;
01CA ;
01CA ; /***********************************************************************
01CA ; Clears the graphic layer / screen.
01CA ; ***********************************************************************/
01CA ; void lcd_clear_graphics(void)
01CA ; {
01CA .dbline 244
01CA ; int i;
01CA ; lcd_write_command(0x46);
01CA 06E4 ldi R16,70
01CC 2EDF xcall _lcd_write_command
01CE .dbline 245
01CE ; lcd_write_data(0x00);
01CE 0027 clr R16
01D0 31DF xcall _lcd_write_data
01D2 .dbline 246
01D2 ; lcd_write_data(0x10);
01D2 00E1 ldi R16,16
01D4 2FDF xcall _lcd_write_data
01D6 .dbline 247
01D6 ; lcd_write_command(0x42);
01D6 02E4 ldi R16,66
01D8 28DF xcall _lcd_write_command
01DA .dbline 248
01DA ; for (i=0; i<((LCD_X_SIZE/8)*LCD_Y_SIZE); i++) lcd_write_data(0x00);
01DA 4427 clr R20
01DC 5527 clr R21
01DE L32:
01DE .dbline 248
01DE 0027 clr R16
01E0 29DF xcall _lcd_write_data
01E2 L33:
01E2 .dbline 248
01E2 4F5F subi R20,255 ; offset = 1
01E4 5F4F sbci R21,255
01E6 .dbline 248
01E6 4038 cpi R20,128
01E8 E5E2 ldi R30,37
01EA 5E07 cpc R21,R30
01EC C4F3 brlt L32
01EE X6:
01EE .dbline 249
01EE ; lcd_write_command(0x46);
01EE 06E4 ldi R16,70
01F0 1CDF xcall _lcd_write_command
01F2 .dbline 250
01F2 ; lcd_write_data(0x00);
01F2 0027 clr R16
01F4 1FDF xcall _lcd_write_data
01F6 .dbline 251
01F6 ; lcd_write_data(0x10);
01F6 00E1 ldi R16,16
01F8 1DDF xcall _lcd_write_data
01FA .dbline -2
01FA L31:
01FA .dbline 0 ; func end
01FA 5991 ld R21,y+
01FC 4991 ld R20,y+
01FE 0895 ret
0200 .dbsym r i 20 I
0200 .dbend
0200 .dbfunc e lcd_pixel _lcd_pixel fV
0200 ; Offset -> R20
0200 ; byte -> R10
0200 ; high -> R12
0200 ; low -> R14
0200 ; Address -> R22,R23
0200 ; show -> y+10
0200 ; y -> R22,R23
0200 ; x -> R20,R21
.even
0200 _lcd_pixel::
0200 0E940000 xcall push_xgsetF0FC
0204 B901 movw R22,R18
0206 A801 movw R20,R16
0208 .dbline -1
0208 .dbline 260
0208 ; }
0208 ;
0208 ;
0208 ; /***********************************************************************
0208 ; Write pixel data to the display at specified position.
0208 ; Set show to 1 to draw pixel, set to 0 to hide pixel.
0208 ; ***********************************************************************/
0208 ; void lcd_pixel(int x, int y, unsigned char show)
0208 ; {
0208 .dbline 266
0208 ; unsigned int Address;
0208 ; unsigned char Offset;
0208 ; unsigned char low;
0208 ; unsigned char high;
0208 ; unsigned char byte;
0208 ; x--;
0208 4150 subi R20,1
020A 5040 sbci R21,0
020C .dbline 267
020C ; y--;
020C 6150 subi R22,1
020E 7040 sbci R23,0
0210 .dbline 268
0210 ; Address = (y * (LCD_X_SIZE/8)) + (x / 8);
0210 28E0 ldi R18,8
0212 30E0 ldi R19,0
0214 8A01 movw R16,R20
0216 0E940000 xcall div16s
021A 1801 movw R2,R16
021C 08E2 ldi R16,40
021E 10E0 ldi R17,0
0220 9B01 movw R18,R22
0222 0E940000 xcall empy16s
0226 B801 movw R22,R16
0228 620D add R22,R2
022A 731D adc R23,R3
022C .dbline 269
022C ; Offset = x - ((x / 8) * 8);
022C 28E0 ldi R18,8
022E 30E0 ldi R19,0
0230 8A01 movw R16,R20
0232 0E940000 xcall div16s
0236 1801 movw R2,R16
0238 220C lsl R2
023A 331C rol R3
023C 220C lsl R2
023E 331C rol R3
0240 220C lsl R2
0242 331C rol R3
0244 4219 sub R20,R2
0246 5309 sbc R21,R3
0248 .dbline 270
0248 ; low = (unsigned char) (Address & 0x00ff);
0248 CB01 movw R24,R22
024A 9070 andi R25,0
024C E82E mov R14,R24
024E .dbline 271
024E ; high = (unsigned char) (((Address & 0xff00) >> 8) + 0x10);
024E CB01 movw R24,R22
0250 8070 andi R24,0
0252 892F mov R24,R25
0254 9927 clr R25
0256 4096 adiw R24,16
0258 C82E mov R12,R24
025A .dbline 272
025A ; lcd_write_command(0x46);
025A 06E4 ldi R16,70
025C E6DE xcall _lcd_write_command
025E .dbline 273
025E ; lcd_write_data(low);
025E 0E2D mov R16,R14
0260 E9DE xcall _lcd_write_data
0262 .dbline 274
0262 ; lcd_write_data(high);
0262 0C2D mov R16,R12
0264 E7DE xcall _lcd_write_data
0266 .dbline 275
0266 ; lcd_write_command(0x43);
0266 03E4 ldi R16,67
0268 E0DE xcall _lcd_write_command
026A .dbline 276
026A ; byte = lcd_read_data();
026A E9DE xcall _lcd_read_data
026C A02E mov R10,R16
026E .dbline 277
026E ; if (show != 0) byte |= (0x80 >> Offset);
026E 0A84 ldd R0,y+10
0270 0020 tst R0
0272 61F0 breq L37
0274 X7:
0274 .dbline 277
0274 242F mov R18,R20
0276 3327 clr R19
0278 00E8 ldi R16,128
027A 10E0 ldi R17,0
027C 0E940000 xcall asr16
0280 2A2C mov R2,R10
0282 3324 clr R3
0284 202A or R2,R16
0286 312A or R3,R17
0288 A22C mov R10,R2
028A 0EC0 xjmp L38
028C L37:
028C .dbline 278
028C ; else byte &= (~(0x80 >> Offset));
028C 242F mov R18,R20
028E 3327 clr R19
0290 00E8 ldi R16,128
0292 10E0 ldi R17,0
0294 0E940000 xcall asr16
0298 1801 movw R2,R16
029A 2094 com R2
029C 3094 com R3
029E 4A2C mov R4,R10
02A0 5524 clr R5
02A2 4220 and R4,R2
02A4 5320 and R5,R3
02A6 A42C mov R10,R4
02A8 L38:
02A8 .dbline 279
02A8 ; lcd_write_command(0x46);
02A8 06E4 ldi R16,70
02AA BFDE xcall _lcd_write_command
02AC .dbline 280
02AC ; lcd_write_data(low);
02AC 0E2D mov R16,R14
02AE C2DE xcall _lcd_write_data
02B0 .dbline 281
02B0 ; lcd_write_data(high);
02B0 0C2D mov R16,R12
02B2 C0DE xcall _lcd_write_data
02B4 .dbline 282
02B4 ; lcd_write_command(0x42);
02B4 02E4 ldi R16,66
02B6 B9DE xcall _lcd_write_command
02B8 .dbline 283
02B8 ; lcd_write_data(byte);
02B8 0A2D mov R16,R10
02BA BCDE xcall _lcd_write_data
02BC .dbline -2
02BC L36:
02BC .dbline 0 ; func end
02BC 0C940000 xjmp pop_xgsetF0FC
02C0 .dbsym r Offset 20 c
02C0 .dbsym r byte 10 c
02C0 .dbsym r high 12 c
02C0 .dbsym r low 14 c
02C0 .dbsym r Address 22 i
02C0 .dbsym l show 10 c
02C0 .dbsym r y 22 I
02C0 .dbsym r x 20 I
02C0 .dbend
02C0 .dbfunc e lcd_rectangle _lcd_rectangle fV
02C0 ; i -> R20,R21
02C0 ; show -> R10
02C0 ; y2 -> R12,R13
02C0 ; x2 -> R14,R15
02C0 ; y1 -> y+11
02C0 ; x1 -> R22,R23
.even
02C0 _lcd_rectangle::
02C0 3A93 st -y,r19
02C2 2A93 st -y,r18
02C4 0E940000 xcall push_xgsetF0FC
02C8 B801 movw R22,R16
02CA 2197 sbiw R28,1
02CC ED84 ldd R14,y+13
02CE FE84 ldd R15,y+14
02D0 CF84 ldd R12,y+15
02D2 D888 ldd R13,y+16
02D4 A988 ldd R10,y+17
02D6 .dbline -1
02D6 .dbline 292
02D6 ; }
02D6 ;
02D6 ;
02D6 ; /***********************************************************************
02D6 ; Draws a rectangle from x1,y1 to x2,y2.
02D6 ; Set show to 1 to draw pixel, set to 0 to hide pixel.
02D6 ; ***********************************************************************/
02D6 ; void lcd_rectangle(int x1, int y1, int x2, int y2, unsigned char show)
02D6 ; {
02D6 .dbline 294
02D6 ; int i;
02D6 ; for (i=x1; i<=x2; i++) lcd_pixel(i,y1,show);
02D6 AB01 movw R20,R22
02D8 07C0 xjmp L43
02DA L40:
02DA .dbline 294
02DA A882 std y+0,R10
02DC 2B85 ldd R18,y+11
02DE 3C85 ldd R19,y+12
02E0 8A01 movw R16,R20
02E2 8EDF xcall _lcd_pixel
02E4 L41:
02E4 .dbline 294
02E4 4F5F subi R20,255 ; offset = 1
02E6 5F4F sbci R21,255
02E8 L43:
02E8 .dbline 294
02E8 E416 cp R14,R20
02EA F506 cpc R15,R21
02EC B4F7 brge L40
02EE X8:
02EE .dbline 295
02EE ; for (i=x1; i<=x2; i++) lcd_pixel(i,y2,show);
02EE AB01 movw R20,R22
02F0 06C0 xjmp L47
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -