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

📄 showfun.lst

📁 ADC0832实验,1602液晶,protus仿真,51单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
 395   1              {
 396   2                      c1 = fmt[i];
C51 COMPILER V8.05a   SHOWFUN                                                              12/09/2006 18:03:03 PAGE 8   

 397   2                      c2 = fmt[i+1];
 398   2                      
 399   2                      fnSetPos(y,x/8);
 400   2                      if(c1 >= 0)
 401   2                      {
 402   3                       // ASCII
 403   3                          if(c1 < 0x20)
 404   3                          {
 405   4                              switch(c1)
 406   4                              {
 407   5                                  case CR:
 408   5                                  case LF: // 回车或换行
 409   5                                      i++;
 410   5                                                      x=0;
 411   5                                      if(y < 112)y+=HZ_CHR_HEIGHT;
 412   5                                      continue;
 413   5                                  case BS: // 退格
 414   5                                                      i++;
 415   5                                      if(y>ASC_CHR_WIDTH)y-=ASC_CHR_WIDTH;
 416   5                                      cData = 0x00;
 417   5                                      break;
 418   5                              }
 419   4                          } 
 420   3                          for(j=0;j<ASC_CHR_HEIGHT;j++)
 421   3                          {
 422   4                              
 423   4                              if(c1 >= 0x1f)
 424   4                              {
 425   5                                              cData= ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j];
 426   5                                              fnSetPos(y+j,x/8);
 427   5                                              if((x%8)==0)
 428   5                                              {
 429   6                                                      fnPR12(LC_AUT_WR); // 写数据
 430   6                                              fnPR13(cData);  
 431   6                                              fnPR12(LC_AUT_OVR);
 432   6                                              }
 433   5                                              else
 434   5                                                      OutToLCD(cData,x,y+j);
 435   5                              }
 436   4                              fnSetPos(y+j,x/8);
 437   4                          }
 438   3                          if(c1 != BS) // 非退格
 439   3                          x+=ASC_CHR_WIDTH;
 440   3                      }
 441   2                      else
 442   2                      { // 中文
 443   3                              
 444   3                          for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
 445   3                          {
 446   4                              if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 447   4                              break;
 448   4                          }
 449   3                          for(k=0;k<HZ_CHR_HEIGHT;k++)
 450   3                          {
 451   4                                      
 452   4                              fnSetPos(y+k,x/8);
 453   4                              if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 454   4                              {
 455   5                                              c1=GB_16[j].Msk[k*2];
 456   5                                              c2=GB_16[j].Msk[k*2+1];
 457   5                                      }
 458   4                                      else       
C51 COMPILER V8.05a   SHOWFUN                                                              12/09/2006 18:03:03 PAGE 9   

 459   4                                              c1=c2=0;
 460   4                                      if((x%8)==0)
 461   4                                      {
 462   5                                              fnPR12(LC_AUT_WR);
 463   5                                              fnPR13(c1);
 464   5                                      fnPR12(LC_AUT_OVR);
 465   5                              }
 466   4                                      else
 467   4                                              OutToLCD(c1,x,y+k);
 468   4                                      
 469   4                                      if(((x+2+HZ_CHR_WIDTH/2)%8)==0)
 470   4                                      {
 471   5                                              fnPR12(LC_AUT_WR);
 472   5                                              fnPR13(c2);
 473   5                                              fnPR12(LC_AUT_OVR);
 474   5                              }
 475   4                                      else
 476   4                                              OutToLCD(c2,x+2+HZ_CHR_WIDTH/2,y+k);
 477   4                          }
 478   3                          x+=HZ_CHR_WIDTH;
 479   3                          i++;
 480   3                      }  
 481   2                      i++;
 482   2              }
 483   1              return uLen;
 484   1      }
 485          void OutToLCD(uchar Dat,uchar x,uchar y) 
 486          {
 487   1              uchar uData1,uData2,ux,a,b;
 488   1      
 489   1              a=8-(x%8);b=x%8;
 490   1              fnSetPos(y,x/8);
 491   1              fnPR12(LC_AUT_RD); // 读数据
 492   1              uData1=fnPR2();
 493   1              uData2=fnPR2();
 494   1              fnPR12(LC_AUT_OVR);
 495   1              fnSetPos(y,x/8);
 496   1              uData1&=~MSK1[a];
 497   1              ux=Dat&MSK2[a];
 498   1              ux>>=b;
 499   1              uData1=uData1|ux;
 500   1              ux=~MSK2[b];
 501   1              uData2&=ux;
 502   1              ux=MSK1[b];
 503   1              ux=Dat&ux;
 504   1              ux<<=a;
 505   1              uData2=uData2|ux;
 506   1              fnPR12(LC_AUT_WR); // 写数据
 507   1              fnPR13(uData1); 
 508   1              fnPR13(uData2);
 509   1              fnPR12(LC_AUT_OVR);
 510   1      
 511   1      }
 512          void SetShowMode(uchar newShowModeSW)    //设置为显示模式
 513          {
 514   1              ShowModeSW=newShowModeSW;
 515   1              fnPR12(LC_DIS_SW | newShowModeSW);
 516   1      }
 517          
 518          /**********************************
 519          //= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
 520          //= 功    能: 在指定坐标位置显示一个点
C51 COMPILER V8.05a   SHOWFUN                                                              12/09/2006 18:03:03 PAGE 10  

 521          //= 参    数: 坐标,显示点或清除点
 522          //= 返 回 值:
 523          //= 函数性质:私有函数
 524          //= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
 525          //= Mode 1:显示 0:清除该点
 526          **********************************/
 527          void Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
 528          {
 529   1          unsigned char StartAddr;
 530   1          unsigned char dat;
 531   1          StartAddr=7-(PointX%8);
 532   1          dat=LC_BIT_OP|StartAddr; //生产位操作命令画点的数据
 533   1          if(Mode) dat=dat|0x08;
 534   1              fnSetPos(PointY,PointX/8);
 535   1              fnPR12(LC_BIT_OP|dat); // 写数据
 536   1      }
 537          
 538          
 539          /**********************************
 540          //= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
 541          //= 功    能: 划线函数
 542          //= 参    数: 坐标1,坐标2,显示点或清除点
 543          //= 返 回 值:
 544          //= 函数性质:私有函数
 545          //= 其它:显示点阵不超过255*255
 546          /**********************************/
 547          
 548          void line( unsigned char x1,unsigned char y1, unsigned char x2,unsigned char y2,  bit Mode)
 549          {
 550   1          unsigned char x,y;
 551   1          float k,b;
 552   1          if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
 553   1          {
 554   2              k=((float)y2-y1) / ((float)x2-x1) ;
 555   2              b=y1-k*x1;
 556   2              if( x1 <= x2 )
 557   2              {
 558   3                  for(x=x1;x<=x2;x++)
 559   3                  {
 560   4                      y=(uchar)(k*x+b);
 561   4                      Pixel(x, y, Mode);
 562   4                  }
 563   3              }
 564   2              else
 565   2              {
 566   3                  for(x=x2;x<=x1;x++)
 567   3                  {
 568   4                      y=(uchar)(k*x+b);
 569   4                      Pixel(x, y, Mode);
 570   4                  }
 571   3              }
 572   2          }
 573   1          else // abs(y1-y2) > abs(x1-x2) |K|>1
 574   1          {
 575   2              k=((float)x2-x1) / ((float)y2-y1) ;
 576   2              b=x1-k*y1;
 577   2              if( y1 <= y2 )
 578   2              {
 579   3                  for(y=y1;y<=y2;y++)
 580   3                  {
 581   4                      x=(uchar)(k*y+b);
 582   4                      Pixel( x , y,Mode );
C51 COMPILER V8.05a   SHOWFUN                                                              12/09/2006 18:03:03 PAGE 11  

 583   4                  }
 584   3              }
 585   2              else
 586   2              {
 587   3                  for(y=y2;y<=y1;y++)
 588   3                  {
 589   4                      x=(uchar)(k*y+b);
 590   4                      Pixel( x , y,Mode );
 591   4                  }
 592   3              }
 593   2          }
 594   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1657    ----
   CONSTANT SIZE    =   1984    ----
   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 + -