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

📄 gui.lis

📁 ICCAVR编写128*64液晶程序测试已经通过
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 063A           ;          else
 063A           ;          {
 063A                   .dbline 256
 063A           ;             di += dx_x2 - dy_x2;
 063A FE01              movw R30,R28
 063C 2384              ldd R2,z+11
 063E 3484              ldd R3,z+12
 0640 4584              ldd R4,z+13
 0642 5684              ldd R5,z+14
 0644 FE01              movw R30,R28
 0646 6780              ldd R6,z+7
 0648 7084              ldd R7,z+8
 064A 8184              ldd R8,z+9
 064C 9284              ldd R9,z+10
 064E 6218              sub R6,R2
 0650 7308              sbc R7,R3
 0652 8408              sbc R8,R4
 0654 9508              sbc R9,R5
 0656 FE01              movw R30,R28
 0658 2380              ldd R2,z+3
 065A 3480              ldd R3,z+4
 065C 4580              ldd R4,z+5
 065E 5680              ldd R5,z+6
 0660 260C              add R2,R6
 0662 371C              adc R3,R7
 0664 481C              adc R4,R8
 0666 591C              adc R5,R9
 0668 FE01              movw R30,R28
 066A 2382              std z+3,R2
 066C 3482              std z+4,R3
 066E 4582              std z+5,R4
 0670 5682              std z+6,R5
 0672                   .dbline 257
 0672           ;             x0 += dx_sym;
 0672 2C2C              mov R2,R12
 0674 3324              clr R3
 0676 27FC              sbrc R2,7
 0678 3094              com R3
 067A 4424              clr R4
 067C 37FC              sbrc R3,7
 067E 4094              com R4
 0680 5524              clr R5
 0682 47FC              sbrc R4,7
 0684 5094              com R5
 0686 FE01              movw R30,R28
 0688 61A0              ldd R6,z+33
 068A 72A0              ldd R7,z+34
 068C 83A0              ldd R8,z+35
 068E 94A0              ldd R9,z+36
 0690 620C              add R6,R2
 0692 731C              adc R7,R3
 0694 841C              adc R8,R4
 0696 951C              adc R9,R5
 0698 FE01              movw R30,R28
 069A 61A2              std z+33,R6
 069C 72A2              std z+34,R7
 069E 83A2              std z+35,R8
 06A0 94A2              std z+36,R9
 06A2                   .dbline 258
 06A2           ;          }
 06A2           L54:
 06A2                   .dbline 259
 06A2           L51:
 06A2                   .dbline 246
 06A2 FE01              movw R30,R28
 06A4 25A4              ldd R2,z+45
 06A6 36A4              ldd R3,z+46
 06A8 47A4              ldd R4,z+47
 06AA 50A8              ldd R5,z+48
 06AC FE01              movw R30,R28
 06AE 65A0              ldd R6,z+37
 06B0 76A0              ldd R7,z+38
 06B2 87A0              ldd R8,z+39
 06B4 90A4              ldd R9,z+40
 06B6 6214              cp R6,R2
 06B8 7304              cpc R7,R3
 06BA 8404              cpc R8,R4
 06BC 9504              cpc R9,R5
 06BE 09F0              breq X2
 06C0 77CF              xjmp L50
 06C2           X2:
 06C2                   .dbline 260
 06C2 E882              std y+0,R14
 06C4 FE01              movw R30,R28
 06C6 25A0              ldd R2,z+37
 06C8 36A0              ldd R3,z+38
 06CA 47A0              ldd R4,z+39
 06CC 50A4              ldd R5,z+40
 06CE 222D              mov R18,R2
 06D0 FE01              movw R30,R28
 06D2 01A1              ldd R16,z+33
 06D4 0E940000          xcall _GUI_Point
 06D8                   .dbline 261
 06D8           L44:
 06D8                   .dbline -2
 06D8           L34:
 06D8 6796              adiw R28,23
 06DA 0E940000          xcall pop_gset5
 06DE 2496              adiw R28,4
 06E0                   .dbline 0 ; func end
 06E0 0895              ret
 06E2                   .dbsym l dy 19 L
 06E2                   .dbsym l dx 15 L
 06E2                   .dbsym l dy_x2 11 L
 06E2                   .dbsym l dx_x2 7 L
 06E2                   .dbsym r dy_sym 10 C
 06E2                   .dbsym r dx_sym 12 C
 06E2                   .dbsym l di 3 L
 06E2                   .dbsym r color 14 c
 06E2                   .dbsym l y1 45 l
 06E2                   .dbsym l x1 41 l
 06E2                   .dbsym l y0 37 l
 06E2                   .dbsym l x0 33 l
 06E2                   .dbend
 06E2                   .dbfunc e GUI_LineS _GUI_LineS fV
 06E2           ;              i -> R20
 06E2           ;             y0 -> y+25
 06E2           ;             x0 -> y+21
 06E2           ;             y1 -> y+17
 06E2           ;             x1 -> y+13
 06E2           ;          color -> R22
 06E2           ;             no -> R10
 06E2           ;         points -> R12,R13
                        .even
 06E2           _GUI_LineS::
 06E2 0E940000          xcall push_gset4
 06E6 A22E              mov R10,R18
 06E8 6801              movw R12,R16
 06EA 6D97              sbiw R28,29
 06EC 6DA1              ldd R22,y+37
 06EE                   .dbline -1
 06EE                   .dbline 438
 06EE           ;       }
 06EE           ;       GUI_Point(x0, y0, color);               // 显示最后一点
 06EE           ;    }
 06EE           ; }
 06EE           ; 
 06EE           ; 
 06EE           ; #if   GUI_LineWith_EN==1
 06EE           ; /****************************************************************************
 06EE           ; * 名称:GUI_LineWith()
 06EE           ; * 功能:画任意两点之间的直线,并且可设置线的宽度。
 06EE           ; * 入口参数:x0                直线起点的x坐标值
 06EE           ; *           y0                直线起点的y坐标值
 06EE           ; *           x1          直线终点的x坐标值
 06EE           ; *           y1          直线终点的y坐标值
 06EE           ; *           with        线宽(0-50)
 06EE           ; *           color     显示颜色
 06EE           ; * 出口参数:无
 06EE           ; * 说明:操作失败原因是指定地址超出有效范围。
 06EE           ; ****************************************************************************/
 06EE           ; void  GUI_LineWith(uint32 x0, uint32 y0, uint32 x1, uint32 y1, uint8 with, TCOLOR color)
 06EE           ; {
 06EE           ;    int32   dx;                                                // 直线x轴差值变量
 06EE           ;    int32   dy;                                        // 直线y轴差值变量
 06EE           ;    int8    dx_sym;                                    // x轴增长方向,为-1时减值方向,为1时增值方向
 06EE           ;    int8    dy_sym;                                    // y轴增长方向,为-1时减值方向,为1时增值方向
 06EE           ;    int32   dx_x2;                                     // dx*2值变量,用于加快运算速度
 06EE           ;    int32   dy_x2;                                     // dy*2值变量,用于加快运算速度
 06EE           ;    int32   di;                                                // 决策变量
 06EE           ;    
 06EE           ;    int32   wx, wy;                                    // 线宽变量
 06EE           ;    int32   draw_a, draw_b;
 06EE           ;    
 06EE           ;    /* 参数过滤 */
 06EE           ;    if(with==0)
 06EE           ;       return;
 06EE           ;    if(with>50)
 06EE           ;       with = 50;
 06EE           ;    
 06EE           ;    dx = x1-x0;                                                // 求取两点之间的差值
 06EE           ;    dy = y1-y0;
 06EE           ;    
 06EE           ;    wx = with/2;
 06EE           ;    wy = with-wx-1;
 06EE           ;    
 06EE           ;    /* 判断增长方向,或是否为水平线、垂直线、点 */
 06EE           ;    if(dx>0)                                           // 判断x轴方向
 06EE           ;    {
 06EE           ;       dx_sym = 1;                                     // dx>0,设置dx_sym=1
 06EE           ;    }
 06EE           ;    else
 06EE           ;    {
 06EE           ;       if(dx<0)
 06EE           ;       {
 06EE           ;          dx_sym = -1;                                 // dx<0,设置dx_sym=-1
 06EE           ;       }
 06EE           ;       else
 06EE           ;       {  /* dx==0,画垂直线,或一点 */
 06EE           ;          wx = x0-wx;
 06EE           ;          if(wx<0)
 06EE           ;             wx = 0;
 06EE           ;          wy = x0+wy;
 06EE           ;          
 06EE           ;          while(1)
 06EE           ;          {
 06EE           ;             x0 = wx;
 06EE           ;             GUI_RLine(x0, y0, y1, color);
 06EE           ;             if(wx>=wy)
 06EE           ;                break;
 06EE           ;             wx++;
 06EE           ;          }
 06EE           ;                return;
 06EE           ;       }
 06EE           ;    }
 06EE           ;    
 06EE           ;    if(dy>0)                                           // 判断y轴方向
 06EE           ;    {
 06EE           ;       dy_sym = 1;                                     // dy>0,设置dy_sym=1
 06EE           ;    }
 06EE           ;    else
 06EE           ;    {
 06EE           ;       if(dy<0)
 06EE           ;       {
 06EE           ;          dy_sym = -1;                                 // dy<0,设置dy_sym=-1
 06EE           ;       }
 06EE           ;       else
 06EE           ;       {  /* dy==0,画水平线,或一点 */
 06EE           ;          wx = y0-wx;
 06EE           ;          if(wx<0) wx = 0;
 06EE           ;          wy = y0+wy;
 06EE           ;          
 06EE           ;          while(1)
 06EE           ;          {
 06EE           ;             y0 = wx;
 06EE           ;             GUI_HLine(x0, y0, x1, color);
 06EE           ;             if(wx>=wy)
 06EE           ;                break;
 06EE           ;             wx++;
 06EE           ;          }
 06EE           ;                return;
 06EE           ;       }
 06EE           ;    }
 06EE           ;     
 06EE           ;    /* 将dx、dy取绝对值 */
 06EE           ;    dx = dx_sym * dx;
 06EE           ;    dy = dy_sym * dy;
 06EE           ;  
 06EE           ;    /* 计算2倍的dx及dy值 */
 06EE           ;    dx_x2 = dx*2;
 06EE           ;    dy_x2 = dy*2;
 06EE           ;    
 06EE           ;    /* 使用Bresenham法进行画直线 */
 06EE           ;    if(dx>=dy)                                         // 对于dx>=dy,则使用x轴为基准
 06EE           ;    {
 06EE           ;       di = dy_x2 - dx;
 06EE           ;       while(x0!=x1)
 06EE           ;       {  /* x轴向增长,则宽度在y方向,即画垂直线 */
 06EE           ;          draw_a = y0-wx;
 06EE           ;          if(draw_a<0) draw_a = 0;
 06EE           ;          draw_b = y0+wy;
 06EE           ;          GUI_RLine(x0, draw_a, draw_b, color);
 06EE           ;          
 06EE           ;          x0 += dx_sym;                                
 06EE           ;          if(di<0)
 06EE           ;          {
 06EE           ;             di += dy_x2;                              // 计算出下一步的决策值
 06EE           ;          }
 06EE           ;          else
 06EE           ;          {
 06EE           ;             di += dy_x2 - dx_x2;
 06EE           ;             y0 += dy_sym;
 06EE           ;          }
 06EE           ;       }
 06EE           ;       draw_a = y0-wx;
 06EE           ;       if(draw_a<0)
 06EE           ;          draw_a = 0;
 06EE           ;       draw_b = y0+wy;
 06EE           ;       GUI_RLine(x0, draw_a, draw_b, color);
 06EE           ;    }
 06EE           ;    else                                                       // 对于dx<dy,则使用y轴为基准
 06EE           ;    {
 06EE           ;       di = dx_x2 - dy;
 06EE           ;       while(y0!=y1)
 06EE           ;       {  /* y轴向增长,则宽度在x方向,即画水平线 */
 06EE           ;          draw_a = x0-wx;
 06EE           ;          if(draw_a<0)
 06EE           ;             draw_a = 0;
 06EE           ;          draw_b = x0+wy;
 06EE           ;          GUI_HLine(draw_a, y0, draw_b, color);
 06EE           ;          
 06EE           ;          y0 += dy_sym;
 06EE           ;          if(di<0)
 06EE           ;          {
 06EE           ;             di += dx_x2;
 06EE           ;          }
 06EE           ;          else
 06EE           ;          {
 06EE           ;             di += dx_x2 - dy_x2;
 06EE           ;             x0 += dx_sym;
 06EE           ;          }
 06EE           ;       }
 06EE           ;       draw_a = x0-wx;
 06EE           ;       if(draw_a<0)
 06EE           ;          draw_a = 0;
 06EE           ;       draw_b = x0+wy;
 06EE           ;       GUI_HLine(draw_a, y0, draw_b, color);
 06EE           ;    }
 06EE           ; }
 06EE           ; #endif
 06EE           ; 
 06EE           ; /****************************************************************************
 06EE           ; * 名称:GUI_LineS()
 06EE           ; * 功能:多个点之间的连续连线。从第一点连到第二点,再连到第三点...
 06EE           ; * 入口参数:points      多个点坐标数据的指针,数据排列为(x0,y0)、(x1,y1)、(x2,y2)...
 06EE           ; *           no          点数目,至少要大于1
 06EE           ; *           color     显示颜色
 06EE           ; * 出口参数:无
 06EE           ; * 说明:操作失败原因是指定地址超出有效范围。
 06EE           ; ****************************************************************************/
 06EE           ; void  GUI_LineS(uint32 const *points, uint8 no, TCOLOR color)
 06EE           ; {
 06EE                   .dbline 444
 06EE           ;    uint32  x0, y0;
 06EE           ;    uint32  x1, y1;
 06EE           ;    uint8   i;
 06EE           ; 
 06EE           ;    /* 入口参数过滤 */
 06EE           ;    if(0==no)
 06EE AA20              tst R10
 06F0 09F4         

⌨️ 快捷键说明

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