📄 lcddrive.lis
字号:
034A ; /* 参数过滤 */
034A ; if(x>=GUI_LCM_XMAX) return(0);
034A 6038 cpi R22,128
034C E0E0 ldi R30,0
034E 7E07 cpc R23,R30
0350 18F0 brlo L66
0352 .dbline 411
0352 0027 clr R16
0354 1127 clr R17
0356 31C0 xjmp L65
0358 L66:
0358 .dbline 412
0358 ; if(y>=GUI_LCM_YMAX) return(0);
0358 4034 cpi R20,64
035A E0E0 ldi R30,0
035C 5E07 cpc R21,R30
035E 18F0 brlo L68
0360 .dbline 412
0360 0027 clr R16
0362 1127 clr R17
0364 2AC0 xjmp L65
0366 L68:
0366 .dbline 415
0366 ;
0366 ; /* 取得该点颜色(用户自行更改) */
0366 ; bak = gui_disp_buf[y][x>>3];
0366 00E1 ldi R16,16
0368 10E0 ldi R17,0
036A 9A01 movw R18,R20
036C 0E940000 xcall empy16s
0370 1801 movw R2,R16
0372 80E0 ldi R24,<_gui_disp_buf
0374 90E0 ldi R25,>_gui_disp_buf
0376 280E add R2,R24
0378 391E adc R3,R25
037A FB01 movw R30,R22
037C F695 lsr R31
037E E795 ror R30
0380 F695 lsr R31
0382 E795 ror R30
0384 F695 lsr R31
0386 E795 ror R30
0388 E20D add R30,R2
038A F31D adc R31,R3
038C 4081 ldd R20,z+0
038E .dbline 416
038E ; if( (bak&DCB_HEX_TAB[x&0x07])!=0 ) *ret = 1;
038E 80E0 ldi R24,<_DCB_HEX_TAB
0390 90E0 ldi R25,>_DCB_HEX_TAB
0392 FB01 movw R30,R22
0394 E770 andi R30,7
0396 F070 andi R31,0
0398 E80F add R30,R24
039A F91F adc R31,R25
039C E491 lpm R30,Z
039E 242E mov R2,R20
03A0 2E22 and R2,R30
03A2 29F0 breq L70
03A4 .dbline 416
03A4 81E0 ldi R24,1
03A6 EC81 ldd R30,y+4
03A8 FD81 ldd R31,y+5
03AA 8083 std z+0,R24
03AC 04C0 xjmp L71
03AE L70:
03AE .dbline 417
03AE ; else *ret = 0;
03AE 2224 clr R2
03B0 EC81 ldd R30,y+4
03B2 FD81 ldd R31,y+5
03B4 2082 std z+0,R2
03B6 L71:
03B6 .dbline 419
03B6 ;
03B6 ; return(1);
03B6 01E0 ldi R16,1
03B8 10E0 ldi R17,0
03BA .dbline -2
03BA L65:
03BA 0E940000 xcall pop_gset2
03BE .dbline 0 ; func end
03BE 0895 ret
03C0 .dbsym r bak 20 c
03C0 .dbsym l ret 4 pc
03C0 .dbsym r y 20 i
03C0 .dbsym r x 22 i
03C0 .dbend
03C0 .dbfunc e GUI_HLine _GUI_HLine fV
03C0 ; bak -> R14,R15
03C0 ; color -> R12
03C0 ; x1 -> R10,R11
03C0 ; y0 -> R22,R23
03C0 ; x0 -> R20,R21
.even
03C0 _GUI_HLine::
03C0 0E940000 xcall push_gset5
03C4 B901 movw R22,R18
03C6 A801 movw R20,R16
03C8 2197 sbiw R28,1
03CA AB84 ldd R10,y+11
03CC BC84 ldd R11,y+12
03CE CD84 ldd R12,y+13
03D0 .dbline -1
03D0 .dbline 434
03D0 ; }
03D0 ;
03D0 ;
03D0 ; /****************************************************************************
03D0 ; * 名称:GUI_HLine()
03D0 ; * 功能:画水平线。
03D0 ; * 入口参数: x0 水平线起点所在列的位置
03D0 ; * y0 水平线起点所在行的位置
03D0 ; * x1 水平线终点所在列的位置
03D0 ; * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
03D0 ; * 出口参数:无
03D0 ; * 说明:操作失败原因是指定地址超出缓冲区范围。
03D0 ; ****************************************************************************/
03D0 ; void GUI_HLine(uint32 x0, uint32 y0, uint32 x1, uint8 color)
03D0 ; { uint32 bak;
03D0 .dbline 436
03D0 ;
03D0 ; if(x0>x1) // 对x0、x1大小进行排列,以便画图
03D0 A416 cp R10,R20
03D2 B506 cpc R11,R21
03D4 18F4 brsh L73
03D6 .dbline 437
03D6 ; { bak = x1;
03D6 .dbline 437
03D6 7501 movw R14,R10
03D8 .dbline 438
03D8 ; x1 = x0;
03D8 5A01 movw R10,R20
03DA .dbline 439
03DA ; x0 = bak;
03DA A701 movw R20,R14
03DC .dbline 440
03DC ; }
03DC L73:
03DC .dbline 441
03DC ; if(x0==x1)
03DC 4A15 cp R20,R10
03DE 5B05 cpc R21,R11
03E0 29F4 brne L75
03E2 .dbline 442
03E2 ; { GUI_Point(x0, y0, color);
03E2 .dbline 442
03E2 C882 std y+0,R12
03E4 9B01 movw R18,R22
03E6 8A01 movw R16,R20
03E8 52DF xcall _GUI_Point
03EA .dbline 443
03EA ; return;
03EA 97C0 xjmp L72
03EC L75:
03EC L77:
03EC .dbline 447
03EC ; }
03EC ;
03EC ; do
03EC ; { /* 设置相应的点为1 */
03EC .dbline 448
03EC ; if(0!=color) gui_disp_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
03EC CC20 tst R12
03EE 01F1 breq L80
03F0 .dbline 448
03F0 00E1 ldi R16,16
03F2 10E0 ldi R17,0
03F4 9B01 movw R18,R22
03F6 0E940000 xcall empy16s
03FA 1801 movw R2,R16
03FC 80E0 ldi R24,<_gui_disp_buf
03FE 90E0 ldi R25,>_gui_disp_buf
0400 280E add R2,R24
0402 391E adc R3,R25
0404 2A01 movw R4,R20
0406 5694 lsr R5
0408 4794 ror R4
040A 5694 lsr R5
040C 4794 ror R4
040E 5694 lsr R5
0410 4794 ror R4
0412 420C add R4,R2
0414 531C adc R5,R3
0416 80E0 ldi R24,<_DCB_HEX_TAB
0418 90E0 ldi R25,>_DCB_HEX_TAB
041A FA01 movw R30,R20
041C E770 andi R30,7
041E F070 andi R31,0
0420 E80F add R30,R24
0422 F91F adc R31,R25
0424 E491 lpm R30,Z
0426 D201 movw R26,R4
0428 2C90 ld R2,x
042A 2E2A or R2,R30
042C 2C92 st x,R2
042E 20C0 xjmp L81
0430 L80:
0430 .dbline 449
0430 ; else gui_disp_buf[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
0430 00E1 ldi R16,16
0432 10E0 ldi R17,0
0434 9B01 movw R18,R22
0436 0E940000 xcall empy16s
043A 1801 movw R2,R16
043C 80E0 ldi R24,<_gui_disp_buf
043E 90E0 ldi R25,>_gui_disp_buf
0440 280E add R2,R24
0442 391E adc R3,R25
0444 2A01 movw R4,R20
0446 5694 lsr R5
0448 4794 ror R4
044A 5694 lsr R5
044C 4794 ror R4
044E 5694 lsr R5
0450 4794 ror R4
0452 420C add R4,R2
0454 531C adc R5,R3
0456 80E0 ldi R24,<_DCB_HEX_TAB
0458 90E0 ldi R25,>_DCB_HEX_TAB
045A FA01 movw R30,R20
045C E770 andi R30,7
045E F070 andi R31,0
0460 E80F add R30,R24
0462 F91F adc R31,R25
0464 E491 lpm R30,Z
0466 E095 com R30
0468 D201 movw R26,R4
046A 2C90 ld R2,x
046C 2E22 and R2,R30
046E 2C92 st x,R2
0470 L81:
0470 .dbline 451
0470 ; /* 刷新显示(一次刷新一字节) */
0470 ; if( (x0&0x07)==0x07 ) LCD_UpdatePoint(x0, y0);
0470 CA01 movw R24,R20
0472 8770 andi R24,7
0474 9070 andi R25,0
0476 8730 cpi R24,7
0478 E0E0 ldi R30,0
047A 9E07 cpc R25,R30
047C 19F4 brne L82
047E .dbline 451
047E 9B01 movw R18,R22
0480 8A01 movw R16,R20
0482 9EDE xcall _LCD_UpdatePoint
0484 L82:
0484 .dbline 453
0484 ;
0484 ; x0++;
0484 4F5F subi R20,255 ; offset = 1
0486 5F4F sbci R21,255
0488 .dbline 454
0488 L78:
0488 .dbline 454
0488 ; }while(x1>x0);
0488 4A15 cp R20,R10
048A 5B05 cpc R21,R11
048C 08F4 brsh X0
048E AECF xjmp L77
0490 X0:
0490 .dbline 457
0490 ;
0490 ; /* 对最后一点显示操作 */
0490 ; if(0!=color) gui_disp_buf[y0][x0>>3] |= DCB_HEX_TAB[x0&0x07];
0490 CC20 tst R12
0492 01F1 breq L84
0494 .dbline 457
0494 00E1 ldi R16,16
0496 10E0 ldi R17,0
0498 9B01 movw R18,R22
049A 0E940000 xcall empy16s
049E 1801 movw R2,R16
04A0 80E0 ldi R24,<_gui_disp_buf
04A2 90E0 ldi R25,>_gui_disp_buf
04A4 280E add R2,R24
04A6 391E adc R3,R25
04A8 2A01 movw R4,R20
04AA 5694 lsr R5
04AC 4794 ror R4
04AE 5694 lsr R5
04B0 4794 ror R4
04B2 5694 lsr R5
04B4 4794 ror R4
04B6 420C add R4,R2
04B8 531C adc R5,R3
04BA 80E0 ldi R24,<_DCB_HEX_TAB
04BC 90E0 ldi R25,>_DCB_HEX_TAB
04BE FA01 movw R30,R20
04C0 E770 andi R30,7
04C2 F070 andi R31,0
0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -