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

📄 inducetor.c

📁 地感线圈的一个射频算法,通过单片机记数器来计算频率,当有铁质物体通过线圈,线圈的电感量就会改变,从而判断有无物体.
💻 C
字号:
#include <REG52.H>

unsigned long temp,inducetor,total_count,BN[5],BUF[2];
unsigned char T0count,timecount; 
unsigned char idata led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char temp1,temp2,temp3;
int  flag,flag1,flag2,flag3; 
sbit P27=P2^7;
sbit P25=P2^5;
sbit P24=P2^4;

void jishu(void);
void qvzhi(int);
void chushicanshu(void);
void inttime(void);

void inttime(void)
{
   TMOD=0x15;
   IP=0x08;
   TH0=0; 
   TL0=0; 
   TH1=-50000/256; 
   TL1=-50000%256; 
   ET0=1; 
   ET1=1;   
   timecount=0;
   /*
   SCON=0x40;//0101,0000 8位数据位,无奇偶校验
   T2CON=0x34;//0011,0100,由T2作为波特率发生器
   TH2=0xFF;
   TL2=0xD9;
   RCAP2H=0xFF;//时钟12MHz,9600 波特率
   RCAP2L=0xD9;//9600波特率RCAP2H=0xFF;RCAP2L=0xD9;      
   */
   EA=1;
}



void main(void) 
{ 
   int i,j,count,change_time,change_time1;
   count=change_time=change_time1=0;
   flag3=0;
   P2=0xff;
   P1=0xff;
   inttime();
   chushicanshu();
   P1=led[0];
   P2=0x00;
   for(;;)
   {
    flag1=1;
    while(flag1) 
     { 
	   qvzhi(1);
       if(flag2==1)
	     {
		   flag2=0;
		   if(flag3==0)
		     {
			  if(BUF[0]>temp)
			    {
				  change_time=change_time1=0;
				  flag3=1;
				}
			 }
		   else
		     {
			  if(BUF[0]<temp)
			    {
				  change_time=change_time1=0;
				  flag3=0;
				}
			 }
		   BUF[0]=temp;
		   if(temp<=inducetor)
		     {
			  if((inducetor-temp)>200)
			     {
				   change_time1=0;
				   BN[change_time]=temp;
				   change_time++;
				 }
			   if(change_time==3)
                {
				  change_time=0;
				  for(i=0;i<3;i++)
                   {
				    for(j=i;j<3;j++)
				     {
				      if(BN[j]<BN[i])
 					   {
					     BN[i]=BN[j];
					   }
				     }
				   }
                  if((inducetor-BN[0])>400)
				    {
 				      P27=0;
					  inducetor=BN[0];
					  P1=led[count];
					  count++;
					  if(count==10)
					    {
						  count=0;
						}
				      /*
					  TI=0;
					  SBUF=0x00;
					  while(!TI)
					  TI=0;
					  */
					}
				  else
				    {
					  inducetor=inducetor-150;
					}
				}
			 }
		   else
		     {
			   if((temp-inducetor)>200)
			     {
			       change_time=0;
				   BN[change_time1]=temp;
				   change_time1++;
			     }
				if(change_time1==3)
			     {
				  change_time1=0;
				  for(i=0;i<3;i++)
                   {
				    for(j=i;j<3;j++)
				     {
				      if(BN[j]>BN[i])
 					   {
					     BN[i]=BN[j];
					   }
				     }
				   }
                  if((BN[0]-inducetor)>400)
				    {
					  P27=1;
					  inducetor=BN[0];
					  P1=led[count];
					  count++;
					  if(count==10)
					    {
						  count=0;
						}
					  /*
					  TI=0;
					  SBUF=0x01;
					  while(!TI)
					  TI=0;
					  */
					}
				  else
				    {
					  inducetor=inducetor+150;
					}
                 } 
			 }
		 }
     }
   }
} 


timer0() interrupt 1 using 1
{ 
  T0count++; 
} 


timer1() interrupt 3 using 1
{ 
  TH1=-50000/256; 
  TL1=-50000%256; 
  timecount++; 
  if(timecount==5) 
    { 
      TR0=0; 
	  TR1=0;
      timecount=0; 
      flag=1;
	  temp=(T0count*65536+TH0*256+TL0)*4;
	  temp1=TL0;
	  temp2=TH0;
	  temp3=T0count;
	  T0count=0; 
	  TH0=0;
	  TL0=0;
	  TR1=1; 
      TR0=1; 
    }
}


void jishu(void)
{  
   flag1=1;
   while(flag1) 
    if(flag==1)   
       { 
        flag=0;
		flag1=0;
		flag2=1; 
       }	 	 
}

void qvzhi(n)
{
  int i;
  TR1=1; 
  TR0=1; 
  for(i=0;i<n;i++)
   {
    jishu();
	BN[i]=temp;
   }  
}


void chushicanshu(void)
{ 
  int i,j; 
  unsigned char k;
  qvzhi(5);
  TR0=0;
  TR1=0;
  total_count=0;
  for(i=0;i<5;i++)
    {
	  for(j=i;j<5;j++)
        {
		 if(BN[i]>BN[j])
          {
   	        BN[i]=BN[j];
 	      }
		}
	}
  for(i=0;i<5;i++)
    {
	  k=BN[i]-BN[0];
	  if(0<=k<2000)
	   {
	     BN[i]=BN[0];
	   }
	  else
	   {
	    if(k>5000)
		 {
		   BN[i-1]=BN[i-2]=BN[i-3]=BN[i-4]=BN[i];
		 }
	   }
      total_count=total_count+BN[i];
    }
  inducetor=total_count/5;
  BUF[0]=inducetor;
  if(inducetor<160000)
    {
	  P27=0;
	  flag3=0;
	}
  else
    {
	  P27=1;
	  flag3=1;
	}
  TR1=1;
  TR0=1;
}

	 


⌨️ 快捷键说明

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