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

📄 gui_basic.lis

📁 ssd1325控制器液晶的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02A4 0B8A              std y+19,R0
 02A6                   .dbline 166
 02A6           ;          }
 02A6           L42:
 02A6                   .dbline 167
 02A6           L39:
 02A6                   .dbline 157
 02A6 0988              ldd R0,y+17
 02A8 1A88              ldd R1,y+18
 02AA 0D89              ldd R16,y+21
 02AC 1E89              ldd R17,y+22
 02AE 0016              cp R0,R16
 02B0 1106              cpc R1,R17
 02B2 81F6              brne L38
 02B4                   .dbline 168
 02B4           ;       }
 02B4           ;       GUI_Point(x0, y0, color);               // 显示最后一点
 02B4 098C              ldd R0,y+25
 02B6 0882              std y+0,R0
 02B8 2B89              ldd R18,y+19
 02BA 3C89              ldd R19,y+20
 02BC 0989              ldd R16,y+17
 02BE 1A89              ldd R17,y+18
 02C0 0E940000          xcall _GUI_Point
 02C4                   .dbline 169
 02C4           ;    }
 02C4 3EC0              xjmp L37
 02C6           L36:
 02C6                   .dbline 171
 02C6           ;    else                                                               // 对于dx<dy,则使用y轴为基准
 02C6           ;    {  di = dx_x2 - dy;
 02C6                   .dbline 171
 02C6 2D80              ldd R2,y+5
 02C8 3E80              ldd R3,y+6
 02CA 7B01              movw R14,R22
 02CC E218              sub R14,R2
 02CE F308              sbc R15,R3
 02D0 29C0              xjmp L44
 02D2           L43:
 02D2                   .dbline 173
 02D2           ;       while(y0!=y1)
 02D2           ;       {  GUI_Point(x0, y0, color);
 02D2                   .dbline 173
 02D2 098C              ldd R0,y+25
 02D4 0882              std y+0,R0
 02D6 2B89              ldd R18,y+19
 02D8 3C89              ldd R19,y+20
 02DA 0989              ldd R16,y+17
 02DC 1A89              ldd R17,y+18
 02DE 0E940000          xcall _GUI_Point
 02E2                   .dbline 174
 02E2           ;          y0 += dy_sym;
 02E2 2A2C              mov R2,R10
 02E4 3324              clr R3
 02E6 27FC              sbrc R2,7
 02E8 3094              com R3
 02EA 0B88              ldd R0,y+19
 02EC 1C88              ldd R1,y+20
 02EE 020C              add R0,R2
 02F0 131C              adc R1,R3
 02F2 1C8A              std y+20,R1
 02F4 0B8A              std y+19,R0
 02F6                   .dbline 175
 02F6           ;          if(di<0)
 02F6 C701              movw R24,R14
 02F8 8030              cpi R24,0
 02FA E0E0              ldi R30,0
 02FC 9E07              cpc R25,R30
 02FE 1CF4              brge L46
 0300                   .dbline 176
 0300           ;          {  di += dx_x2;
 0300                   .dbline 176
 0300 E60E              add R14,R22
 0302 F71E              adc R15,R23
 0304                   .dbline 177
 0304           ;          }
 0304 0FC0              xjmp L47
 0306           L46:
 0306                   .dbline 179
 0306           ;          else
 0306           ;          {  di += dx_x2 - dy_x2;
 0306                   .dbline 179
 0306 1B01              movw R2,R22
 0308 241A              sub R2,R20
 030A 350A              sbc R3,R21
 030C E20C              add R14,R2
 030E F31C              adc R15,R3
 0310                   .dbline 180
 0310           ;             x0 += dx_sym;
 0310 2C2C              mov R2,R12
 0312 3324              clr R3
 0314 27FC              sbrc R2,7
 0316 3094              com R3
 0318 0988              ldd R0,y+17
 031A 1A88              ldd R1,y+18
 031C 020C              add R0,R2
 031E 131C              adc R1,R3
 0320 1A8A              std y+18,R1
 0322 098A              std y+17,R0
 0324                   .dbline 181
 0324           ;          }
 0324           L47:
 0324                   .dbline 182
 0324           L44:
 0324                   .dbline 172
 0324 0B88              ldd R0,y+19
 0326 1C88              ldd R1,y+20
 0328 0F89              ldd R16,y+23
 032A 188D              ldd R17,y+24
 032C 0016              cp R0,R16
 032E 1106              cpc R1,R17
 0330 81F6              brne L43
 0332                   .dbline 183
 0332 098C              ldd R0,y+25
 0334 0882              std y+0,R0
 0336 2B89              ldd R18,y+19
 0338 3C89              ldd R19,y+20
 033A 0989              ldd R16,y+17
 033C 1A89              ldd R17,y+18
 033E 0E940000          xcall _GUI_Point
 0342                   .dbline 184
 0342           L37:
 0342                   .dbline -2
 0342           L27:
 0342 2796              adiw R28,7
 0344 0E940000          xcall pop_gset5
 0348 2496              adiw R28,4
 034A                   .dbline 0 ; func end
 034A 0895              ret
 034C                   .dbsym l dy 5 I
 034C                   .dbsym l dx 3 I
 034C                   .dbsym r dy_x2 20 I
 034C                   .dbsym r dx_x2 22 I
 034C                   .dbsym r dy_sym 10 C
 034C                   .dbsym r dx_sym 12 C
 034C                   .dbsym r di 14 I
 034C                   .dbsym l color 25 c
 034C                   .dbsym l y1 23 i
 034C                   .dbsym l x1 21 i
 034C                   .dbsym l y0 19 i
 034C                   .dbsym l x0 17 i
 034C                   .dbend
 034C                   .dbfunc e GUI_LineWith _GUI_LineWith fV
 034C           ;             dy -> y+11
 034C           ;             dx -> y+9
 034C           ;          dy_x2 -> y+7
 034C           ;          dx_x2 -> y+5
 034C           ;         dy_sym -> R14
 034C           ;         dx_sym -> R22
 034C           ;             wy -> y+3
 034C           ;             di -> R12,R13
 034C           ;         draw_b -> R10,R11
 034C           ;             wx -> R6,R7
 034C           ;         draw_a -> R20,R21
 034C           ;          color -> y+33
 034C           ;           with -> R20
 034C           ;             y1 -> y+29
 034C           ;             x1 -> y+27
 034C           ;             y0 -> y+25
 034C           ;             x0 -> y+23
                        .even
 034C           _GUI_LineWith::
 034C 0E940000          xcall push_arg4
 0350 0E940000          xcall push_gset5
 0354 2D97              sbiw R28,13
 0356 4F8D              ldd R20,y+31
 0358                   .dbline -1
 0358                   .dbline 203
 0358           ;       }
 0358           ;       GUI_Point(x0, y0, color);               // 显示最后一点
 0358           ;    } 
 0358           ;   
 0358           ; }
 0358           ; 
 0358           ; 
 0358           ; #if   GUI_LineWith_EN==1
 0358           ; /****************************************************************************
 0358           ; * 名称:GUI_LineWith()
 0358           ; * 功能:画任意两点之间的直线,并且可设置线的宽度。
 0358           ; * 入口参数: x0               直线起点的x坐标值
 0358           ; *           y0                直线起点的y坐标值
 0358           ; *           x1      直线终点的x坐标值
 0358           ; *           y1      直线终点的y坐标值
 0358           ; *           with    线宽(0-50)
 0358           ; *           color     显示颜色
 0358           ; * 出口参数:无
 0358           ; * 说明:操作失败原因是指定地址超出有效范围。
 0358           ; ****************************************************************************/
 0358           ; void  GUI_LineWith(uint32 x0, uint32 y0, uint32 x1, uint32 y1, uint8 with, TCOLOR color)
 0358           ; {  int32   dx;                                                // 直线x轴差值变量
 0358                   .dbline 215
 0358           ;    int32   dy;                                // 直线y轴差值变量
 0358           ;    int8    dx_sym;                                    // x轴增长方向,为-1时减值方向,为1时增值方向
 0358           ;    int8    dy_sym;                                    // y轴增长方向,为-1时减值方向,为1时增值方向
 0358           ;    int32   dx_x2;                                     // dx*2值变量,用于加快运算速度
 0358           ;    int32   dy_x2;                                     // dy*2值变量,用于加快运算速度
 0358           ;    int32   di;                                                // 决策变量
 0358           ;    
 0358           ;    int32   wx, wy;                                    // 线宽变量
 0358           ;    int32   draw_a, draw_b;
 0358           ;    
 0358           ;    /* 参数过滤 */
 0358           ;    if(with==0) return;
 0358 4423              tst R20
 035A 09F4              brne L49
 035C                   .dbline 215
 035C ACC1              xjmp L48
 035E           L49:
 035E                   .dbline 216
 035E           ;    if(with>50) with = 50;
 035E 82E3              ldi R24,50
 0360 8417              cp R24,R20
 0362 08F4              brsh L51
 0364                   .dbline 216
 0364 42E3              ldi R20,50
 0366           L51:
 0366                   .dbline 218
 0366           ;    
 0366           ;    dx = x1-x0;                                                // 求取两点之间的差值
 0366 2B8C              ldd R2,y+27
 0368 3C8C              ldd R3,y+28
 036A 0F88              ldd R0,y+23
 036C 188C              ldd R1,y+24
 036E 2018              sub R2,R0
 0370 3108              sbc R3,R1
 0372 3A86              std y+10,R3
 0374 2986              std y+9,R2
 0376                   .dbline 219
 0376           ;    dy = y1-y0;
 0376 2D8C              ldd R2,y+29
 0378 3E8C              ldd R3,y+30
 037A 098C              ldd R0,y+25
 037C 1A8C              ldd R1,y+26
 037E 2018              sub R2,R0
 0380 3108              sbc R3,R1
 0382 3C86              std y+12,R3
 0384 2B86              std y+11,R2
 0386                   .dbline 221
 0386           ;    
 0386           ;    wx = with/2;
 0386 22E0              ldi R18,2
 0388 30E0              ldi R19,0
 038A 042F              mov R16,R20
 038C 1127              clr R17
 038E 0E940000          xcall div16s
 0392 3801              movw R6,R16
 0394                   .dbline 222
 0394           ;    wy = with-wx-1;
 0394 842F              mov R24,R20
 0396 9927              clr R25
 0398 801B              sub R24,R16
 039A 910B              sbc R25,R17
 039C 0197              sbiw R24,1
 039E 9C83              std y+4,R25
 03A0 8B83              std y+3,R24
 03A2                   .dbline 225
 03A2           ;    
 03A2           ;    /* 判断增长方向,或是否为水平线、垂直线、点 */
 03A2           ;    if(dx>0)                                                   // 判断x轴方向
 03A2 2224              clr R2
 03A4 3324              clr R3
 03A6 4984              ldd R4,y+9
 03A8 5A84              ldd R5,y+10
 03AA 2414              cp R2,R4
 03AC 3504              cpc R3,R5
 03AE 14F4              brge L53
 03B0                   .dbline 226
 03B0           ;    {  dx_sym = 1;                                     // dx>0,设置dx_sym=1
 03B0                   .dbline 226
 03B0 61E0              ldi R22,1
 03B2                   .dbline 227
 03B2           ;    }
 03B2 39C0              xjmp L54
 03B4           L53:
 03B4                   .dbline 229
 03B4           ;    else
 03B4           ;    {  if(dx<0)
 03B4                   .dbline 229
 03B4 8985              ldd R24,y+9
 03B6 9A85              ldd R25,y+10
 03B8 8030              cpi R24,0
 03BA E0E0              ldi R30,0
 03BC 9E07              cpc R25,R30
 03BE 14F4              brge L55
 03C0                   .dbline 230
 03C0           ;       {  dx_sym = -1;                         // dx<0,设置dx_sym=-1
 03C0                   .dbline 230
 03C0 6FEF              ldi R22,255
 03C2                   .dbline 231
 03C2           ;       }
 03C2 31C0              xjmp L56
 03C4           L55:
 03C4                   .dbline 233
 03C4           ;       else
 03C4           ;       {  /* dx==0,画垂直线,或一点 */
 03C4                   .dbline 234
 03C4           ;          wx = x0-wx;
 03C4 2F88              ldd R2,y+23
 03C6 388C              ldd R3,y+24
 03C8 2618              sub R2,R6
 03CA 3708              sbc R3,R7
 03CC 3101              movw R6,R2
 03CE                   .dbline 235
 03CE           ;          if(wx<0) wx = 0;
 03CE C101              movw R24,R2
 03D0 8030              cpi R24,0
 03D2 E0E0              ldi R30,0
 03D4 9E07              cpc R25,R30
 03D6 14F4              brge L57
 03D8                   .dbline 235
 03D8 6624              clr R6
 03DA 7724              clr R7
 03DC           L57:
 03DC                   .dbline 236
 03DC           ;          wy = x0+wy;
 03DC 2B80              ldd R2,y+3
 03DE 3C80              ldd R3,y+4
 03E0 4F88              ldd R4,y+23
 03E2 588C              ldd R5,y+24
 03E4 420C              add R4,R2
 03E6 531C              adc R5,R3
 03E8 5C82              std y+4,R5
 03EA 4B82              std y+3,R4
 03EC 1AC0              xjmp L60
 03EE           L59:
 03EE                   .dbline 239
 03EE           ;          
 03EE           ;          while(1)
 03EE           ;          {  x0 = wx;

⌨️ 快捷键说明

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