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

📄 showfun.lst

📁 直流电机的测速和液晶中文的显示
💻 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 V6.12  SHOWFUN                                                                06/05/2007 15:43:31 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 V6.12  SHOWFUN                                                                06/05/2007 15:43:31 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 V6.12  SHOWFUN                                                                06/05/2007 15:43:31 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 V6.12  SHOWFUN                                                                06/05/2007 15:43:31 PAGE 12  

   CODE SIZE        =   1719    ----
   CONSTANT SIZE    =   2244    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9      43
   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 + -