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

📄 drivert6963.lst

📁 基于MCS-51的电子指南针完整程序包 如果需要原理图的
💻 LST
📖 第 1 页 / 共 4 页
字号:
 742   6                                              }
 743   5                                      }else {
 744   5                                              Point(x, y, 1);                  
 745   5                                      }
 746   4                                      if (d < 0) {
 747   5                                              d += incE;
 748   5                                      }else {
 749   5                                              d += incNE;
 750   5                                              x += slope;
 751   5                                      }
 752   4                              }//end of for (y=y1; y <= y2; y++)
 753   3                       }
 754   2                 }//end of /line
 755   1      }
 756          
 757          
 758          /**********************************************************************************************
 759          函数名称:  void LineClr(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2)        
 760          函数功能:       画直线函数
 761          入口参数:       直线两端点坐标
 762          出口参数:
 763          具体资源:
 764          调用程序:
 765          备注:           采用BRESENHAM AL算法
 766          **********************************************************************************************/
 767          void LineClr(int x1, int y1, int x2, int y2)
 768          {
 769   1          int dx, dy, d, incE, incNE, x, y, slope, temp;
 770   1              int Ymin, Xmin;
 771   1      /****************垂直线**********************************************/
 772   1              if (x1 == x2)
 773   1          {                                                  
 774   2                  if (y1 <= y2) {
 775   3                          temp = y2 - y1;
 776   3                              Ymin = y1;                         
 777   3                      }else {
 778   3                          temp = y1 - y2;
 779   3                              Ymin = y2;
 780   3                      }
 781   2                  for (; temp >= 0; temp--) {
 782   3                                 Point(x1, Ymin+temp,0);
 783   3                      }
 784   2              }
 785   1      /********************************水平线*******************************/
 786   1              else if (y1 == y2 )
 787   1          {                                      
 788   2                       if (x1 <= x2)
 789   2                   {
 790   3                                   temp = x2 - x1;
 791   3                                       Xmin = x1;
 792   3                               }
 793   2                               else
 794   2                   {
 795   3                                   temp = x1 - x2;
 796   3                       Xmin = x2;
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 14  

 797   3                               }
 798   2                               for (; temp > 0; temp--)
 799   2                   {
 800   3                                    Point(Xmin+temp, y1, 0);                   
 801   3                       }
 802   2               }
 803   1      /*******************************斜线******************************/
 804   1      
 805   1               else{
 806   2                   if (abs(x2-x1) > abs(y2-y1)){
 807   3                              if (x2 <= x1)
 808   3                  {                       //调整坐标,使其满足x1 <= x2( 从左到右的顺序)
 809   4                                      temp =x1;
 810   4                                      x1 =x2;
 811   4                                      x2 = temp;
 812   4                                  temp =y1;
 813   4                                       y1 =y2;
 814   4                                       y2 = temp;
 815   4                               }
 816   3      
 817   3                               dx = x2 - x1;
 818   3                               dy = y2 - y1;
 819   3      
 820   3                       if (dy < 0) {                      //用斜率来确定增量
 821   4                                  slope = -1;
 822   4                                  dy = -dy;
 823   4                               }else {
 824   4                                       slope = 1;
 825   4                               }
 826   3      /****************算法公式**********************/                                                            
 827   3                               incE  = 2*dy;          //东边一点 
 828   3                               incNE = 2*dy - 2*dx;   //东北一点
 829   3                               d = 2*dy - dx;             //增量
 830   3      /**********************************************/
 831   3                               y =y1;
 832   3                                                          
 833   3                               for (x=x1; x <= x2; x++) {
 834   4                                       Point(x, y, 0);                         
 835   4                                       if (d < 0)     {         //往东走一步
 836   5                                               d += incE;
 837   5                                       }else {
 838   5                                               d += incNE;  //向东北走一步
 839   5                                               y += slope;
 840   5                                       }
 841   4                               }
 842   3                       }else {                     //end of if(abs(dx)>abs(dy))
 843   3                               if (y2 <= y1) {          //调整坐标,使其满足y1 <= y2( 从左到右的顺序)
 844   4                                  temp = x1;
 845   4                                      x1 = x2;
 846   4                                      x2 = temp;
 847   4                              
 848   4                                      temp = y1;
 849   4                                      y1 = y2;
 850   4                                      y2 = temp;
 851   4                               }
 852   3      
 853   3                               dx = x2 - x1;
 854   3                               dy = y2 - y1;
 855   3      
 856   3                               if (dx < 0) { 
 857   4                                  slope = -1;  
 858   4                                      dx = -dx;
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 15  

 859   4                               }else {
 860   4                                       slope = 1;
 861   4                               }
 862   3      
 863   3                           incE  = 2*dx;
 864   3                               incNE = 2*dx - 2*dy;
 865   3                               d = 2*dx - dy;
 866   3                               x = x1;
 867   3      
 868   3                               for (y=y1; y <= y2; y++) {
 869   4                                      Point(x, y, 0);                  
 870   4                                      if (d < 0) {
 871   5                                              d += incE;
 872   5                                      }else {
 873   5                                              d += incNE;
 874   5                                              x += slope;
 875   5                                      }
 876   4                              }//end of for (y=y1; y <= y2; y++)
 877   3                       }
 878   2                 }//end of /line
 879   1      }
 880          
 881          /**********************************************************************************************
 882          函数名称:      void Rectangle(unsigned char Topx, unsigned char Topy, 
 883                      unsigned char Bottomx, unsigned char Bottomy, unsigned char Mod)
 884          函数功能:      画矩形或是填充矩形
 885          入口参数:      (左上顶点、右下顶点坐标、是否填充标志)  
 886          出口参数:
 887          具体资源:
 888          调用程序:
 889          备注:           当填充标志位为0是表示画矩形框,不为0时表示填充矩形
 890          **********************************************************************************************/
 891          void Rectangle(unsigned char Topx, unsigned char Topy, unsigned char Bottomx, unsigned char Bottomy, unsig
             -ned char Mod)
 892          {
 893   1              unsigned char Xtemp=0x00, i=0x00, Ytemp=0x00, j=0x00;
 894   1      
 895   1              if (Mod == 0x00)
 896   1          {                                                                                 //画矩形边框
 897   2                  Line(Topx, Topy, Topx, Bottomy, 0);           // A   -----C------
 898   2                  Line(Bottomx, Topy, Bottomx, Bottomy, 0);     // B  |                        |
 899   2                  Line(Topx, Topy, Bottomx-1, Topy, 0);             // C      A                        B
 900   2                  Line(Topx, Bottomy, Bottomx-1, Bottomy, 0);   // D  |                        |
 901   2          }                                                                                             //     -----D------
 902   1              else
 903   1          {                                                                                         //填充矩形区域
 904   2                  Xtemp = Bottomx - Topx;
 905   2                      Ytemp = Bottomy - Topy;                                                                                    
 906   2                  for (; i<=Ytemp; i++)
 907   2              {
 908   3                          for (;j <= Xtemp; j++)
 909   3                  {
 910   4                                  Point(Topx+j, Topy+i, 1);
 911   4                              }
 912   3                              j = 0;
 913   3                      }    
 914   2              }//end of else                                                                                             
 915   1      }
 916          
 917          
 918          /**********************************************************************************************
 919          函数名称:  void DrawCircle( char x0, char y0, char Rand)       
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 16  

 920          函数功能:  以指定的圆心和半径画圆      
 921          入口参数:      圆心、半径
 922          出口参数:
 923          具体资源:
 924          调用程序:
 925          备注:     1.本画圆函数采用的正负画圆算法 + 8分圆做图。 
 926                     2.注意本画圆函数没有考虑半径过大导致图形区域溢出的情况。经测试圆的半径最好不要大于60
 927                               像素。 
 928          **********************************************************************************************/
 929          void Circle( unsigned int x0, unsigned int y0, unsigned char Rand)
 930          {
 931   1         unsigned int x = 0, y = Rand;
 932   1         int f = 0;
 933   1      
 934   1         while (x <= y)
 935   1         {
 936   2      
 937   2            Point(x0+x, y0+y, 1);
 938   2            Point(x0+x, y0-y, 1);
 939   2            Point(x0-x, y0+y, 1);
 940   2            Point(x0-x, y0-y, 1);
 941   2            Point(x0+y, y0+x, 1);
 942   2            Point(x0+y, y0-x, 1);
 943   2            Point(x0-y, y0+x, 1);
 944   2            Point(x0-y, y0-x, 1);
 945   2      
 946   2            if (f <= 0) {
 947   3               f = f+2*x+1;
 948   3                       x++;
 949   3                } else {
 950   3                   f = f-2*y+1;
 951   3                       y--;
 952   3                }
 953   2         }
 954   1      }
 955          
 956          
 957          /**********************************************************************************************
 958          函数名称:  void DrawCircle( char x0, char y0, char Rand)       
 959          函数功能:  以指定的圆心和半径画圆      
 960          入口参数:      圆心、半径
 961          出口参数:
 962          具体资源:
 963          调用程序:
 964          备注:     1.本画圆函数采用的正负画圆算法 + 8分圆做图。 
 965                     2.注意本画圆函数没有考虑半径过大导致图形区域溢出的情况。经测试圆的半径最好不要大于60
 966                               像素。 
 967          **********************************************************************************************/
 968          void Triangle(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char x3, un
             -signed char y3)
 969          {
 970   1          Line(x1, y1, x2, y2, 0);
 971   1              Line(x2, y2, x3, y3, 0);
 972   1              Line(x3, y3, x1, y1, 0);
 973   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3203    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 17  

   DATA SIZE        =   ----     123
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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