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

📄 drivert6963.lst

📁 基于MCS-51的电子指南针完整程序包 如果需要原理图的
💻 LST
📖 第 1 页 / 共 4 页
字号:
 491          调用程序:
 492          备注:
 493          **********************************************************************************************/
 494          void BitSet(unsigned int Address, unsigned char BIT)
 495          {
 496   1          BIT = 0XF8 + BIT;
 497   1          WCIntData(AddrPointer,Address);
 498   1              WCNoData(BIT);
 499   1      }
 500          
 501          
 502          /**********************************************************************************************
 503          函数名称:      void BitReset(unsigned int Address, unsigned char BIT)
 504          函数功能:      清除屏幕上的一点
 505          入口参数:      该点的字节地址,第几位
 506          出口参数:
 507          具体资源:
 508          调用程序:
 509          备注:
 510          **********************************************************************************************/
 511          void BitReset(unsigned int Address, unsigned int BIT)
 512          {
 513   1          BIT = 0XF0 + BIT;
 514   1          WCIntData(AddrPointer,Address);
 515   1              WCNoData(BIT);
 516   1      }
 517          
 518          
 519          
 520          /**********************************************************************************************
 521          函数名称:      WriteEN(unsigned int Address, unsigned char Dat)
 522          函数功能:      写一个英文字符
 523          入口参数:      屏幕地址和要写入的字符
 524          出口参数:
 525          具体资源:
 526          调用程序:
 527          备注:
 528          **********************************************************************************************/
 529          void WriteEN(unsigned int Address, unsigned char Dat)
 530          {
 531   1          Dat = Dat - 0x20;
 532   1          WriteCG(Address, Dat);
 533   1      }
 534          
 535          
 536          /**********************************************************************************************
 537          函数名称:      DispStr(unsigned char *str)
 538          函数功能:      写一个字符串
 539          入口参数:      屏幕地址和要写入的字符串首地址
 540          出口参数:
 541          具体资源:
 542          调用程序:
 543          备注:
 544          **********************************************************************************************/
 545          void DispStr(unsigned int StrtAddr, unsigned char *str)
 546          {
 547   1          unsigned int lCnt = 0;
 548   1      
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 10  

 549   1          do {
 550   2              WriteEN(StrtAddr+lCnt, str[lCnt]);
 551   2              lCnt++;
 552   2          }while(str[lCnt] != '\0');
 553   1      }
 554          
 555          /**********************************************************************************************
 556          函数名称:      void DrawPoint(unsgined char Y, unsigned char X)
 557          函数功能:      在屏幕的任何位置画一个点
 558          入口参数:      该点的横坐标和纵坐标(屏幕的左上角坐标为(0,0))横向为X轴,纵向为Y轴
 559          出口参数:
 560          具体资源:
 561          调用程序:
 562          备注:           
 563          **********************************************************************************************/
 564          void Point(unsigned int Xp, unsigned int Yp, unsigned char Mod)
 565          {
 566   1         unsigned int ColumnTmp;
 567   1         unsigned int TireTmp;
 568   1         unsigned int Address;
 569   1         unsigned int BIT;
 570   1         unsigned int Suplus;
 571   1         unsigned char BITmp;
 572   1      
 573   1         TireTmp = Yp * 0X14;
 574   1         ColumnTmp = Xp / 8;
 575   1         Suplus = Xp % 8;
 576   1         BIT = 7 - Suplus;
 577   1         BITmp = BIT; 
 578   1         Address = TireTmp + ColumnTmp +0X0800;
 579   1         if (Mod){
 580   2              BitSet(Address, BITmp);
 581   2         }else{
 582   2                      BitReset(Address, BITmp);
 583   2         }
 584   1      }
 585          
 586          
 587          /**********************************************************************************************
 588          函数名称:  void Line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2)   
 589          函数功能:       画直线函数
 590          入口参数:       直线两端点坐标
 591          出口参数:
 592          具体资源:
 593          调用程序:
 594          备注:           采用BRESENHAM AL算法
 595          **********************************************************************************************/
 596          void Line(int x1, int y1, int x2, int y2, unsigned char Mod)
 597          {
 598   1          int dx, dy, d, incE, incNE, x, y, slope, temp;
 599   1              int Ymin, Xmin;
 600   1              unsigned char DrawFlag = 0x01; 
 601   1      /****************垂直线**********************************************/
 602   1              if (x1 == x2)
 603   1          {                                                  
 604   2                  if (y1 <= y2) {
 605   3                          temp = y2 - y1;
 606   3                              Ymin = y1;                         
 607   3                      }else {
 608   3                          temp = y1 - y2;
 609   3                              Ymin = y2;
 610   3                      }
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 11  

 611   2                  for (; temp >= 0; temp--) {
 612   3                          if (Mod == 1) {                                                     //判定是否是要画虚线
 613   4                                  if (DrawFlag == 0x01) {
 614   5                                  Point(x1, Ymin+temp, 1);
 615   5                                          DrawFlag = 0x00;
 616   5                                      }else {
 617   5                                          Point(x1, Ymin+temp, 0);
 618   5                                          DrawFlag = 0x01;
 619   5                                      }
 620   4                              }else {
 621   4                                 Point(x1, Ymin+temp,1);
 622   4                              }     
 623   3                      }
 624   2              }
 625   1      /********************************水平线*******************************/
 626   1              else if (y1 == y2 )
 627   1          {                                      
 628   2                       if (x1 <= x2)
 629   2                   {
 630   3                                   temp = x2 - x1;
 631   3                                       Xmin = x1;
 632   3                               }
 633   2                               else
 634   2                   {
 635   3                                   temp = x1 - x2;
 636   3                       Xmin = x2;
 637   3                               }
 638   2                               for (; temp > 0; temp--)
 639   2                   {
 640   3                                   if (Mod == 1) 
 641   3                       {                                         //判定是否是要画虚线
 642   4                                       if (DrawFlag == 0x01)
 643   4                           {
 644   5                                       Point(Xmin+temp, y1, 1);
 645   5                                               DrawFlag = 0x00;
 646   5                                           }
 647   4                                           else
 648   4                           {
 649   5                                               Point(Xmin+temp, y1, 0);
 650   5                                               DrawFlag = 0x01;
 651   5                                           }
 652   4                                   }
 653   3                                       else
 654   3                       {
 655   4                                       Point(Xmin+temp, y1, 1);                        
 656   4                                   }
 657   3                       }
 658   2               }
 659   1      /*******************************斜线******************************/
 660   1      
 661   1               else{
 662   2                   if (abs(x2-x1) > abs(y2-y1)){
 663   3                              if (x2 <= x1)
 664   3                  {                       //调整坐标,使其满足x1 <= x2( 从左到右的顺序)
 665   4                                      temp =x1;
 666   4                                      x1 =x2;
 667   4                                      x2 = temp;
 668   4                                  temp =y1;
 669   4                                       y1 =y2;
 670   4                                       y2 = temp;
 671   4                               }
 672   3      
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 12  

 673   3                               dx = x2 - x1;
 674   3                               dy = y2 - y1;
 675   3      
 676   3                       if (dy < 0) {                      //用斜率来确定增量
 677   4                                  slope = -1;
 678   4                                  dy = -dy;
 679   4                               }else {
 680   4                                       slope = 1;
 681   4                               }
 682   3      /****************算法公式**********************/                                                            
 683   3                               incE  = 2*dy;          //东边一点 
 684   3                               incNE = 2*dy - 2*dx;   //东北一点
 685   3                               d = 2*dy - dx;             //增量
 686   3      /**********************************************/
 687   3                               y =y1;
 688   3                                                          
 689   3                               for (x=x1; x <= x2; x++) {
 690   4                                   if (Mod == 1) {                                   //判定是否是要画虚线
 691   5                                      if (DrawFlag == 0x01) {
 692   6                                                  Point(x, y, 1);
 693   6                                                      DrawFlag = 0x00;
 694   6                                              }else {
 695   6                                                  Point(x, y, 0);
 696   6                                                  DrawFlag = 0x01;
 697   6                                              }
 698   5                                       }else {
 699   5                                               Point(x, y, 1);                         
 700   5                                       }
 701   4                                       if (d < 0)     {         //往东走一步
 702   5                                               d += incE;
 703   5                                       }else {
 704   5                                               d += incNE;  //向东北走一步
 705   5                                               y += slope;
 706   5                                       }
 707   4                               }
 708   3                       }else {                     //end of if(abs(dx)>abs(dy))
 709   3                               if (y2 <= y1) {          //调整坐标,使其满足y1 <= y2( 从左到右的顺序)
 710   4                                  temp = x1;
 711   4                                      x1 = x2;
 712   4                                      x2 = temp;
 713   4                              
 714   4                                      temp = y1;
 715   4                                      y1 = y2;
 716   4                                      y2 = temp;
 717   4                               }
 718   3      
 719   3                               dx = x2 - x1;
 720   3                               dy = y2 - y1;
 721   3      
 722   3                               if (dx < 0) { 
 723   4                                  slope = -1;  
 724   4                                      dx = -dx;
 725   4                               }else {
 726   4                                       slope = 1;
 727   4                               }
 728   3      
 729   3                           incE  = 2*dx;
 730   3                               incNE = 2*dx - 2*dy;
 731   3                               d = 2*dx - dy;
 732   3                               x = x1;
 733   3      
 734   3                               for (y=y1; y <= y2; y++) {
C51 COMPILER V8.08   DRIVERT6963                                                           06/18/2008 01:56:31 PAGE 13  

 735   4                                       if (Mod == 1) {                                       //判定是否是要画虚线
 736   5                                              if (DrawFlag == 0x01) {
 737   6                                                  Point(x, y, 1);
 738   6                                                      DrawFlag = 0x00;
 739   6                                              }else {
 740   6                                                      Point(x, y, 0);
 741   6                                                      DrawFlag = 0x01;

⌨️ 快捷键说明

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