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

📄 t6963c.lst

📁 含多种常用液晶驱动芯片和点阵驱动程序样例,有很好的参考价值,本人特意会集上传
💻 LST
📖 第 1 页 / 共 2 页
字号:
 236          
 237          uchar fnST6(void)		// 状态位ST6判断(屏读/屏拷贝状态)
C51 COMPILER V6.14  T6963C                                                                 07/20/2001 09:36:51 PAGE 5   

 238          {
 239   1      	uchar i;
 240   1      	
 241   1      	for(i=10;i>0;i--)
 242   1      	{
 243   2      		if((LCMCW & 0x40) == 0x40)
 244   2      			break;
 245   2      	}
 246   1      	return i;	// 若返回零,说明错误
 247   1      }
 248          
 249          uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2)	// 写双参数的指令
 250          {
 251   1      	if(fnST01() == 0)
 252   1      		return 1;
 253   1      	LCMDW = uPar1;
 254   1      	if(fnST01() == 0)
 255   1      		return 2;
 256   1      	LCMDW = uPar2;
 257   1      	if(fnST01() == 0)
 258   1      		return 3;
 259   1      	LCMCW = uCmd;
 260   1      	return 0;	// 返回0成功
 261   1      }
 262          
 263          uchar fnPR11(uchar uCmd,uchar uPar1)	// 写单参数的指令
 264          {
 265   1      	if(fnST01() == 0)
 266   1      		return 1;
 267   1      	LCMDW = uPar1;
 268   1      	if(fnST01() == 0)
 269   1      		return 2;
 270   1      	LCMCW = uCmd;
 271   1      	return 0;	// 返回0成功
 272   1      }
 273          
 274          uchar fnPR12(uchar uCmd)		// 写无参数的指令
 275          {
 276   1      	if(fnST01() == 0)
 277   1      		return 1;
 278   1      	LCMCW = uCmd;
 279   1      	return 0;	// 返回0成功
 280   1      }
 281          
 282          uchar fnPR13(uchar uData)		// 写数据
 283          {
 284   1      	if(fnST3() == 0)
 285   1      		return 1;
 286   1      	LCMDW = uData;
 287   1      	return 0;	// 返回0成功
 288   1      }
 289          
 290          uchar fnPR2(void)				// 读数据
 291          {
 292   1      	if(fnST01() == 0)
 293   1      		return 1;
 294   1      	return LCMDW;
 295   1      }
 296          
 297          // 设置当前地址
 298          void fnSetPos(uchar urow, uchar ucol)
 299          {
C51 COMPILER V6.14  T6963C                                                                 07/20/2001 09:36:51 PAGE 6   

 300   1      	uint  iPos;
 301   1      
 302   1      	iPos = urow * 30 + ucol;
 303   1      	fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
 304   1      	gCurRow = urow;
 305   1      	gCurCol = ucol;
 306   1      }
 307          
 308          // 设置当前显示行、列
 309          void cursor(uchar uRow, uchar uCol)
 310          {
 311   1      	fnSetPos(uRow * 16, uCol);
 312   1      }
 313          
 314          // 清屏
 315          void cls(void)
 316          {
 317   1      	uint  i;
 318   1      
 319   1      	fnPR1(LC_ADD_POS,0x00,0x00);	// 置地址指针
 320   1      	fnPR12(LC_AUT_WR);				// 自动写
 321   1      	for(i=0;i<240*30;i++)
 322   1      	{
 323   2      		fnST3();
 324   2      		fnPR13(0x00);				// 写数据
 325   2      	}
 326   1      	fnPR12(LC_AUT_OVR);				// 自动写结束
 327   1      	fnPR1(LC_ADD_POS,0x00,0x00);	// 重置地址指针
 328   1      	gCurRow = 0;					// 置地址指针存储变量
 329   1      	gCurCol = 0;
 330   1      }
 331          
 332          // LCM 初始化
 333          char fnLCMInit(void)
 334          {
 335   1      	if(fnPR1(LC_TXT_STP,0x00,0x00) != 0)	// 文本显示区首地址
 336   1      		return -1;
 337   1      	fnPR1(LC_TXT_WID,0x1E,0x00);	// 文本显示区宽度
 338   1      	fnPR1(LC_GRH_STP,0x00,0x00);	// 图形显示区首地址
 339   1      	fnPR1(LC_GRH_WID,0x1E,0x00);	// 图形显示区宽度
 340   1      	fnPR12(LC_CUR_SHP | 0x01);		// 光标形状
 341   1      	fnPR12(LC_MOD_OR);				// 显示方式设置
 342   1      	fnPR12(LC_DIS_SW | 0x08);		// 显示开关设置
 343   1      	
 344   1      	return 0;
 345   1      }
 346          
 347          // ASCII(8*16) 及 汉字(16*16) 显示函数
 348          uchar dprintf(char *fmt, ...)
 349          {
 350   1      	va_list arg_ptr;
 351   1      	char  c1,c2,cData;
 352   1      	char tmpBuf[64];				// LCD显示数据缓冲区
 353   1      	uchar i=0,j,uLen,uRow,uCol;
 354   1      	uint  k;
 355   1      	
 356   1      	va_start(arg_ptr, fmt);
 357   1      	uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
 358   1      	va_end(arg_ptr);
 359   1      
 360   1      	while(i<uLen)
 361   1      	{
C51 COMPILER V6.14  T6963C                                                                 07/20/2001 09:36:51 PAGE 7   

 362   2      		c1 = tmpBuf[i];
 363   2      		c2 = tmpBuf[i+1];
 364   2      		uRow = fnGetRow();
 365   2      		uCol = fnGetCol();
 366   2      		if(c1 >= 0)
 367   2      		{	// ASCII
 368   3      			if(c1 < 0x20)
 369   3      			{
 370   4      				switch(c1)
 371   4      				{
 372   5      					case CR:
 373   5      					case LF:		// 回车或换行
 374   5      						i++;
 375   5      						if(uRow < 112)
 376   5      							fnSetPos(uRow+16,0);
 377   5      						else
 378   5      							fnSetPos(0,0);
 379   5      						continue;
 380   5      					case BS:		// 退格
 381   5      						if(uCol > 0)
 382   5      							uCol--;
 383   5      						fnSetPos(uRow,uCol);
 384   5      						cData = 0x00;
 385   5      						break;
 386   5      					default:		// 其他
 387   5      						c1 = 0x1f;
 388   5      				}
 389   4      			}
 390   3      			for(j=0;j<16;j++)
 391   3      			{
 392   4      				fnPR12(LC_AUT_WR);		// 写数据
 393   4      				if(c1 >= 0x1f)
 394   4      				{
 395   5      					if(j < (16-ASC_CHR_HEIGHT))
 396   5      						fnPR13(0x00);
 397   5      					else
 398   5      						fnPR13(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)]);
 399   5      				}
 400   4      				else
 401   4      					fnPR13(cData);
 402   4      				fnPR12(LC_AUT_OVR);
 403   4      				fnSetPos(uRow+j+1,uCol);
 404   4      			}
 405   3      			if(c1 != BS)		// 非退格
 406   3      				uCol++;
 407   3      		}
 408   2      		else
 409   2      		{	// 中文
 410   3      			for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
 411   3      			{
 412   4      				if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 413   4      					break;
 414   4      			}
 415   3      			for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
 416   3      			{
 417   4      				fnSetPos(uRow+k,uCol);
 418   4      				fnPR12(LC_AUT_WR);			// 写数据
 419   4      				if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 420   4      				{
 421   5      					fnPR13(GB_16[j].Msk[k*2]);
 422   5      					fnPR13(GB_16[j].Msk[k*2+1]);
 423   5      				}
C51 COMPILER V6.14  T6963C                                                                 07/20/2001 09:36:51 PAGE 8   

 424   4      				else						// 未找到该字
 425   4      				{
 426   5      					if(k < sizeof(GB_16[0].Msk)/4)
 427   5      					{
 428   6      						fnPR13(0x00);
 429   6      						fnPR13(0x00);
 430   6      					}
 431   5      					else
 432   5      					{
 433   6      						fnPR13(0xff);
 434   6      						fnPR13(0xff);
 435   6      					}
 436   5      				}
 437   4      				fnPR12(LC_AUT_OVR);
 438   4      			}
 439   3      			uCol += 2;
 440   3      			i++;
 441   3      		}
 442   2      		if(uCol >= 30)			// 光标后移
 443   2      		{
 444   3      			uRow += 16;
 445   3      			if(uRow < 0x80)
 446   3      				uCol -= 30;
 447   3      			else
 448   3      			{
 449   4      				uRow = 0;
 450   4      				uCol = 0;
 451   4      			}
 452   3      		}
 453   2      		fnSetPos(uRow,uCol);
 454   2      		i++;
 455   2      	}
 456   1      	return uLen;
 457   1      }
 458          
 459          void main(void)	// 测试用
 460          {
 461   1      	fnLCMInit();
 462   1      	cls();
 463   1      	cursor(0,0);
 464   1      	dprintf("%s","This is a test:中文测试");
 465   1      }
 466          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1118    ----
   CONSTANT SIZE    =   1187    ----
   XDATA SIZE       =    138     122
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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