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

📄 main4.c

📁 自动检测电容值
💻 C
📖 第 1 页 / 共 2 页
字号:
	tn=TH1=TL1=0;					//TIMER1 数值设为0
	if(!rc) 						
	{
		DelayMs(50);
		CB=1;						//测电容,断开充电,让测电容电路先振荡
	}	   	//rc=0为电容测定
	else
	{
		DelayMs(200);
	}
	//begin Test
	StartTest=0;
	Testing=0;
	td=wt;  //等待 
	j=0;
	BIE=IE;
	IE=0x80;
	ET0=1;							//定时中断保持
	lowint=INT1;
	while(td)
	{
		if(Testing)
		{
			if(lowint==INT1) {j=0;continue;}
			if(++j<1) continue;
			j=0;
			lowint=INT1;
			if(!lowint)
			{
				if(tc--)
				{
					TR1=1;
					continue;
				}
				else
				{
					TR1=0;
					ET1=0;
					break;
				}
			}
		}
		else
		{
			if(!INT1) {j=0;continue;}
			j++;
			if(j<1) continue;
			StartTest=1;
			Testing=1;
			IE1=0;
			TF1=0;	
			ET1=1;
			if(rc)
			{
				TR1=1;	  //测电阻
			}
			CB=1;
			j=0;
		}
	}
	IE=BIE;
	CB=0;
	TR1=0;
	EX1=0;
	if(td)
	{
		ul=256L*(tn*256L+TH1)+TL1;
	}
	else
	{
		ul=-1;
	}
//	if (ul<80000)
//		ul=ul;

	StartTest=0;
	return(ul);
}
void Test(char i)
{
	long ul;
	if(i<0||i>=10) return;
	ul=Test0(i,50);
	if(i>=4||i==CstdNo)
	{
		if(ul<Param0[i])
		{
			TestData[i]=0;
		}
		else
		{
			TestData[i]=1000.0*(ul-Param0[i])/stdC+0.5;
		}
	}
	else
	{
		if(ul==-1)
		{
			TestData[i]=-1;
		}
		else
		{
			if(Param0[i]==-1)
			{
				TestData[i]=1000.0*ul/stdR+0.5;
			}
			else
			{
				if(ul>Param0[i])
				{
					TestData[i]=0;
				}
				else
				{
					TestData[i]=1000.0*ul*Param0[i]/(Param0[i]-ul)/stdR+0.5;
				}
			}
		}
	}
}
void Check(char i)
{
	//char i;
	//OkLed=0;
	if(i<6)
	{
		if(i<4)
		{
			if(TestData[i]>MIN_RESISTOR&&TestData[i]<MAX_RESISTOR)
			{
				OkLed|=1<<i;
			}
		}
		else
		{
			if(TestData[i]>MIN_CAPACITOR&&TestData[i]<MAX_CAPACITOR)
			{
				OkLed|=1<<i;
			}
		}
		LedShow((OkLed)|(0xfe<<i),(~(OkLed))|(0xfe<<i));
//		OkLed=(OkLed)|(0xfe<<i);
//		NgLed=(~(OkLed))|(0xfe<<i);
	}
	else
	{
		if((OkLed&=0x3f)==0x3f)
		{
			OkLed|=ALLOK;
		}
		LedShow(OkLed,~OkLed);
	}
}
void DisplayData(char i)
{
	unsigned int n;
	char bf[5];
	char j;
	n=TestData[i];
	bf[4]=0;
	if(n>3000)
	{
		bf[0]=bf[1]=bf[2]=bf[3]='-';
	}
	else
	{
		for(j=3;j>0;j--)
		{
			bf[j]=n%10+'0';
			n/=10;
		}
		bf[0]=n+'0';
		if(i<4)
		{
			if(bf[0]!='0')
			{
				bf[3]=bf[2];
				bf[2]='.';
			}
			else
			{
				bf[0]=bf[1];
				bf[1]='.';
			}
		}
		else
		{
			for(j=0;j<3;j++)
			{
				if(bf[j]=='0')
				{
					bf[j]=' ';
				}
				else
				{
					break;
				}
			}
		}
	}
	switch(i)
	{
	case 0:LcdPrint("R1=");LcdPrint(bf);LcdPrint(" ");ComPrint("R1=");ComPrint(bf);ComPrint(" ");break;
	case 1:LcdPrint("R2=");LcdPrint(bf);LcdPrint("\n");ComPrint("R2=");ComPrint(bf);ComPrint("\n");break;
	case 2:LcdPrint("R3=");LcdPrint(bf);LcdPrint(" ");ComPrint("R3=");ComPrint(bf);ComPrint(" ");break;
	case 3:LcdPrint("R4=");LcdPrint(bf);LcdPrint("\n");ComPrint("R4=");ComPrint(bf);ComPrint("\n");break;
	case 4:LcdPrint("C1=");LcdPrint(bf);LcdPrint(" ");ComPrint("C1=");ComPrint(bf);ComPrint(" ");break;
	case 5:LcdPrint("C2=");LcdPrint(bf);LcdPrint("\n");ComPrint("C2=");ComPrint(bf);ComPrint("\n");break;
	case 6:LcdPrint("C3=");LcdPrint(bf);LcdPrint(" ");ComPrint("C3=");ComPrint(bf);ComPrint(" ");break;
	case 7:LcdPrint("C4=");LcdPrint(bf);LcdPrint("\n");ComPrint("C4=");ComPrint(bf);ComPrint("\n");break;
	}
}
void Timer1 (void) interrupt TIMER1INT  using 1
{
	tn++;
}
char Remote(void)
{
	char Key;
	if(RI)
	{
		Key=SBUF;
		RI=0;
	}
	return(Key);
}
bit CheckAuto(bit AUTO)
{
	char i,j;
	i=0;j=0;
	while(AUTO!=AUTOSTEP)
	{
		DelayMs(10);
		if(++i>3)
		{
			AUTO=AUTOSTEP;
			break;
		}
		if(++j>20)	break;
	}
	return(AUTO);
}
void WaitKey(void)
{
	char i,c;
	ComPrint("Waiting Key\n");
	twingle=0;
	while(!STEP)
	{
		c=Remote();
		if(c=='A') {AUTO=1;return;}
		if(c=='S') {AUTO=0;return;}
	}
	while(1)
	{
		c=Remote();
		if(c=='A') {AUTO=1;return;}
		if(c=='S') {AUTO=0;return;}
		if(STEP)
		{
			i=0;
		}
		else
		{
			i++;
			DelayMs(10);
		}
		if(i>3) break;
	}				
	AUTO=CheckAuto(AUTO);
}

