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

📄 l8279.lst

📁 一个锅炉温度控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V3.20,  SN-0  L8279                                                           05/24/04  10:40:00  PAGE 5   

 242   1      	if(LEDRamStatus != 0x00){
 243   2      		if(	(LEDStatus == S_P_Val) || 
 244   2      			(LEDStatus == S_I_Val) || 
 245   2      			(LEDStatus == S_P_Val) || 
 246   2      			(LEDStatus == S_SP_Val)||
 247   2      			(LEDStatus == S_F_Val) )  {
 248   3      			for(i=0;i<10;i++){
 249   4      				if(LEDRamStatus == NumInTable[i]){
 250   5      					Num = i;
 251   5      					break;
 252   5      				}
 253   4      			}
 254   3      		
 255   3      			Num++;								/*下一位数字*/
 256   3      			if((Num>=0)&&(Num<=9))
 257   3      				WriteLed(1,NumInTable[Num]);
 258   3      			else 
 259   3      				WriteLed(1,NumInTable[0]);
 260   3      		}						/*将第1个LED的显示内容更新*/
 261   2      	}
 262   1      	return;
 263   1      }
 264          
 265          /*********************************************************/
 266          /***2号LED键***/
 267          void OnLed1Down()						/*循环改动一个LED的显示值*/
 268          {
 269   1      	idata BYTE Num;
 270   1      	idata BYTE i;
 271   1      	idata BYTE LEDRamStatus;
 272   1      	CMD8279 = 0x62;
 273   1      	LEDRamStatus = DATA8279;
 274   1      
 275   1      	if(LEDRamStatus != 0x00){
 276   2      		if(	(LEDStatus == S_P_Val) || 
 277   2      			(LEDStatus == S_I_Val) || 
 278   2      			(LEDStatus == S_P_Val) || 
 279   2      			(LEDStatus == S_SP_Val)||
 280   2      			(LEDStatus == S_F_Val))  {
 281   3      			for(i=0;i<10;i++){
 282   4      				if(LEDRamStatus == NumInTable[i]){
 283   5      					Num = i;
 284   5      					break;
 285   5      				}
 286   4      			}
 287   3      		
 288   3      			Num++;								/*下一位数字*/
 289   3      			if((Num>=0)&&(Num<=9))
 290   3      				WriteLed(2,NumInTable[Num]);
 291   3      			else 
 292   3      				WriteLed(2,NumInTable[0]);
 293   3      		}						/*将第1个LED的显示内容更新*/
 294   2      	}
 295   1      	return;
 296   1      }
 297          
 298          /*********************************************************/
 299          /***3号LED键***/
 300          void OnLed0Down()						/*循环改动一个LED的显示值*/
 301          {
 302   1      	idata BYTE Num;
 303   1      	idata BYTE i;
C51 COMPILER V3.20,  SN-0  L8279                                                           05/24/04  10:40:00  PAGE 6   

 304   1      	idata BYTE LEDRamStatus;
 305   1      	CMD8279 = 0x63;
 306   1      	LEDRamStatus = DATA8279;
 307   1      
 308   1      	if(LEDRamStatus != 0x00){
 309   2      		if(	(LEDStatus == S_P_Val) || 
 310   2      			(LEDStatus == S_I_Val) || 
 311   2      			(LEDStatus == S_P_Val) || 
 312   2      			(LEDStatus == S_SP_Val)||
 313   2      			(LEDStatus == S_F_Val) )  {
 314   3      			for(i=0;i<10;i++){
 315   4      				if(LEDRamStatus == NumInTable[i]){
 316   5      					Num = i;
 317   5      					break;
 318   5      				}
 319   4      			}
 320   3      		
 321   3      			Num++;								/*下一位数字*/
 322   3      			if((Num>=0)&&(Num<=9))
 323   3      				WriteLed(3,NumInTable[Num]);
 324   3      			else 
 325   3      				WriteLed(3,NumInTable[0]);
 326   3      		}						/*将第1个LED的显示内容更新*/
 327   2      	}
 328   1      	return;
 329   1      }
 330          
 331          /*********************************************************/
 332          /***内部数据更新函数***/
 333          void LEDDataToRAM()
 334          {
 335   1      	idata BYTE i,j;
 336   1      	idata BYTE Ledram[4];
 337   1      	idata BYTE dat[4];
 338   1      	UINT result;
 339   1      	CMD8279 = 0x70;
 340   1      	for(i=0;i<4;i++){
 341   2      		Ledram[i] = DATA8279;
 342   2      	}
 343   1      
 344   1      	for(i=0;i<4;i++){
 345   2      		for(j=0;j<10;j++) {
 346   3      			if(Ledram[i] == NumInTable[j])
 347   3      				dat[i] = j;
 348   3      		}
 349   2      	}
 350   1      
 351   1      	result = dat[3]*1000 + dat[2]*100 + dat[1]*10 + dat[0];
 352   1      	
 353   1      	switch(LEDStatus){
 354   2      	case S_P_Val:
 355   2      		p = result;
 356   2      		break;
 357   2      	case S_I_Val:
 358   2      		I = result;
 359   2      		break;
 360   2      	case S_D_Val:
 361   2      		D = result;
 362   2      		break;
 363   2      	case S_SP_Val:
 364   2      		SP2 = (result<=10)?10:result;
 365   2      		break;
C51 COMPILER V3.20,  SN-0  L8279                                                           05/24/04  10:40:00  PAGE 7   

 366   2      	case S_F_Val:
 367   2      		SP1toSP2Time = result;
 368   2      		AlarmFlag = 0;   /***改变输入时间,不报警***/  
 369   2      		if(SP1toSP2Time == 0){
 370   3      			Rk = SP2;
 371   3      		    TR1 = 0;	/**输入时间为0关闭定时器1 **/
 372   3      		}
 373   2      		else {
 374   3      		       TR1 = 1;   
 375   3      		      /***===+++++重新设定时,Rk初始值为当前温度+++++===***/
 376   3                    Rk=Yk;                
 377   3      		      SP_temp=Yk;
 378   3                    /******===+++++++++++===**********/  
 379   3      			if (SP2 >= Rk){
 380   4      				SPOneStepValSign = 1;
 381   4      				SPOneStepVal = (SP2-Rk)/(SP1toSP2Time*6.0);
 382   4      			}
 383   3      			else {
 384   4      				SPOneStepValSign = 0;
 385   4      				SPOneStepVal = (Rk-SP2)/(SP1toSP2Time*6.0);
 386   4      			}
 387   3      		}
 388   2      		break;
 389   2      	default:
 390   2      		break;
 391   2      	}
 392   1      	return;
 393   1      }
 394          
 395          /*
              
                显示部分
              
              */
 400          
 401          /******************************************************/
 402          /***初始化8279***/
 403          void Init_8279()     
 404          {
 405   1      	CMD8279 = 0x11;  /*键盘设置为译码扫描,双键锁定方式*/
 406   1      					 /*显示8个字符,右入口*/
 407   1      
 408   1      	CMD8279 = 0x34;  /*分频数为20*/
 409   1      	
 410   1      	Clear_8279();		
 411   1      	return;
 412   1      }
 413          
 414          /******************************************************/
 415          /***清8279FIFO RAM和显示RAM***/
 416          void Clear_8279() reentrant
 417          {
 418   1      	idata BYTE CmdStatus;  /*8279控制寄存器状态*/
 419   1      	CMD8279 = 0xD3;  /*清显示器和键盘*/
 420   1      	CmdStatus = CMD8279;
 421   1      	while((CmdStatus&0x80)) {
 422   2      		CmdStatus = CMD8279;
 423   2      	}				 /*等待清零结束*/
 424   1      	return;
 425   1      }
 426          
 427          void Disp_A_Number(UINT times) reentrant
