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

📄 5.2.3-1.lst

📁 《单片机C语言编程与实例的代码.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
 216   2      		Wrdata(cbyte);			/*写输出一字节*/
 217   2      		x++;
 218   2      		col++;
 219   2      		if (col==LCMLIMIT){col=0;row++;row++;};		/*下一列,如果列越界换行*/
 220   2      			if (row>7) row=0;					/*如果行越界,返回首行*/
 221   2      		}									/*上半个字符输出结束*/
 222   1      	col = bakerx;				/*列对齐*/
 223   1      	row = bakery+1;				/*指向下半个字符行*/
 224   1      /*下半个字符输出,8列*/
 225   1      	for(i=0;i<8;i++)
 226   1      		{
 227   2      		cbyte = Ezk[x];			/*取点阵码*/
 228   2      		Wrdata(cbyte);			/*写输出一字节*/
 229   2      		x++;
 230   2      		col++;
 231   2      		if (col==LCMLIMIT){col=0;row=row+2;};	/*下一列,如果列越界换行*/
 232   2      			if (row>7) row=1;	/*如果行越界,返回首行*/
 233   2      		}					/*下半个字符输出结束*/
 234   1      	row=bakery;
 235   1      	}						/*整个字符输出结束*/
 236          
 237          /*********************************全角字符点阵码数据输出********************************/
 238          void Putcdot(Uchar Order)
 239          	{
 240   1      	Uchar i,bakerx,bakery;			/*共定义3个局部变量*/
 241   1      	int x;						/*偏移量,字符量少的可以定义为UCHAR	*/
C51 COMPILER V6.20c  5_2_3_1                                                               09/02/2001 14:49:03 PAGE 5   

 242   1      	bakerx = col;				/*暂存x,y坐标,已备下半个字符使用*/
 243   1      	bakery = row;
 244   1      	x=Order * 0x20;				/*每个字符32字节*/
 245   1      	/*上半个字符输出,16列*/
 246   1      	for(i=0;i<16;i++)
 247   1      		{
 248   2      		Wrdata(Hzk[x]);			/*写输出一字节*/
 249   2      		x++;
 250   2      		col++;
 251   2      		if (col==LCMLIMIT){ col=0;row++;row++;}	/*下一列,如果列越界换行*/
 252   2      			if (row>6) row=0;	/*如果行越界,返回首行*/
 253   2      		}					/*上半个字符输出结束*/
 254   1      	/*下半个字符输出,16列	*/
 255   1      	col = bakerx;
 256   1      	row = bakery+1;
 257   1      	for(i=0;i<16;i++)				/*下半部分*/
 258   1      		{
 259   2      		Wrdata(Hzk[x]);
 260   2      		x++;
 261   2      		col++;
 262   2      		if (col==LCMLIMIT){col=0;row++;row++;}	/*下一列,如果列越界换行*/
 263   2      			if (row>7) row=1;	/*如果行越界,返回首行*/
 264   2      		}					/*下半个字符输出结束*/
 265   1      	row = bakery;
 266   1      	}						/*整个字符输出结束*/
 267          
 268          /************************************清屏,全屏幕清零***********************************/
 269          void Lcmcls( void )
 270          	{
 271   1      	for(row=0;row<8;row++)
 272   1         		for(col=0;col<LCMLIMIT;col++) Wrdata(0);
 273   1      	}
 274          
 275          /***************************从液晶片上读数据,保留在全局变量中***************************/
 276          void Rddata(void)
 277          	{
 278   1      	     Locatexy();			/*坐标定位,返回时保留分区状态不变*/
 279   1      		Datalcm=0xFF;
 280   1      		Dilcm = 1;				/*数据*/
 281   1      		Rwlcm = 1;			/*读数据*/
 282   1      		Elcm = 1;				/*读入到LCM*/
 283   1      		_nop_();
 284   1      		cbyte = Datalcm;			/*虚读一次*/
 285   1      		Elcm = 0;
 286   1      	     Locatexy();			/*坐标定位,返回时保留分区状态不变*/
 287   1      		Datalcm=0xFF;
 288   1      		_nop_();
 289   1      		Dilcm = 1;				/*数据*/
 290   1      		Rwlcm = 1;			/*读数据*/
 291   1      		Elcm = 1;				/*读入到LCM*/
 292   1      		_nop_();
 293   1      		cbyte = Datalcm;			/*从数据口读数据,真读*/
 294   1      		Elcm = 0;
 295   1      	}
 296          
 297          /*************************************数据写输出/**************************************/
 298          void Wrdata(Uchar X)
 299          	{
 300   1      	     Locatexy();			/*坐标定位,返回时保留分区状态不变*/
 301   1      		Dilcm = 1;				/*数据输出*/
 302   1      		Rwlcm = 0;			/*写输出*/
 303   1      		Datalcm = X;			/*数据输出到数据口*/
C51 COMPILER V6.20c  5_2_3_1                                                               09/02/2001 14:49:03 PAGE 6   

 304   1      		Elcm = 1;				/*读入到LCM*/
 305   1      		_nop_();
 306   1      		Elcm = 0;
 307   1      	}
 308          
 309          /*********************************命令输出到左区控制口*********************************/
 310          void WrcmdL(Uchar X)
 311          	{
 312   1      		lcdbusyL();				/*确定分区,返回时保留分区状态不变*/
 313   1      		Dilcm = 0;				/*命令操作*/
 314   1      		Rwlcm = 0;			/*写输出*/
 315   1      		Datalcm = X;			/*数据输出到数据口*/
 316   1      		Elcm = 1;_nop_();Elcm = 0;	/*读入到LCM*/
 317   1      	}
 318          
 319          /********************************命令输出到中区控制口********************************/
 320          void WrcmdM(Uchar X)
 321          	{
 322   1      		lcdbusyM();			/*确定分区,返回时保留分区状态不变*/
 323   1      		Dilcm = 0;				/*命令操作*/
 324   1      		Rwlcm = 0;			/*写输出*/
 325   1      		Datalcm = X;			/*命令输出到数据口*/
 326   1      		Elcm = 1;_nop_();Elcm = 0;	/*读入到LCM*/
 327   1      	}
 328          
 329          /*********************************命令输出到右区控制口********************************/
 330          void WrcmdR(Uchar X)
 331          	{
 332   1      		lcdbusyR();				/*确定分区,返回时保留分区状态不变*/
 333   1      		Dilcm = 0;			     /*命令操作*/
 334   1      		Rwlcm = 0;			/*写输出*/
 335   1      		Datalcm = X;			/*命令输出到数据口*/
 336   1      		Elcm = 1;_nop_();Elcm = 0;	/*读入到LCM*/
 337   1      	}
 338          
 339          /************************分区操作允许等待,返回时保留分区选择状态*************************/
 340          void lcdbusyL(void)
 341          	{
 342   1              CSALCM = 0; CSBLCM = 0;	/*清零CSA,CSB,选择左区*/
 343   1      	   wtcom();				/*等待使能*/
 344   1      	}
 345          void lcdbusyM(void)
 346          	{
 347   1              CSALCM = 0; CSBLCM =1;	/*置CSA为0,CSB为1,选择中区*/
 348   1      	   wtcom();				/*等待使能*/
 349   1      	}
 350          void lcdbusyR(void)
 351          	{
 352   1              CSALCM = 1; CSBLCM = 0;	/*置CSA为1,CSB为0,选择右区*/
 353   1      wtcom();				/*等待使能*/
 354   1      	}
 355          void wtcom(void)
 356          	{
 357   1      	     Dilcm = 0;				/*清零DI*/
 358   1      	     Rwlcm = 1;			/*置RW为1*/
 359   1                Datalcm = 0xFF;
 360   1      	     Elcm = 1;_nop_();	
 361   1            	while(Datalcm & Lcdbusy);
 362   1            	Elcm = 0;
 363   1      	}
 364          
 365          /******************根据设定的坐标数据,定位LCM上的下一个操作单元位置******************/
C51 COMPILER V6.20c  5_2_3_1                                                               09/02/2001 14:49:03 PAGE 7   

 366          void Locatexy(void)
 367          	{
 368   1      	  unsigned char  x,y;
 369   1      	  switch (col&0xc0)				/* col与0xC0*/
 370   1      		{						/*条件分支执行	*/
 371   2      		case 0:	{lcdbusyL();break;}	/*左区*/
 372   2      		case 0x40:	{lcdbusyM();break;}	/*中区*/
 373   2      		case 0x80:	{lcdbusyR();break;}	/*右区*/
 374   2      		}
 375   1      	  x = col&0x3F|SETX;			/*col.and.0x3f.or.setx*/
 376   1      	  y = row&0x07|SETY;			/*row.and.0x07.or.sety*/
 377   1      	  wtcom();						/*等待使能*/
 378   1      	  Dilcm = 0;					/*清零DI	*/
 379   1      		Rwlcm = 0;				/*清零RW*/
 380   1      		Datalcm = y;				/*MOV	P0,Y	*/
 381   1      		Elcm = 1;_nop_();Elcm = 0;
 382   1      		wtcom();					/*等待使能*/
 383   1      		Dilcm = 0;					/*清零DI*/
 384   1      		Rwlcm = 0;				/*清零RW*/
 385   1      		Datalcm = x;				/*MOV	P0,X*/
 386   1      		Elcm = 1;_nop_();Elcm = 0;
 387   1      	}
 388          
 389          /*************************************液晶屏初始化**************************************/
 390          void Lcminit(void)
 391          	{
 392   1      		cbyte = DISPOFF;			/*关闭显示屏*/
 393   1      		WrcmdL(cbyte);
 394   1      		WrcmdM(cbyte);
 395   1      		WrcmdR(cbyte);
 396   1      		cbyte = DISPON;			/*打开显示屏*/
 397   1      		WrcmdL(cbyte);
 398   1      		WrcmdM(cbyte);
 399   1      		WrcmdR(cbyte);
 400   1      		cbyte = DISPFIRST;			/*定义显示起始行为零*/
 401   1      		WrcmdL(cbyte);
 402   1      		WrcmdM(cbyte);
 403   1      		WrcmdR(cbyte);
 404   1      		Lcmcls();
 405   1      		col=0;					/*清屏*/
 406   1      		row=0;
 407   1      		Locatexy();
 408   1      	}
 409          /****************************************延时*******************************************/
 410          void Delay(Uchar MS)
 411          	{
 412   1      		Uchar us,usn;
 413   1      		while(MS!=0)
 414   1      			{ usn = 4;
 415   2      				while(usn!=0)
 416   2      					{
 417   3      						us=0xf0;
 418   3      						while (us!=0){us--;};
 419   3      						usn--;
 420   3      					}
 421   2      				MS--;
 422   2      			}
 423   1      	}
 424          
 425          /************************************定义字符串数组*************************************/
 426          Uchar code STR1[]="China Mobile";
 427          Uchar code STR2[]="Communications";
C51 COMPILER V6.20c  5_2_3_1                                                               09/02/2001 14:49:03 PAGE 8   

 428          Uchar code STR3[]="Corporation";
 429          Uchar code STR4[]="Welcome you!";
 430          
 431          /************************************定义中文字库***************************************/
 432          Uchar code Hzk[]={
 433          0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,	/*中*/
 434          0x00, 0x03,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,
 435          0x00,0xFE,0x02,0x0A,0x8A,0x8A,0x8A,0xFA,0x8A,0xCA,0x8E,0x0A,0x02,0xFF,0x02,0x00,/*国*/
 436          0x00,0xFF,0x40,0x50,0x50,0x50,0x50,0x5F,0x50,0x52,0x54,0x50,0x40,0xFF,0x00,0x00,
 437          0x24,0x24,0xA4,0xFE,0xA3,0x22,0x10,0x88,0x8C,0x57,0xE4,0x24,0x14,0x0C,0x00,0x00,	/*移*/

⌨️ 快捷键说明

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