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

📄 main.c

📁 采用普通单片机控制的电桥测试仪
💻 C
字号:
/*
*********************************************************************************************************
*										File Name:	Main.c
*
*								Last Modified Data: 2006-08-10
*
*										Last Version:V1.0
*
*								Description:电桥测试主程序(大循环)
*
*********************************************************************************************************
*/

#define _MAIN_
#include "..\Inc\Include.h"

main()
{
	InitSys(); //
   // P0 = 0xA6;  PLUS3;	Delay(500);	
//	P0=0x38;  PLUS1;
	while(1)
	{

		if(OneMiao)				OneMiaoDeal();
		if(HaveKeyDown)         { Key_deal(); HaveKeyDown = 0; }
       if(Liang&&MenuID==0)              {JianCeDianLiang();Liang=0;}
		if(CanClose)			
		{
			Beep(100);
			CanClose = 0;
			POWER_ON_OFF = OFF;
        
		}
    
    
     // CtrlDAOut_Test();
     // CtrlDAOut(2000);  
	}
}

/*
********************************************************************************************************
* Function:Timer0
*
* Descriptions:
*
* Input:定时时间10ms
* 
* OutPut:无
*******************************************************************************************************
*/
void Timer0 (void) interrupt 1 
{
	uchar i;
	static TimeCnt=0;
    static uint TimeDianLiang0=0;
    //static uint TimeDianLiang1 = 0;
  if(HaveKeyDown == 0)
   { 
		i = P2 | 0x83;
		if (i==Set||i==Lmove||i==Rmove||i==Lcdled)
		{
	    	if(++KeyTime >= 20)
			{
				KeyTime = 0;
				HaveKeyDown=1;
				KeyState = i;
			}
		}
		else 	KeyTime=0;	
   } 
	
	if(off==0)//off=P3^2
	{  	
		if(OffTime++>20)	
		{
			CanClose=1;
			OffTime = 0;
		}
	}
	else   OffTime=0;

	if (++TimeCnt>=100)
 	{
		TimeCnt = 0;
		OneMiao = 1;
	}
     if(MenuID==0)
       {
        if(++TimeDianLiang0>=6500)
         {
         TimeDianLiang0=0;
         Liang=1;
         }
       }
	TH0=TPH0; 	TL0=TPL0;
}


void IntTimer1() interrupt 3
{
	TF0 = 0;
    if(TestFlag==1)	// 开始测试
	{
		TR1 = 0;
		TR2 = 0;
		TestFlag = 0;
		TestOK = 1; // 555测试完毕
	}

}
/*
********************************************************************************************************
* 函数名称:Timer2
*
* 功能描述:定时器 2 时钟源	   (12.5 ms)
*
* 说明:
* 
*******************************************************************************************************
*/
void Timer2(void)interrupt 5
{
	TF2 = 0;						 
	if(TestFlag==1)							// 断线距离测试
  	{
 		TestCount += 1;
		return;
  	}
}

void SaveOldData(void)
{
	uchar i, j, dat;
	uint  tmp;
	
	if(OldDataSum>=MAX_OLDDATA_SUN)//MAX_OLDDATA_SUN=20
	{
		for (i=1; i<MAX_OLDDATA_SUN; i++)
		{
			tmp = I2C_OLDDATA + (i * OLDDATA_BYTE) + 1;//OLDDATA_BYTE=12
			for (j=0; j<OLDDATA_BYTE; j++)//OLDDATA_BYTE=12
			{
				dat = II3RD(AT24C256, tmp+j);
				II3WR(AT24C256, tmp+j-OLDDATA_BYTE, dat);
			}
		}
	}
	else 	OldDataSum += 1;

	tmp = I2C_OLDDATA  + (OLDDATA_BYTE * (OldDataSum-1));
	II3WR(AT24C256, I2C_OLDDATA, OldDataSum);
	II3WR(AT24C256, ++tmp, JY/256);
	II3WR(AT24C256, ++tmp, JY%256);
	II3WR(AT24C256, ++tmp, HL/256);
	II3WR(AT24C256, ++tmp, HL%256);
	II3WR(AT24C256, ++tmp, per/256);
	II3WR(AT24C256, ++tmp, per%256);
	II3WR(AT24C256, ++tmp, Dist/256);
	II3WR(AT24C256, ++tmp, Dist%256);
	II3WR(AT24C256, ++tmp, TimeNow[1]);
	II3WR(AT24C256, ++tmp, TimeNow[2]);
	II3WR(AT24C256, ++tmp, TimeNow[3]);
	II3WR(AT24C256, ++tmp, TimeNow[4]);
}

/*
********************************************************************************************************
* Function:DispOldData
*
* Descriptions:显示旧的数据
*
* Input:uchar no,uchar *p
* 
* OutPut:
*******************************************************************************************************
*/
void DispOldData(uchar no,uchar *p)
{
	uchar i;
	float tmp;

	WRI_CC_VALUE(14,4,no+1,2,0);
	WRI_CC_VALUE(20,4,OldDataSum,2,0);
	if(no>=OldDataSum)	return;

	tmp = (I2C_OLDDATA + 1) + (OLDDATA_BYTE * no);//OLDDATA_BYTE = 12
	for(i=0; i<OLDDATA_BYTE; i++)	
	{
		*(p+i) = II3RD(AT24C256, tmp + i);
	}
	
	// 1-绝缘
	tmp = (p[0]*256+p[1]) / 100.0;   			      
	if(tmp!=1000000 )
	{
		WRI_CC_VALUE(14, 24, tmp,4,1);
		WRI_CC(19,20,16,16,TestDianQiaoZimo[7]); 	  // M
	}
      else  WRI_CC(14, 20, 16, 16, table3[26]);  		  // ∞
	 // 2-环阻
	tmp = p[2]*256+p[3];							 
	WRI_CC_VALUE(14, 40, tmp,5,0);
	WRI_CC(19,36,16,16,table3[25]);				  	  // Ω 
	// 故障比	
	tmp= p[4]*256 + p[5];							  
	WRI_CC_VALUE(14,56,tmp,3,1);
	WRI_CC(19,56,8,8,Number[13]);					  // %
	// 故障距离
	tmp = p[6]*256+p[7];
	WRI_CC_VALUE(14,72,tmp,4,0);
	WRI_CC(19,72,8,8,Number[12]);					  // m
	// 测试时间
	WRI_CC(16,88,8,8,Number[14]);                     //-
	WRI_CC(19,88,8,8,Blank);
	WRI_CC(22,88,8,8,Number[15]);                    //:
	for(i=0; i<4; i++)
	{
		WRI_CC(14+3*i, 88, 8,8,Number[p[8+i]/10]);
		WRI_CC(15+3*i, 88, 8,8,Number[p[8+i]%10]);
	}	
}
/*
********************************************************************************************************
* Function:Delay
*
* Descriptions:延时
*
* Input:uint ms 延时时间(毫秒) = ms * 1
* 
* OutPut:无
*******************************************************************************************************
*/

void Delay(uint ms)
{
	uint i,j;

	for(j=ms; j>0; j--)	                                                       
	{
		for(i=0;i<200;i++)
			;
	}
}
/*--------------------------------------------------End-----------------------------------------------*/

⌨️ 快捷键说明

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