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

📄 windows.lis

📁 ssd1325控制器液晶的驱动程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module windows.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\IccPro\mega128_lcd\ZLG_GUI\windows.c
 0000                   .dbfunc e GUI_WindowsDraw _GUI_WindowsDraw fc
 0000           ;           bak2 -> R20,R21
 0000           ;           bak1 -> R22,R23
 0000           ;            str -> R10,R11
 0000           ;            bak -> R12,R13
 0000           ;            win -> R14,R15
                        .even
 0000           _GUI_WindowsDraw::
 0000 0E940000          xcall push_gset5
 0004 7801              movw R14,R16
 0006 2597              sbiw R28,5
 0008                   .dbline -1
 0008                   .dbline 18
 0008           ; /****************************************************************************************
 0008           ; * 文件名:WINDOW.C
 0008           ; * 功能:窗口管理。将进行各种窗口的给制及窗口内部控制。
 0008           ; * 作者:黄绍斌
 0008           ; * 日期:2004.02.26
 0008           ; * 备注:
 0008           ; ****************************************************************************************/
 0008           ; #include "config.h"
 0008           ; 
 0008           ; #if  GUI_WINDOW_EN==1
 0008           ; /****************************************************************************
 0008           ; * 名称:GUI_WindowsDraw()
 0008           ; * 功能:显示窗口。根据提供的窗口参数进行画窗口。
 0008           ; * 入口参数:win               窗口句柄
 0008           ; * 出口参数:返回0表示操作失败,返回1表示操作成功
 0008           ; ****************************************************************************/
 0008           ; uint8  GUI_WindowsDraw(WINDOWS *win)
 0008           ; {  uint8  *str;
 0008                   .dbline 22
 0008 F701              movw R30,R14
 000A 8481              ldd R24,z+4
 000C 9581              ldd R25,z+5
 000E 8431              cpi R24,20
 0010 E0E0              ldi R30,0
 0012 9E07              cpc R25,R30
 0014 38F0              brlo L10
 0016 F701              movw R30,R14
 0018 8681              ldd R24,z+6
 001A 9781              ldd R25,z+7
 001C 8431              cpi R24,20
 001E E0E0              ldi R30,0
 0020 9E07              cpc R25,R30
 0022 10F4              brsh L8
 0024           L10:
 0024                   .dbline 22
 0024           ;    int32  bak, bak1, bak2;
 0024           ;    
 0024           ;    /* 参数过滤,若窗口起出范围,则返回0 */
 0024           ;    if( ( (win->with)<20 ) || ( (win->hight)<20 ) ) return(0);         // 宽度、高度检查,限制最小窗口
 0024 0027              clr R16
 0026 42C1              xjmp L7
 0028           L8:
 0028                   .dbline 23
 0028           ;    if( (win->x + win->with ) > GUI_LCM_XMAX ) return(0);                      // 窗口宽度是否溢出
 0028 F701              movw R30,R14
 002A 2480              ldd R2,z+4
 002C 3580              ldd R3,z+5
 002E F701              movw R30,R14
 0030 4080              ldd R4,z+0
 0032 5180              ldd R5,z+1
 0034 420C              add R4,R2
 0036 531C              adc R5,R3
 0038 80EF              ldi R24,240
 003A 90E0              ldi R25,0
 003C 8415              cp R24,R4
 003E 9505              cpc R25,R5
 0040 10F4              brsh L11
 0042                   .dbline 23
 0042 0027              clr R16
 0044 33C1              xjmp L7
 0046           L11:
 0046                   .dbline 24
 0046           ;    if( (win->y + win->hight ) > GUI_LCM_YMAX ) return(0);                     // 窗口高度是否溢出
 0046 F701              movw R30,R14
 0048 2680              ldd R2,z+6
 004A 3780              ldd R3,z+7
 004C F701              movw R30,R14
 004E 4280              ldd R4,z+2
 0050 5380              ldd R5,z+3
 0052 420C              add R4,R2
 0054 531C              adc R5,R3
 0056 80E8              ldi R24,128
 0058 90E0              ldi R25,0
 005A 8415              cp R24,R4
 005C 9505              cpc R25,R5
 005E 10F4              brsh L13
 0060                   .dbline 24
 0060 0027              clr R16
 0062 24C1              xjmp L7
 0064           L13:
 0064                   .dbline 27
 0064           ;     
 0064           ;    /* 开始画窗口 */
 0064           ;    GUI_RectangleFill(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, back_color);
 0064 20900000          lds R2,_back_color
 0068 2C82              std y+4,R2
 006A F701              movw R30,R14
 006C 2280              ldd R2,z+2
 006E 3380              ldd R3,z+3
 0070 F701              movw R30,R14
 0072 4680              ldd R4,z+6
 0074 5780              ldd R5,z+7
 0076 C101              movw R24,R2
 0078 840D              add R24,R4
 007A 951D              adc R25,R5
 007C 0197              sbiw R24,1
 007E 9B83              std y+3,R25
 0080 8A83              std y+2,R24
 0082 F701              movw R30,R14
 0084 4080              ldd R4,z+0
 0086 5180              ldd R5,z+1
 0088 6480              ldd R6,z+4
 008A 7580              ldd R7,z+5
 008C C201              movw R24,R4
 008E 860D              add R24,R6
 0090 971D              adc R25,R7
 0092 0197              sbiw R24,1
 0094 9983              std y+1,R25
 0096 8883              std y+0,R24
 0098 9101              movw R18,R2
 009A 8201              movw R16,R4
 009C 0E940000          xcall _GUI_RectangleFill
 00A0                   .dbline 28
 00A0           ;    GUI_Rectangle(win->x, win->y, win->x + win->with - 1, win->y + win->hight - 1, disp_color);        // 画窗口
 00A0 20900000          lds R2,_disp_color
 00A4 2C82              std y+4,R2
 00A6 F701              movw R30,R14
 00A8 2280              ldd R2,z+2
 00AA 3380              ldd R3,z+3
 00AC F701              movw R30,R14
 00AE 4680              ldd R4,z+6
 00B0 5780              ldd R5,z+7
 00B2 C101              movw R24,R2
 00B4 840D              add R24,R4
 00B6 951D              adc R25,R5
 00B8 0197              sbiw R24,1
 00BA 9B83              std y+3,R25
 00BC 8A83              std y+2,R24
 00BE F701              movw R30,R14
 00C0 4080              ldd R4,z+0
 00C2 5180              ldd R5,z+1
 00C4 6480              ldd R6,z+4
 00C6 7580              ldd R7,z+5
 00C8 C201              movw R24,R4
 00CA 860D              add R24,R6
 00CC 971D              adc R25,R7
 00CE 0197              sbiw R24,1
 00D0 9983              std y+1,R25
 00D2 8883              std y+0,R24
 00D4 9101              movw R18,R2
 00D6 8201              movw R16,R4
 00D8 0E940000          xcall _GUI_Rectangle
 00DC                   .dbline 29
 00DC           ;    GUI_HLine(win->x, win->y + 12, win->x + win->with - 1, disp_color);                                                        // 画标题目栏
 00DC 20900000          lds R2,_disp_color
 00E0 2A82              std y+2,R2
 00E2 F701              movw R30,R14
 00E4 2080              ldd R2,z+0
 00E6 3180              ldd R3,z+1
 00E8 4480              ldd R4,z+4
 00EA 5580              ldd R5,z+5
 00EC C101              movw R24,R2
 00EE 840D              add R24,R4
 00F0 951D              adc R25,R5
 00F2 0197              sbiw R24,1
 00F4 9983              std y+1,R25
 00F6 8883              std y+0,R24
 00F8 F701              movw R30,R14
 00FA 2281              ldd R18,z+2
 00FC 3381              ldd R19,z+3
 00FE 245F              subi R18,244  ; offset = 12
 0100 3F4F              sbci R19,255
 0102 8101              movw R16,R2
 0104 0E940000          xcall _GUI_HLine
 0108                   .dbline 30
 0108           ;    GUI_RLine(win->x + 12, win->y, win->y + 12, disp_color);                                                                           // 画关闭窗号按钮
 0108 20900000          lds R2,_disp_color
 010C 2A82              std y+2,R2
 010E F701              movw R30,R14
 0110 2280              ldd R2,z+2
 0112 3380              ldd R3,z+3
 0114 C101              movw R24,R2
 0116 0C96              adiw R24,12
 0118 9983              std y+1,R25
 011A 8883              std y+0,R24
 011C 9101              movw R18,R2
 011E F701              movw R30,R14
 0120 0081              ldd R16,z+0
 0122 1181              ldd R17,z+1
 0124 045F              subi R16,244  ; offset = 12
 0126 1F4F              sbci R17,255
 0128 0E940000          xcall _GUI_RLine
 012C                   .dbline 31
 012C           ;    GUI_Line(win->x, win->y, win->x + 12, win->y + 12, disp_color);
 012C 20900000          lds R2,_disp_color
 0130 2C82              std y+4,R2
 0132 F701              movw R30,R14
 0134 2280              ldd R2,z+2
 0136 3380              ldd R3,z+3
 0138 C101              movw R24,R2
 013A 0C96              adiw R24,12
 013C 9B83              std y+3,R25
 013E 8A83              std y+2,R24
 0140 F701              movw R30,R14
 0142 4080              ldd R4,z+0
 0144 5180              ldd R5,z+1
 0146 C201              movw R24,R4
 0148 0C96              adiw R24,12
 014A 9983              std y+1,R25
 014C 8883              std y+0,R24
 014E 9101              movw R18,R2
 0150 8201              movw R16,R4
 0152 0E940000          xcall _GUI_Line
 0156                   .dbline 32
 0156           ;    GUI_Line(win->x + 12, win->y, win->x, win->y + 12, disp_color);
 0156 20900000          lds R2,_disp_color
 015A 2C82              std y+4,R2
 015C F701              movw R30,R14
 015E 2280              ldd R2,z+2
 0160 3380              ldd R3,z+3
 0162 C101              movw R24,R2
 0164 0C96              adiw R24,12
 0166 9B83              std y+3,R25
 0168 8A83              std y+2,R24
 016A F701              movw R30,R14
 016C 4080              ldd R4,z+0
 016E 5180              ldd R5,z+1
 0170 5982              std y+1,R5
 0172 4882              std y+0,R4
 0174 9101              movw R18,R2
 0176 8201              movw R16,R4
 0178 045F              subi R16,244  ; offset = 12
 017A 1F4F              sbci R17,255
 017C 0E940000          xcall _GUI_Line
 0180                   .dbline 36
 0180           ;    
 0180           ; 
 0180           ;    /* 写标题 */
 0180           ;    if( win->title != NULL ) 
 0180 F701              movw R30,R14
 0182 2084              ldd R2,z+8
 0184 3184              ldd R3,z+9
 0186 2220              tst R2
 0188 19F4              brne X0
 018A 3320              tst R3
 018C 09F4              brne X2
 018E 2EC0              xjmp L15
 0190           X2:
 0190           X0:
 0190                   .dbline 37
 0190           ;    {  str = win->title;
 0190                   .dbline 37
 0190 F701              movw R30,R14
 0192 A084              ldd R10,z+8
 0194 B184              ldd R11,z+9
 0196                   .dbline 38
 0196           ;       bak = win->x + 15;
 0196 F701              movw R30,R14
 0198 8081              ldd R24,z+0
 019A 9181              ldd R25,z+1
 019C 0F96              adiw R24,15
 019E 6C01              movw R12,R24
 01A0                   .dbline 39
 01A0           ;       bak1 = win->y + 3;
 01A0 6281              ldd R22,z+2
 01A2 7381              ldd R23,z+3
 01A4 6D5F              subi R22,253  ; offset = 3
 01A6 7F4F              sbci R23,255
 01A8                   .dbline 40
 01A8           ;       bak2 = win->x + win->with -1;
 01A8 F701              movw R30,R14
 01AA 2480              ldd R2,z+4
 01AC 3580              ldd R3,z+5
 01AE F701              movw R30,R14
 01B0 4081              ldd R20,z+0
 01B2 5181              ldd R21,z+1
 01B4 420D              add R20,R2
 01B6 531D              adc R21,R3
 01B8 4150              subi R20,1
 01BA 5040              sbci R21,0
 01BC 16C0              xjmp L18
 01BE           L17:
 01BE                   .dbline 43
 01BE           ;      
 01BE           ;       while(1)                                                
 01BE           ;       {  if( (bak+8) > bak2 ) break;                                                          // 判断标题是否溢出
 01BE                   .dbline 43
 01BE C601              movw R24,R12
 01C0 0896              adiw R24,8
 01C2 4817              cp R20,R24
 01C4 5907              cpc R21,R25
 01C6 0CF4              brge L20
 01C8                   .dbline 43
 01C8 11C0              xjmp L19
 01CA           L20:
 01CA                   .dbline 44
 01CA           ;          if(*str=='\0') break;                                                                                // 判断字符串是否结束
 01CA F501              movw R30,R10
 01CC 2080              ldd R2,z+0
 01CE 2220              tst R2
 01D0 09F4              brne L22
 01D2                   .dbline 44
 01D2 0CC0              xjmp L19
 01D4           L22:
 01D4                   .dbline 46
 01D4 F501              movw R30,R10
 01D6 2190              ld R2,Z+
 01D8 5F01              movw R10,R30
 01DA 2882              std y+0,R2
 01DC 9B01              movw R18,R22
 01DE 8601              movw R16,R12
 01E0 0E940000          xcall _GUI_PutChar
 01E4                   .dbline 47
 01E4 C601              movw R24,R12
 01E6 0696              adiw R24,6
 01E8 6C01              movw R12,R24
 01EA                   .dbline 48
 01EA           L18:
 01EA                   .dbline 42
 01EA E9CF              xjmp L17
 01EC           L19:
 01EC                   .dbline 49
 01EC           ;          
 01EC           ;          GUI_PutChar(bak, bak1, *str++);                                                      // 显示标题
 01EC           ;          bak += 6;
 01EC           ;       }
 01EC           ;    }
 01EC           L15:
 01EC                   .dbline 53
 01EC           ; 
 01EC           ; 
 01EC           ;    /* 写状态栏 */
 01EC           ;    if( win->state != NULL )
 01EC F701              movw R30,R14
 01EE 2284              ldd R2,z+10
 01F0 3384              ldd R3,z+11
 01F2 2220              tst R2
 01F4 19F4              brne X1
 01F6 3320              tst R3
 01F8 09F4              brne X3
 01FA 57C0              xjmp L24
 01FC           X3:
 01FC           X1:
 01FC                   .dbline 54
 01FC           ;    {  if( win->hight < 60) return(0);                                                         // 判断是否可以画状态栏
 01FC                   .dbline 54
 01FC F701              movw R30,R14
 01FE 8681              ldd R24,z+6
 0200 9781              ldd R25,z+7
 0202 8C33              cpi R24,60
 0204 E0E0              ldi R30,0
 0206 9E07              cpc R25,R30
 0208 10F4              brsh L26
 020A                   .dbline 54
 020A 0027              clr R16
 020C 4FC0              xjmp L7
 020E           L26:
 020E                   .dbline 56
 020E           ;       /* 画状态栏 */
 020E           ;       GUI_HLine(win->x, win->y + win->hight - 11, win->x + win->with - 1, disp_color);
 020E 20900000          lds R2,_disp_color
 0212 2A82              std y+2,R2
 0214 F701              movw R30,R14
 0216 2080              ldd R2,z+0
 0218 3180              ldd R3,z+1
 021A 4480              ldd R4,z+4
 021C 5580              ldd R5,z+5
 021E C101              movw R24,R2

⌨️ 快捷键说明

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