C51 COMPILER V3.20,  SN-0  L8279                                                           05/24/04  10:40:00  PAGE 8   

 428          {
 429   1      	idata BYTE i;
 430   1      	idata BYTE dispchar[4];
 431   1      
 432   1      	if(times > 9999){
 433   2      		return;
 434   2      	}
 435   1      
 436   1      	dispchar[3] = NumInTable[times/1000];
 437   1      	
 438   1      	times = times%1000;
 439   1      	dispchar[2] = NumInTable[times/100];
 440   1      	
 441   1      	times = times%100;
 442   1      	dispchar[1] = NumInTable[times/10];
 443   1      
 444   1      	dispchar[0] = NumInTable[times%10];
 445   1      
 446   1      	Clear_8279();
 447   1      	CMD8279 = 0x90;
 448   1      	for(i=0;i<4;i++) {
 449   2      		DATA8279 = dispchar[i];
 450   2      	}
 451   1      	return;
 452   1      }
 453          
 454          /******************************************************/
 455          /***显示温度***/
 456          void DispT() reentrant   
 457          {
 458   1      	Disp_A_Number(Yk);
 459   1      	LEDStatus = S_NULL;
 460   1      	TFlag = TRUE;
 461   1      	return;
 462   1      }
 463          
 464          /******************************************************/
 465          /***显示字符P***/
 466          void DispP()
 467          {
 468   1      	Clear_8279();
 469   1      	CMD8279 = 0x80;
 470   1      	DATA8279 = CharP;
 471   1      	LEDStatus = S_P;
 472   1      	TFlag = FALSE;
 473   1      	return;
 474   1      }
 475          
 476          /******************************************************/
 477          /***显示参数P的值***/
 478          void DispPVal()
 479          {
 480   1      	Clear_8279();
 481   1      	Disp_A_Number(p);
 482   1      	LEDStatus = S_P_Val;	
 483   1      	TFlag = FALSE;
 484   1      	return;
 485   1      }
 486          
 487          /******************************************************/
 488          /***显示字符I***/
 489          void DispI()

⌨️ 快捷键说明

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