📄 128_lcd.lst
字号:
0B24 9456 LSR R5
0B25 9447 ROR R4
0B26 9456 LSR R5
0B27 9447 ROR R4
0B28 9456 LSR R5
0B29 9447 ROR R4
0B2A 0C42 ADD R4,R2
0B2B 1C53 ADC R5,R3
0B2C E788 LDI R24,0x78
0B2D E091 LDI R25,1
0B2E 01FA MOVW R30,R20
0B2F 70E7 ANDI R30,7
0B30 70F0 ANDI R31,0
0B31 0FE8 ADD R30,R24
0B32 1FF9 ADC R31,R25
0B33 91E4 LPM R30,0(Z)
0B34 01D2 MOVW R26,R4
0B35 902C LD R2,0(X)
0B36 2A2E OR R2,R30
0B37 922C ST R2,0(X)
0B38 C020 RJMP 0x0B59
(0458) else gui_disp_buf[y0][x0>>3] &= (~DCB_HEX_TAB[x0&0x07]);
0B39 E100 LDI R16,0x10
0B3A E010 LDI R17,0
0B3B 019B MOVW R18,R22
0B3C 940E3B85 CALL empy16s
0B3E 0118 MOVW R2,R16
0B3F E48E LDI R24,0x4E
0B40 E091 LDI R25,1
0B41 0E28 ADD R2,R24
0B42 1E39 ADC R3,R25
0B43 012A MOVW R4,R20
0B44 9456 LSR R5
0B45 9447 ROR R4
0B46 9456 LSR R5
0B47 9447 ROR R4
0B48 9456 LSR R5
0B49 9447 ROR R4
0B4A 0C42 ADD R4,R2
0B4B 1C53 ADC R5,R3
0B4C E788 LDI R24,0x78
0B4D E091 LDI R25,1
0B4E 01FA MOVW R30,R20
0B4F 70E7 ANDI R30,7
0B50 70F0 ANDI R31,0
0B51 0FE8 ADD R30,R24
0B52 1FF9 ADC R31,R25
0B53 91E4 LPM R30,0(Z)
0B54 95E0 COM R30
0B55 01D2 MOVW R26,R4
0B56 902C LD R2,0(X)
0B57 222E AND R2,R30
0B58 922C ST R2,0(X)
(0459) LCD_UpdatePoint(x0, y0);
0B59 019B MOVW R18,R22
0B5A 018A MOVW R16,R20
0B5B DE53 RCALL _LCD_UpdatePoint
0B5C 9621 ADIW R28,1
0B5D 940E3B9E CALL pop_gset5
0B5F 9508 RET
_GUI_RLine:
bak --> R14
color --> R20
y1 --> R22
y0 --> R10
x0 --> R12
0B60 940E3BA1 CALL push_gset5
0B62 0159 MOVW R10,R18
0B63 0168 MOVW R12,R16
0B64 9721 SBIW R28,1
0B65 856B LDD R22,Y+11
0B66 857C LDD R23,Y+12
0B67 854D LDD R20,Y+13
(0460) }
(0461)
(0462)
(0463) /****************************************************************************
(0464) * 名称:GUI_RLine()
(0465) * 功能:画垂直线。
(0466) * 入口参数: x0 垂直线起点所在列的位置
(0467) * y0 垂直线起点所在行的位置
(0468) * y1 垂直线终点所在行的位置
(0469) * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
(0470) * 出口参数:无
(0471) * 说明:操作失败原因是指定地址超出缓冲区范围。
(0472) ****************************************************************************/
(0473) void GUI_RLine(uint32 x0, uint32 y0, uint32 y1, uint8 color)
(0474) { uint32 bak;
(0475)
(0476) if(y0>y1) // 对y0、y1大小进行排列,以便画图
0B68 156A CP R22,R10
0B69 057B CPC R23,R11
0B6A F418 BCC 0x0B6E
(0477) { bak = y1;
0B6B 017B MOVW R14,R22
(0478) y1 = y0;
0B6C 01B5 MOVW R22,R10
(0479) y0 = bak;
0B6D 0157 MOVW R10,R14
(0480) }
(0481) if(y0==y1)
0B6E 16A6 CP R10,R22
0B6F 06B7 CPC R11,R23
0B70 F429 BNE 0x0B76
(0482) { GUI_Point(x0, y0, color);
0B71 8348 STD Y+0,R20
0B72 0195 MOVW R18,R10
0B73 0186 MOVW R16,R12
0B74 DEA1 RCALL _GUI_Point
(0483) return;
0B75 C00E RJMP 0x0B84
(0484) }
(0485)
(0486) do
(0487) { GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
0B76 8348 STD Y+0,R20
0B77 0195 MOVW R18,R10
0B78 0186 MOVW R16,R12
0B79 DE9C RCALL _GUI_Point
(0488) y0++;
0B7A 01C5 MOVW R24,R10
0B7B 9601 ADIW R24,1
0B7C 015C MOVW R10,R24
(0489) }while(y1>y0);
0B7D 16A6 CP R10,R22
0B7E 06B7 CPC R11,R23
0B7F F3B0 BCS 0x0B76
(0490) GUI_Point(x0, y0, color);
0B80 8348 STD Y+0,R20
0B81 0195 MOVW R18,R10
0B82 0186 MOVW R16,R12
0B83 DE92 RCALL _GUI_Point
0B84 9621 ADIW R28,1
0B85 940E3B9E CALL pop_gset5
0B87 9508 RET
_GUI_WindowsDraw:
bak2 --> R20
bak1 --> R22
str --> R10
bak --> R12
win --> R14
0B88 940E3BA1 CALL push_gset5
0B8A 0178 MOVW R14,R16
0B8B 9725 SBIW R28,5
FILE: G:\IccPro\mega128_lcd\ZLG_GUI\windows.c
(0001) /****************************************************************************************
(0002) * 文件名:WINDOW.C
(0003) * 功能:窗口管理。将进行各种窗口的给制及窗口内部控制。
(0004) * 作者:黄绍斌
(0005) * 日期:2004.02.26
(0006) * 备注:
(0007) ****************************************************************************************/
(0008) #include "config.h"
(0009)
(0010) #if GUI_WINDOW_EN==1
(0011) /****************************************************************************
(0012) * 名称:GUI_WindowsDraw()
(0013) * 功能:显示窗口。根据提供的窗口参数进行画窗口。
(0014) * 入口参数:win 窗口句柄
(0015) * 出口参数:返回0表示操作失败,返回1表示操作成功
(0016) ****************************************************************************/
(0017) uint8 GUI_WindowsDraw(WINDOWS *win)
(0018) { uint8 *str;
(0019) int32 bak, bak1, bak2;
(0020)
(0021) /* 参数过滤,若窗口起出范围,则返回0 */
(0022) if( ( (win->with)<20 ) || ( (win->hight)<20 ) ) return(0); // 宽度、高度检查,限制最小窗口
0B8C 01F7 MOVW R30,R14
0B8D 8184 LDD R24,Z+4
0B8E 8195 LDD R25,Z+5
0B8F 3184 CPI R24,0x14
0B90 E0E0 LDI R30,0
0B91 079E CPC R25,R30
0B92 F038 BCS 0x0B9A
0B93 01F7 MOVW R30,R14
0B94 8186 LDD R24,Z+6
0B95 8197 LDD R25,Z+7
0B96 3184 CPI R24,0x14
0B97 E0E0 LDI R30,0
0B98 079E CPC R25,R30
0B99 F410 BCC 0x0B9C
0B9A 2700 CLR R16
0B9B C142 RJMP 0x0CDE
(0023) if( (win->x + win->with ) > GUI_LCM_XMAX ) return(0); // 窗口宽度是否溢出
0B9C 01F7 MOVW R30,R14
0B9D 8024 LDD R2,Z+4
0B9E 8035 LDD R3,Z+5
0B9F 01F7 MOVW R30,R14
0BA0 8040 LDD R4,Z+0
0BA1 8051 LDD R5,Z+1
0BA2 0C42 ADD R4,R2
0BA3 1C53 ADC R5,R3
0BA4 EF80 LDI R24,0xF0
0BA5 E090 LDI R25,0
0BA6 1584 CP R24,R4
0BA7 0595 CPC R25,R5
0BA8 F410 BCC 0x0BAB
0BA9 2700 CLR R16
0BAA C133 RJMP 0x0CDE
(0024) if( (win->y + win->hight ) > GUI_LCM_YMAX ) return(0); // 窗口高度是否溢出
0BAB 01F7 MOVW R30,R14
0BAC 8026 LDD R2,Z+6
0BAD 8037 LDD R3,Z+7
0BAE 01F7 MOVW R30,R14
0BAF 8042 LDD R4,Z+2
0BB0 8053 LDD R5,Z+3
0BB1 0C42 ADD R4,R2
0BB2 1C53 ADC R5,R3
0BB3 E880 LDI R24,0x80
0BB4 E090 LDI R25,0
0BB5 1584 CP R24,R4
0BB6 0595 CPC R25,R5
0BB7 F410 BCC 0x0BBA
0BB8 2700 CLR R16
0BB9 C124 RJMP 0x0CDE
(0025)
(0026) /* 开始画窗口 */
(0027) GUI_RectangleFill(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, back_color);
0BBA 9020054E LDS R2,back_color
0BBC 822C STD Y+4,R2
0BBD 01F7 MOVW R30,R14
0BBE 8022 LDD R2,Z+2
0BBF 8033 LDD R3,Z+3
0BC0 01F7 MOVW R30,R14
0BC1 8046 LDD R4,Z+6
0BC2 8057 LDD R5,Z+7
0BC3 01C1 MOVW R24,R2
0BC4 0D84 ADD R24,R4
0BC5 1D95 ADC R25,R5
0BC6 9701 SBIW R24,1
0BC7 839B STD Y+3,R25
0BC8 838A STD Y+2,R24
0BC9 01F7 MOVW R30,R14
0BCA 8040 LDD R4,Z+0
0BCB 8051 LDD R5,Z+1
0BCC 8064 LDD R6,Z+4
0BCD 8075 LDD R7,Z+5
0BCE 01C2 MOVW R24,R4
0BCF 0D86 ADD R24,R6
0BD0 1D97 ADC R25,R7
0BD1 9701 SBIW R24,1
0BD2 8399 STD Y+1,R25
0BD3 8388 STD Y+0,R24
0BD4 0191 MOVW R18,R2
0BD5 0182 MOVW R16,R4
0BD6 940E103E CALL _GUI_RectangleFill
(0028) GUI_Rectangle(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, disp_color); // 画窗口
0BD8 9020054F LDS R2,disp_color
0BDA 822C STD Y+4,R2
0BDB 01F7 MOVW R30,R14
0BDC 8022 LDD R2,Z+2
0BDD 8033 LDD R3,Z+3
0BDE 01F7 MOVW R30,R14
0BDF 8046 LDD R4,Z+6
0BE0 8057 LDD R5,Z+7
0BE1 01C1 MOVW R24,R2
0BE2 0D84 ADD R24,R4
0BE3 1D95 ADC R25,R5
0BE4 9701 SBIW R24,1
0BE5 839B STD Y+3,R25
0BE6 838A STD Y+2,R24
0BE7 01F7 MOVW R30,R14
0BE8 8040 LDD R4,Z+0
0BE9 8051 LDD R5,Z+1
0BEA 8064 LDD R6,Z+4
0BEB 8075 LDD R7,Z+5
0BEC 01C2 MOVW R24,R4
0BED 0D86 ADD R24,R6
0BEE 1D97 ADC R25,R7
0BEF 9701 SBIW R24,1
0BF0 8399 STD Y+1,R25
0BF1 8388 STD Y+0,R24
0BF2 0191 MOVW R18,R2
0BF3 0182 MOVW R16,R4
0BF4 940E100E CALL _GUI_Rectangle
(0029) GUI_HLine(win->x, win->y + 12, win->x + win->with - 1, disp_color); // 画标题目栏
0BF6 9020054F LDS R2,disp_color
0BF8 822A STD Y+2,R2
0BF9 01F7 MOVW R30,R14
0BFA 8020 LDD R2,Z+0
0BFB 8031 LDD R3,Z+1
0BFC 8044 LDD R4,Z+4
0BFD 8055 LDD R5,Z+5
0BFE 01C1 MOVW R24,R2
0BFF 0D84 ADD R24,R4
0C00 1D95 ADC R25,R5
0C01 9701 SBIW R24,1
0C02 8399 STD Y+1,R25
0C03 8388 STD Y+0,R24
0C04 01F7 MOVW R30,R14
0C05 8122 LDD R18,Z+2
0C06 8133 LDD R19,Z+3
0C07 5F24 SUBI R18,0xF4
0C08 4F3F SBCI R19,0xFF
0C09 0181 MOVW R16,R2
0C0A 940E0AAF CALL _GUI_HLine
(0030) GUI_RLine(win->x + 12, win->y, win->y + 12, disp_color); // 画关闭窗号按钮
0C0C 9020054F LDS R2,disp_color
0C0E 822A STD Y+2,R2
0C0F 01F7 MOVW R30,R14
0C10 8022 LDD R2,Z+2
0C11 8033 LDD R3,Z+3
0C12 01C1 MOVW R24,R2
0C13 960C ADIW R24,0xC
0C14 8399 STD Y+1,R25
0C15 8388 STD Y+0,R24
0C16 0191 MOVW R18,R2
0C17 01F7 MOVW R30,R14
0C18 8100 LDD R16,Z+0
0C19 8111 LDD R17,Z+1
0C1A 5F04 SUBI R16,0xF4
0C1B 4F1F SBCI R17,0xFF
0C1C 940E0B60 CALL _GUI_RLine
(0031) GUI_Line(win->x, win->y, win->x + 12, win->y + 12, disp_color);
0C1E 9020054F LDS R2,disp_color
0C20 822C STD Y+4,R2
0C21 01F7 MOVW R30,R14
0C22 8022 LDD R2,Z+2
0C23 8033 LDD R3,Z+3
0C24 01C1 MOVW R24,R2
0C25 960C ADIW R24,0xC
0C26 839B STD Y+3,R25
0C27 838A STD Y+2,R24
0C28 01F7 MOVW R30,R14
0C29 8040 LDD R4,Z+0
0C2A 8051 LDD R5,Z+1
0C2B 01C2 MOVW R24,R4
0C2C 960C ADIW R24,0xC
0C2D 8399 STD Y+1,R25
0C2E 8388 STD Y+0,R24
0C2F 0191 MOVW R18,R2
0C30 0182 MOVW R16,R4
0C31 940E10B5 CALL _GUI_Line
(0032) GUI_Line(win->x + 12, win->y, win->x, win->y + 12, disp_color);
0C33 9020054F LDS R2,disp_color
0C35 822C STD Y+4,R2
0C36 01F7 MOVW R30,R14
0C37 8022 LDD R2,Z+2
0C38 8033 LDD R3,Z+3
0C39 01C1 MOVW R24,R2
0C3A 960C ADIW R24,0xC
0C3B 839B STD Y+3,R25
0C3C 838A STD Y+2,R24
0C3D 01F7 MOVW R30,R14
0C3E 8040 LDD R4,Z+0
0C3F 8051 LDD R5,Z+1
0C40 8259 STD Y+1,R5
0C41 8248 STD Y+0,R4
0C42 0191 MOVW R18,R2
0C43 0182 MOVW R16,R4
0C44 5F04 SUBI R16,0xF4
0C45 4F1F SBCI R17,0xFF
0C46 940E10B5 CALL _GUI_Line
(0033)
(0034)
(0035) /* 写标题 */
(0036) if( win->title != NULL )
0C48 01F7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -