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

📄 showfun.lst

📁 c51 直流电机。里面有KEIL编译的源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 406   2              fnPR11(LC_INC_WR,ch);
 407   2              i++;
 408   2          }
 409   1      } 
 410          // ASCII及汉字显示函数
 411          
 412          uchar dprintf(uchar x,uchar y,char *fmt)
 413          {
 414   1              char c1,c2,cData;
 415   1              uchar i=0,j,uLen;
 416   1              uchar k;
 417   1              
 418   1              uLen=strlen(fmt);
 419   1      
 420   1              while(i<uLen)
 421   1              {
 422   2                      c1 = fmt[i];
 423   2                      c2 = fmt[i+1];
 424   2                      
 425   2                      fnSetPos(y,x/8);
 426   2                      if(c1 >= 0)
 427   2                      {
 428   3                       // ASCII
 429   3                          if(c1 < 0x20)
 430   3                          {
 431   4                              switch(c1)
 432   4                              {
 433   5                                  case CR:
 434   5                                  case LF: // 回车或换行
 435   5                                      i++;
 436   5                                                      x=0;
 437   5                                      if(y < 112)y+=HZ_CHR_HEIGHT;
C51 COMPILER V8.02   SHOWFUN                                                               04/01/2008 22:12:08 PAGE 9   

 438   5                                      continue;
 439   5                                  case BS: // 退格
 440   5                                                      i++;
 441   5                                      if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH;
 442   5                                      cData = 0x00;
 443   5                                      break;
 444   5                              }
 445   4                          } 
 446   3                          for(j=0;j<ASC_CHR_HEIGHT;j++)
 447   3                          {
 448   4                              
 449   4                              if(c1 >= 0x1f)
 450   4                              {
 451   5                                              cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j];
 452   5                                              fnSetPos(y+j,x/8);
 453   5                                              if((x%8)==0)
 454   5                                              {
 455   6                                                      fnPR12(LC_AUT_WR); // 写数据
 456   6                                              fnPR13(cData);  
 457   6                                              fnPR12(LC_AUT_OVR);
 458   6                                              }
 459   5                                              else
 460   5                                                      OutToLCD(cData,x,y+j);
 461   5                              }
 462   4                              fnSetPos(y+j,x/8);
 463   4                          }
 464   3                          if(c1 != BS) // 非退格
 465   3                          x+=ASC_CHR_WIDTH;
 466   3                      }
 467   2                      else
 468   2                      { // 中文
 469   3                              
 470   3                          for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
 471   3                          {
 472   4                              if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 473   4                              break;
 474   4                          }
 475   3                          for(k=0;k<HZ_CHR_HEIGHT;k++)
 476   3                          {
 477   4                                      
 478   4                              fnSetPos(y+k,x/8);
 479   4                              if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 480   4                              {
 481   5                                              c1=GB_16[j].Msk[k*2];
 482   5                                              c2=GB_16[j].Msk[k*2+1];
 483   5                                      }
 484   4                                      else       
 485   4                                              c1=c2=0;
 486   4                                      if((x%8)==0)
 487   4                                      {
 488   5                                              fnPR12(LC_AUT_WR);
 489   5                                              fnPR13(c1);
 490   5                                      fnPR12(LC_AUT_OVR);
 491   5                              }
 492   4                                      else
 493   4                                              OutToLCD(c1,x,y+k);
 494   4                                      
 495   4                                      if(((x+2+HZ_CHR_WIDTH/2)%8)==0)
 496   4                                      {
 497   5                                              fnPR12(LC_AUT_WR);
 498   5                                              fnPR13(c2);
 499   5                                              fnPR12(LC_AUT_OVR);
C51 COMPILER V8.02   SHOWFUN                                                               04/01/2008 22:12:08 PAGE 10  

 500   5                              }
 501   4                                      else
 502   4                                              OutToLCD(c2,x+2+HZ_CHR_WIDTH/2,y+k);
 503   4                          }
 504   3                          x+=HZ_CHR_WIDTH;
 505   3                          i++;
 506   3                      }  
 507   2                      i++;
 508   2              }
 509   1              return uLen;
 510   1      }
 511          void OutToLCD(uchar Dat,uchar x,uchar y) 
 512          {
 513   1              uchar uData1,uData2,ux,a,b;
 514   1      
 515   1              a=8-(x%8);b=x%8;
 516   1              fnSetPos(y,x/8);
 517   1              fnPR12(LC_AUT_RD); // 读数据
 518   1              uData1=fnPR2();
 519   1              uData2=fnPR2();
 520   1              fnPR12(LC_AUT_OVR);
 521   1              fnSetPos(y,x/8);
 522   1              uData1&=~MSK1[a];
 523   1              ux=Dat&MSK2[a];
 524   1              ux>>=b;
 525   1              uData1=uData1|ux;
 526   1              ux=~MSK2[b];
 527   1              uData2&=ux;
 528   1              ux=MSK1[b];
 529   1              ux=Dat&ux;
 530   1              ux<<=a;
 531   1              uData2=uData2|ux;
 532   1              fnPR12(LC_AUT_WR); // 写数据
 533   1              fnPR13(uData1); 
 534   1              fnPR13(uData2);
 535   1              fnPR12(LC_AUT_OVR);
 536   1      
 537   1      }
 538          void SetShowMode(uchar newShowModeSW)    //设置为显示模式
 539          {
 540   1              ShowModeSW=newShowModeSW;
 541   1              fnPR12(LC_DIS_SW | newShowModeSW);
 542   1      }
 543          
 544          /**********************************
 545          //= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
 546          //= 功    能: 在指定坐标位置显示一个点
 547          //= 参    数: 坐标,显示点或清除点
 548          //= 返 回 值:
 549          //= 函数性质:私有函数
 550          //= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
 551          //= Mode 1:显示 0:清除该点
 552          **********************************/
 553          void Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
 554          {
 555   1          unsigned char StartAddr;
 556   1          unsigned char dat;
 557   1          StartAddr=7-(PointX%8);
 558   1          dat=LC_BIT_OP|StartAddr; //生产位操作命令画点的数据
 559   1          if(Mode) dat=dat|0x08;
 560   1              fnSetPos(PointY,PointX/8);
 561   1              fnPR12(LC_BIT_OP|dat); // 写数据
C51 COMPILER V8.02   SHOWFUN                                                               04/01/2008 22:12:08 PAGE 11  

 562   1      }
 563          
 564          
 565          /**********************************
 566          //= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
 567          //= 功    能: 划线函数
 568          //= 参    数: 坐标1,坐标2,显示点或清除点
 569          //= 返 回 值:
 570          //= 函数性质:私有函数
 571          //= 其它:显示点阵不超过255*255
 572          /**********************************/
 573          
 574          void line( unsigned char x1,unsigned char y1, unsigned char x2,unsigned char y2,  bit Mode)
 575          {
 576   1          unsigned char x,y;
 577   1          float k,b;
 578   1          if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
 579   1          {
 580   2              k=((float)y2-y1) / ((float)x2-x1) ;
 581   2              b=y1-k*x1;
 582   2              if( x1 <= x2 )
 583   2              {
 584   3                  for(x=x1;x<=x2;x++)
 585   3                  {
 586   4                      y=(uchar)(k*x+b);
 587   4                      Pixel(x, y, Mode);
 588   4                  }
 589   3              }
 590   2              else
 591   2              {
 592   3                  for(x=x2;x<=x1;x++)
 593   3                  {
 594   4                      y=(uchar)(k*x+b);
 595   4                      Pixel(x, y, Mode);
 596   4                  }
 597   3              }
 598   2          }
 599   1          else // abs(y1-y2) > abs(x1-x2) |K|>1
 600   1          {
 601   2              k=((float)x2-x1) / ((float)y2-y1) ;
 602   2              b=x1-k*y1;
 603   2              if( y1 <= y2 )
 604   2              {
 605   3                  for(y=y1;y<=y2;y++)
 606   3                  {
 607   4                      x=(uchar)(k*y+b);
 608   4                      Pixel( x , y,Mode );
 609   4                  }
 610   3              }
 611   2              else
 612   2              {
 613   3                  for(y=y2;y<=y1;y++)
 614   3                  {
 615   4                      x=(uchar)(k*y+b);
 616   4                      Pixel( x , y,Mode );
 617   4                  }
 618   3              }
 619   2          }
 620   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.02   SHOWFUN                                                               04/01/2008 22:12:08 PAGE 12  

   CODE SIZE        =   1686    ----
   CONSTANT SIZE    =   2244    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9      39
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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