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

📄 showfun.lst

📁 51单片机LCD160128驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   SHOWFUN                                                               08/08/2010 09:56:12 PAGE 8   

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

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

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

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