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

📄 gui_basic.lst

📁 彩屏控制
💻 LST
📖 第 1 页 / 共 4 页
字号:
 242          */
 243          void    GUI_DisplayStr( INT8U xs, INT8U ys, FONT* pFont, char* Str )
 244          {
 245   1              while( *Str )
 246   1              {
 247   2                      GUI_DisplayFont( xs, ys, pFont, *Str );
 248   2                      Str ++;
 249   2                      xs += pFont->Width;
 250   2              }
 251   1      }
 252          /*
 253          ================================================================================
 254          Name: GUI_DrawCircle( )
 255          Function: Display a cycle at a special area
 256          Input:  -pCycle, A pinter point to a cycle structure
 257          Output: None
 258          Author: LiYong
 259          Date  : 2008.08.09
 260          ================================================================================
 261          */
 262          void  GUI_DrawCircle( CIRCLE* pCircle )
 263          {
 264   1         INT8S  draw_x0, draw_y0;                     // 刽图点坐标变量
 265   1         INT8S  draw_x1, draw_y1;
 266   1         INT8S  draw_x2, draw_y2;
 267   1         INT8S  draw_x3, draw_y3;
 268   1         INT8S  draw_x4, draw_y4;
 269   1         INT8S  draw_x5, draw_y5;
 270   1         INT8S  draw_x6, draw_y6;
 271   1         INT8S  draw_x7, draw_y7;
 272   1         INT8S  xx, yy;                                       // 画圆控制变量
 273   1      
 274   1         INT8S  di;                                           // 决策变量
 275   1         POINT point;
 276   1      
 277   1         point.Color = pCircle->Color;
 278   1      
 279   1         /* 参数过滤 */
 280   1         if(0 == pCircle->r ) return;
 281   1      
 282   1         /* 计算出8个特殊点(0、45、90、135、180、225、270度),进行显示 */
 283   1         point.x = draw_x0 = draw_x1 = pCircle->x;
 284   1         point.y = draw_y0 = draw_y1 = pCircle->y + pCircle->r;
 285   1      
 286   1         if( draw_y0 < GUI_LCM_YMAX ) LCDDrawPoint( &point ); // 90度
 287   1      
 288   1         point.x = draw_x2 = draw_x3 = pCircle->x;
 289   1         point.y = draw_y2 = draw_y3 = pCircle->y - pCircle->r;
 290   1         if( draw_y2 >= 0 ) LCDDrawPoint( &point );                   // 270度
 291   1      
 292   1      
 293   1         point.x = draw_x4 = draw_x6 = pCircle->x + pCircle->r;
 294   1         point.y = draw_y4 = draw_y6 = pCircle->y;
 295   1         if(draw_x4<GUI_LCM_XMAX) LCDDrawPoint( &point );     // 0度
 296   1      
 297   1         point.x = draw_x5 = draw_x7 = pCircle->x - pCircle->r;
 298   1         point.y = draw_y5 = draw_y7 = pCircle->y;
 299   1         if(draw_x5>=0) LCDDrawPoint( &point );                       // 180度
 300   1         if(1==pCircle->r) return;                                    // 若半径为1,则已圆画完
 301   1      
 302   1      
C51 COMPILER V7.50   GUI_BASIC                                                             03/30/2011 19:43:24 PAGE 6   

 303   1         /* 使用Bresenham法进行画圆 */
 304   1         di = 3 - 2*pCircle->r;                                       // 初始化决策变量
 305   1      
 306   1         xx = 0;
 307   1         yy = pCircle->r;
 308   1         while(xx<yy)
 309   1         {  if(di<0)
 310   2                {  di += 4*xx + 6;
 311   3                }
 312   2                else
 313   2                {  di += 4*(xx - yy) + 10;
 314   3      
 315   3                   yy--;
 316   3                       draw_y0--;
 317   3                       draw_y1--;
 318   3                       draw_y2++;
 319   3                       draw_y3++;
 320   3                       draw_x4--;
 321   3                       draw_x5++;
 322   3                       draw_x6--;
 323   3                       draw_x7++;
 324   3                }
 325   2      
 326   2                xx++;
 327   2                draw_x0++;
 328   2                draw_x1--;
 329   2                draw_x2++;
 330   2                draw_x3--;
 331   2                draw_y4++;
 332   2                draw_y5++;
 333   2                draw_y6--;
 334   2                draw_y7--;
 335   2      
 336   2      
 337   2                /* 要判断当前点是否在有效范围内 */
 338   2                if( (draw_x0<=GUI_LCM_XMAX)&&(draw_y0>=0) )
 339   2                {
 340   3                      point.x = draw_x0;
 341   3                      point.y = draw_y0;
 342   3                      LCDDrawPoint( &point );
 343   3                }
 344   2                if( (draw_x1>=0)&&(draw_y1>=0) )
 345   2                {
 346   3                      point.x = draw_x1;
 347   3                      point.y = draw_y1;
 348   3                      LCDDrawPoint( &point );
 349   3                }
 350   2                if( (draw_x2<=GUI_LCM_XMAX)&&(draw_y2<=GUI_LCM_YMAX) )
 351   2                {
 352   3                      point.x = draw_x2;
 353   3                      point.y = draw_y2;
 354   3                      LCDDrawPoint( &point );
 355   3                }
 356   2                if( (draw_x3>=0)&&(draw_y3<=GUI_LCM_YMAX) )
 357   2                {
 358   3                      point.x = draw_x3;
 359   3                      point.y = draw_y3;
 360   3                      LCDDrawPoint( &point );
 361   3                }
 362   2                if( (draw_x4<=GUI_LCM_XMAX)&&(draw_y4>=0) )
 363   2                {
 364   3                      point.x = draw_x4;
C51 COMPILER V7.50   GUI_BASIC                                                             03/30/2011 19:43:24 PAGE 7   

 365   3                      point.y = draw_y4;
 366   3                      LCDDrawPoint( &point );
 367   3                }
 368   2                if( (draw_x5>=0)&&(draw_y5>=0) )
 369   2                {
 370   3                      point.x = draw_x5;
 371   3                      point.y = draw_y5;
 372   3                      LCDDrawPoint( &point );
 373   3                }
 374   2                if( (draw_x6<=GUI_LCM_XMAX)&&(draw_y6<=GUI_LCM_YMAX) )
 375   2                {
 376   3                      point.x = draw_x6;
 377   3                      point.y = draw_y6;
 378   3                      LCDDrawPoint( &point );
 379   3                }
 380   2                if( (draw_x7>=0)&&(draw_y7<=GUI_LCM_YMAX) )
 381   2                {
 382   3                      point.x = draw_x7;
 383   3                      point.y = draw_y7;
 384   3                      LCDDrawPoint( &point );
 385   3                }
 386   2              }
 387   1      }
 388          /*
 389          ================================================================================
 390          Name: GUI_DrawCircleFill( )
 391          Function: Display a cycle at a special area and fill its area
 392          Input:  -pCycle, A pinter point to a cycle structure
 393          Output: None
 394          Author: LiYong
 395          Date  : 2008.08.09
 396          ================================================================================
 397          */
 398          void  GUI_DrawCircleFill( CIRCLE* pCircle )
 399          {
 400   1         INT8S  draw_x0, draw_y0;                     // 刽图点坐标变量
 401   1         INT8S  draw_x1, draw_y1;
 402   1         INT8S  draw_x2, draw_y2;
 403   1         INT8S  draw_x3, draw_y3;
 404   1         INT8S  draw_x4, draw_y4;
 405   1         INT8S  draw_x5, draw_y5;
 406   1         INT8S  draw_x6, draw_y6;
 407   1         INT8S  draw_x7, draw_y7;
 408   1         INT8S  fill_x0, fill_y0;                     // 填充所需的变量,使用垂直线填充
 409   1         INT8S  fill_x1;
 410   1         INT8S  xx, yy;                                       // 画圆控制变量
 411   1      
 412   1         INT8S  di;                                           // 决策变量
 413   1         POINT   point;
 414   1         LINE    line;
 415   1      
 416   1         point.Color = pCircle->Color;
 417   1         line.Color = pCircle->Color;
 418   1      
 419   1      
 420   1      
 421   1         /* 参数过滤 */
 422   1         if(0==pCircle->r) return;
 423   1      
 424   1         /* 计算出4个特殊点(0、90、180、270度),进行显示 */
 425   1         point.x = draw_x0 = draw_x1 = pCircle->x;
 426   1         point.y = draw_y0 = draw_y1 = pCircle->y + pCircle->r;
C51 COMPILER V7.50   GUI_BASIC                                                             03/30/2011 19:43:24 PAGE 8   

 427   1         if(draw_y0<GUI_LCM_YMAX)
 428   1         {
 429   2            LCDDrawPoint( &point );
 430   2         }
 431   1      
 432   1         point.x = draw_x2 = draw_x3 = pCircle->x;
 433   1         point.y = draw_y2 = draw_y3 = pCircle->y - pCircle->r;
 434   1         if(draw_y2>=0)
 435   1         {
 436   2                      LCDDrawPoint( &point );
 437   2         }
 438   1      
 439   1         point.x = draw_x4 = draw_x6 = pCircle->x + pCircle->r;
 440   1         point.y = draw_y4 = draw_y6 = pCircle->y;
 441   1         if(draw_x4<GUI_LCM_XMAX)
 442   1         {
 443   2                      LCDDrawPoint( &point ); // 0度
 444   2            fill_x1 = draw_x4;
 445   2         }
 446   1         else
 447   1         {
 448   2                      fill_x1 = GUI_LCM_XMAX;
 449   2         }
 450   1         fill_y0 = pCircle->y;                                                        // 设置填充线条起始点fill_x0
 451   1         fill_x0 = pCircle->x - pCircle->r;                                           // 设置填充线条结束点fill_y1
 452   1         if(fill_x0<0) fill_x0 = 0;
 453   1               line.xs = fill_x0;
 454   1               line.ys = fill_y0;
 455   1               line.ye = fill_y0;
 456   1               line.xe = fill_x1;
 457   1         LCDDrawHRLine( &line );
 458   1      
 459   1         point.x = draw_x5 = draw_x7 = pCircle->x - pCircle->r;
 460   1         point.y = draw_y5 = draw_y7 = pCircle->y;
 461   1         if(draw_x5>=0)
 462   1         {
 463   2                      LCDDrawPoint( &point ); // 180度
 464   2         }
 465   1         if(1==pCircle->r) return;
 466   1      
 467   1      
 468   1         /* 使用Bresenham法进行画圆 */
 469   1         di = 3 - 2*pCircle->r;                                                       // 初始化决策变量
 470   1      
 471   1         xx = 0;
 472   1         yy = pCircle->r;
 473   1         while(xx<yy)
 474   1         {  if(di<0)
 475   2                {  di += 4*xx + 6;
 476   3                }
 477   2                else
 478   2                {  di += 4*(xx - yy) + 10;
 479   3      
 480   3                   yy--;
 481   3                       draw_y0--;
 482   3                       draw_y1--;
 483   3                       draw_y2++;
 484   3                       draw_y3++;
 485   3                       draw_x4--;
 486   3                       draw_x5++;
 487   3                       draw_x6--;
 488   3                       draw_x7++;
C51 COMPILER V7.50   GUI_BASIC                                                             03/30/2011 19:43:24 PAGE 9   

 489   3                }
 490   2      
 491   2                xx++;
 492   2                draw_x0++;

⌨️ 快捷键说明

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