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

📄 lcd12864.lst

📁 基于51单片机的图形LCD驱动程序,建立了完成的中英文字符和基本图形输出程序,字符点阵从一片Flash存储器读出.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 235   2          }
 236   1          else if(srcnum<100)
 237   1            for(i=0,j=10,digit=0;i<2;i++)
 238   1            {
 239   2                digit = srcnum / j;
 240   2                srcnum -= digit * j;
 241   2                j /= 10;
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 5   

 242   2                line_num = lcd_char_send(char_code[digit+16],page,line_num,bclr);
 243   2             }
 244   1      
 245   1           else if(srcnum<1000)
 246   1            for(i=0,j=100,digit=0;i<3;i++)
 247   1            {
 248   2                digit = srcnum / j;
 249   2                srcnum -= digit * j;
 250   2                j /= 10;
 251   2                line_num = lcd_char_send(char_code[digit+16],page,line_num,bclr);
 252   2             }
 253   1      
 254   1           else if(srcnum<10000)
 255   1            for(i=0,j=1000,digit=0;i<4;i++)
 256   1            {
 257   2                digit = srcnum / j;
 258   2                srcnum -= digit * j;
 259   2                j /= 10;
 260   2                line_num = lcd_char_send(char_code[digit+16],page,line_num,bclr);
 261   2             }
 262   1      
 263   1           else
 264   1            for(i=0,j=10000,digit=0;i<5;i++)
 265   1            {
 266   2                digit = srcnum / j;
 267   2                srcnum -= digit * j;
 268   2                j/=10;
 269   2                line_num = lcd_char_send(char_code[digit+16],page,line_num,bclr);
 270   2             }
 271   1            return line_num;
 272   1      
 273   1      }
 274          //************************************
 275          void screen_up(BYTE ustep,WORD ctime)
 276          {
 277   1      	BYTE i;
 278   1      	for(i=0;i<LCD_NROW;)
 279   1      	{
 280   2      		lcd_cmd1_send(i|0xC0);
 281   2      		lcd_cmd2_send(i|0xC0);
 282   2      		i += ustep;
 283   2      		delay(ctime);
 284   2      	}
 285   1      	lcd_cmd1_send(0xC0);
 286   1      	lcd_cmd2_send(0xC0);
 287   1      	
 288   1      		
 289   1      }
 290          //*******************************************
 291          void screen_down(BYTE dstep,WORD ctime)
 292          {
 293   1      	BYTE i;
 294   1      	for(i=LCD_NROW-1;i<LCD_NROW;)
 295   1      	{
 296   2      		lcd_cmd1_send(i|0xC0);
 297   2      		lcd_cmd2_send(i|0xC0);
 298   2      		i -= dstep;
 299   2      		delay(ctime);
 300   2      	}
 301   1      	lcd_cmd1_send(0xC0);
 302   1      	lcd_cmd2_send(0xC0);
 303   1      
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 6   

 304   1      }
 305          //**********************************************
 306          void setpos(BYTE px,BYTE py,bit bclr)
 307          {
 308   1      	BYTE page;
 309   1      	BYTE  posdata;
 310   1      	page = py % 8;
 311   1      	posdata = 0x01;
 312   1      	if(page) posdata = _crol_(posdata,page);
 313   1      	page = py / 8;
 314   1      	page = page|0xB8;
 315   1      	if(px<64)
 316   1      	{
 317   2      	    lcd_cmd1_send(page);
 318   2      	    lcd_cmd1_send(px|0x40);
 319   2      	    if(bclr) lcd_data1_send(posdata);
 320   2      		else	 lcd_data1_send(~posdata);	
 321   2      	}
 322   1      	else
 323   1      	{
 324   2      	    lcd_cmd2_send(page);
 325   2      	    lcd_cmd2_send((px-64)|0x40);
 326   2      	    if(bclr) lcd_data2_send(posdata);
 327   2      		else	 lcd_data2_send(~posdata);
 328   2      	}
 329   1      	
 330   1      }
 331          //***********************************************
 332          void drawline(BYTE xb,BYTE yb,BYTE xe,BYTE ye,bit bclr)
 333          {
 334   1      	char fm;
 335   1      	char xstep,ystep;
 336   1      	BYTE estep;
 337   1      	BYTE ncase;
 338   1      	if ( (xe>=xb) && (ye>=yb) )	    ncase = 1;
 339   1      	else if ( (xe<xb) && (ye>=yb) ) ncase = 2;
 340   1          else if ( (xe<xb) && (ye<yb) )  ncase = 3;
 341   1      	else                            ncase = 4;
 342   1      	fm = xstep = ystep = 0;
 343   1      	estep = abs(xe-xb) + 1;
 344   1      	do
 345   1      	{
 346   2      		setpos(xb+xstep,yb+ystep,bclr);
 347   2      		if(fm>=0)
 348   2      		{
 349   3      			switch(ncase)
 350   3      			{
 351   4      				case 1: xstep++;
 352   4      						break;
 353   4      				case 2: xstep--;
 354   4      						break;
 355   4      				case 3: xstep--;
 356   4      						break;
 357   4      				case 4: xstep++;
 358   4      						break;
 359   4      				default:break;
 360   4      			 }
 361   3      			 fm -= abs(ye-yb);
 362   3      			 estep--;
 363   3      		 }
 364   2      		 else
 365   2      		 {
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 7   

 366   3      		 	switch(ncase)
 367   3      			{
 368   4      				case 1: ystep++;
 369   4      						break;
 370   4      				case 2: ystep++;
 371   4      						break;
 372   4      				case 3: ystep--;
 373   4      						break;
 374   4      				case 4: ystep--;
 375   4      						break;
 376   4      				default:break;
 377   4      			 }
 378   3      			 fm += abs(xe-xb);
 379   3      		 }
 380   2      	}while(estep);
 381   1      
 382   1      }
 383          //************************************************************************
 384          void drawrect(BYTE xb,BYTE yb,BYTE rwidth,BYTE rheight,bit bclr)
 385          {
 386   1      	BYTE i;
 387   1      	for(i=xb;i<xb+rwidth;i++)
 388   1      	{
 389   2      		setpos(i,yb,bclr);
 390   2      		setpos(i,yb+rheight,bclr);
 391   2      	}
 392   1      	for(i=yb;i<yb+rheight;i++)
 393   1      	{
 394   2      		setpos(xb,i,bclr);
 395   2      		setpos(xb+rwidth,i,bclr);
 396   2      	}
 397   1      }
 398          //*************************************************************************
 399          void drawcircle(BYTE xb,BYTE yb,BYTE cr,bit bclr)
 400          {
 401   1      	int fm;
 402   1      	char xstep,ystep;
 403   1      	BYTE estep;
 404   1      	fm = 0;
 405   1      	xstep = xb;
 406   1      	ystep = yb+cr-1;
 407   1      	estep = 4*cr-3;
 408   1      	do
 409   1      	{
 410   2      		setpos(xstep,ystep,bclr);
 411   2      		if(fm>=0)
 412   2      		{
 413   3      			if ( (xstep>=xb) && (ystep>=yb) )
 414   3      			{
 415   4      				xstep--;estep--;
 416   4      				fm -= (2*xstep-1);
 417   4      			}
 418   3      			else if ( (xstep<xb) && (ystep>=yb) )
 419   3      			{
 420   4      				ystep--;
 421   4      				fm -= (2*ystep-1);
 422   4      			}
 423   3      		    else if ( (xstep<xb) && (ystep<yb) )
 424   3      			{
 425   4      				xstep++;estep--;
 426   4      				fm -= (2*xstep-1);
 427   4      			}
C51 COMPILER V6.12  LCD12864                                                               07/30/2005 03:09:00 PAGE 8   

 428   3      			else 
 429   3                  {
 430   4                  	ystep++;
 431   4             			fm -= (2*ystep-1);
 432   4      			}
 433   3      		}
 434   2      		else
 435   2      		{
 436   3      		 	if ( (xstep>=xb) && (ystep>=yb) )
 437   3      			{
 438   4      				ystep++;
 439   4      				fm += (2*ystep+1);
 440   4      			}
 441   3      			else if ( (xstep<xb) && (ystep>=yb) )
 442   3      			{
 443   4      				xstep--;estep--;
 444   4      				fm += (2*xstep+1);
 445   4      			}
 446   3      		    else if ( (xstep<xb) && (ystep<yb) )
 447   3      			{
 448   4      				ystep--;
 449   4      				fm += (2*ystep+1);
 450   4      			}
 451   3      			else 
 452   3                  {
 453   4                  	xstep++;estep--;
 454   4             			fm += (2*xstep+1);
 455   4      			}
 456   3      		}
 457   2      	}while(estep);
 458   1      
 459   1      }
 460          	


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2080    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      63
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       9
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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