void Initial(void)
{
	EA=0;
	P0=0xff;
	IT0=IT1=1;
	P1=P2=P3=0xff;
//	INPORT=0XFF;
	TMOD=0X11;	//timer0:mode1(low 4bit),timer1:mode1(high 4bit)
	EX0=0;
	EX1=0;

	ET0=1;
	TR0=1;
	TL0=CYCLE % 256;
	TH0=CYCLE/256;
//	TL2=RCAP2L=CYCLE % 256;
//	TH2=RCAP2H=CYCLE/256;
//	T2CON=0;
//	TR2=1;
//	ET2=1;

	TL2=RCAP2L=0xb1;
	TH2=RCAP2H=0xff;
    SCON  = 0x50;       //串口模式:  模式1 接收允许
	T2CON=0x30;
	TI=1;
	TR2=1;
//    SCON  = 0x50;       //串口模式:  模式1 接收允许
//    TMOD |= 0x20;       //定时器模式:定时器工作在模式2
//    PCON |= 0x80;       //SMOD=1; 倍波特率
//    TH1   = 0xF3;       //Baud:9600fosc=24MHz
//   	ES    = 0;          //串行中断允许
//    TI = 1;
//    TR1 = 1;          //定时器1启动 

	EA=1;
} 
void LcdClear(void)
{
	LCM_RST=0;
	delay(10);
	LCM_RST=1;
	init_lcd();
	CurrentX=CurrentY=0;
	ComPrint("\n");
}
void LcdPrint(char * DisBuf)
{
	code unsigned char Line[]={0x80,0x90,0x88,0x98}; 
	char kk=0;
//	printf(DisBuf);
	wr_lcd(comm,0x30);
	while(DisBuf[kk])
	{
		if(DisBuf[kk]=='\n'||CurrentX>=16)
		{
			CurrentX=0;
			CurrentY++;
			if(CurrentY<4) wr_lcd(comm,Line[CurrentY]);
		}
		else
		{
			if(CurrentY>=4)
			{
				LcdClear();
			}
			wr_lcd(dat,DisBuf[kk]);
			CurrentX++;
		}
	 	kk++;
	}
	ComPrint(DisBuf);
	return;
}
void DelayMs(int a)
{
	td=a/5;
	while(td);
} 


/*------------------初始化-----------------*/
void init_lcd (void)
{
  rst=1;
 // psb=0;
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  delay (100);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
}

/*----------------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  uchar a,i,j;
  delay (50);
  a=content;
  cs=1;
  sclk=0;
  std=1;
  for(i=0;i<5;i++)		//先输入五个连续的1   -----》是同步位字符串,此时输入记数被重置并且串行传输被同步。
  {
    sclk=1;
    sclk=0;
  }
  std=0;				//RW位
  sclk=1;
  sclk=0;
  if(dat_comm)		   //RS位
    std=1;   //data
  else
    std=0;   //command
  sclk=1;
  sclk=0;			   //第8位规定为0
  std=0;
  sclk=1;
  sclk=0;
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)   //每一个8位指令将被分为两个字节接收到.
    {
      a=a<<1;
      std=CY;
      sclk=1;
      sclk=0;
    }
    std=0;
    for(i=0;i<4;i++)
    {
      sclk=1;
      sclk=0;
    }
  }
}
/*-----------------------------------*/
void delay (uint us)   //delay time
{
  while(us--);
}

⌨️ 快捷键说明

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